{"version":3,"file":"plait-draw.mjs","sources":["../../../packages/draw/src/interfaces/geometry.ts","../../../packages/draw/src/interfaces/swimlane.ts","../../../packages/draw/src/interfaces/table.ts","../../../packages/draw/src/constants/default.ts","../../../packages/draw/src/constants/geometry.ts","../../../packages/draw/src/constants/pointer.ts","../../../packages/draw/src/constants/image.ts","../../../packages/draw/src/constants/theme.ts","../../../packages/draw/src/constants/swimlane.ts","../../../packages/draw/src/constants/text.ts","../../../packages/draw/src/constants/line.ts","../../../packages/draw/src/generators/text.generator.ts","../../../packages/draw/src/utils/table-selected.ts","../../../packages/draw/src/utils/table.ts","../../../packages/draw/src/utils/memorize.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-resize.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-arrow.ts","../../../packages/draw/src/generators/arrow-line.generator.ts","../../../packages/draw/src/utils/text-size.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-basic.ts","../../../packages/draw/src/utils/position/arrow-line.ts","../../../packages/draw/src/utils/multi-text-geometry.ts","../../../packages/draw/src/generators/vector-line-generator.ts","../../../packages/draw/src/utils/vector-line.ts","../../../packages/draw/src/utils/polygon.ts","../../../packages/draw/src/engines/basic-shapes/cloud.ts","../../../packages/draw/src/utils/hit.ts","../../../packages/draw/src/utils/common.ts","../../../packages/draw/src/utils/style/stroke.ts","../../../packages/draw/src/generators/geometry-shape.generator.ts","../../../packages/draw/src/utils/line.ts","../../../packages/draw/src/utils/position/line.ts","../../../packages/draw/src/generators/line-active.generator.ts","../../../packages/draw/src/generators/arrow-line-auto-complete.generator.ts","../../../packages/draw/src/generators/single-text.generator.ts","../../../packages/draw/src/generators/table.generator.ts","../../../packages/draw/src/utils/shape.ts","../../../packages/draw/src/utils/uml.ts","../../../packages/draw/src/utils/geometry.ts","../../../packages/draw/src/utils/arrow-line/elbow.ts","../../../packages/draw/src/utils/selected.ts","../../../packages/draw/src/transforms/geometry.ts","../../../packages/draw/src/transforms/geometry-text.ts","../../../packages/draw/src/transforms/image.ts","../../../packages/draw/src/transforms/arrow-line.ts","../../../packages/draw/src/utils/swimlane.ts","../../../packages/draw/src/transforms/swimlane.ts","../../../packages/draw/src/transforms/multi-text-geometry-text.ts","../../../packages/draw/src/transforms/table-text.ts","../../../packages/draw/src/transforms/table.ts","../../../packages/draw/src/transforms/vector-line.ts","../../../packages/draw/src/transforms/common.ts","../../../packages/draw/src/transforms/index.ts","../../../packages/draw/src/utils/position/geometry.ts","../../../packages/draw/src/plugins/with-draw-resize.ts","../../../packages/draw/src/utils/snap-resizing.ts","../../../packages/draw/src/utils/clipboard.ts","../../../packages/draw/src/engines/basic-shapes/comment.ts","../../../packages/draw/src/engines/basic-shapes/polygon.ts","../../../packages/draw/src/engines/basic-shapes/cross.ts","../../../packages/draw/src/engines/basic-shapes/diamond.ts","../../../packages/draw/src/engines/basic-shapes/ellipse.ts","../../../packages/draw/src/engines/basic-shapes/hexagon.ts","../../../packages/draw/src/engines/basic-shapes/left-arrow.ts","../../../packages/draw/src/engines/basic-shapes/octagon.ts","../../../packages/draw/src/engines/basic-shapes/parallelogram.ts","../../../packages/draw/src/engines/basic-shapes/pentagon.ts","../../../packages/draw/src/engines/basic-shapes/pentagon-arrow.ts","../../../packages/draw/src/engines/basic-shapes/process-arrow.ts","../../../packages/draw/src/engines/basic-shapes/right-arrow.ts","../../../packages/draw/src/engines/basic-shapes/rectangle.ts","../../../packages/draw/src/engines/basic-shapes/round-rectangle.ts","../../../packages/draw/src/engines/basic-shapes/round-comment.ts","../../../packages/draw/src/engines/basic-shapes/trapezoid.ts","../../../packages/draw/src/engines/basic-shapes/triangle.ts","../../../packages/draw/src/engines/basic-shapes/two-way-arrow.ts","../../../packages/draw/src/engines/basic-shapes/star.ts","../../../packages/draw/src/engines/flowchart/terminal.ts","../../../packages/draw/src/engines/flowchart/manual-input.ts","../../../packages/draw/src/engines/flowchart/preparation.ts","../../../packages/draw/src/engines/flowchart/manual-loop.ts","../../../packages/draw/src/engines/flowchart/merge.ts","../../../packages/draw/src/engines/flowchart/delay.ts","../../../packages/draw/src/engines/flowchart/stored-data.ts","../../../packages/draw/src/engines/flowchart/predefined-process.ts","../../../packages/draw/src/engines/flowchart/off-page.ts","../../../packages/draw/src/engines/flowchart/or.ts","../../../packages/draw/src/engines/flowchart/summing-junction.ts","../../../packages/draw/src/engines/flowchart/document.ts","../../../packages/draw/src/engines/flowchart/multi-document.ts","../../../packages/draw/src/engines/flowchart/database.ts","../../../packages/draw/src/engines/flowchart/hard-disk.ts","../../../packages/draw/src/engines/flowchart/internal-storage.ts","../../../packages/draw/src/engines/flowchart/note-curly-left.ts","../../../packages/draw/src/engines/flowchart/note-curly-right.ts","../../../packages/draw/src/engines/flowchart/note-square.ts","../../../packages/draw/src/engines/flowchart/display.ts","../../../packages/draw/src/engines/table/table.ts","../../../packages/draw/src/engines/uml/actor.ts","../../../packages/draw/src/engines/uml/container.ts","../../../packages/draw/src/engines/uml/package.ts","../../../packages/draw/src/engines/uml/combined-fragment.ts","../../../packages/draw/src/engines/uml/deletion.ts","../../../packages/draw/src/engines/uml/activity-class.ts","../../../packages/draw/src/engines/uml/note.ts","../../../packages/draw/src/engines/uml/assembly.ts","../../../packages/draw/src/engines/uml/required-interface.ts","../../../packages/draw/src/engines/uml/provided-interface.ts","../../../packages/draw/src/engines/uml/component.ts","../../../packages/draw/src/engines/uml/component-box.ts","../../../packages/draw/src/engines/uml/template.ts","../../../packages/draw/src/engines/index.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-common.ts","../../../packages/draw/src/interfaces/arrow-line.ts","../../../packages/draw/src/interfaces/element.ts","../../../packages/draw/src/interfaces/vector-line.ts","../../../packages/draw/src/interfaces/index.ts","../../../packages/draw/src/geometry.component.ts","../../../packages/draw/src/arrow-line.component.ts","../../../packages/draw/src/vector-line.component.ts","../../../packages/draw/src/plugins/with-draw-hotkey.ts","../../../packages/draw/src/plugins/with-geometry-create.ts","../../../packages/draw/src/plugins/with-draw-fragment.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-create.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-resize.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-bound-reaction.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-text.ts","../../../packages/draw/src/image.component.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-auto-complete.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-auto-complete-reaction.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-text-move.ts","../../../packages/draw/src/plugins/with-draw-rotate.ts","../../../packages/draw/src/table.component.ts","../../../packages/draw/src/plugins/with-table-resize.ts","../../../packages/draw/src/plugins/with-table.ts","../../../packages/draw/src/plugins/with-swimlane-create.ts","../../../packages/draw/src/plugins/with-swimlane.ts","../../../packages/draw/src/plugins/with-vector-line-create.ts","../../../packages/draw/src/plugins/with-vector-line-resize.ts","../../../packages/draw/src/plugins/with-draw.ts","../../../packages/draw/src/plait-draw.ts"],"sourcesContent":["import { PlaitElement, Point } from '@plait/core';\nimport { DrawTextInfo } from '../generators/text.generator';\nimport { ParagraphElement, StrokeStyle } from '@plait/common';\n\nexport enum BasicShapes {\n    rectangle = 'rectangle',\n    ellipse = 'ellipse',\n    diamond = 'diamond',\n    roundRectangle = 'roundRectangle',\n    parallelogram = 'parallelogram',\n    text = 'text',\n    triangle = 'triangle',\n    leftArrow = 'leftArrow',\n    trapezoid = 'trapezoid',\n    rightArrow = 'rightArrow',\n    cross = 'cross',\n    star = 'star',\n    pentagon = 'pentagon',\n    hexagon = 'hexagon',\n    octagon = 'octagon',\n    pentagonArrow = 'pentagonArrow',\n    processArrow = 'processArrow',\n    twoWayArrow = 'twoWayArrow',\n    comment = 'comment',\n    roundComment = 'roundComment',\n    cloud = 'cloud'\n}\n\nexport enum FlowchartSymbols {\n    process = 'process',\n    decision = 'decision',\n    data = 'data',\n    connector = 'connector',\n    terminal = 'terminal',\n    manualInput = 'manualInput',\n    preparation = 'preparation',\n    manualLoop = 'manualLoop',\n    merge = 'merge',\n    delay = 'delay',\n    storedData = 'storedData',\n    or = 'or',\n    summingJunction = 'summingJunction',\n    predefinedProcess = 'predefinedProcess',\n    offPage = 'offPage',\n    document = 'document',\n    multiDocument = 'multiDocument',\n    database = 'database',\n    hardDisk = 'hardDisk',\n    internalStorage = 'internalStorage',\n    noteCurlyRight = 'noteCurlyRight',\n    noteCurlyLeft = 'noteCurlyLeft',\n    noteSquare = 'noteSquare',\n    display = 'display'\n}\n\nexport enum UMLSymbols {\n    actor = 'actor',\n    useCase = 'useCase',\n    container = 'container',\n    note = 'note',\n    simpleClass = 'simpleClass',\n    activityClass = 'activityClass',\n    branchMerge = 'branchMerge',\n    port = 'port',\n    package = 'package',\n    combinedFragment = 'combinedFragment',\n    class = 'class',\n    interface = 'interface',\n    object = 'object',\n    component = 'component',\n    componentBox = 'componentBox',\n    template = 'template',\n    activation = 'activation',\n    deletion = 'deletion',\n    assembly = 'assembly',\n    providedInterface = 'providedInterface',\n    requiredInterface = 'requiredInterface'\n}\n\nexport enum GeometryCommonTextKeys {\n    name = 'name',\n    content = 'content'\n}\n\nexport type GeometryShapes = BasicShapes | FlowchartSymbols | UMLSymbols;\n\nexport type SwimlaneDirection = 'horizontal' | 'vertical';\n\nexport interface PlaitBaseGeometry<T extends string = 'geometry', P extends Point[] = [Point, Point], S extends string = GeometryShapes>\n    extends PlaitElement {\n    type: T;\n    points: P;\n    shape: S;\n}\n\nexport interface PlaitCommonGeometry<T extends string = 'geometry', P extends Point[] = [Point, Point], S extends string = GeometryShapes>\n    extends PlaitBaseGeometry<T, P, S> {\n    // node style attributes\n    fill?: string;\n    strokeColor?: string;\n    strokeWidth?: number;\n    strokeStyle?: StrokeStyle;\n    angle?: number;\n    opacity?: number;\n}\n\nexport interface PlaitCustomGeometry<T extends string = string, P extends Point[] = Point[], S extends string = string>\n    extends PlaitBaseGeometry<T, P, S> {}\n\nexport interface PlaitMultipleTextGeometry extends PlaitCommonGeometry {\n    texts: DrawTextInfo[];\n}\n\nexport interface PlaitGeometry extends PlaitCommonGeometry {\n    text?: ParagraphElement;\n}\n\nexport interface PlaitRectangle extends PlaitGeometry {\n    shape: BasicShapes.rectangle;\n}\n\nexport interface PlaitEllipse extends PlaitGeometry {\n    shape: BasicShapes.ellipse;\n}\n\nexport interface PlaitDiamond extends PlaitGeometry {\n    shape: BasicShapes.diamond;\n}\n\nexport const PlaitGeometry = {};\n","import { PlaitBaseTable } from './table';\n\nexport enum SwimlaneSymbols {\n    swimlaneVertical = 'swimlaneVertical',\n    swimlaneHorizontal = 'swimlaneHorizontal'\n}\n\nexport enum SwimlaneDrawSymbols {\n    swimlaneVertical = 'swimlaneVertical',\n    swimlaneHorizontal = 'swimlaneHorizontal',\n    swimlaneVerticalWithHeader = 'swimlaneVerticalWithHeader',\n    swimlaneHorizontalWithHeader = 'swimlaneHorizontalWithHeader'\n}\n\nexport interface PlaitSwimlane extends PlaitBaseTable {\n    type: 'swimlane';\n    shape: SwimlaneSymbols;\n    header?: boolean;\n}\n\nexport interface PlaitSwimlaneVertical extends PlaitSwimlane {\n    shape: SwimlaneSymbols.swimlaneVertical;\n}\n\nexport interface PlaitSwimlaneHorizontal extends PlaitSwimlane {\n    shape: SwimlaneSymbols.swimlaneHorizontal;\n}\n","import { PlaitBoard, PlaitElement, Point } from '@plait/core';\nimport { ParagraphElement } from '@plait/common';\nimport { DrawOptions } from './engine';\n\nexport enum TableSymbols {\n    table = 'table'\n}\n\nexport interface PlaitTableBoard extends PlaitBoard {\n    buildTable: (element: PlaitBaseTable) => PlaitBaseTable;\n}\n\nexport interface PlaitBaseTable extends PlaitElement {\n    id: string;\n    points: Point[];\n    rows: {\n        id: string;\n        height?: number;\n    }[];\n    columns: {\n        id: string;\n        width?: number;\n    }[];\n    cells: PlaitTableCell[];\n    groupId?: string;\n}\n\nexport interface PlaitTable extends PlaitBaseTable {\n    type: 'table';\n}\n\nexport interface PlaitTableCell {\n    id: string;\n    rowId: string;\n    columnId: string;\n    colspan?: number;\n    rowspan?: number;\n    text?: PlaitTableCellParagraph;\n    fill?: string;\n}\n\nexport interface PlaitTableDrawOptions extends DrawOptions {\n    element: PlaitTable;\n}\n\nexport interface PlaitTableCellWithPoints extends PlaitTableCell {\n    points: [Point, Point];\n}\n\nexport interface PlaitTableCellParagraph extends ParagraphElement {\n    direction?: 'vertical' | 'horizontal';\n}\n\nexport const PlaitTableElement = {\n    isTable: (value: any): value is PlaitTable => {\n        return value.type === 'table';\n    },\n    isVerticalText: (value: PlaitTableCell): value is PlaitTableCell => {\n        return value.text?.direction === 'vertical';\n    }\n};\n","export const WithDrawPluginKey = 'plait-draw-plugin-key';\n\nexport enum DrawI18nKey {\n    lineText = 'line-text',\n    geometryText = 'geometry-text'\n}\n","import { ACTIVE_STROKE_WIDTH, DEFAULT_COLOR } from '@plait/core';\nimport { BasicShapes, FlowchartSymbols, GeometryShapes, GeometryCommonTextKeys, UMLSymbols } from '../interfaces';\nimport { Alignment, DEFAULT_FILL } from '@plait/common';\n\nexport const ShapeDefaultSpace = {\n    rectangleAndText: 4\n};\n\nexport const DefaultDrawStyle = {\n    strokeWidth: 2,\n    defaultRadius: 4,\n    strokeColor: '#000',\n    fill: DEFAULT_FILL\n};\n\nexport const DefaultDrawActiveStyle = {\n    strokeWidth: ACTIVE_STROKE_WIDTH,\n    selectionStrokeWidth: ACTIVE_STROKE_WIDTH\n};\n\nexport const DefaultBasicShapeProperty = {\n    width: 100,\n    height: 100,\n    strokeColor: DEFAULT_COLOR,\n    strokeWidth: 2\n};\n\nexport const DefaultPentagonArrowProperty = {\n    width: 120,\n    height: 50\n};\n\nexport const DefaultTwoWayArrowProperty = {\n    width: 138,\n    height: 80\n};\n\nexport const DefaultArrowProperty = {\n    width: 100,\n    height: 80\n};\n\nexport const DefaultCloudProperty = {\n    width: 120,\n    height: 100\n};\n\nexport const DefaultTextProperty = {\n    width: 36,\n    height: 20,\n    text: '文本'\n};\n\nexport const GeometryThreshold = {\n    defaultTextMaxWidth: 34 * 14\n};\n\nexport const DefaultConnectorProperty = {\n    width: 44,\n    height: 44\n};\n\nexport const DefaultFlowchartProperty = {\n    width: 120,\n    height: 60\n};\n\nexport const DefaultDataBaseProperty = {\n    width: 70,\n    height: 80\n};\n\nexport const DefaultInternalStorageProperty = {\n    width: 80,\n    height: 80\n};\n\nexport const DefaultDecisionProperty = {\n    width: 140,\n    height: 70\n};\n\nexport const DefaultDataProperty = {\n    width: 124,\n    height: 60\n};\n\nexport const DefaultDocumentProperty = {\n    width: 120,\n    height: 70\n};\n\nexport const DefaultNoteProperty = {\n    width: 160,\n    height: 100\n};\n\nexport const DefaultMultiDocumentProperty = {\n    width: 120,\n    height: 80\n};\n\nexport const DefaultManualInputProperty = {\n    width: 117,\n    height: 59\n};\n\nexport const DefaultMergeProperty = {\n    width: 47,\n    height: 33\n};\n\nexport const DefaultActorProperty = {\n    width: 68,\n    height: 100\n};\n\nexport const DefaultContainerProperty = {\n    width: 300,\n    height: 240\n};\n\nexport const DefaultPackageProperty = {\n    width: 210,\n    height: 150,\n    texts: [\n        {\n            id: GeometryCommonTextKeys.name,\n            text: '包名',\n            align: Alignment.left\n        },\n        {\n            id: GeometryCommonTextKeys.content,\n            text: '',\n            align: Alignment.left\n        }\n    ]\n};\n\nexport const DefaultActivationProperty = {\n    width: 18,\n    height: 80\n};\n\nexport const DefaultObjectProperty = {\n    width: 120,\n    height: 60\n};\n\nexport const DefaultComponentBoxProperty = {\n    width: 200,\n    height: 150\n};\n\nexport const DefaultDeletionProperty = {\n    width: 40,\n    height: 40\n};\n\nexport const DefaultPortProperty = {\n    width: 20,\n    height: 20\n};\n\nexport const DefaultRequiredInterfaceProperty = {\n    width: 70,\n    height: 56\n};\n\nexport const DefaultAssemblyProperty = {\n    width: 120,\n    height: 56\n};\n\nexport const DefaultProvidedInterfaceProperty = {\n    width: 70,\n    height: 34\n};\n\nexport const DefaultCombinedFragmentProperty = {\n    width: 400,\n    height: 280,\n    texts: [\n        {\n            id: GeometryCommonTextKeys.name,\n            text: 'Opt | Alt | Loop',\n            align: Alignment.left\n        },\n        {\n            id: GeometryCommonTextKeys.content,\n            text: '[Condition]',\n            align: Alignment.left\n        }\n    ]\n};\n\nexport const DefaultClassProperty = {\n    width: 230,\n    height: 180,\n    texts: [\n        { text: 'Class', align: Alignment.center },\n        {\n            text: '+ attribute1:type  defaultValue\\n+ attribute2:type\\n- attribute3:type',\n            align: Alignment.left\n        },\n        {\n            text: '+ operation1(params):returnType\\n- operation2(params)\\n- operation3()',\n            align: Alignment.left\n        }\n    ]\n};\n\nexport const DefaultInterfaceProperty = {\n    width: 230,\n    height: 140,\n    texts: [\n        { text: '<<interface>>\\nInterface', align: Alignment.center },\n        {\n            text: '+ operation1(params):returnType\\n- operation2(params)\\n- operation3()',\n            align: Alignment.left\n        }\n    ]\n};\n\nexport const DefaultBasicShapePropertyMap: Record<string, { width: number; height: number }> = {\n    [BasicShapes.pentagonArrow]: DefaultPentagonArrowProperty,\n    [BasicShapes.processArrow]: DefaultPentagonArrowProperty,\n    [BasicShapes.cloud]: DefaultCloudProperty,\n    [BasicShapes.twoWayArrow]: DefaultTwoWayArrowProperty,\n    [BasicShapes.leftArrow]: DefaultArrowProperty,\n    [BasicShapes.rightArrow]: DefaultArrowProperty\n};\n\nexport const DefaultFlowchartPropertyMap = {\n    [FlowchartSymbols.connector]: DefaultConnectorProperty,\n    [FlowchartSymbols.process]: DefaultFlowchartProperty,\n    [FlowchartSymbols.decision]: DefaultDecisionProperty,\n    [FlowchartSymbols.data]: DefaultDataProperty,\n    [FlowchartSymbols.terminal]: DefaultFlowchartProperty,\n    [FlowchartSymbols.manualInput]: DefaultManualInputProperty,\n    [FlowchartSymbols.preparation]: DefaultFlowchartProperty,\n    [FlowchartSymbols.manualLoop]: DefaultFlowchartProperty,\n    [FlowchartSymbols.merge]: DefaultMergeProperty,\n    [FlowchartSymbols.delay]: DefaultFlowchartProperty,\n    [FlowchartSymbols.storedData]: DefaultFlowchartProperty,\n    [FlowchartSymbols.or]: DefaultConnectorProperty,\n    [FlowchartSymbols.summingJunction]: DefaultConnectorProperty,\n    [FlowchartSymbols.predefinedProcess]: DefaultFlowchartProperty,\n    [FlowchartSymbols.offPage]: DefaultFlowchartProperty,\n    [FlowchartSymbols.document]: DefaultDocumentProperty,\n    [FlowchartSymbols.multiDocument]: DefaultMultiDocumentProperty,\n    [FlowchartSymbols.database]: DefaultDataBaseProperty,\n    [FlowchartSymbols.hardDisk]: DefaultFlowchartProperty,\n    [FlowchartSymbols.internalStorage]: DefaultInternalStorageProperty,\n    [FlowchartSymbols.noteCurlyLeft]: DefaultNoteProperty,\n    [FlowchartSymbols.noteCurlyRight]: DefaultNoteProperty,\n    [FlowchartSymbols.noteSquare]: DefaultNoteProperty,\n    [FlowchartSymbols.display]: DefaultFlowchartProperty\n};\n\nexport const DefaultUMLPropertyMap = {\n    [UMLSymbols.actor]: DefaultActorProperty,\n    [UMLSymbols.useCase]: DefaultDocumentProperty,\n    [UMLSymbols.container]: DefaultContainerProperty,\n    [UMLSymbols.note]: DefaultObjectProperty,\n    [UMLSymbols.package]: DefaultPackageProperty,\n    [UMLSymbols.combinedFragment]: DefaultCombinedFragmentProperty,\n    [UMLSymbols.class]: DefaultClassProperty,\n    [UMLSymbols.interface]: DefaultInterfaceProperty,\n    [UMLSymbols.activation]: DefaultActivationProperty,\n    [UMLSymbols.object]: DefaultObjectProperty,\n    [UMLSymbols.deletion]: DefaultDeletionProperty,\n    [UMLSymbols.activityClass]: DefaultObjectProperty,\n    [UMLSymbols.simpleClass]: DefaultObjectProperty,\n    [UMLSymbols.component]: DefaultMultiDocumentProperty,\n    [UMLSymbols.template]: DefaultMultiDocumentProperty,\n    [UMLSymbols.componentBox]: DefaultComponentBoxProperty,\n    [UMLSymbols.port]: DefaultPortProperty,\n    [UMLSymbols.branchMerge]: DefaultDeletionProperty,\n    [UMLSymbols.assembly]: DefaultAssemblyProperty,\n    [UMLSymbols.providedInterface]: DefaultProvidedInterfaceProperty,\n    [UMLSymbols.requiredInterface]: DefaultRequiredInterfaceProperty\n};\n\nexport const MultipleTextGeometryTextKeys: { [key in GeometryShapes]?: string[] } = {\n    [UMLSymbols.package]: Object.keys(GeometryCommonTextKeys),\n    [UMLSymbols.combinedFragment]: Object.keys(GeometryCommonTextKeys)\n};\n\nexport const LINE_HIT_GEOMETRY_BUFFER = 4;\n\nexport const LINE_SNAPPING_BUFFER = 4;\n\nexport const LINE_SNAPPING_CONNECTOR_BUFFER = 4;\n\nexport const LINE_ALIGN_TOLERANCE = 4;\n\nexport const GEOMETRY_WITHOUT_TEXT = [\n    FlowchartSymbols.or,\n    FlowchartSymbols.summingJunction,\n    UMLSymbols.activation,\n    UMLSymbols.deletion,\n    UMLSymbols.port,\n    UMLSymbols.branchMerge,\n    UMLSymbols.assembly,\n    UMLSymbols.providedInterface,\n    UMLSymbols.requiredInterface\n] as GeometryShapes[];\n\nexport const GEOMETRY_WITH_MULTIPLE_TEXT = [UMLSymbols.package, UMLSymbols.combinedFragment];\n\nexport const GEOMETRY_NOT_CLOSED = [\n    FlowchartSymbols.noteCurlyLeft,\n    FlowchartSymbols.noteCurlyRight,\n    FlowchartSymbols.noteSquare,\n    UMLSymbols.requiredInterface,\n    UMLSymbols.deletion\n] as GeometryShapes[];\n","import {\n    BasicShapes,\n    FlowchartSymbols,\n    ArrowLineShape,\n    SwimlaneDrawSymbols,\n    TableSymbols,\n    UMLSymbols,\n    VectorLinePointerType,\n    SwimlaneSymbols\n} from '../interfaces';\n\nexport type DrawPointerType =\n    | BasicShapes\n    | ArrowLineShape\n    | FlowchartSymbols\n    | SwimlaneDrawSymbols\n    | TableSymbols\n    | UMLSymbols\n    | VectorLinePointerType;\n\nexport const getGeometryPointers = () => {\n    return [...Object.keys(BasicShapes), ...Object.keys(FlowchartSymbols), ...Object.keys(UMLSymbols)];\n};\n\nexport const getSwimlanePointers = () => {\n    return Object.keys(SwimlaneDrawSymbols);\n};\n\nexport const getSwimlaneShapes = () => {\n    return Object.keys(SwimlaneSymbols);\n};\n\nexport const getBasicPointers = () => {\n    return Object.keys(BasicShapes);\n};\n\nexport const getFlowchartPointers = () => {\n    return Object.keys(FlowchartSymbols);\n};\n\nexport const getUMLPointers = () => {\n    return Object.keys(UMLSymbols);\n};\n\nexport const getArrowLinePointers = () => {\n    return Object.keys(ArrowLineShape);\n};\n\nexport const getVectorLinePointers = () => {\n    return Object.keys(VectorLinePointerType);\n};\n","export const DEFAULT_IMAGE_WIDTH = 1000;\n","import { DEFAULT_COLOR, ThemeColorMode } from '@plait/core';\n\nexport const DrawThemeColors = {\n    [ThemeColorMode.default]: {\n        strokeColor: DEFAULT_COLOR,\n        fill: '#FFFFFF'\n    },\n    [ThemeColorMode.colorful]: {\n        strokeColor: '#06ADBF',\n        fill: '#CDEFF2'\n    },\n    [ThemeColorMode.soft]: {\n        strokeColor: '#6D89C1',\n        fill: '#DADFEB'\n    },\n    [ThemeColorMode.retro]: {\n        strokeColor: '#E9C358',\n        fill: '#F6EDCF'\n    },\n    [ThemeColorMode.dark]: {\n        strokeColor: '#FFFFFF',\n        fill: '#434343'\n    },\n    [ThemeColorMode.starry]: {\n        strokeColor: '#42ABE5',\n        fill: '#163F5A'\n    }\n};\n","import { SwimlaneDrawSymbols } from '../interfaces/swimlane';\n\nexport const SWIMLANE_HEADER_SIZE = 42;\n\nexport const DefaultSwimlaneVerticalWithHeaderProperty = {\n    width: 580,\n    height: 524\n};\n\nexport const DefaultSwimlaneHorizontalWithHeaderProperty = {\n    width: 524,\n    height: 580\n};\n\nexport const DefaultSwimlaneVerticalProperty = {\n    width: 580,\n    height: 524\n};\n\nexport const DefaultSwimlaneHorizontalProperty = {\n    width: 524,\n    height: 580\n};\n\nexport const DefaultSwimlanePropertyMap: Record<string, { width: number; height: number }> = {\n    [SwimlaneDrawSymbols.swimlaneHorizontal]: DefaultSwimlaneHorizontalProperty,\n    [SwimlaneDrawSymbols.swimlaneVertical]: DefaultSwimlaneVerticalProperty,\n    [SwimlaneDrawSymbols.swimlaneHorizontalWithHeader]: DefaultSwimlaneHorizontalWithHeaderProperty,\n    [SwimlaneDrawSymbols.swimlaneVerticalWithHeader]: DefaultSwimlaneVerticalWithHeaderProperty\n};\n","export const MIN_TEXT_WIDTH = 5;\n","export const DefaultLineStyle = {\n    strokeWidth: 2,\n    strokeColor: '#000'\n};\n\nexport const LINE_TEXT_SPACE = 4;\n\nexport const LINE_AUTO_COMPLETE_DIAMETER = 6;\n\nexport const LINE_AUTO_COMPLETE_OPACITY = 1;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_OPACITY = 1;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_DIAMETER = 12;\n\nexport const LINE_TEXT = '文本';\n","import {\n    ParagraphElement,\n    PlaitCommonElementRef,\n    TextManage,\n    TextManageChangeData,\n    TextPlugin,\n    WithTextPluginKey,\n    WithTextPluginOptions\n} from '@plait/common';\nimport { PlaitBoard, PlaitElement, PlaitOptionsBoard, RectangleClient } from '@plait/core';\nimport { getEngine } from '../engines';\nimport { DrawShapes, PlaitGeometry, TextRectangleOptions } from '../interfaces';\nimport { getTextKey, getTextRectangle } from '../utils';\n\nexport interface DrawTextInfo extends TextRectangleOptions {\n    text: ParagraphElement;\n}\n\nexport interface TextGeneratorOptions<T> {\n    onChange: (element: T, textChangeRef: TextManageChangeData, text: DrawTextInfo) => void;\n    getRenderRectangle?: (element: T, text: DrawTextInfo) => RectangleClient;\n    getMaxWidth?: () => number;\n}\n\n// TODO: 是否可以完全基于位置定位 TextManager，实现 line 和 多文本 geometry 统一\n// 一个元素有多个文本时，单纯通过位置无法获取 TextManage，因此这里单独通过 Map 保存关键字 key 和 TextManage 的对应关系\n// 1. 单文本元素 key 就是元素的 id\n// 2. 表格元素 key 是单元格的 id\n// 3. 符合 isMultipleTextGeometry 的元素，key 是元素 id + text.id （通常不是 id 而是文本位置的常量）\n// 4. arrow-line 和 vector-line 文本不依赖于 text.generator，基于 text 可以直接找到 TextManage\nexport const KEY_TO_TEXT_MANAGE: WeakMap<PlaitBoard, { [key: string]: TextManage }> = new WeakMap();\n\nexport const setTextManage = (board: PlaitBoard, element: PlaitElement, text: DrawTextInfo, textManage: TextManage) => {\n    const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n    return KEY_TO_TEXT_MANAGE.set(board, { ...textManages, [getTextKey(element, text)]: textManage });\n};\n\nexport const getTextManage = (board: PlaitBoard, element: PlaitElement | undefined, text: Pick<DrawTextInfo, 'id'>): TextManage => {\n    const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n    return textManages[getTextKey(element, text)];\n};\n\nexport const deleteTextManage = (board: PlaitBoard, key: string) => {\n    const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n    delete textManages[key];\n    KEY_TO_TEXT_MANAGE.set(board, textManages);\n};\n\nexport class TextGenerator<T extends PlaitElement = PlaitGeometry> {\n    protected board: PlaitBoard;\n\n    protected element: T;\n\n    protected texts: DrawTextInfo[];\n\n    protected options: TextGeneratorOptions<T>;\n\n    public textManages!: TextManage[];\n\n    get shape(): DrawShapes {\n        return this.element.shape || this.element.type;\n    }\n\n    constructor(board: PlaitBoard, element: T, texts: DrawTextInfo[], options: TextGeneratorOptions<T>) {\n        this.board = board;\n        this.texts = texts;\n        this.element = element;\n        this.options = options;\n    }\n\n    initialize() {\n        const textPlugins = ((this.board as PlaitOptionsBoard).getPluginOptions<WithTextPluginOptions>(WithTextPluginKey) || {})\n            .textPlugins;\n        this.textManages = this.texts.map((text) => {\n            const textManage = this.createTextManage(text, textPlugins);\n            setTextManage(this.board, this.element, text, textManage);\n            return textManage;\n        });\n        const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(this.element);\n        ref.initializeTextManage(this.textManages);\n    }\n\n    draw(elementG: SVGElement) {\n        const centerPoint = RectangleClient.getCenterPoint(this.board.getRectangle(this.element)!);\n        this.texts.forEach((drawShapeText) => {\n            const textManage = getTextManage(this.board, this.element, drawShapeText);\n            if (drawShapeText.text && textManage) {\n                textManage.draw(drawShapeText.text);\n                elementG.append(textManage.g);\n                (this.element.angle || this.element.angle === 0) && textManage.updateAngle(centerPoint, this.element.angle);\n            }\n        });\n    }\n\n    update(element: T, previousDrawShapeTexts: DrawTextInfo[], currentDrawShapeTexts: DrawTextInfo[], elementG: SVGElement) {\n        this.element = element;\n\n        const centerPoint = RectangleClient.getCenterPoint(this.board.getRectangle(this.element)!);\n        const textPlugins = ((this.board as PlaitOptionsBoard).getPluginOptions<WithTextPluginOptions>(WithTextPluginKey) || {})\n            .textPlugins;\n        const removedTexts = previousDrawShapeTexts.filter((value) => {\n            return !currentDrawShapeTexts.find((item) => item.id === value.id);\n        });\n        if (removedTexts.length) {\n            removedTexts.forEach((item) => {\n                const textManage = getTextManage(this.board, element, item);\n                const index = this.textManages.findIndex((value) => value === textManage);\n                if (index > -1 && item.text) {\n                    this.textManages.splice(index, 1);\n                }\n                textManage?.destroy();\n                deleteTextManage(this.board, item.id);\n            });\n        }\n        currentDrawShapeTexts.forEach((drawShapeText) => {\n            if (drawShapeText.text) {\n                let textManage = getTextManage(this.board, this.element, drawShapeText);\n                if (!textManage) {\n                    textManage = this.createTextManage(drawShapeText, textPlugins);\n                    setTextManage(this.board, element, drawShapeText, textManage);\n                    textManage.draw(drawShapeText.text);\n                    elementG.append(textManage.g);\n                    this.textManages.push(textManage);\n                } else {\n                    textManage.updateText(drawShapeText.text);\n                    textManage.updateRectangle();\n                }\n                (this.element.angle || this.element.angle === 0) && textManage.updateAngle(centerPoint, this.element.angle);\n            }\n        });\n    }\n\n    private createTextManage(text: DrawTextInfo, textPlugins?: TextPlugin[]) {\n        const textManage = new TextManage(this.board, {\n            getRectangle: () => {\n                return this.getRectangle(text);\n            },\n            onChange: (data: TextManageChangeData) => {\n                return this.options.onChange(this.element, data, text);\n            },\n            getMaxWidth: () => {\n                return this.getMaxWidth(text);\n            },\n            getRenderRectangle: () => {\n                return this.options.getRenderRectangle ? this.options.getRenderRectangle(this.element, text) : this.getRectangle(text);\n            },\n            textPlugins\n        });\n        return textManage;\n    }\n\n    getRectangle(text: DrawTextInfo) {\n        const getRectangle = getEngine<T>(this.shape).getTextRectangle;\n        if (getRectangle) {\n            return getRectangle(this.board, this.element, text);\n        }\n        return getTextRectangle(this.board, this.element);\n    }\n\n    getMaxWidth(text: DrawTextInfo) {\n        return this.options.getMaxWidth ? this.options.getMaxWidth() : this.getRectangle(text).width;\n    }\n\n    destroy() {\n        const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(this.element);\n        ref.destroyTextManage();\n        this.textManages = [];\n        this.texts.forEach((item) => {\n            deleteTextManage(this.board, item.id);\n        });\n    }\n}\n","import { PlaitBoard, getSelectedElements, PlaitElement } from '@plait/core';\nimport { PlaitTableCell, PlaitBaseTable, PlaitTable } from '../interfaces/table';\nimport { PlaitDrawElement } from '../interfaces';\n\nexport const isSingleSelectTable = (board: PlaitBoard) => {\n    const selectedElements = getSelectedElements(board);\n    return selectedElements && selectedElements.length === 1 && PlaitDrawElement.isElementByTable(selectedElements[0]);\n};\n\nexport const getSelectedTableElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n    const selectedElements = elements?.length ? elements : getSelectedElements(board);\n    return selectedElements.filter((value) => PlaitDrawElement.isElementByTable(value)) as PlaitTable[];\n};\n\nexport const SELECTED_CELLS = new WeakMap<PlaitBaseTable, PlaitTableCell[]>();\n\nexport function getSelectedCells(element: PlaitBaseTable) {\n    return SELECTED_CELLS.get(element);\n}\n\nexport function setSelectedCells(element: PlaitBaseTable, cells: PlaitTableCell[]) {\n    return SELECTED_CELLS.set(element, cells);\n}\n\nexport function clearSelectedCells(element: PlaitBaseTable) {\n    return SELECTED_CELLS.delete(element);\n}\n","import { idCreator, PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitBaseTable, PlaitTable, PlaitTableBoard, PlaitTableCell, PlaitTableCellWithPoints } from '../interfaces/table';\nimport { getTextManage } from '../generators/text.generator';\nimport { Alignment } from '@plait/common';\nimport { TEXT_DEFAULT_HEIGHT } from '@plait/text-plugins';\nimport { getSelectedCells, getSelectedTableElements, isSingleSelectTable } from './table-selected';\nimport { BaseEditor } from 'slate';\n\nexport function getCellsWithPoints(board: PlaitBoard, element: PlaitBaseTable): PlaitTableCellWithPoints[] {\n    const table = (board as PlaitTableBoard)?.buildTable(element);\n    if (!table || !table.points || !table.columns || !table.rows) {\n        throw new Error('can not get table cells points');\n    }\n    const rectangle = RectangleClient.getRectangleByPoints(table.points);\n    const columnsCount = table.columns.length;\n    const rowsCount = table.rows.length;\n    const cellWidths = calculateCellsSize(table.columns, rectangle.width, columnsCount, true);\n    const cellHeights = calculateCellsSize(table.rows, rectangle.height, rowsCount, false);\n    const cells: PlaitTableCellWithPoints[] = table.cells.map((cell) => {\n        const rowIdx = table.rows.findIndex((row) => row.id === cell.rowId);\n        const columnIdx = table.columns.findIndex((column) => column.id === cell.columnId);\n\n        let cellTopLeftX = rectangle.x;\n        for (let i = 0; i < columnIdx; i++) {\n            cellTopLeftX += cellWidths[i];\n        }\n\n        let cellTopLeftY = rectangle.y;\n        for (let i = 0; i < rowIdx; i++) {\n            cellTopLeftY += cellHeights[i];\n        }\n\n        const cellWidth = calculateCellSize(cell, cellWidths, columnIdx, true);\n        const cellBottomRightX = cellTopLeftX + cellWidth;\n\n        const cellHeight = calculateCellSize(cell, cellHeights, rowIdx, false);\n        const cellBottomRightY = cellTopLeftY + cellHeight;\n\n        return {\n            ...cell,\n            points: [\n                [cellTopLeftX, cellTopLeftY],\n                [cellBottomRightX, cellBottomRightY]\n            ]\n        };\n    });\n\n    return cells;\n}\n\nexport function getCellWithPoints(board: PlaitBoard, table: PlaitBaseTable, cellId: string) {\n    try {\n        const cells = getCellsWithPoints(board as PlaitTableBoard, table);\n        const cellIndex = cells && table.cells.findIndex((item) => item.id === cellId);\n        return cells[cellIndex];\n    } catch (error) {\n        throw new Error('can not get table cell points');\n    }\n}\n\nfunction calculateCellsSize(items: { id: string; [key: string]: any }[], tableSize: number, count: number, isWidth: boolean) {\n    const cellSizes: number[] = [];\n    const sizeType = isWidth ? 'width' : 'height';\n\n    // The remaining size of the table excluding cells with already set sizes.\n    let totalSizeRemaining = tableSize;\n\n    items.forEach((item, index) => {\n        if (item[sizeType]) {\n            cellSizes[index] = item[sizeType];\n            totalSizeRemaining -= item[sizeType];\n        }\n    });\n\n    // Divide the remaining size equally.\n    const remainingItemCount = count - cellSizes.filter((item) => !!item).length;\n    const remainingCellSize = remainingItemCount > 0 ? totalSizeRemaining / remainingItemCount : 0;\n    for (let i = 0; i < count; i++) {\n        if (!cellSizes[i]) {\n            cellSizes[i] = remainingCellSize;\n        }\n    }\n    return cellSizes;\n}\n\nfunction calculateCellSize(cell: PlaitTableCell, sizes: number[], index: number, isWidth: boolean) {\n    const span = isWidth ? cell.colspan || 1 : cell.rowspan || 1;\n    let size = 0;\n    for (let i = 0; i < span; i++) {\n        const cellIndex = index + i;\n        size += sizes[cellIndex];\n    }\n    return size;\n}\n\nexport function getHitCell(board: PlaitTableBoard, element: PlaitBaseTable, point: Point) {\n    const table = board.buildTable(element);\n    const cells = getCellsWithPoints(board, table);\n    const rectangle = RectangleClient.getRectangleByPoints([point, point]);\n    const cell = cells.find((item) => {\n        const cellRectangle = RectangleClient.getRectangleByPoints(item.points);\n        return RectangleClient.isHit(rectangle, cellRectangle);\n    });\n    if (cell) {\n        return table.cells.find((item) => item.id === cell.id);\n    }\n    return null;\n}\n\nexport function editCell(board: PlaitBoard, cell: PlaitTableCell) {\n    const textManage = getTextManageByCell(board, cell);\n    textManage && textManage.edit();\n}\n\nexport function getTextManageByCell(board: PlaitBoard, cell: PlaitTableCell) {\n    return getTextManage(board, undefined, cell);\n}\n\nexport const updateColumns = (table: PlaitBaseTable, columnId: string, width: number, offset: number) => {\n    const columns = table.columns.map((item) => (item.id === columnId ? { ...item, width } : item));\n    const points = [table.points[0], [table.points[1][0] + offset, table.points[1][1]]] as Point[];\n    return { columns, points };\n};\n\nexport const updateRows = (table: PlaitBaseTable, rowId: string, height: number, offset: number) => {\n    const rows = table.rows.map((item) => (item.id === rowId ? { ...item, height } : item));\n    const points = [table.points[0], [table.points[1][0], table.points[1][1] + offset]] as Point[];\n    return { rows, points };\n};\n\nexport function updateCellIdsByRowOrColumn(cells: PlaitTableCell[], oldId: string, newId: string, type: 'row' | 'column') {\n    const id: 'rowId' | 'columnId' = `${type}Id`;\n    cells.forEach((item) => {\n        if (item[id] === oldId) {\n            item[id] = newId;\n        }\n    });\n}\n\nexport function updateRowOrColumnIds(element: PlaitTable, type: 'row' | 'column') {\n    element[`${type}s`].forEach((item) => {\n        const newId = idCreator();\n        updateCellIdsByRowOrColumn(element.cells, item.id, newId, type);\n        item.id = newId;\n    });\n}\n\nexport function updateCellIds(cells: PlaitTableCell[]) {\n    cells.forEach((item) => {\n        const newId = idCreator();\n        item.id = newId;\n    });\n}\n\nexport function isCellIncludeText(cell: PlaitTableCell) {\n    return cell.text;\n}\n\nexport function getCellsRectangle(board: PlaitTableBoard, element: PlaitTable, cells: PlaitTableCell[]) {\n    const cellsWithPoints = getCellsWithPoints(board as PlaitTableBoard, element);\n    const points = cells.map((cell) => {\n        const cellWithPoints = cellsWithPoints.find((item) => item.id === cell.id);\n        return cellWithPoints!.points;\n    });\n    return RectangleClient.getRectangleByPoints(points);\n}\n\nexport const createCell = (rowId: string, columnId: string, text: string | null = null) => {\n    const cell: PlaitTableCell = {\n        id: idCreator(),\n        rowId,\n        columnId\n    };\n    if (text !== null) {\n        cell['text'] = {\n            children: [{ text }],\n            align: Alignment.center\n        };\n    }\n    return cell;\n};\n\nexport const getSelectedTableCellsEditor = (board: PlaitBoard): BaseEditor[] | undefined => {\n    if (isSingleSelectTable(board)) {\n        const elements = getSelectedTableElements(board);\n        const selectedCells = getSelectedCells(elements[0]);\n        const selectedCellsEditor = selectedCells?.map((cell) => {\n            const textManage = getTextManageByCell(board, cell);\n            return textManage?.editor;\n        });\n        if (selectedCellsEditor?.length) {\n            return selectedCellsEditor as BaseEditor[];\n        }\n    }\n    return undefined;\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { BasicShapes, GeometryShapes, MemorizeKey, PlaitDrawElement } from '../interfaces';\nimport { getMemorizedLatest, memorizeLatest } from '@plait/common';\nimport { DrawPointerType } from '../constants';\nimport { BaseOperation, BaseSetNodeOperation, Node } from 'slate';\n\nconst SHAPE_MAX_LENGTH = 6;\nconst memorizedShape: WeakMap<PlaitBoard, GeometryShapes[]> = new WeakMap();\n\nexport const getMemorizeKey = (element: PlaitElement) => {\n    let key = '';\n    switch (true) {\n        case PlaitDrawElement.isText(element): {\n            key = MemorizeKey.text;\n            break;\n        }\n        case PlaitDrawElement.isBasicShape(element): {\n            key = MemorizeKey.basicShape;\n            break;\n        }\n        case PlaitDrawElement.isFlowchart(element): {\n            key = MemorizeKey.flowchart;\n            break;\n        }\n        case PlaitDrawElement.isArrowLine(element): {\n            key = MemorizeKey.arrowLine;\n            break;\n        }\n        case PlaitDrawElement.isUML(element): {\n            key = MemorizeKey.UML;\n        }\n    }\n    return key;\n};\n\nexport const getLineMemorizedLatest = () => {\n    const properties = getMemorizedLatest(MemorizeKey.arrowLine);\n    return { ...properties };\n};\n\nexport const getMemorizedLatestByPointer = (pointer: DrawPointerType) => {\n    let memorizeKey = '';\n    if (PlaitDrawElement.isBasicShape({ shape: pointer })) {\n        memorizeKey = pointer === BasicShapes.text ? MemorizeKey.text : MemorizeKey.basicShape;\n    } else if (PlaitDrawElement.isUML({ shape: pointer })) {\n        memorizeKey = MemorizeKey.UML;\n    } else {\n        memorizeKey = MemorizeKey.flowchart;\n    }\n    const properties = { ...getMemorizedLatest(memorizeKey) };\n    const textProperties = { ...properties.text };\n    delete properties.text;\n    return { textProperties, geometryProperties: properties };\n};\n\nexport const memorizeLatestText = <T extends PlaitElement = PlaitDrawElement>(element: T, operations: BaseOperation[]) => {\n    const memorizeKey = getMemorizeKey(element);\n    let textMemory = getMemorizedLatest(memorizeKey)?.text || {};\n    const setNodeOperation = operations.find((operation) => operation.type === 'set_node');\n    if (setNodeOperation) {\n        const { properties, newProperties } = setNodeOperation as BaseSetNodeOperation;\n        for (const key in newProperties) {\n            const value = newProperties[key as keyof Partial<Node>];\n            if (value == null) {\n                delete textMemory[key];\n            } else {\n                textMemory[key] = value;\n            }\n        }\n        for (const key in properties) {\n            if (!newProperties.hasOwnProperty(key)) {\n                delete textMemory[key];\n            }\n        }\n        memorizeLatest(memorizeKey, 'text', textMemory);\n    }\n};\n\nexport const memorizeLatestShape = (board: PlaitBoard, shape: GeometryShapes) => {\n    const shapes = memorizedShape.has(board) ? memorizedShape.get(board)! : [];\n    const shapeIndex = shapes.indexOf(shape);\n    if (shape === BasicShapes.text || shapeIndex === 0) {\n        return;\n    }\n    if (shapeIndex !== -1) {\n        shapes.splice(shapeIndex, 1);\n    } else {\n        if (shapes.length === SHAPE_MAX_LENGTH) {\n            shapes.pop();\n        }\n    }\n    shapes.unshift(shape);\n    memorizedShape.set(board, shapes);\n};\n\nexport const getMemorizedLatestShape = (board: PlaitBoard) => {\n    return memorizedShape.get(board);\n};\n","import { ElbowLineRouteOptions, ResizeState, generateElbowLineRoute, removeDuplicatePoints, simplifyOrthogonalPoints } from '@plait/common';\nimport { PlaitBoard, Point, RectangleClient, createDebugGenerator } from '@plait/core';\nimport { getElbowLineRouteOptions, getArrowLineHandleRefPair } from './arrow-line-common';\nimport { PlaitArrowLine } from '../../interfaces';\nimport { LINE_ALIGN_TOLERANCE } from '../../constants/geometry';\n\nconst debugKey = 'debug:plait:line-mirror';\nconst debugGenerator = createDebugGenerator(debugKey);\n\nexport const alignPoint = (basePoint: Point, movingPoint: Point) => {\n    const newPoint: Point = [...movingPoint];\n    if (Point.isVertical(newPoint, basePoint, LINE_ALIGN_TOLERANCE)) {\n        newPoint[0] = basePoint[0];\n    }\n    if (Point.isHorizontal(newPoint, basePoint, LINE_ALIGN_TOLERANCE)) {\n        newPoint[1] = basePoint[1];\n    }\n    return newPoint;\n};\n\nexport const alignPoints = (basePoints: Point[], movingPoint: Point, targetIndex?: number) => {\n    let newMovingPoint: Point = [...movingPoint];\n    basePoints.forEach((basePoint, index) => {\n        if (index === targetIndex) {\n            return;\n        }\n        newMovingPoint = alignPoint(basePoint, newMovingPoint);\n    });\n    return newMovingPoint as Point;\n};\n\nexport function getResizedPreviousAndNextPoint(nextRenderPoints: Point[], sourcePoint: Point, targetPoint: Point, handleIndex: number) {\n    const referencePoint: { previous: Point | null; next: Point | null } = {\n        previous: null,\n        next: null\n    };\n\n    const startPoint = nextRenderPoints[handleIndex];\n    const endPoint = nextRenderPoints[handleIndex + 1];\n    const isHorizontal = Point.isHorizontal(startPoint, endPoint);\n    const isVertical = Point.isVertical(startPoint, endPoint);\n    const previousPoint = nextRenderPoints[handleIndex - 1] ?? nextRenderPoints[0];\n    const beforePreviousPoint = nextRenderPoints[handleIndex - 2] ?? sourcePoint;\n    if (\n        (isHorizontal && Point.isHorizontal(beforePreviousPoint, previousPoint)) ||\n        (isVertical && Point.isVertical(beforePreviousPoint, previousPoint))\n    ) {\n        referencePoint.previous = previousPoint;\n    }\n\n    const nextPoint = nextRenderPoints[handleIndex + 2] ?? nextRenderPoints[nextRenderPoints.length - 1];\n    const afterNextPoint = nextRenderPoints[handleIndex + 3] ?? targetPoint;\n    if ((isHorizontal && Point.isHorizontal(nextPoint, afterNextPoint)) || (isVertical && Point.isVertical(nextPoint, afterNextPoint))) {\n        referencePoint.next = nextPoint;\n    }\n    return referencePoint;\n}\n\nexport function alignElbowSegment(\n    startKeyPoint: Point,\n    endKeyPoint: Point,\n    resizeState: ResizeState,\n    resizedPreviousAndNextPoint: { previous: Point | null; next: Point | null }\n) {\n    let newStartPoint = startKeyPoint;\n    let newEndPoint = endKeyPoint;\n    if (Point.isHorizontal(startKeyPoint, endKeyPoint)) {\n        const offsetY = Point.getOffsetY(resizeState.startPoint, resizeState.endPoint);\n        let pointY = startKeyPoint[1] + offsetY;\n        if (resizedPreviousAndNextPoint.previous && Math.abs(resizedPreviousAndNextPoint.previous[1] - pointY) < LINE_ALIGN_TOLERANCE) {\n            pointY = resizedPreviousAndNextPoint.previous[1];\n        } else if (resizedPreviousAndNextPoint.next && Math.abs(resizedPreviousAndNextPoint.next[1] - pointY) < LINE_ALIGN_TOLERANCE) {\n            pointY = resizedPreviousAndNextPoint.next[1];\n        }\n        newStartPoint = [startKeyPoint[0], pointY];\n        newEndPoint = [endKeyPoint[0], pointY];\n    }\n    if (Point.isVertical(startKeyPoint, endKeyPoint)) {\n        const offsetX = Point.getOffsetX(resizeState.startPoint, resizeState.endPoint);\n        let pointX = startKeyPoint[0] + offsetX;\n        if (resizedPreviousAndNextPoint.previous && Math.abs(resizedPreviousAndNextPoint.previous[0] - pointX) < LINE_ALIGN_TOLERANCE) {\n            pointX = resizedPreviousAndNextPoint.previous[0];\n        } else if (resizedPreviousAndNextPoint.next && Math.abs(resizedPreviousAndNextPoint.next[0] - pointX) < LINE_ALIGN_TOLERANCE) {\n            pointX = resizedPreviousAndNextPoint.next[0];\n        }\n        newStartPoint = [pointX, startKeyPoint[1]];\n        newEndPoint = [pointX, endKeyPoint[1]];\n    }\n    return [newStartPoint, newEndPoint];\n}\n\nexport function getIndexAndDeleteCountByKeyPoint(\n    board: PlaitBoard,\n    element: PlaitArrowLine,\n    dataPoints: Point[],\n    nextRenderPoints: Point[],\n    handleIndex: number\n) {\n    let index: number | null = null;\n    let deleteCount: number | null = null;\n\n    const startKeyPoint = nextRenderPoints[handleIndex];\n    const endKeyPoint = nextRenderPoints[handleIndex + 1];\n    if (!startKeyPoint || !endKeyPoint) {\n        return {\n            index,\n            deleteCount\n        };\n    }\n    const midDataPoints = dataPoints.slice(1, -1);\n    const startIndex = midDataPoints.findIndex((item) => Point.isEquals(item, startKeyPoint));\n    const endIndex = midDataPoints.findIndex((item) => Point.isEquals(item, endKeyPoint));\n\n    if (Math.max(startIndex, endIndex) > -1) {\n        if (startIndex > -1 && endIndex > -1) {\n            return {\n                index: startIndex,\n                deleteCount: 2\n            };\n        }\n        if (startIndex > -1 && endIndex === -1) {\n            const isReplace =\n                startIndex < midDataPoints.length - 1 &&\n                Point.isAlign([midDataPoints[startIndex], midDataPoints[startIndex + 1], startKeyPoint, endKeyPoint]);\n            if (isReplace) {\n                return {\n                    index: startIndex,\n                    deleteCount: 2\n                };\n            }\n            return {\n                index: startIndex,\n                deleteCount: 1\n            };\n        }\n        if (startIndex === -1 && endIndex > -1) {\n            const isReplace =\n                endIndex > 0 && Point.isAlign([midDataPoints[endIndex], midDataPoints[endIndex - 1], startKeyPoint, endKeyPoint]);\n            if (isReplace) {\n                return {\n                    index: endIndex - 1,\n                    deleteCount: 2\n                };\n            }\n            return {\n                index: endIndex,\n                deleteCount: 1\n            };\n        }\n    } else {\n        for (let i = 0; i < midDataPoints.length - 1; i++) {\n            const currentPoint = midDataPoints[i];\n            const nextPoint = midDataPoints[i + 1];\n            if (Point.isAlign([currentPoint, nextPoint, startKeyPoint, endKeyPoint])) {\n                index = i;\n                deleteCount = 2;\n                break;\n            }\n            if (Point.isAlign([currentPoint, nextPoint, startKeyPoint])) {\n                index = Math.min(i + 1, midDataPoints.length - 1);\n                deleteCount = 1;\n                break;\n            }\n            if (Point.isAlign([currentPoint, nextPoint, endKeyPoint])) {\n                index = Math.max(i - 1, 0);\n                deleteCount = 1;\n                break;\n            }\n        }\n    }\n    if (index === null) {\n        deleteCount = 0;\n        if (midDataPoints.length > 0) {\n            const handleRefPair = getArrowLineHandleRefPair(board, element);\n            const params = getElbowLineRouteOptions(board, element as PlaitArrowLine, handleRefPair);\n            const keyPoints = removeDuplicatePoints(generateElbowLineRoute(params, board));\n            const nextKeyPoints = simplifyOrthogonalPoints(keyPoints.slice(1, keyPoints.length - 1));\n            const nextDataPoints = [nextRenderPoints[0], ...midDataPoints, nextRenderPoints[nextRenderPoints.length - 1]];\n            const mirrorDataPoints = getMirrorDataPoints(board, nextDataPoints, nextKeyPoints, params);\n            for (let i = handleIndex - 1; i >= 0; i--) {\n                const previousIndex = mirrorDataPoints.slice(1, -1).findIndex((item) => Point.isEquals(item, nextRenderPoints[i]));\n                if (previousIndex > -1) {\n                    index = previousIndex + 1;\n                    break;\n                }\n            }\n            if (index === null) {\n                index = 0;\n                // When renderPoints is a straight line and dataPoints are not on the line,\n                // the default 'deleteCount' is set to midDataPoints.length.\n                if (Point.isAlign(nextRenderPoints)) {\n                    deleteCount = midDataPoints.length;\n                }\n            }\n        } else {\n            index = 0;\n        }\n    }\n\n    return {\n        index,\n        deleteCount\n    };\n}\n\nexport function getMirrorDataPoints(board: PlaitBoard, nextDataPoints: Point[], nextKeyPoints: Point[], params: ElbowLineRouteOptions) {\n    for (let index = 1; index < nextDataPoints.length - 2; index++) {\n        adjustByCustomPointStartIndex(board, index, nextDataPoints, nextKeyPoints, params);\n    }\n    return nextDataPoints;\n}\n\n/**\n * adjust based parallel segment\n */\nconst adjustByCustomPointStartIndex = (\n    board: PlaitBoard,\n    customPointStartIndex: number,\n    nextDataPoints: Point[],\n    nextKeyPoints: Point[],\n    params: ElbowLineRouteOptions\n) => {\n    const beforePoint = nextDataPoints[customPointStartIndex - 1];\n    const startPoint = nextDataPoints[customPointStartIndex];\n    const endPoint = nextDataPoints[customPointStartIndex + 1];\n    const afterPoint = nextDataPoints[customPointStartIndex + 2];\n    const beforeSegment = [beforePoint, startPoint];\n    const afterSegment = [endPoint, afterPoint];\n    const isStraightWithBefore = Point.isAlign(beforeSegment);\n    const isStraightWithAfter = Point.isAlign(afterSegment);\n    let isAdjustStart = false;\n    let isAdjustEnd = false;\n    if (!isStraightWithBefore || !isStraightWithAfter) {\n        const midKeyPointsWithBefore = getMidKeyPoints(nextKeyPoints, beforeSegment[0], beforeSegment[1]);\n        const midKeyPointsWithAfter = getMidKeyPoints(nextKeyPoints, afterSegment[0], afterSegment[1]);\n        const hasMidKeyPoints = midKeyPointsWithBefore.length > 0 && midKeyPointsWithAfter.length > 0;\n        isAdjustStart = !isStraightWithBefore && !hasMidKeyPoints;\n        isAdjustEnd = !isStraightWithAfter && !hasMidKeyPoints;\n    }\n    if (isAdjustStart || isAdjustEnd) {\n        const parallelSegment = [startPoint, endPoint] as [Point, Point];\n        const parallelSegments = findOrthogonalParallelSegments(parallelSegment, nextKeyPoints);\n        const mirrorSegments = findMirrorSegments(board, parallelSegment, parallelSegments, params.sourceRectangle, params.targetRectangle);\n        if (mirrorSegments.length === 1) {\n            const mirrorSegment = mirrorSegments[0];\n            if (isAdjustStart) {\n                nextDataPoints.splice(customPointStartIndex, 1, mirrorSegment[0]);\n            }\n            if (isAdjustEnd) {\n                nextDataPoints.splice(customPointStartIndex + 1, 1, mirrorSegment[1]);\n            }\n        } else {\n            const isHorizontal = Point.isHorizontal(startPoint, endPoint);\n            const adjustIndex = isHorizontal ? 0 : 1;\n            if (isAdjustStart) {\n                const newStartPoint = [startPoint[0], startPoint[1]] as Point;\n                newStartPoint[adjustIndex] = beforePoint[adjustIndex];\n                nextDataPoints.splice(customPointStartIndex, 1, newStartPoint);\n            }\n            if (isAdjustEnd) {\n                const newEndPoint = [endPoint[0], endPoint[1]] as Point;\n                newEndPoint[adjustIndex] = afterPoint[adjustIndex];\n                nextDataPoints.splice(customPointStartIndex + 1, 1, newEndPoint);\n            }\n        }\n    }\n};\n\nexport function isUpdatedHandleIndex(\n    board: PlaitBoard,\n    element: PlaitArrowLine,\n    dataPoints: Point[],\n    nextRenderPoints: Point[],\n    handleIndex: number\n) {\n    const { deleteCount } = getIndexAndDeleteCountByKeyPoint(board, element, dataPoints, nextRenderPoints, handleIndex);\n    if (deleteCount !== null && deleteCount > 1) {\n        return true;\n    }\n    return false;\n}\n\nexport function getMidKeyPoints(simplifiedNextKeyPoints: Point[], startPoint: Point, endPoint: Point) {\n    let midElbowPoints: Point[] = [];\n    let startPointIndex = -1;\n    let endPointIndex = -1;\n    for (let i = 0; i < simplifiedNextKeyPoints.length; i++) {\n        if (Point.isAlign([simplifiedNextKeyPoints[i], startPoint])) {\n            startPointIndex = i;\n        }\n        if (startPointIndex > -1 && Point.isAlign([simplifiedNextKeyPoints[i], endPoint])) {\n            endPointIndex = i;\n            break;\n        }\n    }\n    if (startPointIndex > -1 && endPointIndex > -1) {\n        midElbowPoints = simplifiedNextKeyPoints.slice(startPointIndex, endPointIndex + 1);\n    }\n    return midElbowPoints;\n}\n\nfunction findOrthogonalParallelSegments(segment: [Point, Point], keyPoints: Point[]): [Point, Point][] {\n    const isHorizontalSegment = Point.isHorizontal(segment[0], segment[1]);\n    const parallelSegments: [Point, Point][] = [];\n\n    for (let i = 0; i < keyPoints.length - 1; i++) {\n        const current = keyPoints[i];\n        const next = keyPoints[i + 1];\n        const isHorizontal = Point.isHorizontal(current, next, 0.1);\n        if (isHorizontalSegment && isHorizontal) {\n            parallelSegments.push([current, next]);\n        }\n        if (!isHorizontalSegment && !isHorizontal) {\n            parallelSegments.push([current, next]);\n        }\n    }\n\n    return parallelSegments;\n}\n\nfunction findMirrorSegments(\n    board: PlaitBoard,\n    segment: [Point, Point],\n    parallelSegments: [Point, Point][],\n    sourceRectangle: RectangleClient,\n    targetRectangle: RectangleClient\n) {\n    debugGenerator.isDebug() && debugGenerator.clear();\n\n    const mirrorSegments: [Point, Point][] = [];\n    for (let index = 0; index < parallelSegments.length; index++) {\n        const parallelPath = parallelSegments[index];\n        const startPoint = [segment[0][0], segment[0][1]] as Point;\n        const endPoint = [segment[1][0], segment[1][1]] as Point;\n        const isHorizontal = Point.isHorizontal(startPoint, endPoint);\n        const adjustDataIndex = isHorizontal ? 0 : 1;\n        startPoint[adjustDataIndex] = parallelPath[0][adjustDataIndex];\n        endPoint[adjustDataIndex] = parallelPath[1][adjustDataIndex];\n        const fakeRectangle = RectangleClient.getRectangleByPoints([startPoint, endPoint, ...parallelPath]);\n        const isValid = !RectangleClient.isHit(fakeRectangle, sourceRectangle) && !RectangleClient.isHit(fakeRectangle, targetRectangle);\n        if (isValid) {\n            mirrorSegments.push([startPoint, endPoint]);\n\n            debugGenerator.isDebug() && debugGenerator.drawPolygon(board, RectangleClient.getCornerPoints(fakeRectangle));\n        }\n    }\n    return mirrorSegments;\n}\n\nexport const hasIllegalElbowPoint = (midDataPoints: Point[]): boolean => {\n    if (midDataPoints.length === 1) {\n        return true;\n    }\n    return midDataPoints.some((item, index) => {\n        const beforePoint = midDataPoints[index - 1];\n        const afterPoint = midDataPoints[index + 1];\n        const beforeSegment = beforePoint && [beforePoint, item];\n        const afterSegment = afterPoint && [item, afterPoint];\n        const isStraightWithBefore = beforeSegment && Point.isAlign(beforeSegment);\n        const isStraightWithAfter = afterSegment && Point.isAlign(afterSegment);\n        if (index === 0) {\n            return !isStraightWithAfter;\n        }\n        if (index === midDataPoints.length - 1) {\n            return !isStraightWithBefore;\n        }\n        return !isStraightWithBefore && !isStraightWithAfter;\n    });\n};\n","import { Point, arrowPoints, createG, createPath, distanceBetweenPointAndPoint, drawLinearPath, rotate } from '@plait/core';\nimport { ArrowLineMarkerType, PlaitArrowLine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getExtendPoint, getUnitVectorByPointAndPoint } from '@plait/common';\nimport { getStrokeWidthByElement } from '../common';\n\ninterface ArrowOptions {\n    marker: ArrowLineMarkerType;\n    source: Point;\n    target: Point;\n    isSource: boolean;\n}\nconst ARROW_LENGTH = 20;\n\nexport const drawArrowLineArrow = (element: PlaitArrowLine, points: Point[], options: Options) => {\n    const arrowG = createG();\n    if (PlaitArrowLine.isSourceMark(element, ArrowLineMarkerType.none) && PlaitArrowLine.isTargetMark(element, ArrowLineMarkerType.none)) {\n        return null;\n    }\n    const strokeWidth = getStrokeWidthByElement(element);\n    const offset = (strokeWidth * strokeWidth) / 3;\n    if (points.length === 1) {\n        points = [points[0], [points[0][0] + 0.1, points[0][1]]];\n    }\n\n    if (!PlaitArrowLine.isSourceMark(element, ArrowLineMarkerType.none)) {\n        const source = getExtendPoint(points[0], points[1], ARROW_LENGTH + offset);\n        const sourceArrow = getArrow(element, { marker: element.source.marker, source, target: points[0], isSource: true }, options);\n        sourceArrow && arrowG.appendChild(sourceArrow);\n    }\n    if (!PlaitArrowLine.isTargetMark(element, ArrowLineMarkerType.none)) {\n        const source = getExtendPoint(points[points.length - 1], points[points.length - 2], ARROW_LENGTH + offset);\n        const arrow = getArrow(\n            element,\n            { marker: element.target.marker, source, target: points[points.length - 1], isSource: false },\n            options\n        );\n\n        arrow && arrowG.appendChild(arrow);\n    }\n    return arrowG;\n};\n\nconst getArrow = (element: PlaitArrowLine, arrowOptions: ArrowOptions, options: Options) => {\n    const { marker, target, source, isSource } = arrowOptions;\n    let targetArrow;\n    switch (marker) {\n        case ArrowLineMarkerType.openTriangle: {\n            targetArrow = drawOpenTriangle(element, source, target, options);\n            break;\n        }\n        case ArrowLineMarkerType.solidTriangle: {\n            targetArrow = drawSolidTriangle(source, target, options);\n            break;\n        }\n        case ArrowLineMarkerType.arrow: {\n            targetArrow = drawArrow(element, source, target, options);\n            break;\n        }\n        case ArrowLineMarkerType.sharpArrow: {\n            targetArrow = drawSharpArrow(source, target, options);\n            break;\n        }\n        case ArrowLineMarkerType.oneSideUp: {\n            targetArrow = drawOneSideArrow(source, target, isSource ? 'down' : 'up', options);\n            break;\n        }\n        case ArrowLineMarkerType.oneSideDown: {\n            targetArrow = drawOneSideArrow(source, target, isSource ? 'up' : 'down', options);\n            break;\n        }\n        case ArrowLineMarkerType.hollowTriangle: {\n            targetArrow = drawHollowTriangleArrow(source, target, options);\n            break;\n        }\n        case ArrowLineMarkerType.singleSlash: {\n            targetArrow = drawSingleSlash(source, target, isSource, options);\n            break;\n        }\n    }\n    return targetArrow;\n};\n\nconst drawSharpArrow = (source: Point, target: Point, options: Options) => {\n    const startPoint: Point = target;\n    const { pointLeft, pointRight } = arrowPoints(source, target, 20);\n    const g = createG();\n    const path = createPath();\n    let polylinePath = `M${pointRight[0]},${pointRight[1]}A25,25,20,0,1,${pointLeft[0]},${pointLeft[1]}L${startPoint[0]},${startPoint[1]}Z`;\n    path.setAttribute('d', polylinePath);\n    path.setAttribute('stroke', `${options?.stroke}`);\n    path.setAttribute('stroke-width', `${options?.strokeWidth}`);\n    path.setAttribute('fill', `${options?.stroke}`);\n    g.appendChild(path);\n    return g;\n};\n\nconst drawArrow = (element: PlaitArrowLine, source: Point, target: Point, options: Options) => {\n    const unitVector = getUnitVectorByPointAndPoint(source, target);\n    const strokeWidth = getStrokeWidthByElement(element);\n    const endPoint: Point = [target[0] + (strokeWidth * unitVector[0]) / 2, target[1] + (strokeWidth * unitVector[1]) / 2];\n    const distance = distanceBetweenPointAndPoint(...source, ...endPoint);\n    const middlePoint: Point = [\n        endPoint[0] - (((distance * 3) / 5 + strokeWidth) / 2) * unitVector[0],\n        endPoint[1] - (((distance * 3) / 5 + strokeWidth) / 2) * unitVector[1]\n    ];\n    const { pointLeft, pointRight } = arrowPoints(source, endPoint, 30);\n    const arrowG = drawLinearPath([pointLeft, endPoint, pointRight, middlePoint], { ...options, fill: options.stroke }, true);\n    const path = arrowG.querySelector('path');\n    path!.setAttribute('stroke-linejoin', 'round');\n    return arrowG;\n};\n\nconst drawSolidTriangle = (source: Point, target: Point, options: Options) => {\n    const endPoint: Point = target;\n    const { pointLeft, pointRight } = arrowPoints(source, endPoint, 30);\n    return drawLinearPath([pointLeft, endPoint, pointRight], { ...options, fill: options.stroke }, true);\n};\n\nconst drawOpenTriangle = (element: PlaitArrowLine, source: Point, target: Point, options: Options) => {\n    const unitVector = getUnitVectorByPointAndPoint(source, target);\n    const strokeWidth = getStrokeWidthByElement(element);\n    const endPoint: Point = [target[0] + (strokeWidth * unitVector[0]) / 2, target[1] + (strokeWidth * unitVector[1]) / 2];\n    const { pointLeft, pointRight } = arrowPoints(source, endPoint, 40);\n    return drawLinearPath([pointLeft, endPoint, pointRight], options);\n};\n\nconst drawOneSideArrow = (source: Point, target: Point, side: string, options: Options) => {\n    const { pointLeft, pointRight } = arrowPoints(source, target, 40);\n    return drawLinearPath([side === 'up' ? pointRight : pointLeft, target], options);\n};\n\nconst drawSingleSlash = (source: Point, target: Point, isSource: boolean, options: Options) => {\n    const length = distanceBetweenPointAndPoint(...source, ...target);\n    const middlePoint = getExtendPoint(target, source, length / 2);\n    const angle = isSource ? 120 : 60;\n    const start = rotate(...source, ...middlePoint, (angle * Math.PI) / 180) as Point;\n    const end = rotate(...target, ...middlePoint, (angle * Math.PI) / 180) as Point;\n    return drawLinearPath([start, end], options);\n};\n\nconst drawHollowTriangleArrow = (source: Point, target: Point, options: Options) => {\n    const { pointLeft, pointRight } = arrowPoints(source, target, 30);\n    return drawLinearPath([pointLeft, pointRight, target], { ...options, fill: 'white' }, true);\n};\n","import { PlaitArrowLine } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { drawArrowLine } from '../utils/arrow-line/arrow-line-basic';\n\nexport class ArrowLineShapeGenerator extends Generator<PlaitArrowLine> {\n    canDraw(element: PlaitArrowLine): boolean {\n        return true;\n    }\n\n    draw(element: PlaitArrowLine) {\n        let lineG: SVGGElement | undefined;\n        lineG = drawArrowLine(this.board, element);\n        return lineG;\n    }\n}\n","import { DEFAULT_FONT_FAMILY, ElementSize, getElementSize, ParagraphElement } from '@plait/common';\nimport { PlaitBoard } from '@plait/core';\nimport { DEFAULT_FONT_SIZE } from '@plait/text-plugins';\nimport { MIN_TEXT_WIDTH } from '../constants';\n\nexport const getTextSize = (board: PlaitBoard, text: ParagraphElement, maxWidth?: number): ElementSize => {\n    const textSize = getElementSize(board, text, { fontSize: DEFAULT_FONT_SIZE, fontFamily: DEFAULT_FONT_FAMILY }, maxWidth);\n    const normalizedTextSize = normalizeWidthAndHeight(textSize);\n    return normalizedTextSize;\n};\n\nexport const normalizeWidthAndHeight = (textSize: ElementSize) => {\n    return { ...textSize, width: textSize.width < MIN_TEXT_WIDTH ? MIN_TEXT_WIDTH : textSize.width };\n};\n","import {\n    Point,\n    idCreator,\n    PlaitBoard,\n    createG,\n    RectangleClient,\n    findElements,\n    PlaitElement,\n    drawLinearPath,\n    createMask,\n    createRect,\n    distanceBetweenPointAndPoint,\n    catmullRomFitting,\n    setStrokeLinecap,\n    createDebugGenerator\n} from '@plait/core';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport {\n    getPointOnPolyline,\n    getPointByVectorComponent,\n    removeDuplicatePoints,\n    getExtendPoint,\n    getStrokeLineDash,\n    StrokeStyle\n} from '@plait/common';\nimport {\n    ArrowLineHandle,\n    ArrowLineMarkerType,\n    ArrowLineShape,\n    ArrowLineText,\n    PlaitArrowLine,\n    PlaitDrawElement,\n    PlaitShapeElement\n} from '../../interfaces';\nimport { getStrokeColorByElement, getStrokeStyleByElement } from '../style/stroke';\nimport { getEngine } from '../../engines';\nimport { getElementShape } from '../shape';\nimport { DefaultLineStyle, LINE_TEXT_SPACE } from '../../constants/line';\nimport { LINE_SNAPPING_CONNECTOR_BUFFER } from '../../constants';\nimport { getLineMemorizedLatest } from '../memorize';\nimport { alignPoint } from './arrow-line-resize';\nimport { getArrowLineHandleRefPair } from './arrow-line-common';\nimport { getElbowPoints } from './elbow';\nimport { drawArrowLineArrow } from './arrow-line-arrow';\nimport { getSnappingRef, getSnappingShape, getStrokeWidthByElement } from '../common';\nimport { ArrowLineShapeGenerator } from '../../generators/arrow-line.generator';\nimport { getTextSize } from '../text-size';\n\nexport const createArrowLineElement = (\n    shape: ArrowLineShape,\n    points: [Point, Point],\n    source: ArrowLineHandle,\n    target: ArrowLineHandle,\n    texts?: ArrowLineText[],\n    options?: Pick<PlaitArrowLine, 'strokeColor' | 'strokeWidth'>\n): PlaitArrowLine => {\n    return {\n        id: idCreator(),\n        type: 'arrow-line',\n        shape,\n        source,\n        texts: texts ? texts : [],\n        target,\n        opacity: 1,\n        points,\n        ...options\n    };\n};\n\nexport const getArrowLinePoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n    switch (element.shape) {\n        case ArrowLineShape.elbow: {\n            return getElbowPoints(board, element);\n        }\n        case ArrowLineShape.curve: {\n            return getCurvePoints(board, element);\n        }\n        default: {\n            const points = PlaitArrowLine.getPoints(board, element);\n            const handleRefPair = getArrowLineHandleRefPair(board, element);\n            points[0] = handleRefPair.source.point;\n            points[points.length - 1] = handleRefPair.target.point;\n            return points;\n        }\n    }\n};\n\nexport const getCurvePoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n    if (element.points.length === 2) {\n        const handleRefPair = getArrowLineHandleRefPair(board, element);\n        const { source, target } = handleRefPair;\n        const sourceBoundElement = handleRefPair.source.boundElement;\n        const targetBoundElement = handleRefPair.target.boundElement;\n        let curvePoints: Point[] = [source.point];\n        const sumDistance = distanceBetweenPointAndPoint(...source.point, ...target.point);\n        const offset = 12 + sumDistance / 3;\n        if (sourceBoundElement) {\n            curvePoints.push(getPointByVectorComponent(source.point, source.vector, offset));\n        }\n        if (targetBoundElement) {\n            curvePoints.push(getPointByVectorComponent(target.point, target.vector, offset));\n        }\n        const isSingleBound = (sourceBoundElement && !targetBoundElement) || (!sourceBoundElement && targetBoundElement);\n        if (isSingleBound) {\n            curvePoints.push(target.point);\n            const points = Q2C(curvePoints);\n            return pointsOnBezierCurves(points) as Point[];\n        }\n        if (!sourceBoundElement && !targetBoundElement) {\n            curvePoints.push(getPointByVectorComponent(source.point, source.vector, offset));\n            curvePoints.push(getPointByVectorComponent(target.point, target.vector, offset));\n        }\n        curvePoints.push(target.point);\n        return pointsOnBezierCurves(curvePoints) as Point[];\n    } else {\n        let dataPoints = PlaitArrowLine.getPoints(board, element);\n        dataPoints = removeDuplicatePoints(dataPoints);\n        const points = catmullRomFitting(dataPoints);\n        return pointsOnBezierCurves(points) as Point[];\n    }\n};\n\nexport const drawArrowLine = (board: PlaitBoard, element: PlaitArrowLine) => {\n    const strokeWidth = getStrokeWidthByElement(element);\n    const strokeColor = getStrokeColorByElement(board, element);\n    const strokeStyle = getStrokeStyleByElement(board, element);\n    const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n    const options = { stroke: strokeColor, strokeWidth, strokeLineDash };\n    const lineG = createG();\n    let points = getArrowLinePoints(board, element);\n    let line;\n    if (element.shape === ArrowLineShape.curve) {\n        line = PlaitBoard.getRoughSVG(board).curve(points, options);\n    } else {\n        line = drawLinearPath(points, options);\n    }\n    const id = idCreator();\n    line.setAttribute('mask', `url(#${id})`);\n    if (element.strokeStyle === StrokeStyle.dotted) {\n        setStrokeLinecap(line, 'round');\n    }\n    lineG.appendChild(line);\n\n    const { mask, maskTargetFillRect } = drawArrowLineMask(board, element as PlaitArrowLine, id);\n    lineG.appendChild(mask);\n    line.appendChild(maskTargetFillRect);\n    const arrow = drawArrowLineArrow(element as PlaitArrowLine, points, { stroke: strokeColor, strokeWidth });\n    arrow && lineG.appendChild(arrow);\n    return lineG;\n};\n\nexport const getHitConnection = (board: PlaitBoard, point: Point, hitElement: PlaitShapeElement): Point => {\n    const ref = getSnappingRef(board, hitElement, point);\n    const connectionPoint = ref.connectorPoint || ref.edgePoint;\n    return getHitConnectionFromConnectionPoint(connectionPoint, hitElement);\n};\n\nexport const getHitConnectionFromConnectionPoint = (connectionPoint: Point, hitElement: PlaitShapeElement): Point => {\n    let rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n    return [(connectionPoint[0] - rectangle.x) / rectangle.width, (connectionPoint[1] - rectangle.y) / rectangle.height];\n};\n\nexport const getHitConnectorPoint = (point: Point, hitElement: PlaitShapeElement) => {\n    const rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n    const shape = getElementShape(hitElement);\n    const connectorPoints = getEngine(shape).getConnectorPoints(rectangle);\n    return connectorPoints.find((connectorPoint) => {\n        return distanceBetweenPointAndPoint(...connectorPoint, ...point) <= LINE_SNAPPING_CONNECTOR_BUFFER;\n    });\n};\n\nexport const getArrowLineTextRectangle = (board: PlaitBoard, element: PlaitArrowLine, index: number): RectangleClient => {\n    const text = element.texts[index];\n    const elbowPoints = getArrowLinePoints(board, element);\n    const point = getPointOnPolyline(elbowPoints, text.position);\n    const textSize = getTextSize(board, text.text);\n    return {\n        x: point[0] - textSize.width / 2,\n        y: point[1] - textSize.height / 2,\n        width: textSize.width,\n        height: textSize.height\n    };\n};\n\nexport const getArrowLines = (board: PlaitBoard) => {\n    return findElements(board, {\n        match: (element: PlaitElement) => PlaitDrawElement.isArrowLine(element),\n        recursion: (element: PlaitElement) => PlaitDrawElement.isDrawElement(element)\n    }) as PlaitArrowLine[];\n};\n\n// quadratic Bezier to cubic Bezier\nexport const Q2C = (points: Point[]) => {\n    const result = [];\n    const numSegments = points.length / 3;\n    for (let i = 0; i < numSegments; i++) {\n        const start = points[i];\n        const qControl = points[i + 1];\n        const end = points[i + 2];\n        const startDistance = distanceBetweenPointAndPoint(...start, ...qControl);\n        const endDistance = distanceBetweenPointAndPoint(...end, ...qControl);\n        const cControl1 = getExtendPoint(start, qControl, (startDistance * 2) / 3);\n        const cControl2 = getExtendPoint(end, qControl, (endDistance * 2) / 3);\n        result.push(start, cControl1, cControl2, end);\n    }\n    return result;\n};\n\nconst debugGenerator = createDebugGenerator('debug:plait:arrow-line-resize');\n\nexport const handleArrowLineCreating = (\n    board: PlaitBoard,\n    lineShape: ArrowLineShape,\n    sourcePoint: Point,\n    movingPoint: Point,\n    sourceElement: PlaitShapeElement | null,\n    lineShapeG: SVGGElement,\n    options?: Pick<PlaitArrowLine, 'strokeColor' | 'strokeWidth'>\n) => {\n    if (debugGenerator.isDebug()) {\n        debugGenerator.clear();\n        debugGenerator.drawCircles(board, [sourcePoint], 3, false);\n    }\n    const alignedMovingPoint = alignPoint(sourcePoint, movingPoint);\n    const hitElement = getSnappingShape(board, alignedMovingPoint);\n    const targetConnection = hitElement ? getHitConnection(board, alignedMovingPoint, hitElement) : undefined;\n    const sourceConnection = sourceElement ? getHitConnection(board, sourcePoint, sourceElement) : undefined;\n    const targetBoundId = hitElement ? hitElement.id : undefined;\n    const lineGenerator = new ArrowLineShapeGenerator(board);\n    const memorizedLatest = getLineMemorizedLatest();\n    let sourceMarker, targetMarker;\n    sourceMarker = memorizedLatest.source;\n    targetMarker = memorizedLatest.target;\n    sourceMarker && delete memorizedLatest.source;\n    targetMarker && delete memorizedLatest.target;\n    const temporaryLineElement = createArrowLineElement(\n        lineShape,\n        [sourcePoint, alignedMovingPoint],\n        { marker: sourceMarker || ArrowLineMarkerType.none, connection: sourceConnection, boundId: sourceElement?.id },\n        { marker: targetMarker || ArrowLineMarkerType.arrow, connection: targetConnection, boundId: targetBoundId },\n        [],\n        {\n            strokeWidth: DefaultLineStyle.strokeWidth,\n            ...memorizedLatest,\n            ...options\n        }\n    );\n    const linePoints = getArrowLinePoints(board, temporaryLineElement);\n    const otherPoint = linePoints[0];\n    temporaryLineElement.points[1] = alignPoint(otherPoint, alignedMovingPoint);\n    lineGenerator.processDrawing(temporaryLineElement, lineShapeG);\n    PlaitBoard.getElementTopHost(board).append(lineShapeG);\n    return temporaryLineElement;\n};\n\nfunction drawArrowLineMask(board: PlaitBoard, element: PlaitArrowLine, id: string) {\n    const mask = createMask();\n    mask.setAttribute('id', id);\n    const points = getArrowLinePoints(board, element);\n    let rectangle = RectangleClient.getRectangleByPoints(points);\n    rectangle = RectangleClient.getOutlineRectangle(rectangle, -30);\n    const maskFillRect = createRect(rectangle, {\n        fill: 'white'\n    });\n    mask.appendChild(maskFillRect);\n\n    const texts = element.texts;\n    texts.forEach((text, index) => {\n        let textRectangle = getArrowLineTextRectangle(board, element, index);\n        textRectangle = RectangleClient.inflate(textRectangle, LINE_TEXT_SPACE * 2);\n        const rect = createRect(textRectangle, {\n            fill: 'black'\n        });\n        mask.appendChild(rect);\n    });\n    // open line\n    const maskTargetFillRect = createRect(rectangle);\n    maskTargetFillRect.setAttribute('opacity', '0');\n    maskTargetFillRect.setAttribute('fill', 'none');\n    return { mask, maskTargetFillRect };\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitArrowLine } from '../../interfaces';\nimport { getPointOnPolyline } from '@plait/common';\nimport { getArrowLinePoints } from '../arrow-line/arrow-line-basic';\nimport { getTextSize } from '../text-size';\n\nexport const getHitArrowLineTextIndex = (board: PlaitBoard, element: PlaitArrowLine, point: Point) => {\n    const texts = element.texts;\n    if (!texts.length) return -1;\n\n    const points = getArrowLinePoints(board, element);\n    return texts.findIndex((text) => {\n        const center = getPointOnPolyline(points, text.position);\n        const textSize = getTextSize(board, text.text);\n        const rectangle = {\n            x: center[0] - textSize.width / 2,\n            y: center[1] - textSize.height / 2,\n            width: textSize.width,\n            height: textSize.height\n        };\n        return RectangleClient.isHit(rectangle, RectangleClient.getRectangleByPoints([point, point]));\n    });\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, idCreator } from '@plait/core';\nimport { GeometryShapes, UMLSymbols, PlaitMultipleTextGeometry } from '../interfaces/geometry';\nimport { DefaultTextProperty, GEOMETRY_WITH_MULTIPLE_TEXT, MultipleTextGeometryTextKeys } from '../constants';\nimport { getEngine } from '../engines';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { DrawTextInfo } from '../generators/text.generator';\nimport { GeometryStyleOptions, getDefaultGeometryProperty } from './geometry';\nimport { PlaitDrawElement } from '../interfaces';\nimport { Alignment, buildText } from '@plait/common';\n\nexport const isMultipleTextShape = (shape: GeometryShapes) => {\n    return GEOMETRY_WITH_MULTIPLE_TEXT.includes(shape as UMLSymbols);\n};\n\nexport const isMultipleTextGeometry = (geometry: PlaitElement): geometry is PlaitMultipleTextGeometry => {\n    return PlaitDrawElement.isGeometry(geometry) && isMultipleTextShape(geometry.shape);\n};\n\nexport const getMultipleTextGeometryTextKeys = (shape: GeometryShapes) => {\n    return MultipleTextGeometryTextKeys[shape];\n};\n\nexport const createMultipleTextGeometryElement = (\n    shape: GeometryShapes,\n    points: [Point, Point],\n    options: GeometryStyleOptions = {}\n): PlaitMultipleTextGeometry => {\n    const id = idCreator();\n    const drawShapeTexts: DrawTextInfo[] = buildDefaultTextsByShape(shape);\n    return {\n        id,\n        type: 'geometry',\n        shape,\n        angle: 0,\n        opacity: 1,\n        texts: drawShapeTexts,\n        points,\n        ...options\n    };\n};\n\nexport const buildDefaultTextsByShape = (shape: GeometryShapes): DrawTextInfo[] => {\n    const memorizedLatest = getMemorizedLatestByPointer(shape);\n    const textProperties = { ...memorizedLatest.textProperties };\n    const alignment = textProperties?.align;\n    delete textProperties?.align;\n    const defaultTexts = (getDefaultGeometryProperty(shape) as any)?.texts || [];\n    const textKeys = getMultipleTextGeometryTextKeys(shape);\n    return (textKeys || []).map((textKey: string) => {\n        const text = defaultTexts?.find((item: { key: string }) => item?.key === textKey);\n        return {\n            id: textKey,\n            text: buildText(text?.text || '', alignment || text?.align || Alignment.center, textProperties)\n        };\n    });\n};\n\nexport const getHitMultipleGeometryText = (board: PlaitBoard, element: PlaitMultipleTextGeometry, point: Point) => {\n    const engine = getEngine<PlaitMultipleTextGeometry>(element.shape);\n    const rectangle = RectangleClient.getRectangleByPoints([point, point]);\n    let hitText;\n    if (engine.getTextRectangle) {\n        hitText = element.texts.find((text) => {\n            const textRectangle = engine.getTextRectangle!(board, element, { id: text.id });\n            return RectangleClient.isHit(rectangle, textRectangle);\n        });\n    }\n    return hitText;\n};\n","import { PlaitVectorLine } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { drawVectorLine } from '../utils';\n\nexport class VectorLineShapeGenerator extends Generator<PlaitVectorLine> {\n    canDraw(element: PlaitVectorLine): boolean {\n        return true;\n    }\n\n    draw(element: PlaitVectorLine) {\n        let lineG: SVGGElement | undefined;\n        lineG = drawVectorLine(this.board, element);\n        return lineG;\n    }\n}\n","import { PlaitBoard, Point, catmullRomFitting, createG, drawLinearPath, idCreator, setStrokeLinecap } from '@plait/core';\nimport { PlaitVectorLine, VectorLineShape } from '../interfaces';\nimport { getLineMemorizedLatest } from './memorize';\nimport { DefaultLineStyle } from '../constants/line';\nimport { alignPoint } from './arrow-line';\nimport { getStrokeWidthByElement } from './common';\nimport { getFillByElement, getStrokeColorByElement, getStrokeStyleByElement } from './style';\nimport { VectorLineShapeGenerator } from '../generators/vector-line-generator';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { getStrokeLineDash, StrokeStyle } from '@plait/common';\n\nexport const getVectorLinePoints = (board: PlaitBoard, element: PlaitVectorLine) => {\n    switch (element.shape) {\n        case VectorLineShape.straight: {\n            return element.points;\n        }\n        case VectorLineShape.curve: {\n            if (element.points.length === 2) {\n                return pointsOnBezierCurves(element.points) as Point[];\n            } else {\n                let dataPoints = element.points;\n                const points = catmullRomFitting(dataPoints);\n                return pointsOnBezierCurves(points) as Point[];\n            }\n        }\n        default:\n            return null;\n    }\n};\n\nexport const createVectorLineElement = (\n    shape: VectorLineShape,\n    points: Point[],\n    options?: Pick<PlaitVectorLine, 'strokeColor' | 'strokeWidth' | 'fill'>\n): PlaitVectorLine => {\n    return {\n        id: idCreator(),\n        type: 'vector-line',\n        shape,\n        opacity: 1,\n        points,\n        ...options\n    };\n};\n\nexport const vectorLineCreating = (\n    board: PlaitBoard,\n    lineShape: VectorLineShape,\n    points: Point[],\n    movingPoint: Point,\n    lineShapeG: SVGGElement\n) => {\n    const lineGenerator = new VectorLineShapeGenerator(board);\n    const memorizedLatest = getLineMemorizedLatest();\n\n    const temporaryLineElement = createVectorLineElement(lineShape, [...points, movingPoint], {\n        strokeWidth: DefaultLineStyle.strokeWidth,\n        ...memorizedLatest\n    });\n    const otherPoint = points[points.length - 1];\n    temporaryLineElement.points[temporaryLineElement.points.length - 1] = alignPoint(otherPoint, movingPoint);\n    lineGenerator.processDrawing(temporaryLineElement, lineShapeG);\n    PlaitBoard.getElementTopHost(board).append(lineShapeG);\n    return temporaryLineElement;\n};\n\nexport const drawVectorLine = (board: PlaitBoard, element: PlaitVectorLine) => {\n    const strokeWidth = getStrokeWidthByElement(element);\n    const strokeColor = getStrokeColorByElement(board, element);\n    const strokeStyle = getStrokeStyleByElement(board, element);\n    const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n    const fill = getFillByElement(board, element);\n    const options = { stroke: strokeColor, strokeWidth, strokeLineDash, fill };\n    const lineG = createG();\n    let points = getVectorLinePoints(board, element)!;\n    const line = drawLinearPath(points, options);\n    const id = idCreator();\n    line.setAttribute('mask', `url(#${id})`);\n    if (element.strokeStyle === StrokeStyle.dotted) {\n        setStrokeLinecap(line, 'round');\n    }\n    lineG.appendChild(line);\n    return lineG;\n};\n","import { getCrossingPointsBetweenPointAndSegment, isPointOnSegment } from '@plait/common';\nimport { Point } from '@plait/core';\n\nexport const getCenterPointsOnPolygon = (points: Point[]) => {\n    const centerPoints: Point[] = [];\n    for (let i = 0; i < points.length; i++) {\n        let j = i == points.length - 1 ? 0 : i + 1;\n        centerPoints.push([(points[i][0] + points[j][0]) / 2, (points[i][1] + points[j][1]) / 2]);\n    }\n    return centerPoints;\n};\n\nexport const getCrossingPointBetweenPointAndPolygon = (corners: Point[], point: Point) => {\n    const result: Point[] = [];\n    for (let index = 1; index <= corners.length; index++) {\n        let start = corners[index - 1];\n        let end = index === corners.length ? corners[0] : corners[index];\n        const crossingPoint = getCrossingPointsBetweenPointAndSegment(point, start, end);\n        result.push(...crossingPoint);\n    }\n    return result;\n};\n\nexport const getPolygonEdgeByConnectionPoint = (corners: Point[], point: Point) => {\n    for (let index = 1; index <= corners.length; index++) {\n        let start = corners[index - 1];\n        let end = index === corners.length ? corners[0] : corners[index];\n        if (isPointOnSegment(point, start, end)) {\n            return [start, end] as [Point, Point];\n        }\n    }\n    return null;\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    SVGArcCommand,\n    distanceBetweenPointAndPoint,\n    setPathStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { getNearestPointBetweenPointAndArc } from '@plait/core';\n\nexport function generateCloudPath(rectangle: RectangleClient): { startPoint: Point; arcCommands: SVGArcCommand[] } {\n    const divisionWidth = rectangle.width / 7;\n    const divisionHeight = rectangle.height / 3.2;\n    const xRadius = divisionWidth / 8.5;\n    const yRadius = divisionHeight / 20;\n\n    const startPoint = [rectangle.x + divisionWidth, rectangle.y + divisionHeight] as Point;\n\n    const arcCommands: SVGArcCommand[] = [\n        {\n            rx: xRadius,\n            ry: yRadius * 1.2,\n            xAxisRotation: 0,\n            largeArcFlag: 1,\n            sweepFlag: 1,\n            endX: rectangle.x + divisionWidth * 2,\n            endY: rectangle.y + divisionHeight / 2\n        },\n        {\n            rx: xRadius,\n            ry: yRadius,\n            xAxisRotation: 0,\n            largeArcFlag: 1,\n            sweepFlag: 1,\n            endX: rectangle.x + divisionWidth * 4.2,\n            endY: rectangle.y + divisionHeight / 2.2\n        },\n        {\n            rx: xRadius,\n            ry: yRadius,\n            xAxisRotation: 0,\n            largeArcFlag: 1,\n            sweepFlag: 1,\n            endX: rectangle.x + divisionWidth * 5.8,\n            endY: rectangle.y + divisionHeight\n        },\n        {\n            rx: xRadius,\n            ry: yRadius * 1.3,\n            xAxisRotation: 0,\n            largeArcFlag: 1,\n            sweepFlag: 1,\n            endX: rectangle.x + divisionWidth * 6,\n            endY: rectangle.y + divisionHeight * 2.2\n        },\n        {\n            rx: xRadius,\n            ry: yRadius * 1.2,\n            xAxisRotation: 0,\n            largeArcFlag: 1,\n            sweepFlag: 1,\n            endX: rectangle.x + divisionWidth * 5,\n            endY: rectangle.y + divisionHeight * 2.8\n        },\n        {\n            rx: xRadius,\n            ry: yRadius / 1.2,\n            xAxisRotation: 0,\n            largeArcFlag: 1,\n            sweepFlag: 1,\n            endX: rectangle.x + divisionWidth * 2.8,\n            endY: rectangle.y + divisionHeight * 2.8\n        },\n        {\n            rx: xRadius,\n            ry: yRadius,\n            xAxisRotation: 0,\n            largeArcFlag: 1,\n            sweepFlag: 1,\n            endX: rectangle.x + divisionWidth,\n            endY: rectangle.y + divisionHeight * 2.2\n        },\n        {\n            rx: xRadius,\n            ry: yRadius * 1.42,\n            xAxisRotation: 0,\n            largeArcFlag: 1,\n            sweepFlag: 1,\n            endX: rectangle.x + divisionWidth,\n            endY: rectangle.y + divisionHeight\n        }\n    ];\n\n    return { startPoint, arcCommands };\n}\n\nexport const CloudEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const { startPoint, arcCommands } = generateCloudPath(rectangle);\n\n        const pathData =\n            `M ${startPoint[0]} ${startPoint[1]} ` +\n            arcCommands\n                .map(\n                    (command) =>\n                        `A ${command.rx} ${command.ry} ${command.xAxisRotation} ${command.largeArcFlag} ${command.sweepFlag} ${command.endX} ${command.endY}`\n                )\n                .join('\\n') +\n            ' Z';\n\n        const svgElement = rs.path(pathData, { ...options, fillStyle: 'solid' });\n        setPathStrokeLinecap(svgElement, 'round');\n        return svgElement;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const { startPoint, arcCommands } = generateCloudPath(rectangle);\n        let minDistance = Infinity;\n        let nearestPoint = point;\n\n        let currentStart = startPoint;\n        for (const arcCommand of arcCommands) {\n            const arcNearestPoint = getNearestPointBetweenPointAndArc(point, currentStart, arcCommand);\n            const distance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);\n\n            if (distance < minDistance) {\n                minDistance = distance;\n                nearestPoint = arcNearestPoint;\n            }\n\n            currentStart = [arcCommand.endX, arcCommand.endY];\n        }\n\n        return nearestPoint;\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = CloudEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const widthRatio = 1 / 1.5;\n        const rectangle = RectangleClient.getRectangleByPoints(element.points);\n        const textRectangle = getCustomTextRectangle(board, element, widthRatio);\n        return textRectangle;\n    }\n};\n","import {\n    PlaitElement,\n    RectangleClient,\n    Selection,\n    PlaitBoard,\n    isLineHitRectangle,\n    Point,\n    distanceBetweenPointAndSegments,\n    distanceBetweenPointAndPoint,\n    HIT_DISTANCE_BUFFER,\n    rotateAntiPointsByElement,\n    isPointInPolygon,\n    rotatePointsByAngle,\n    createDebugGenerator,\n    getNearestPointBetweenPointAndArc,\n    getEllipseArcCenter\n} from '@plait/core';\nimport {\n    BasicShapes,\n    GeometryShapes,\n    PlaitArrowLine,\n    PlaitCommonGeometry,\n    PlaitCustomGeometry,\n    PlaitDrawElement,\n    PlaitGeometry,\n    PlaitShapeElement,\n    PlaitVectorLine\n} from '../interfaces';\nimport { getNearestPoint } from './geometry';\nimport { getArrowLinePoints } from './arrow-line/arrow-line-basic';\nimport { getFillByElement } from './style/stroke';\nimport { getEngine } from '../engines';\nimport { getElementShape } from './shape';\nimport { getHitArrowLineTextIndex } from './position/arrow-line';\nimport { getTextRectangle, isClosedCustomGeometry, isClosedDrawElement, isClosedPoints, isDrawElementIncludeText } from './common';\nimport { isMultipleTextGeometry } from './multi-text-geometry';\nimport { getFirstTextEditor, isFilled, sortElementsByArea } from '@plait/common';\nimport { getVectorLinePoints } from './vector-line';\nimport { Editor, Element } from 'slate';\nimport { generateCloudPath } from '../engines/basic-shapes/cloud';\n\nexport const isHitArrowLineText = (board: PlaitBoard, element: PlaitArrowLine, point: Point) => {\n    return getHitArrowLineTextIndex(board, element, point) !== -1;\n};\n\nexport const isHitPolyLine = (pathPoints: Point[], point: Point) => {\n    const distance = distanceBetweenPointAndSegments(point, pathPoints);\n    return distance <= HIT_DISTANCE_BUFFER;\n};\n\nexport const isHitArrowLine = (board: PlaitBoard, element: PlaitArrowLine, point: Point) => {\n    const points = getArrowLinePoints(board, element);\n    const isHitText = isHitArrowLineText(board, element as PlaitArrowLine, point);\n    return isHitText || isHitPolyLine(points, point);\n};\n\nexport const isHitVectorLine = (board: PlaitBoard, element: PlaitVectorLine, point: Point) => {\n    const points = getVectorLinePoints(board, element)!;\n    if (isClosedPoints(element.points)) {\n        return isPointInPolygon(point, points) || isHitPolyLine(points, point);\n    } else {\n        return isHitPolyLine(points, point);\n    }\n};\n\nexport const isRectangleHitElementText = (board: PlaitBoard, element: PlaitCommonGeometry, rectangle: RectangleClient) => {\n    const engine = getEngine<PlaitCommonGeometry>(element.shape);\n    if (isMultipleTextGeometry(element)) {\n        const texts = element.texts;\n        return texts.some((item) => {\n            const textClient = engine.getTextRectangle!(board, element, { id: item.id });\n            return isRectangleHitRotatedPoints(rectangle, RectangleClient.getCornerPoints(textClient), element.angle);\n        });\n    } else {\n        const textClient = engine.getTextRectangle ? engine.getTextRectangle(board, element) : getTextRectangle(board, element);\n        return isRectangleHitRotatedPoints(rectangle, RectangleClient.getCornerPoints(textClient), element.angle);\n    }\n};\n\nexport const isHitElementText = (board: PlaitBoard, element: PlaitCommonGeometry, point: Point) => {\n    const engine = getEngine<PlaitCommonGeometry>(element.shape);\n    if (isMultipleTextGeometry(element)) {\n        const texts = element.texts;\n        return texts.some((item) => {\n            const textClient = engine.getTextRectangle!(board, element, { id: item.id });\n            return RectangleClient.isPointInRectangle(textClient, point);\n        });\n    } else {\n        const textClient = engine.getTextRectangle ? engine.getTextRectangle(board, element) : getTextRectangle(board, element);\n        return RectangleClient.isPointInRectangle(textClient, point);\n    }\n};\n\nexport const isEmptyTextElement = (element: PlaitCommonGeometry) => {\n    if (!isDrawElementIncludeText(element)) {\n        return true;\n    }\n    const editor = getFirstTextEditor(element);\n    return Editor.isEmpty(editor, editor.children[0] as Element);\n};\n\nexport const isRectangleHitDrawElement = (board: PlaitBoard, element: PlaitElement, selection: Selection) => {\n    const rangeRectangle = RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]);\n    if (PlaitDrawElement.isGeometry(element)) {\n        const isHitElement = isRectangleHitRotatedElement(board, rangeRectangle, element);\n        if (isHitElement) {\n            return isHitElement;\n        }\n        return !isEmptyTextElement(element) && isRectangleHitElementText(board, element, rangeRectangle);\n    }\n\n    if (PlaitDrawElement.isImage(element)) {\n        return isRectangleHitRotatedElement(board, rangeRectangle, element);\n    }\n\n    if (PlaitDrawElement.isArrowLine(element)) {\n        const points = getArrowLinePoints(board, element);\n        return isLineHitRectangle(points, rangeRectangle);\n    }\n\n    if (PlaitDrawElement.isVectorLine(element)) {\n        const points = getVectorLinePoints(board, element)!;\n        return isLineHitRectangle(points, rangeRectangle);\n    }\n\n    return null;\n};\n\nexport const isRectangleHitRotatedElement = (\n    board: PlaitBoard,\n    rectangle: RectangleClient,\n    element: PlaitElement & { points: Point[] }\n) => {\n    const client = RectangleClient.getRectangleByPoints(element.points);\n    return isRectangleHitRotatedPoints(rectangle, RectangleClient.getCornerPoints(client), element.angle);\n};\n\nexport const isRectangleHitRotatedPoints = (rectangle: RectangleClient, points: Point[], angle: number | undefined) => {\n    let rotatedPoints = rotatePointsByAngle(points, angle) || points;\n    return isLineHitRectangle(rotatedPoints, rectangle);\n};\n\nexport const getHitDrawElement = (board: PlaitBoard, elements: (PlaitDrawElement | PlaitCustomGeometry)[], hitPoint: Point) => {\n    let firstFilledElement = getFirstFilledDrawElement(board, elements);\n    let endIndex = elements.length;\n    if (firstFilledElement) {\n        endIndex = elements.indexOf(firstFilledElement) + 1;\n    }\n    const newElements = elements.slice(0, endIndex);\n    const solidElements = getSolidElements(newElements);\n    if (solidElements) {\n        return solidElements[0];\n    }\n    const sortElements = sortElementsByArea(board, newElements, 'asc');\n    return sortElements[0];\n};\n\nexport const getFirstFilledDrawElement = (board: PlaitBoard, elements: (PlaitDrawElement | PlaitCustomGeometry)[]) => {\n    let filledElement: PlaitGeometry | PlaitCustomGeometry | null = null;\n    for (let i = 0; i < elements.length; i++) {\n        const element = elements[i];\n        if (isClosedCustomGeometry(board, element) || isClosedDrawElement(element)) {\n            const fill = getFillByElement(board, element);\n            if (isFilled(fill)) {\n                filledElement = element as PlaitGeometry;\n                break;\n            }\n        }\n    }\n    return filledElement;\n};\n\nexport const isFilledDrawElement = (board: PlaitBoard, element: PlaitDrawElement | PlaitCustomGeometry) => {\n    return getFirstFilledDrawElement(board, [element]) !== null;\n};\n\nexport const getSolidElements = (elements: PlaitElement[]) => {\n    const solidElements = elements.filter(\n        (item) => PlaitDrawElement.isText(item) || PlaitDrawElement.isLine(item) || PlaitDrawElement.isImage(item)\n    );\n    if (solidElements.length) {\n        return solidElements;\n    }\n    return null;\n};\n\nconst debugKey = 'debug:plait:hit:shape:edge:sample-points';\nconst debugGenerator = createDebugGenerator(debugKey);\nconst shapes: GeometryShapes[] = [BasicShapes.cloud];\n\nexport const isHitDrawElement = (board: PlaitBoard, element: PlaitElement, point: Point, isStrict: boolean = true) => {\n    const rectangle = board.getRectangle(element);\n    point = rotateAntiPointsByElement(board, point, element) || point;\n    if (PlaitDrawElement.isGeometry(element) && rectangle) {\n        if (debugGenerator.isDebug() && shapes.includes(element.shape)) {\n            debugGenerator.clear();\n            const { startPoint, arcCommands } = generateCloudPath(rectangle);\n            const points = [startPoint, ...arcCommands.map((arc) => [arc.endX, arc.endY])] as Point[];\n            debugGenerator.drawCircles(board, points, 5, false);\n            let minDistance = Infinity;\n            let nearestPoint = point;\n            let currentStart = startPoint;\n            for (const arc of arcCommands) {\n                const arcNearestPoint = getNearestPointBetweenPointAndArc(point, currentStart, arc);\n                const distance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);\n                const { center } = getEllipseArcCenter(currentStart, arc);\n                debugGenerator.drawCircles(board, [center], 8, false, { fill: 'yellow' });\n                if (distance < minDistance) {\n                    minDistance = distance;\n                    nearestPoint = arcNearestPoint;\n                }\n                currentStart = [arc.endX, arc.endY];\n            }\n            debugGenerator.drawCircles(board, [point], 12, false, { fill: 'black', stroke: 'black' });\n            debugGenerator.drawCircles(board, [nearestPoint], 12, false, { fill: 'green', stroke: 'green' });\n        }\n        if (isHitEdgeOfShape(board, element, point, HIT_DISTANCE_BUFFER)) {\n            return true;\n        }\n        const engine = getEngine(getElementShape(element));\n        if (PlaitDrawElement.isText(element)) {\n            const textClient = getTextRectangle(board, element);\n            return RectangleClient.isPointInRectangle(textClient, point);\n        }\n        if (!!isStrict && isEmptyTextElement(element) && !isFilledDrawElement(board, element)) {\n            return false;\n        }\n        const isHitText = isHitElementText(board, element, point);\n        return isHitText || engine.isInsidePoint(rectangle!, point);\n    }\n    if (PlaitDrawElement.isImage(element)) {\n        const client = RectangleClient.getRectangleByPoints(element.points);\n        return RectangleClient.isPointInRectangle(client, point);\n    }\n    if (PlaitDrawElement.isArrowLine(element)) {\n        return isHitArrowLine(board, element, point);\n    }\n\n    if (PlaitDrawElement.isVectorLine(element)) {\n        return isHitVectorLine(board, element, point);\n    }\n    return null;\n};\n\nexport const isHitEdgeOfShape = (board: PlaitBoard, element: PlaitShapeElement, point: Point, hitDistanceBuffer: number) => {\n    const nearestPoint = getNearestPoint(element, point);\n    const distance = distanceBetweenPointAndPoint(nearestPoint[0], nearestPoint[1], point[0], point[1]);\n    return distance <= hitDistanceBuffer;\n};\n\nexport const isInsideOfShape = (board: PlaitBoard, element: PlaitShapeElement, point: Point, hitDistanceBuffer: number) => {\n    const client = RectangleClient.inflate(RectangleClient.getRectangleByPoints(element.points), hitDistanceBuffer);\n    return getEngine(getElementShape(element)).isInsidePoint(client, point);\n};\n\nexport const isHitElementInside = (board: PlaitBoard, element: PlaitElement, point: Point) => {\n    const rectangle = board.getRectangle(element);\n    point = rotateAntiPointsByElement(board, point, element) || point;\n    if (PlaitDrawElement.isGeometry(element) && !PlaitDrawElement.isGeometryByTable(element)) {\n        const engine = getEngine(getElementShape(element));\n        const isHitInside = engine.isInsidePoint(rectangle!, point);\n        if (isHitInside) {\n            return isHitInside;\n        }\n        if (engine.getTextRectangle) {\n            const isHitText = isHitElementText(board, element, point);\n            if (isHitText) {\n                return isHitText;\n            }\n        }\n    }\n    if (PlaitDrawElement.isImage(element)) {\n        const client = RectangleClient.getRectangleByPoints(element.points);\n        return RectangleClient.isPointInRectangle(client, point);\n    }\n\n    if (PlaitDrawElement.isArrowLine(element)) {\n        return isHitArrowLine(board, element, point);\n    }\n\n    if (PlaitDrawElement.isVectorLine(element)) {\n        return isHitVectorLine(board, element, point);\n    }\n\n    return null;\n};\n","import {\n    ACTIVE_STROKE_WIDTH,\n    addSelectedElement,\n    Ancestor,\n    BoardTransforms,\n    clearSelectedElement,\n    createG,\n    depthFirstRecursion,\n    drawCircle,\n    getI18nValue,\n    getIsRecursionFunc,\n    PlaitBoard,\n    PlaitElement,\n    PlaitPointerType,\n    Point,\n    RectangleClient,\n    rotateAntiPointsByElement,\n    SELECTION_BORDER_COLOR,\n    SELECTION_FILL_COLOR,\n    SNAPPING_STROKE_WIDTH,\n    Transforms\n} from '@plait/core';\nimport {\n    DefaultDrawStyle,\n    DefaultTextProperty,\n    DrawI18nKey,\n    GeometryThreshold,\n    LINE_HIT_GEOMETRY_BUFFER,\n    LINE_SNAPPING_BUFFER,\n    ShapeDefaultSpace\n} from '../constants';\nimport {\n    DrawOptions,\n    DrawShapes,\n    GeometryCommonTextKeys,\n    PlaitBaseGeometry,\n    PlaitCommonGeometry,\n    PlaitCustomGeometry,\n    PlaitDrawElement,\n    PlaitGeometry,\n    PlaitShapeElement\n} from '../interfaces';\nimport { Alignment, getTextEditorsByElement } from '@plait/common';\nimport { isCellIncludeText } from './table';\nimport { getEngine } from '../engines';\nimport { getElementShape } from './shape';\nimport { Options } from 'roughjs/bin/core';\nimport { PlaitBaseTable } from '../interfaces/table';\nimport { memorizeLatestShape } from './memorize';\nimport { isHitEdgeOfShape, isInsideOfShape } from './hit';\nimport { getHitConnectorPoint } from './arrow-line';\nimport { getNearestPoint, isGeometryClosed, isGeometryIncludeText, isSingleTextGeometry } from './geometry';\nimport { isMultipleTextGeometry } from './multi-text-geometry';\nimport { DrawTextInfo } from '../generators/text.generator';\nimport { getTextSize } from './text-size';\n\nexport const getTextRectangle = <T extends PlaitElement = PlaitGeometry>(board: PlaitBoard, element: T) => {\n    const isAutoSize = PlaitDrawElement.isText(element) ? element.autoSize : false;\n    const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n    const strokeWidth = getStrokeWidthByElement(element);\n    const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n    const textSize = getTextSize(board, element.text, isAutoSize ? GeometryThreshold.defaultTextMaxWidth : width);\n    if (isAutoSize) {\n        return {\n            height: textSize.height,\n            width: textSize.width,\n            x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n            y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n        };\n    }\n    return {\n        height: textSize.height,\n        width: width > 0 ? width : 0,\n        x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n        y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n    };\n};\n\nexport const getCustomTextRectangle = <T extends PlaitElement = PlaitGeometry>(board: PlaitBoard, element: T, widthRatio: number) => {\n    const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n    const width = widthRatio * elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - getStrokeWidthByElement(element) * 2;\n    const textSize = getTextSize(board, element.text!, width);\n    return {\n        height: textSize.height,\n        width: width,\n        x: elementRectangle.x + (elementRectangle.width - width) / 2,\n        y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n    };\n};\n\nexport const getStrokeWidthByElement = (element: PlaitElement) => {\n    if (PlaitDrawElement.isText(element)) {\n        return 0;\n    }\n    const strokeWidth = element.strokeWidth || DefaultDrawStyle.strokeWidth;\n    return strokeWidth;\n};\n\nexport const insertElement = (board: PlaitBoard, element: PlaitBaseGeometry | PlaitBaseTable) => {\n    memorizeLatestShape(board, element.shape);\n    Transforms.insertNode(board, element, [board.children.length]);\n    clearSelectedElement(board);\n    addSelectedElement(board, element);\n    BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n};\n\nexport const isDrawElementIncludeText = (element: PlaitDrawElement) => {\n    if (PlaitDrawElement.isText(element)) {\n        return true;\n    }\n    if (PlaitDrawElement.isImage(element)) {\n        return false;\n    }\n    if (PlaitDrawElement.isGeometry(element)) {\n        return isGeometryIncludeText(element);\n    }\n    if (PlaitDrawElement.isArrowLine(element)) {\n        const editors = getTextEditorsByElement(element);\n        return editors.length > 0;\n    }\n    if (PlaitDrawElement.isElementByTable(element)) {\n        return element.cells.some((cell) => isCellIncludeText(cell));\n    }\n    return true;\n};\n\nexport const isDrawElementsIncludeText = (elements: PlaitDrawElement[]) => {\n    return elements.some((item) => {\n        return isDrawElementIncludeText(item);\n    });\n};\n\nexport const isClosedDrawElement = (element: PlaitElement) => {\n    if (PlaitDrawElement.isDrawElement(element)) {\n        if (PlaitDrawElement.isText(element) || PlaitDrawElement.isArrowLine(element) || PlaitDrawElement.isImage(element)) {\n            return false;\n        }\n        if (PlaitDrawElement.isVectorLine(element)) {\n            return isClosedPoints(element.points);\n        }\n        if (PlaitDrawElement.isGeometry(element)) {\n            return isGeometryClosed(element);\n        }\n        return true;\n    }\n    return false;\n};\n\nexport const isClosedCustomGeometry = (board: PlaitBoard, value: PlaitElement): value is PlaitCustomGeometry => {\n    return PlaitDrawElement.isCustomGeometryElement(board, value) && isClosedPoints(value.points);\n};\n\nexport const getSnappingShape = (board: PlaitBoard, point: Point): PlaitShapeElement | null => {\n    let hitElement: PlaitShapeElement | null = getHitShape(board, point);\n    if (hitElement) {\n        const ref = getSnappingRef(board, hitElement, point);\n        if (ref.isHitConnector || ref.isHitEdge) {\n            return hitElement;\n        }\n    }\n    return null;\n};\n\nexport const getSnappingRef = (board: PlaitBoard, hitElement: PlaitShapeElement, point: Point) => {\n    const rotatedPoint = rotateAntiPointsByElement(board, point, hitElement) || point;\n    const connectorPoint = getHitConnectorPoint(rotatedPoint, hitElement);\n    const edgePoint = getNearestPoint(hitElement, rotatedPoint);\n    const isHitEdge = isHitEdgeOfShape(board, hitElement, rotatedPoint, LINE_SNAPPING_BUFFER);\n    return { isHitEdge, isHitConnector: !!connectorPoint, connectorPoint, edgePoint };\n};\n\nexport const getHitShape = (board: PlaitBoard, point: Point, offset = LINE_HIT_GEOMETRY_BUFFER): PlaitShapeElement | null => {\n    let hitShape: PlaitShapeElement | null = null;\n    traverseDrawShapes(board, (element: PlaitShapeElement) => {\n        if (hitShape === null && isInsideOfShape(board, element, rotateAntiPointsByElement(board, point, element) || point, offset * 2)) {\n            hitShape = element;\n        }\n    });\n    return hitShape;\n};\n\nexport const traverseDrawShapes = (board: PlaitBoard, callback: (element: PlaitShapeElement) => void) => {\n    depthFirstRecursion<Ancestor>(\n        board,\n        (node) => {\n            if (!PlaitBoard.isBoard(node) && PlaitDrawElement.isShapeElement(node)) {\n                callback(node);\n            }\n        },\n        getIsRecursionFunc(board),\n        true\n    );\n};\n\nexport const drawShape = (\n    board: PlaitBoard,\n    outerRectangle: RectangleClient,\n    shape: DrawShapes,\n    roughOptions: Options,\n    drawOptions?: DrawOptions\n) => {\n    return getEngine(shape).draw(board, outerRectangle, roughOptions, drawOptions);\n};\n\nexport const drawBoundReaction = (\n    board: PlaitBoard,\n    element: PlaitShapeElement,\n    roughOptions: { hasMask: boolean; hasConnector: boolean } = { hasMask: true, hasConnector: true }\n) => {\n    const g = createG();\n    const rectangle = RectangleClient.getRectangleByPoints(element.points);\n    const activeRectangle = RectangleClient.inflate(rectangle, SNAPPING_STROKE_WIDTH);\n    const shape = getElementShape(element);\n    let drawOptions: DrawOptions | undefined;\n    if (PlaitDrawElement.isElementByTable(element)) {\n        drawOptions = { element };\n    }\n    const strokeG = drawShape(\n        board,\n        activeRectangle,\n        shape,\n        {\n            stroke: SELECTION_BORDER_COLOR,\n            strokeWidth: SNAPPING_STROKE_WIDTH\n        },\n        drawOptions\n    );\n    g.appendChild(strokeG);\n\n    if (roughOptions.hasMask) {\n        const maskG = drawShape(\n            board,\n            activeRectangle,\n            shape,\n            {\n                stroke: SELECTION_BORDER_COLOR,\n                strokeWidth: 0,\n                fill: isClosedDrawElement(element) ? SELECTION_FILL_COLOR : DefaultDrawStyle.fill,\n                fillStyle: 'solid'\n            },\n            drawOptions\n        );\n        g.appendChild(maskG);\n    }\n    if (roughOptions.hasConnector) {\n        const connectorPoints = getEngine(shape).getConnectorPoints(rectangle);\n        connectorPoints.forEach((point) => {\n            const circleG = drawCircle(PlaitBoard.getRoughSVG(board), point, 8, {\n                stroke: SELECTION_BORDER_COLOR,\n                strokeWidth: ACTIVE_STROKE_WIDTH,\n                fill: '#FFF',\n                fillStyle: 'solid'\n            });\n            g.appendChild(circleG);\n        });\n    }\n    return g;\n};\n\nexport const getTextKey = (element: PlaitElement | undefined, text: Pick<DrawTextInfo, 'id'>) => {\n    if (element && isMultipleTextGeometry(element)) {\n        return `${element.id}-${text.id}`;\n    } else {\n        return text.id;\n    }\n};\n\nexport const getGeometryAlign = (board: PlaitBoard, element: PlaitCommonGeometry | PlaitBaseTable) => {\n    if (isMultipleTextGeometry(element)) {\n        const drawShapeText = element.texts.find((item) => item.id.includes(GeometryCommonTextKeys.content));\n        return drawShapeText?.text.align || Alignment.center;\n    }\n    if (isSingleTextGeometry(element as PlaitCommonGeometry)) {\n        return (element as PlaitGeometry).text?.align || Alignment.center;\n    }\n\n    if (PlaitDrawElement.isElementByTable(element)) {\n        const firstTextCell = element.cells.find((item) => item.text);\n        return firstTextCell?.text?.align || Alignment.center;\n    }\n    return Alignment.center;\n};\n\nexport const isClosedPoints = (points: Point[]) => {\n    const startPoint = points[0];\n    const endPoint = points[points.length - 1];\n    return startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1];\n};\n\nexport const getDefaultGeometryText = (board: PlaitBoard) => {\n    return getI18nValue(board, DrawI18nKey.geometryText, DefaultTextProperty.text);\n};\n","import { PlaitDrawElement } from '../../interfaces';\nimport { DefaultDrawStyle } from '../../constants';\nimport { PlaitBoard, PlaitElement } from '@plait/core';\nimport { getDrawDefaultStrokeColor, getFlowchartDefaultFill } from '../geometry';\nimport { isClosedDrawElement } from '../common';\nimport { StrokeStyle, TRANSPARENT } from '@plait/common';\n\nexport const getStrokeColorByElement = (board: PlaitBoard, element: PlaitElement) => {\n    const defaultColor = getDrawDefaultStrokeColor(board.theme.themeColorMode);\n    const strokeColor = element.strokeColor || defaultColor;\n    return strokeColor;\n};\n\nexport const getFillByElement = (board: PlaitBoard, element: PlaitElement) => {\n    const defaultFill =\n        PlaitDrawElement.isFlowchart(element) && isClosedDrawElement(element as PlaitDrawElement)\n            ? getFlowchartDefaultFill(board.theme.themeColorMode)\n            : DefaultDrawStyle.fill;\n    const currentFill =\n        element.fill && (element.fill === TRANSPARENT || element.fill === TRANSPARENT.toUpperCase()) ? DefaultDrawStyle.fill : element.fill;\n    const fill = currentFill || defaultFill;\n    return fill;\n};\n\nexport const getStrokeStyleByElement = (board: PlaitBoard, element: PlaitElement) => {\n    return element.strokeStyle || StrokeStyle.solid;\n};\n","import { BasicShapes, PlaitGeometry } from '../interfaces';\nimport { Generator, getStrokeLineDash } from '@plait/common';\nimport { getFillByElement, getStrokeColorByElement, getStrokeStyleByElement } from '../utils/style/stroke';\nimport { drawGeometry, getStrokeWidthByElement } from '../utils';\nimport { RectangleClient } from '@plait/core';\n\nexport interface ShapeData {}\n\nexport class GeometryShapeGenerator extends Generator<PlaitGeometry, ShapeData> {\n    canDraw(element: PlaitGeometry, data: ShapeData): boolean {\n        return true;\n    }\n\n    draw(element: PlaitGeometry, data: ShapeData) {\n        const rectangle = RectangleClient.getRectangleByPoints(element.points);\n        const shape = element.shape;\n        if (shape === BasicShapes.text) {\n            return;\n        }\n        const fill = getFillByElement(this.board, element);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const strokeColor = getStrokeColorByElement(this.board, element);\n        const strokeStyle = getStrokeStyleByElement(this.board, element);\n        const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n        return drawGeometry(this.board, RectangleClient.inflate(rectangle, -strokeWidth), shape, {\n            stroke: strokeColor,\n            strokeWidth,\n            fill,\n            strokeLineDash\n        });\n    }\n}\n","import { PlaitBoard, Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { PlaitLine } from '../interfaces/line';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement, PlaitVectorLine } from '../interfaces';\nimport {\n    getCurvePoints,\n    getElbowLineRouteOptions,\n    getElbowPoints,\n    getNextSourceAndTargetPoints,\n    isUseDefaultOrthogonalRoute\n} from './arrow-line';\nimport { getVectorLinePoints } from './vector-line';\n\nexport function getMiddlePoints(board: PlaitBoard, element: PlaitLine) {\n    const result: Point[] = [];\n    const shape = element.shape;\n    const hideBuffer = 10;\n    if (shape === ArrowLineShape.straight) {\n        const points = PlaitDrawElement.isArrowLine(element)\n            ? PlaitArrowLine.getPoints(board, element)\n            : (element as PlaitVectorLine).points;\n        for (let i = 0; i < points.length - 1; i++) {\n            const distance = distanceBetweenPointAndPoint(...points[i], ...points[i + 1]);\n            if (distance < hideBuffer) continue;\n            result.push([(points[i][0] + points[i + 1][0]) / 2, (points[i][1] + points[i + 1][1]) / 2]);\n        }\n    }\n    if (shape === ArrowLineShape.curve) {\n        const points = PlaitDrawElement.isArrowLine(element)\n            ? PlaitArrowLine.getPoints(board, element)\n            : (element as PlaitVectorLine).points;\n        const pointsOnBezier = PlaitDrawElement.isArrowLine(element)\n            ? getCurvePoints(board, element)\n            : getVectorLinePoints(board, element)!;\n        if (points.length === 2) {\n            const start = 0;\n            const endIndex = pointsOnBezier.length - 1;\n            const middleIndex = Math.round((start + endIndex) / 2);\n            result.push(pointsOnBezier[middleIndex]);\n        } else {\n            for (let i = 0; i < points.length - 1; i++) {\n                const startIndex = pointsOnBezier.findIndex((point) => point[0] === points[i][0] && point[1] === points[i][1]);\n                const endIndex = pointsOnBezier.findIndex((point) => point[0] === points[i + 1][0] && point[1] === points[i + 1][1]);\n                const middleIndex = Math.round((startIndex + endIndex) / 2);\n                const distance = distanceBetweenPointAndPoint(...points[i], ...points[i + 1]);\n                if (distance < hideBuffer) continue;\n                result.push(pointsOnBezier[middleIndex]);\n            }\n        }\n    }\n    if (shape === ArrowLineShape.elbow) {\n        const renderPoints = getElbowPoints(board, element);\n        const options = getElbowLineRouteOptions(board, element);\n        if (!isUseDefaultOrthogonalRoute(element, options)) {\n            const [nextSourcePoint, nextTargetPoint] = getNextSourceAndTargetPoints(board, element);\n            for (let i = 0; i < renderPoints.length - 1; i++) {\n                if (\n                    (i == 0 && Point.isEquals(renderPoints[i + 1], nextSourcePoint)) ||\n                    (i === renderPoints.length - 2 && Point.isEquals(renderPoints[renderPoints.length - 2], nextTargetPoint))\n                ) {\n                    continue;\n                }\n                const [currentX, currentY] = renderPoints[i];\n                const [nextX, nextY] = renderPoints[i + 1];\n                const middlePoint = [(currentX + nextX) / 2, (currentY + nextY) / 2] as Point;\n                result.push(middlePoint);\n            }\n        }\n    }\n    return result;\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement } from '../../interfaces';\nimport { RESIZE_HANDLE_DIAMETER } from '@plait/common';\nimport { PlaitLine } from '../../interfaces/line';\nimport { getMiddlePoints } from '../line';\n\nexport enum LineResizeHandle {\n    'source' = 'source',\n    'target' = 'target',\n    'addHandle' = 'addHandle'\n}\n\nexport const getHitLineResizeHandleRef = (board: PlaitBoard, element: PlaitLine, point: Point) => {\n    let dataPoints = PlaitDrawElement.isArrowLine(element) ? PlaitArrowLine.getPoints(board, element) : element.points;\n    const index = getHitPointIndex(dataPoints, point);\n    if (index !== -1) {\n        const handleIndex = index;\n        if (index === 0) {\n            return { handle: LineResizeHandle.source, handleIndex };\n        }\n        if (index === dataPoints.length - 1) {\n            return { handle: LineResizeHandle.target, handleIndex };\n        }\n        // elbow line, data points only verify source connection point and target connection point\n        if (element.shape !== ArrowLineShape.elbow) {\n            return { handleIndex };\n        }\n    }\n    const middlePoints = getMiddlePoints(board, element);\n    const indexOfMiddlePoints = getHitPointIndex(middlePoints, point);\n    if (indexOfMiddlePoints !== -1) {\n        return {\n            handle: LineResizeHandle.addHandle,\n            handleIndex: indexOfMiddlePoints\n        };\n    }\n    return undefined;\n};\n\nexport function getHitPointIndex(points: Point[], movingPoint: Point) {\n    const rectangles = points.map((point) => {\n        return {\n            x: point[0] - RESIZE_HANDLE_DIAMETER / 2,\n            y: point[1] - RESIZE_HANDLE_DIAMETER / 2,\n            width: RESIZE_HANDLE_DIAMETER,\n            height: RESIZE_HANDLE_DIAMETER\n        };\n    });\n    const rectangle = rectangles.find((rectangle) => {\n        return RectangleClient.isHit(RectangleClient.getRectangleByPoints([movingPoint, movingPoint]), rectangle);\n    });\n    return rectangle ? rectangles.indexOf(rectangle) : -1;\n}\n","import {\n    PlaitBoard,\n    Point,\n    SELECTION_RECTANGLE_CLASS_NAME,\n    createG,\n    drawRectangle,\n    getSelectedElements,\n    toActivePointFromViewBoxPoint,\n    toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement } from '../interfaces';\nimport { Generator, PRIMARY_COLOR, drawFillPrimaryHandle, drawPrimaryHandle } from '@plait/common';\nimport { getMiddlePoints } from '../utils/line';\nimport { getNextRenderPoints } from '../utils/arrow-line/elbow';\nimport { isUpdatedHandleIndex } from '../utils/arrow-line';\nimport { getHitPointIndex } from '../utils/position/line';\nimport { DefaultDrawActiveStyle } from '../constants';\nimport { PlaitLine } from '../interfaces/line';\n\nexport interface ActiveData {\n    selected: boolean;\n    linePoints: Point[];\n}\n\nexport class LineActiveGenerator extends Generator<PlaitLine, ActiveData> {\n    onlySelectedCurrentLine = false;\n\n    constructor(protected board: PlaitBoard, options: { active: boolean } = { active: true }) {\n        super(board, options);\n    }\n\n    canDraw(element: PlaitLine, data: ActiveData): boolean {\n        if (data.selected) {\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    draw(element: PlaitLine, data: ActiveData): SVGGElement {\n        const activeG = createG();\n        const selectedElements = getSelectedElements(this.board);\n        this.onlySelectedCurrentLine = selectedElements.length === 1;\n        if (this.onlySelectedCurrentLine) {\n            activeG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n            const points = PlaitDrawElement.isArrowLine(element) ? PlaitArrowLine.getPoints(this.board, element) : element.points;\n            let updatePoints = [...points];\n            let elbowNextRenderPoints: Point[] = [];\n            if (element.shape === ArrowLineShape.elbow) {\n                updatePoints = points.slice(0, 1).concat(points.slice(-1));\n                elbowNextRenderPoints = getNextRenderPoints(this.board, element, data.linePoints);\n            }\n            const activePoints = updatePoints.map((point) => toActivePointFromViewBoxPoint(this.board, point));\n            activePoints.forEach((point) => {\n                const updateHandle = drawPrimaryHandle(this.board, point);\n                activeG.appendChild(updateHandle);\n            });\n            const middlePoints = getMiddlePoints(this.board, element);\n            const activeMiddlePoints = middlePoints.map((point) => toActivePointFromViewBoxPoint(this.board, point));\n            if (!PlaitBoard.hasBeenTextEditing(this.board)) {\n                for (let i = 0; i < activeMiddlePoints.length; i++) {\n                    const point = activeMiddlePoints[i];\n                    if (element.shape === ArrowLineShape.elbow && elbowNextRenderPoints.length) {\n                        const handleIndex = getHitPointIndex(activeMiddlePoints, point);\n                        const isUpdateHandleIndex = isUpdatedHandleIndex(\n                            this.board,\n                            element,\n                            [...points],\n                            elbowNextRenderPoints,\n                            handleIndex\n                        );\n                        if (isUpdateHandleIndex) {\n                            const updateHandle = drawPrimaryHandle(this.board, point);\n                            activeG.appendChild(updateHandle);\n                            continue;\n                        }\n                    }\n                    const circle = drawFillPrimaryHandle(this.board, point);\n                    activeG.appendChild(circle);\n                }\n            }\n        } else {\n            const rectangle = this.board.getRectangle(element);\n            if (rectangle) {\n                const activeRectangle = toActiveRectangleFromViewBoxRectangle(this.board, rectangle);\n                let opacity = '0.5';\n                if (activeRectangle.height === 0 || activeRectangle.width === 0) {\n                    opacity = '0.8';\n                }\n                const strokeG = drawRectangle(this.board, activeRectangle, {\n                    stroke: PRIMARY_COLOR,\n                    strokeWidth: DefaultDrawActiveStyle.selectionStrokeWidth\n                });\n                strokeG.style.opacity = opacity;\n                activeG.appendChild(strokeG);\n            }\n        }\n        return activeG;\n    }\n\n    needUpdate() {\n        const selectedElements = getSelectedElements(this.board);\n        const onlySelectedCurrentLine = selectedElements.length === 1;\n        return onlySelectedCurrentLine !== this.onlySelectedCurrentLine;\n    }\n}\n","import { PlaitBoard, rgbaToHEX, createG, drawCircle, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { PlaitGeometry, PlaitShapeElement } from '../interfaces';\nimport { ActiveGeneratorExtraData, Generator, PRIMARY_COLOR } from '@plait/common';\nimport { getAutoCompletePoints } from '../utils';\nimport { LINE_AUTO_COMPLETE_DIAMETER, LINE_AUTO_COMPLETE_OPACITY } from '../constants/line';\n\nexport class ArrowLineAutoCompleteGenerator<T extends PlaitShapeElement = PlaitGeometry> extends Generator<T, ActiveGeneratorExtraData> {\n    static key = 'line-auto-complete-generator';\n\n    autoCompleteG!: SVGGElement;\n    hoverElement: SVGGElement | null = null;\n\n    constructor(public board: PlaitBoard) {\n        super(board, { active: true });\n    }\n\n    canDraw(element: PlaitShapeElement, data: ActiveGeneratorExtraData): boolean {\n        const selectedElements = getSelectedElements(this.board);\n        if (data.selected && selectedElements.length === 1 && !isSelectionMoving(this.board)) {\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    draw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n        this.autoCompleteG = createG();\n        const middlePoints = getAutoCompletePoints(this.board, element, true);\n        middlePoints.forEach((point, index) => {\n            const circle = drawCircle(PlaitBoard.getRoughSVG(this.board), point, LINE_AUTO_COMPLETE_DIAMETER, {\n                stroke: 'none',\n                fill: rgbaToHEX(PRIMARY_COLOR, LINE_AUTO_COMPLETE_OPACITY),\n                fillStyle: 'solid'\n            });\n            circle.classList.add(`line-auto-complete-${index}`);\n            this.autoCompleteG.appendChild(circle);\n        });\n        return this.autoCompleteG;\n    }\n\n    removeAutoCompleteG(index: number) {\n        this.hoverElement = this.autoCompleteG.querySelector(`.line-auto-complete-${index}`);\n        this.hoverElement!.style.visibility = 'hidden';\n    }\n\n    recoverAutoCompleteG() {\n        if (this.hoverElement) {\n            this.hoverElement.style.visibility = 'visible';\n            this.hoverElement = null;\n        }\n    }\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { PlaitCommonGeometry, PlaitGeometry } from '../interfaces';\nimport { DrawTextInfo, TextGenerator, TextGeneratorOptions } from './text.generator';\nimport { isMultipleTextGeometry } from '../utils';\nimport { ParagraphElement } from '@plait/common';\n\nexport class SingleTextGenerator<T extends PlaitElement = PlaitGeometry> extends TextGenerator<T> {\n    get textManage() {\n        return this.textManages[0];\n    }\n\n    constructor(board: PlaitBoard, element: T, text: ParagraphElement, options: TextGeneratorOptions<T>) {\n        super(board, element, [{ id: element.id, text: text }], options);\n    }\n\n    update(element: T, previousDrawShapeTexts: DrawTextInfo[], currentDrawShapeTexts: DrawTextInfo[], elementG: SVGElement): void;\n    update(element: T, previousText: ParagraphElement, currentText: ParagraphElement, elementG: SVGElement): void;\n    update(\n        element: T,\n        previousText: ParagraphElement | DrawTextInfo[],\n        currentText: ParagraphElement | DrawTextInfo[],\n        elementG: SVGElement\n    ) {\n        if (!isMultipleTextGeometry(element as unknown as PlaitCommonGeometry)) {\n            super.update(\n                element,\n                [{ text: previousText as ParagraphElement, id: element.id }],\n                [{ text: currentText as ParagraphElement, id: element.id }],\n                elementG\n            );\n        }\n    }\n}\n","import { TableSymbols } from '../interfaces';\nimport { Generator, getStrokeLineDash } from '@plait/common';\nimport { PlaitElement, RectangleClient } from '@plait/core';\nimport { PlaitBaseTable } from '../interfaces/table';\nimport { getEngine } from '../engines';\nimport { getStrokeColorByElement, getStrokeStyleByElement, getStrokeWidthByElement } from '../utils';\n\nexport interface TableData {}\n\nexport class TableGenerator<T extends PlaitElement = PlaitBaseTable> extends Generator<T, TableData> {\n    canDraw(element: T, data: TableData): boolean {\n        return true;\n    }\n\n    draw(element: T, data: TableData) {\n        const rectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const strokeColor = getStrokeColorByElement(this.board, element);\n        const strokeStyle = getStrokeStyleByElement(this.board, element);\n        const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n        return getEngine(TableSymbols.table).draw(\n            this.board,\n            rectangle,\n            {\n                strokeWidth,\n                stroke: strokeColor,\n                strokeLineDash\n            },\n            {\n                element: element\n            }\n        );\n    }\n}\n","import { PlaitBoard } from '@plait/core';\nimport { BasicShapes, PlaitDrawElement, PlaitGeometry, PlaitShapeElement, TableSymbols } from '../interfaces';\nimport { DrawPointerType } from '../constants/pointer';\nimport { GeometryShapeGenerator, TableGenerator } from '../generators';\n\nexport const getElementShape = (value: PlaitShapeElement) => {\n    if (PlaitDrawElement.isImage(value)) {\n        return BasicShapes.rectangle;\n    }\n    if (PlaitDrawElement.isTable(value)) {\n        return TableSymbols.table;\n    }\n    return value.shape;\n};\n\nexport const getGeometryGeneratorByShape = (board: PlaitBoard, shape: DrawPointerType) => {\n    if (PlaitDrawElement.isUMLClassOrInterface({ shape: shape })) {\n        return new TableGenerator<PlaitGeometry>(board);\n    } else {\n        return new GeometryShapeGenerator(board);\n    }\n};\n","import { PlaitBoard, Point, idCreator } from '@plait/core';\nimport { DefaultBasicShapeProperty } from '../constants';\nimport { GeometryShapes, UMLSymbols, PlaitCommonGeometry } from '../interfaces';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { GeometryStyleOptions, getDefaultGeometryProperty, getTextShapeProperty } from './geometry';\nimport { PlaitTableCell } from '../interfaces/table';\nimport { getDefaultGeometryText } from './common';\n\nexport const createUMLClassOrInterfaceGeometryElement = (board: PlaitBoard, shape: GeometryShapes, points: [Point, Point]) => {\n    const memorizedLatest = getMemorizedLatestByPointer(shape);\n    const element = {\n        id: idCreator(),\n        type: 'geometry',\n        angle: 0,\n        opacity: 1,\n        points,\n        strokeWidth: DefaultBasicShapeProperty.strokeWidth,\n        ...(memorizedLatest.geometryProperties as GeometryStyleOptions)\n    };\n    let rows: { id: string; height?: number }[];\n    let columns: { id: string; height?: number }[];\n    if (shape === UMLSymbols.class) {\n        rows = [\n            {\n                id: idCreator(),\n                height: 30\n            },\n            {\n                id: idCreator()\n            },\n            {\n                id: idCreator()\n            }\n        ];\n        columns = [\n            {\n                id: idCreator()\n            }\n        ];\n    } else {\n        rows = [\n            {\n                id: idCreator(),\n                height: 50\n            },\n            {\n                id: idCreator()\n            }\n        ];\n        columns = [\n            {\n                id: idCreator()\n            }\n        ];\n    }\n    return {\n        ...element,\n        shape,\n        rows,\n        columns,\n        cells: buildTableCellsForGeometry(board, rows, columns, shape)\n    } as unknown as PlaitCommonGeometry;\n};\n\nconst buildTableCellsForGeometry = (\n    board: PlaitBoard,\n    rows: {\n        id: string;\n        height?: number;\n    }[],\n    columns: {\n        id: string;\n        height?: number;\n    }[],\n    shape: GeometryShapes\n): PlaitTableCell[] => {\n    const cellCount = rows.length * columns.length;\n    const defaultTexts = (getDefaultGeometryProperty(shape) as any)?.texts || [];\n    return new Array(cellCount).fill('').map((item, index) => {\n        const rowIndex = Math.floor(index / columns.length);\n        const columnIndex = index % columns.length;\n        return {\n            id: idCreator(),\n            rowId: rows[rowIndex].id,\n            columnId: columns[columnIndex].id,\n            text: {\n                children: [\n                    {\n                        text: defaultTexts[index].text\n                    }\n                ],\n                align: defaultTexts[index].align\n            }\n        };\n    });\n};\n","import {\n    PlaitBoard,\n    PlaitElement,\n    Point,\n    RectangleClient,\n    ThemeColorMode,\n    getSelectedElements,\n    idCreator,\n    toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\nimport { GeometryShapes, BasicShapes, PlaitGeometry, FlowchartSymbols, UMLSymbols } from '../interfaces/geometry';\nimport { Element } from 'slate';\nimport {\n    DefaultBasicShapeProperty,\n    DefaultBasicShapePropertyMap,\n    DefaultFlowchartPropertyMap,\n    DefaultTextProperty,\n    DefaultUMLPropertyMap,\n    DrawPointerType,\n    DrawThemeColors,\n    GEOMETRY_NOT_CLOSED,\n    GEOMETRY_WITHOUT_TEXT,\n    ShapeDefaultSpace,\n    getFlowchartPointers,\n    getUMLPointers\n} from '../constants';\nimport {\n    ActiveGenerator,\n    Alignment,\n    CustomText,\n    DEFAULT_FONT_FAMILY,\n    PlaitCommonElementRef,\n    RESIZE_HANDLE_DIAMETER,\n    buildText,\n    getFirstTextManage,\n    measureElement\n} from '@plait/common';\nimport { Options } from 'roughjs/bin/core';\nimport { getEngine } from '../engines';\nimport { getElementShape } from './shape';\nimport { PlaitDrawElement, PlaitShapeElement } from '../interfaces';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { DrawTextInfo, getTextManage } from '../generators/text.generator';\nimport { createUMLClassOrInterfaceGeometryElement } from './uml';\nimport { createMultipleTextGeometryElement, isMultipleTextGeometry, isMultipleTextShape } from './multi-text-geometry';\nimport { DEFAULT_FONT_SIZE } from '@plait/text-plugins';\n\nexport type GeometryStyleOptions = Pick<PlaitGeometry, 'fill' | 'strokeColor' | 'strokeWidth'>;\n\nexport type TextProperties = Partial<CustomText> & { align?: Alignment };\n\nexport const createGeometryElement = (\n    shape: GeometryShapes,\n    points: [Point, Point],\n    text: string | Element,\n    options: GeometryStyleOptions = {},\n    textProperties: TextProperties = {}\n): PlaitGeometry => {\n    if (GEOMETRY_WITHOUT_TEXT.includes(shape)) {\n        return createGeometryElementWithoutText(shape, points, options);\n    } else {\n        return createGeometryElementWithText(shape, points, text, options, textProperties);\n    }\n};\n\nexport const createGeometryElementWithText = (\n    shape: GeometryShapes,\n    points: [Point, Point],\n    text: string | Element,\n    options: GeometryStyleOptions = {},\n    textProperties: TextProperties = {}\n): PlaitGeometry => {\n    let textOptions = {};\n    let alignment: undefined | Alignment = Alignment.center;\n    if (shape === BasicShapes.text) {\n        textOptions = { autoSize: true };\n        alignment = undefined;\n    }\n    textProperties = { ...textProperties };\n    textProperties?.align && (alignment = textProperties?.align);\n    delete textProperties?.align;\n\n    return {\n        id: idCreator(),\n        type: 'geometry',\n        shape,\n        angle: 0,\n        opacity: 1,\n        text: buildText(text, alignment, textProperties),\n        points,\n        ...textOptions,\n        ...options\n    };\n};\n\nexport const createGeometryElementWithoutText = (\n    shape: GeometryShapes,\n    points: [Point, Point],\n    options: GeometryStyleOptions = {}\n): PlaitGeometry => {\n    return {\n        id: idCreator(),\n        type: 'geometry',\n        shape,\n        angle: 0,\n        opacity: 1,\n        points,\n        ...options\n    };\n};\n\nexport const drawGeometry = (board: PlaitBoard, outerRectangle: RectangleClient, shape: GeometryShapes, roughOptions: Options) => {\n    return getEngine(shape).draw(board, outerRectangle, roughOptions);\n};\n\nexport const getNearestPoint = (element: PlaitShapeElement, point: Point) => {\n    const rectangle = RectangleClient.getRectangleByPoints(element.points);\n    const shape = getElementShape(element);\n    return getEngine(shape).getNearestPoint(rectangle, point);\n};\n\nexport const getCenterPointsOnPolygon = (points: Point[]) => {\n    const centerPoint: Point[] = [];\n    for (let i = 0; i < points.length; i++) {\n        let j = i == points.length - 1 ? 0 : i + 1;\n        centerPoint.push([(points[i][0] + points[j][0]) / 2, (points[i][1] + points[j][1]) / 2]);\n    }\n    return centerPoint;\n};\n\nexport const getDefaultFlowchartProperty = (symbol: FlowchartSymbols) => {\n    return DefaultFlowchartPropertyMap[symbol];\n};\n\nexport const getDefaultBasicShapeProperty = (shape: BasicShapes) => {\n    return DefaultBasicShapePropertyMap[shape] || DefaultBasicShapeProperty;\n};\n\nexport const getDefaultUMLProperty = (shape: UMLSymbols) => {\n    return DefaultUMLPropertyMap[shape];\n};\n\nexport const getAutoCompletePoints = (board: PlaitBoard, element: PlaitShapeElement, isToActive = false) => {\n    const AutoCompleteMargin = (12 + RESIZE_HANDLE_DIAMETER / 2) * 2;\n    const rectangle = RectangleClient.getRectangleByPoints(element.points);\n    const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n    const targetRectangle = isToActive ? activeRectangle : rectangle;\n    return RectangleClient.getEdgeCenterPoints(RectangleClient.inflate(targetRectangle, AutoCompleteMargin));\n};\n\nexport const getHitIndexOfAutoCompletePoint = (movingPoint: Point, points: Point[]) => {\n    return points.findIndex((point) => {\n        const movingRectangle = RectangleClient.getRectangleByPoints([movingPoint]);\n        let rectangle = RectangleClient.getRectangleByPoints([point]);\n        rectangle = RectangleClient.inflate(rectangle, RESIZE_HANDLE_DIAMETER);\n        return RectangleClient.isHit(movingRectangle, rectangle);\n    });\n};\n\nexport const getDrawDefaultStrokeColor = (theme: ThemeColorMode) => {\n    return DrawThemeColors[theme].strokeColor;\n};\n\nexport const getFlowchartDefaultFill = (theme: ThemeColorMode) => {\n    return DrawThemeColors[theme].fill;\n};\n\nexport const getTextShapeProperty = (board: PlaitBoard, text: string | Element, fontSize?: number | string) => {\n    fontSize = fontSize ? Number(fontSize) : DEFAULT_FONT_SIZE;\n    const textSize = measureElement(board, buildText(text), { fontSize, fontFamily: DEFAULT_FONT_FAMILY });\n    return {\n        width: textSize.width + ShapeDefaultSpace.rectangleAndText * 2,\n        height: textSize.height\n    };\n};\n\nexport const getDefaultGeometryPoints = (pointer: DrawPointerType, centerPoint: Point) => {\n    const property = getDefaultGeometryProperty(pointer);\n    return RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height));\n};\n\nexport const getDefaultGeometryProperty = (pointer: DrawPointerType) => {\n    const isFlowChart = getFlowchartPointers().includes(pointer);\n    const isUML = getUMLPointers().includes(pointer);\n    if (isFlowChart) {\n        return getDefaultFlowchartProperty(pointer as FlowchartSymbols);\n    } else if (isUML) {\n        return getDefaultUMLProperty(pointer as UMLSymbols);\n    } else {\n        return getDefaultBasicShapeProperty(pointer as BasicShapes);\n    }\n};\n\nexport const getDefaultTextPoints = (board: PlaitBoard, centerPoint: Point, fontSize?: number | string) => {\n    const property = getTextShapeProperty(board, DefaultTextProperty.text, fontSize);\n    return RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height));\n};\n\nexport const createTextElement = (board: PlaitBoard, points: [Point, Point], text: string | Element) => {\n    const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n    return createGeometryElement(BasicShapes.text, points, text, memorizedLatest.geometryProperties as GeometryStyleOptions, {\n        ...memorizedLatest.textProperties\n    });\n};\n\nexport const createDefaultGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n    const memorizedLatest = getMemorizedLatestByPointer(shape);\n    if (PlaitDrawElement.isUMLClassOrInterface({ shape })) {\n        return createUMLClassOrInterfaceGeometryElement(board, shape, points);\n    }\n    if (isMultipleTextShape(shape)) {\n        return createMultipleTextGeometryElement(shape, points, {\n            strokeWidth: DefaultBasicShapeProperty.strokeWidth,\n            ...(memorizedLatest.geometryProperties as GeometryStyleOptions)\n        });\n    } else {\n        return createGeometryElement(\n            shape,\n            points,\n            '',\n            {\n                strokeWidth: DefaultBasicShapeProperty.strokeWidth,\n                ...(memorizedLatest.geometryProperties as GeometryStyleOptions)\n            },\n            { ...memorizedLatest.textProperties }\n        );\n    }\n};\n\nexport const editText = (board: PlaitBoard, element: PlaitGeometry, text?: DrawTextInfo) => {\n    const textManage = text ? getTextManage(board, element, text) : getFirstTextManage(element);\n    if (textManage) {\n        textManage.edit(() => {});\n    }\n};\n\nexport const isGeometryIncludeText = (element: PlaitGeometry) => {\n    return isSingleTextGeometry(element) || isMultipleTextGeometry(element);\n};\n\nexport const isSingleTextShape = (shape: GeometryShapes) => {\n    return !GEOMETRY_WITHOUT_TEXT.includes(shape) && !isMultipleTextShape(shape);\n};\n\nexport const isSingleTextGeometry = (element: PlaitGeometry) => {\n    return PlaitDrawElement.isGeometry(element) && isSingleTextShape(element.shape);\n};\n\nexport const isGeometryClosed = (element: PlaitGeometry) => {\n    return !GEOMETRY_NOT_CLOSED.includes(element.shape);\n};\n","import { Point, PlaitBoard, getElementById, RectangleClient, Vector, rotatePoints, rotatePointsByElement } from '@plait/core';\nimport {\n    getPoints,\n    getPointByVectorComponent,\n    removeDuplicatePoints,\n    generateElbowLineRoute,\n    simplifyOrthogonalPoints,\n    isSourceAndTargetIntersect,\n    DEFAULT_ROUTE_MARGIN,\n    ElbowLineRouteOptions\n} from '@plait/common';\nimport { BasicShapes, ArrowLineHandleRefPair, PlaitGeometry, PlaitArrowLine } from '../../interfaces';\nimport { createGeometryElement } from '../geometry';\nimport { getElbowLineRouteOptions, getArrowLineHandleRefPair } from './arrow-line-common';\nimport { getMidKeyPoints, getMirrorDataPoints, hasIllegalElbowPoint } from './arrow-line-resize';\nimport { getStrokeWidthByElement } from '../common';\n\nexport const isSelfLoop = (element: PlaitArrowLine) => {\n    return element.source.boundId && element.source.boundId === element.target.boundId;\n};\n\nexport const isUseDefaultOrthogonalRoute = (element: PlaitArrowLine, options: ElbowLineRouteOptions) => {\n    return isSourceAndTargetIntersect(options) && !isSelfLoop(element);\n};\n\nexport const getElbowPoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n    const handleRefPair = getArrowLineHandleRefPair(board, element);\n    const params = getElbowLineRouteOptions(board, element, handleRefPair);\n    // console.log(params, 'params');\n    if (isUseDefaultOrthogonalRoute(element, params)) {\n        return simplifyOrthogonalPoints(\n            getPoints(\n                handleRefPair.source.point,\n                handleRefPair.source.direction,\n                handleRefPair.target.point,\n                handleRefPair.target.direction,\n                DEFAULT_ROUTE_MARGIN\n            )\n        );\n    }\n    const keyPoints = removeDuplicatePoints(generateElbowLineRoute(params, board));\n    const nextKeyPoints = keyPoints.slice(1, keyPoints.length - 1);\n    if (element.points.length === 2) {\n        return simplifyOrthogonalPoints(keyPoints);\n    } else {\n        const simplifiedNextKeyPoints = simplifyOrthogonalPoints(nextKeyPoints);\n        const dataPoints = removeDuplicatePoints(PlaitArrowLine.getPoints(board, element));\n        const midDataPoints = dataPoints.slice(1, -1);\n        if (hasIllegalElbowPoint(midDataPoints)) {\n            return simplifyOrthogonalPoints(keyPoints);\n        }\n        const nextDataPoints = [simplifiedNextKeyPoints[0], ...midDataPoints, simplifiedNextKeyPoints[simplifiedNextKeyPoints.length - 1]];\n        const mirrorDataPoints = getMirrorDataPoints(board, nextDataPoints, simplifiedNextKeyPoints, params);\n        // console.log(mirrorDataPoints, 'mirrorDataPoints');\n        const renderPoints: Point[] = [keyPoints[0]];\n        for (let index = 0; index < mirrorDataPoints.length - 1; index++) {\n            let currentPoint = mirrorDataPoints[index];\n            let nextPoint = mirrorDataPoints[index + 1];\n            const isStraight = Point.isAlign([currentPoint, nextPoint]);\n            if (!isStraight) {\n                const midKeyPoints = getMidKeyPoints(simplifiedNextKeyPoints, currentPoint, nextPoint);\n                if (midKeyPoints.length) {\n                    renderPoints.push(currentPoint);\n                    renderPoints.push(...midKeyPoints);\n                } else {\n                    renderPoints.push(currentPoint);\n                    console.log('unknown data points');\n                }\n            } else {\n                renderPoints.push(currentPoint);\n            }\n        }\n        renderPoints.push(keyPoints[keyPoints.length - 2], keyPoints[keyPoints.length - 1]);\n        // Remove the middle point to avoid the situation where the starting and ending positions are drawn back, such as when sourcePoint is between nextSourcePoint and the first key point.\n        // Issue\n        //                           keyPoint2\n        //                                |\n        //                                |\n        // nextPoint---sourcePoint---keyPoint1\n        // The correct rendering should be (nextPoint should be filtered out):\n        //                           keyPoint2\n        //                                |\n        //                                |\n        //             sourcePoint---keyPoint1\n        const ret = simplifyOrthogonalPoints(renderPoints);\n        return ret;\n    }\n};\n\nexport const getNextSourceAndTargetPoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n    const options = getElbowLineRouteOptions(board, element);\n    return [options.nextSourcePoint, options.nextTargetPoint];\n};\n\nexport const getSourceAndTargetRectangle = (board: PlaitBoard, element: PlaitArrowLine, handleRefPair: ArrowLineHandleRefPair) => {\n    let sourceElement = element.source.boundId ? getElementById<PlaitGeometry>(board, element.source.boundId) : undefined;\n    let targetElement = element.target.boundId ? getElementById<PlaitGeometry>(board, element.target.boundId) : undefined;\n    if (!sourceElement) {\n        const source = handleRefPair.source;\n        sourceElement = createFakeElement(source.point, source.vector);\n    }\n    if (!targetElement) {\n        const target = handleRefPair.target;\n        targetElement = createFakeElement(target.point, target.vector);\n    }\n\n    let sourceRectangle = RectangleClient.getRectangleByPoints(sourceElement.points);\n    const rotatedSourceCornerPoints =\n        rotatePointsByElement(RectangleClient.getCornerPoints(sourceRectangle), sourceElement) ||\n        RectangleClient.getCornerPoints(sourceRectangle);\n    sourceRectangle = RectangleClient.getRectangleByPoints(rotatedSourceCornerPoints);\n    sourceRectangle = RectangleClient.inflate(sourceRectangle, getStrokeWidthByElement(sourceElement) * 2);\n\n    let targetRectangle = RectangleClient.getRectangleByPoints(targetElement.points);\n    const rotatedTargetCornerPoints =\n        rotatePointsByElement(RectangleClient.getCornerPoints(targetRectangle), targetElement) ||\n        RectangleClient.getCornerPoints(targetRectangle);\n    targetRectangle = RectangleClient.getRectangleByPoints(rotatedTargetCornerPoints);\n    targetRectangle = RectangleClient.inflate(targetRectangle, getStrokeWidthByElement(targetElement) * 2);\n\n    return {\n        sourceRectangle,\n        targetRectangle\n    };\n};\n\nconst createFakeElement = (startPoint: Point, vector: Vector) => {\n    const point = getPointByVectorComponent(startPoint, vector, -25);\n    const points = RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(point, 50, 50));\n    return createGeometryElement(BasicShapes.rectangle, points, '');\n};\n\nexport function getNextRenderPoints(board: PlaitBoard, element: PlaitArrowLine, renderPoints?: Point[]) {\n    let newRenderKeyPoints = renderPoints ?? getElbowPoints(board, element);\n    const [nextSourcePoint, nextTargetPoint] = getNextSourceAndTargetPoints(board, element);\n    newRenderKeyPoints.splice(0, 1, nextSourcePoint);\n    newRenderKeyPoints.splice(-1, 1, nextTargetPoint);\n    return removeDuplicatePoints(newRenderKeyPoints);\n}\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { PlaitArrowLine, PlaitCustomGeometry, PlaitDrawElement, PlaitGeometry, PlaitSwimlane, PlaitVectorLine } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\n\nexport const getSelectedDrawElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n    const selectedElements = elements?.length ? elements : getSelectedElements(board);\n    return selectedElements.filter((value) => PlaitDrawElement.isDrawElement(value)) as PlaitDrawElement[];\n};\n\nexport const getSelectedGeometryElements = (board: PlaitBoard) => {\n    const selectedElements = getSelectedElements(board).filter((value) => PlaitDrawElement.isGeometry(value)) as PlaitGeometry[];\n    return selectedElements;\n};\n\nexport const getSelectedCustomGeometryElements = (board: PlaitBoard) => {\n    const selectedElements = getSelectedElements(board).filter((value) =>\n        PlaitDrawElement.isCustomGeometryElement(board, value)\n    ) as PlaitCustomGeometry[];\n    return selectedElements;\n};\n\nexport const getSelectedArrowLineElements = (board: PlaitBoard) => {\n    const selectedElements = getSelectedElements(board).filter((value) => PlaitDrawElement.isArrowLine(value)) as PlaitArrowLine[];\n    return selectedElements;\n};\n\nexport const getSelectedVectorLineElements = (board: PlaitBoard) => {\n    const selectedElements = getSelectedElements(board).filter((value) => PlaitDrawElement.isVectorLine(value)) as PlaitVectorLine[];\n    return selectedElements;\n};\n\nexport const getSelectedImageElements = (board: PlaitBoard) => {\n    const selectedElements = getSelectedElements(board).filter((value) => PlaitDrawElement.isImage(value)) as PlaitImage[];\n    return selectedElements;\n};\n\nexport const isSingleSelectSwimlane = (board: PlaitBoard) => {\n    const selectedElements = getSelectedElements(board);\n    return selectedElements && selectedElements.length === 1 && PlaitDrawElement.isSwimlane(selectedElements[0]);\n};\n\nexport const isSingleSelectLine = (board: PlaitBoard) => {\n    const selectedElements = getSelectedElements(board);\n    return selectedElements && selectedElements.length === 1 && PlaitDrawElement.isLine(selectedElements[0]);\n};\n\nexport const getSelectedSwimlane = (board: PlaitBoard): PlaitSwimlane => {\n    const selectedElements = getSelectedElements(board);\n    return selectedElements.find((item) => PlaitDrawElement.isSwimlane(item)) as PlaitSwimlane;\n};\n","import { PlaitBoard, Transforms, Point, Path, PlaitNode, getSelectedElements } from '@plait/core';\nimport { PlaitDrawElement, GeometryShapes, PlaitText, BasicShapes, PlaitArrowLine } from '../interfaces';\nimport {\n    collectArrowLineUpdatedRefsByGeometry,\n    createDefaultGeometry,\n    createTextElement,\n    getMemorizedLatestByPointer,\n    getTextShapeProperty,\n    insertElement\n} from '../utils';\nimport { Element } from 'slate';\nimport { normalizeShapePoints } from '@plait/common';\nimport { DrawTransforms } from '.';\n\nexport const insertGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n    const newElement = createDefaultGeometry(board, points, shape);\n    insertElement(board, newElement);\n    return newElement;\n};\n\nexport const insertText = (board: PlaitBoard, point: Point, text: string | Element) => {\n    const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n    const property = getTextShapeProperty(board, text, memorizedLatest.textProperties['font-size']);\n    const points: [Point, Point] = [point, [point[0] + property.width, point[1] + property.height]];\n    const newElement = createTextElement(board, points, text);\n    insertElement(board, newElement);\n};\n\nexport const resizeGeometry = (board: PlaitBoard, points: [Point, Point], path: Path) => {\n    const normalizePoints = normalizeShapePoints(points);\n    const element = PlaitNode.get(board, path);\n    const newProperties = { points: normalizePoints, text: { ...element.text } };\n    if (PlaitDrawElement.isText(element) && element.autoSize) {\n        (newProperties as Partial<PlaitText>).autoSize = false;\n    }\n    Transforms.setNode(board, newProperties, path);\n};\n\nexport const switchGeometryShape = (board: PlaitBoard, shape: GeometryShapes) => {\n    const selectedElements = getSelectedElements(board);\n    const refs: { property: Partial<PlaitArrowLine>; path: Path }[] = [];\n    selectedElements.forEach((item) => {\n        if (PlaitDrawElement.isGeometry(item) && !PlaitDrawElement.isText(item)) {\n            const path = PlaitBoard.findPath(board, item);\n            Transforms.setNode(board, { shape }, path);\n            collectArrowLineUpdatedRefsByGeometry(board, { ...item, shape }, refs);\n        }\n    });\n    if (refs.length) {\n        refs.forEach((ref) => {\n            DrawTransforms.resizeArrowLine(board, ref.property, ref.path);\n        });\n    }\n};\n","import { PlaitBoard, Point, Transforms, hasValidAngle, RectangleClient } from '@plait/core';\nimport { Element } from 'slate';\nimport { PlaitDrawElement, PlaitGeometry } from '../interfaces';\nimport { ShapeDefaultSpace } from '../constants';\nimport { Alignment, getFirstTextEditor, resetPointsAfterResize } from '@plait/common';\nimport { AlignEditor } from '@plait/text-plugins';\nimport { MIN_TEXT_WIDTH } from '../constants/text';\n\nconst normalizePoints = (board: PlaitBoard, element: PlaitGeometry, width: number, height: number) => {\n    let points = element.points;\n    let autoSize = PlaitDrawElement.isText(element) ? element.autoSize : false;\n    const defaultSpace = ShapeDefaultSpace.rectangleAndText;\n\n    if (autoSize) {\n        const newWidth = width < MIN_TEXT_WIDTH ? MIN_TEXT_WIDTH : width;\n        const editor = getFirstTextEditor(element);\n        if (AlignEditor.isActive(editor, Alignment.right)) {\n            points = [\n                [points[1][0] - (newWidth + defaultSpace * 2), points[0][1]],\n                [points[1][0], points[0][1] + height]\n            ];\n        } else if (AlignEditor.isActive(editor, Alignment.center)) {\n            const oldWidth = Math.abs(points[0][0] - points[1][0]);\n            const offset = (newWidth - oldWidth) / 2;\n            points = [\n                [points[0][0] - offset - defaultSpace, points[0][1]],\n                [points[1][0] + offset + defaultSpace, points[0][1] + height]\n            ];\n        } else {\n            points = [points[0], [points[0][0] + newWidth + defaultSpace * 2, points[0][1] + height]];\n        }\n        if (hasValidAngle(element)) {\n            points = resetPointsAfterResize(\n                RectangleClient.getRectangleByPoints(element.points),\n                RectangleClient.getRectangleByPoints(points),\n                RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(element.points)),\n                RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(points)),\n                element.angle!\n            );\n        }\n    }\n\n    return { points };\n};\n\nexport const setText = (board: PlaitBoard, element: PlaitGeometry, text: Element, width: number, height: number) => {\n    const newElement = {\n        text,\n        ...normalizePoints(board, element, width, height)\n    };\n    const path = board.children.findIndex((child) => child === element);\n    Transforms.setNode(board, newElement, [path]);\n};\n\nexport const setTextSize = (board: PlaitBoard, element: PlaitGeometry, width: number, height: number) => {\n    const isAutoSize = PlaitDrawElement.isText(element) ? element.autoSize : false;\n    if (isAutoSize) {\n        const newElement = {\n            ...normalizePoints(board, element, width, height)\n        };\n        const path = board.children.findIndex((child) => child === element);\n        Transforms.setNode(board, newElement, [path]);\n    }\n};\n","import { CommonImageItem } from '@plait/common';\nimport { PlaitBoard, Point, Transforms, idCreator, toHostPoint, toViewBoxPoint } from '@plait/core';\n\nexport const insertImage = (board: PlaitBoard, imageItem: CommonImageItem, startPoint?: Point) => {\n    const { width, height, url } = imageItem;\n    const viewportWidth = PlaitBoard.getBoardContainer(board).clientWidth;\n    const viewportHeight = PlaitBoard.getBoardContainer(board).clientHeight;\n    const point = toViewBoxPoint(board, toHostPoint(board, viewportWidth / 2, viewportHeight / 2));\n    const points: Point[] = startPoint\n        ? [startPoint, [startPoint[0] + width, startPoint[1] + height]]\n        : [\n              [point[0] - width / 2, point[1] - height / 2],\n              [point[0] + width / 2, point[1] + height / 2]\n          ];\n    const imageElement = {\n        id: idCreator(),\n        type: 'image',\n        points,\n        url\n    };\n    Transforms.insertNode(board, imageElement, [board.children.length]);\n    Transforms.addSelectionWithTemporaryElements(board, [imageElement]);\n};\n\nexport const createImage = (startPoint: Point, imageItem: CommonImageItem) => {\n    const { width, height, url } = imageItem;\n    const points: Point[] = [startPoint, [startPoint[0] + width, startPoint[1] + height]];\n    const imageElement = {\n        id: idCreator(),\n        type: 'image',\n        points,\n        url\n    };\n    return imageElement;\n};\n","import { Path, PlaitBoard, PlaitElement, PointOfRectangle, Transforms, findElements } from '@plait/core';\nimport {\n    ArrowLineHandle,\n    ArrowLineHandleKey,\n    ArrowLineMarkerType,\n    ArrowLineText,\n    MemorizeKey,\n    PlaitArrowLine,\n    PlaitShapeElement\n} from '../interfaces';\nimport { memorizeLatest } from '@plait/common';\nimport { getSelectedArrowLineElements } from '../utils/selected';\nimport { getHitConnection } from '../utils/arrow-line/arrow-line-basic';\n\nexport const resizeArrowLine = (board: PlaitBoard, options: Partial<PlaitArrowLine>, path: Path) => {\n    Transforms.setNode(board, options, path);\n};\n\nexport const setArrowLineTexts = (board: PlaitBoard, element: PlaitArrowLine, texts: ArrowLineText[]) => {\n    const path = PlaitBoard.findPath(board, element);\n    Transforms.setNode(board, { texts }, path);\n};\n\nexport const removeArrowLineText = (board: PlaitBoard, element: PlaitArrowLine, index: number) => {\n    const path = PlaitBoard.findPath(board, element);\n    const texts = element.texts?.length ? [...element.texts] : [];\n    const newTexts = [...texts];\n    newTexts.splice(index, 1);\n    Transforms.setNode(board, { texts: newTexts }, path);\n};\n\nexport const setArrowLineMark = (board: PlaitBoard, handleKey: ArrowLineHandleKey, marker: ArrowLineMarkerType) => {\n    memorizeLatest(MemorizeKey.arrowLine, handleKey, marker);\n    const selectedElements = getSelectedArrowLineElements(board);\n    selectedElements.forEach((element: PlaitArrowLine) => {\n        const path = PlaitBoard.findPath(board, element);\n        let handle = handleKey === ArrowLineHandleKey.source ? element.source : element.target;\n        handle = { ...handle, marker };\n        Transforms.setNode(board, { [handleKey]: handle }, path);\n    });\n};\n\nexport const setArrowLineShape = (board: PlaitBoard, newProperties: Partial<PlaitArrowLine>) => {\n    const elements = getSelectedArrowLineElements(board);\n    elements.map((element) => {\n        const _properties = { ...newProperties };\n        if (element.shape === newProperties.shape) {\n            return;\n        }\n        const path = PlaitBoard.findPath(board, element);\n        Transforms.setNode(board, _properties, path);\n    });\n};\n\nexport const connectArrowLineToDraw = (\n    board: PlaitBoard,\n    lineElement: PlaitArrowLine,\n    handle: ArrowLineHandleKey,\n    geometryElement: PlaitShapeElement\n) => {\n    const linePoints = PlaitArrowLine.getPoints(board, lineElement);\n    const point = handle === ArrowLineHandleKey.source ? linePoints[0] : linePoints[linePoints.length - 1];\n    const connection: PointOfRectangle = getHitConnection(board, point, geometryElement);\n    if (connection) {\n        let source: ArrowLineHandle = lineElement.source;\n        let target: ArrowLineHandle = lineElement.target;\n        if (handle === ArrowLineHandleKey.source) {\n            source = {\n                ...source,\n                boundId: geometryElement.id,\n                connection\n            };\n        } else {\n            target = {\n                ...target,\n                boundId: geometryElement.id,\n                connection\n            };\n        }\n        const path = PlaitBoard.findPath(board, lineElement);\n        resizeArrowLine(board, { source, target }, path);\n    }\n};\n","import { idCreator, PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { DefaultSwimlanePropertyMap, getSwimlanePointers, getSwimlaneShapes, SWIMLANE_HEADER_SIZE } from '../constants';\nimport { PlaitDrawElement, PlaitSwimlane, PlaitTableCell, SwimlaneDrawSymbols, SwimlaneSymbols } from '../interfaces';\nimport { createCell } from './table';\n\nexport function buildSwimlaneTable(element: PlaitSwimlane) {\n    const swimlaneElement = { ...element };\n    if (PlaitDrawElement.isHorizontalSwimlane(element)) {\n        swimlaneElement.cells = element.cells.map((item, index) => {\n            if (index === 0 && element.header) {\n                item = {\n                    ...element.cells[0],\n                    rowspan: element.rows.length\n                };\n            }\n            if (item.text && !item.text.direction) {\n                item = {\n                    ...item,\n                    text: {\n                        ...item.text,\n                        direction: 'vertical'\n                    }\n                };\n            }\n            return item;\n        });\n\n        return swimlaneElement;\n    }\n    if (element.header) {\n        swimlaneElement.cells = [\n            {\n                ...element.cells[0],\n                colspan: element.columns.length\n            },\n            ...element.cells.slice(1, element.cells.length)\n        ];\n    }\n    return swimlaneElement;\n}\n\nexport const getDefaultSwimlanePoints = (pointer: SwimlaneDrawSymbols, centerPoint: Point) => {\n    const property = DefaultSwimlanePropertyMap[pointer];\n    return RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height));\n};\n\nexport const createDefaultSwimlane = (shape: SwimlaneDrawSymbols, points: [Point, Point]) => {\n    const header = isSwimlaneWithHeader(shape);\n    const dataShape = adjustSwimlaneShape(shape);\n    const width = points[1][0] - points[0][0];\n    const height = points[1][1] - points[0][1];\n    const rows = createDefaultRowsOrColumns(dataShape, 'row', header, height);\n    const columns = createDefaultRowsOrColumns(dataShape, 'column', header, width);\n    const swimlane = {\n        id: idCreator(),\n        type: 'swimlane',\n        shape: dataShape,\n        points,\n        rows,\n        columns,\n        header,\n        cells: createDefaultCells(dataShape, rows, columns, header)\n    } as PlaitSwimlane;\n    return swimlane;\n};\n\nexport const createDefaultRowsOrColumns = (shape: SwimlaneSymbols, type: 'row' | 'column', header: boolean, size: number) => {\n    const createItems = (count: number) => new Array(count).fill('').map(() => ({ id: idCreator() }));\n    let data = createItems(3);\n    if (\n        (type === 'row' && shape === SwimlaneSymbols.swimlaneVertical) ||\n        (type === 'column' && shape === SwimlaneSymbols.swimlaneHorizontal)\n    ) {\n        data = header ? data : createItems(2);\n        const dimension = type === 'row' ? 'height' : 'width';\n        let defaultSize = SWIMLANE_HEADER_SIZE;\n        if (size < SWIMLANE_HEADER_SIZE * data.length) {\n            defaultSize = Math.min((size / data.length / SWIMLANE_HEADER_SIZE) * SWIMLANE_HEADER_SIZE, SWIMLANE_HEADER_SIZE);\n        }\n        data = data.map((item, index) => {\n            if (index === 0 || (index === 1 && header)) {\n                return {\n                    ...item,\n                    [dimension]: defaultSize\n                };\n            }\n            return item;\n        });\n    }\n\n    return data;\n};\n\nexport const createDefaultCells = (\n    shape: SwimlaneSymbols,\n    rows: { id: string; height?: number }[],\n    columns: { id: string; width?: number }[],\n    header: boolean\n) => {\n    let headerCell: PlaitTableCell[] = [];\n    let startIndex = 0;\n    if (header) {\n        headerCell = [createCell(rows[0].id, columns[0].id, 'New Swimlane')];\n        startIndex = 1;\n    }\n    const cells = new Array(6).fill('').map((_, index) => {\n        if (index < 3) {\n            const rowId = shape === SwimlaneSymbols.swimlaneVertical ? rows[startIndex].id : rows[index].id;\n            const columnId = shape === SwimlaneSymbols.swimlaneVertical ? columns[index].id : columns[startIndex].id;\n            return createCell(rowId, columnId, header ? 'Lane' : 'New Swimlane');\n        }\n        const rowId = shape === SwimlaneSymbols.swimlaneVertical ? rows[startIndex + 1].id : rows[index - 3].id;\n        const columnId = shape === SwimlaneSymbols.swimlaneVertical ? columns[index - 3].id : columns[startIndex + 1].id;\n        return createCell(rowId, columnId);\n    });\n    return [...headerCell, ...cells];\n};\n\nexport const getSwimlaneCount = (swimlane: PlaitSwimlane) => {\n    if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n        return swimlane.rows.length;\n    }\n    if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n        return swimlane.columns.length;\n    }\n    return 0;\n};\n\nexport const isSwimlaneWithHeader = (shape: SwimlaneDrawSymbols) => {\n    return [SwimlaneDrawSymbols.swimlaneHorizontalWithHeader, SwimlaneDrawSymbols.swimlaneVerticalWithHeader].includes(shape);\n};\n\nexport const isSwimlaneShape = (shape: SwimlaneSymbols) => {\n    return getSwimlaneShapes().includes(shape);\n};\n\nexport const adjustSwimlaneShape = (shape: SwimlaneDrawSymbols): SwimlaneSymbols => {\n    return [SwimlaneDrawSymbols.swimlaneHorizontalWithHeader, SwimlaneDrawSymbols.swimlaneHorizontal].includes(shape)\n        ? SwimlaneSymbols.swimlaneHorizontal\n        : SwimlaneSymbols.swimlaneVertical;\n};\n\nexport const isSwimlanePointers = (board: PlaitBoard, pointer: string = board.pointer) => {\n    return getSwimlanePointers().includes(pointer);\n};\n","import { idCreator, Path, PlaitBoard, Point, RectangleClient, Transforms } from '@plait/core';\nimport { PlaitDrawElement, PlaitSwimlane } from '../interfaces';\nimport { PlaitBaseTable, PlaitTableCell } from '../interfaces/table';\nimport { getCellWithPoints } from '../utils/table';\nimport { getSwimlaneCount } from '../utils/swimlane';\nimport { Alignment } from '@plait/common';\n\nexport const updateSwimlaneCount = (board: PlaitBoard, swimlane: PlaitSwimlane, count: number) => {\n    if (count > 0 && PlaitDrawElement.isSwimlane(swimlane)) {\n        const currentCount = getSwimlaneCount(swimlane);\n        if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n            if (count > currentCount) {\n                addSwimlaneRow(board, swimlane, swimlane.rows.length, count - currentCount);\n            } else {\n                const deleteIndex = swimlane.rows.length - (currentCount - count);\n                removeSwimlaneRow(board, swimlane, deleteIndex, currentCount - count);\n            }\n        }\n        if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n            if (count > currentCount) {\n                addSwimlaneColumn(board, swimlane, swimlane.columns.length, count - currentCount);\n            } else {\n                const deleteIndex = swimlane.columns.length - (currentCount - count);\n                removeSwimlaneColumn(board, swimlane, deleteIndex, currentCount - count);\n            }\n        }\n    }\n};\n\nexport const addSwimlaneRow = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n    if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n        const newRows = [...swimlane.rows];\n        const addRows: { id: string }[] = [];\n        for (let i = 0; i < count; i++) {\n            addRows.push({ id: idCreator() });\n        }\n        newRows.splice(index, 0, ...addRows);\n        const newCells = [...swimlane.cells];\n        addRows.forEach((item) => {\n            newCells.push(...createNewSwimlaneCells(swimlane, item.id, 'column'));\n        });\n        const lastCellPoints = getCellWithPoints(board, swimlane, swimlane.cells[swimlane.cells.length - 1].id).points;\n        const lastRowHeight = RectangleClient.getRectangleByPoints(lastCellPoints).height;\n        const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0], swimlane.points[1][1] + lastRowHeight * count]];\n        updateSwimlane(board, swimlane, swimlane.columns, newRows, newCells, newPoints);\n    }\n};\n\nexport const addSwimlaneColumn = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n    if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n        const newColumns = [...swimlane.columns];\n        const addColumns: { id: string }[] = [];\n        for (let i = 0; i < count; i++) {\n            addColumns.push({ id: idCreator() });\n        }\n        newColumns.splice(index, 0, ...addColumns);\n        const newCells = [...swimlane.cells];\n        addColumns.forEach((item) => {\n            newCells.push(...createNewSwimlaneCells(swimlane, item.id, 'row'));\n        });\n        const lastCellPoints = getCellWithPoints(board, swimlane, swimlane.cells[swimlane.cells.length - 1].id).points;\n        const lastColumnWidth = RectangleClient.getRectangleByPoints(lastCellPoints).width;\n        const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0] + lastColumnWidth * count, swimlane.points[1][1]]];\n        updateSwimlane(board, swimlane, newColumns, swimlane.rows, newCells, newPoints);\n    }\n};\n\nexport const removeSwimlaneRow = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n    if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n        if (count > swimlane.rows.length) {\n            return;\n        }\n        const newRows = [...swimlane.rows];\n        newRows.splice(index, count);\n        if (newRows.length === 0) {\n            const path = PlaitBoard.findPath(board, swimlane);\n            Transforms.removeNode(board, path);\n        } else {\n            let newCells = [...swimlane.cells];\n            const removeRows = [];\n            for (let i = index; i < count + index; i++) {\n                const removeRow = swimlane.rows[i];\n                removeRows.push(removeRow);\n                newCells = newCells.filter((item) => item.rowId !== removeRow.id);\n            }\n            let removeRowHeight = 0;\n            removeRows.forEach((row) => {\n                if (!row.height) {\n                    const rowCell = swimlane.cells.find((item) => item.rowId === row.id)!;\n                    const cellPoints = getCellWithPoints(board, swimlane, rowCell.id).points;\n                    removeRowHeight += RectangleClient.getRectangleByPoints(cellPoints).height;\n                } else {\n                    removeRowHeight += row.height;\n                }\n            });\n\n            const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0], swimlane.points[1][1] - removeRowHeight]];\n            updateSwimlane(board, swimlane, swimlane.columns, newRows, newCells, newPoints);\n        }\n    }\n};\n\nexport const removeSwimlaneColumn = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n    if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n        if (count > swimlane.columns.length) {\n            return;\n        }\n        const newColumns = [...swimlane.columns];\n        newColumns.splice(index, count);\n        if (newColumns.length === 0) {\n            const path = PlaitBoard.findPath(board, swimlane);\n            Transforms.removeNode(board, path);\n        } else {\n            let newCells = [...swimlane.cells];\n            const removeColumns = [];\n            for (let i = index; i < count + index; i++) {\n                const removeColumn = swimlane.columns[i];\n                removeColumns.push(removeColumn);\n                newCells = newCells.filter((item) => item.columnId !== removeColumn.id);\n            }\n            let removeColumnWidth = 0;\n            removeColumns.forEach((column) => {\n                if (!column.width) {\n                    const rowCell = swimlane.cells.find((item) => item.columnId === column.id)!;\n                    const cellPoints = getCellWithPoints(board, swimlane, rowCell.id).points;\n                    removeColumnWidth += RectangleClient.getRectangleByPoints(cellPoints).width;\n                } else {\n                    removeColumnWidth += column.width;\n                }\n            });\n            const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0] - removeColumnWidth, swimlane.points[1][1]]];\n            updateSwimlane(board, swimlane, newColumns, swimlane.rows, newCells, newPoints);\n        }\n    }\n};\n\nconst createNewSwimlaneCells = (swimlane: PlaitSwimlane, newId: string, type: 'row' | 'column'): PlaitTableCell[] => {\n    const cells: PlaitTableCell[] = swimlane[`${type}s`].map((item) => ({\n        id: idCreator(),\n        rowId: type === 'row' ? item.id : newId,\n        columnId: type === 'row' ? newId : item.id\n    }));\n    if (swimlane.header) {\n        cells.shift();\n    }\n    cells[0] = {\n        ...cells[0],\n        text: {\n            children: [{ text: swimlane.header ? 'Lane' : 'New Swimlane' }],\n            align: Alignment.center,\n            direction: type === 'row' ? undefined : 'vertical'\n        }\n    };\n    return cells;\n};\n\nconst updateSwimlane = (\n    board: PlaitBoard,\n    swimlane: PlaitSwimlane,\n    newColumns: { id: string; width?: number }[],\n    newRows: { id: string; height?: number }[],\n    newCells: PlaitTableCell[],\n    newPoints: Point[]\n) => {\n    const path = PlaitBoard.findPath(board, swimlane);\n    Transforms.setNode(\n        board,\n        {\n            columns: newColumns,\n            rows: newRows,\n            cells: newCells,\n            points: newPoints\n        },\n        path\n    );\n};\n","import { PlaitBoard, Transforms } from '@plait/core';\nimport { PlaitMultipleTextGeometry } from '../interfaces';\nimport { DrawTextInfo } from '../generators/text.generator';\n\nexport const setDrawTexts = (board: PlaitBoard, element: PlaitMultipleTextGeometry, text: DrawTextInfo) => {\n    const newTexts = element.texts?.map((item) => {\n        if (item.id === text.id) {\n            return { ...item, ...text };\n        }\n        return item;\n    });\n    const newElement = {\n        texts: newTexts\n    };\n    const path = board.children.findIndex((child) => child === element);\n    Transforms.setNode(board, newElement, [path]);\n};\n","import { Path, PlaitBoard, PlaitNode, RectangleClient, Transforms } from '@plait/core';\nimport { ShapeDefaultSpace } from '../constants';\nimport { Element } from 'slate';\nimport { PlaitBaseTable, PlaitTableCell, PlaitTableElement } from '../interfaces/table';\nimport { getCellWithPoints, updateColumns, updateRows } from '../utils/table';\n\nexport const setTableText = (board: PlaitBoard, path: Path, cellId: string, text: Element, textHeight: number) => {\n    const table = PlaitNode.get(board, path) as PlaitBaseTable;\n    const cell = getCellWithPoints(board, table, cellId);\n    const cellIndex = table.cells.findIndex((item) => item.id === cell.id);\n    let rows = [...table.rows];\n    let columns = [...table.columns];\n    let cells = [...table.cells];\n    let points = [...table.points];\n    const { width: cellWidth, height: cellHeight } = RectangleClient.getRectangleByPoints(cell.points);\n    const defaultSpace = ShapeDefaultSpace.rectangleAndText;\n    if (PlaitTableElement.isVerticalText(cell as PlaitTableCell)) {\n        const columnIdx = table.columns.findIndex((column) => column.id === cell.columnId);\n        if (textHeight > cellWidth) {\n            const newColumnWidth = textHeight + defaultSpace * 2;\n            const offset = newColumnWidth - cellWidth;\n            const result = updateColumns(table, table.columns[columnIdx].id, newColumnWidth, offset);\n            points = result.points;\n            columns = result.columns;\n        }\n    } else {\n        const rowIdx = table.rows.findIndex((row) => row.id === cell.rowId);\n        const tableRow = table.rows[rowIdx];\n        const compareHeight = tableRow.height ?? Math.max(cellHeight, 0);\n        if (textHeight > compareHeight) {\n            const newRowHeight = textHeight + defaultSpace * 2;\n            const offset = newRowHeight - compareHeight;\n            const result = updateRows(table, table.rows[rowIdx].id, newRowHeight, offset);\n            points = result.points;\n            rows = result.rows;\n        }\n    }\n    cells[cellIndex] = {\n        ...cells[cellIndex],\n        text\n    };\n\n    Transforms.setNode(board, { rows, columns, cells, points }, path);\n};\n","import { Path, PlaitBoard, Transforms } from '@plait/core';\nimport { PlaitBaseTable, PlaitTableCell } from '../interfaces';\nimport { getSelectedCells } from '../utils';\n\nexport const setTableFill = (board: PlaitBoard, element: PlaitBaseTable, fill: string | null, path: Path) => {\n    const selectedCells = getSelectedCells(element);\n    let newCells = element.cells;\n    if (selectedCells?.length) {\n        newCells = element.cells.map((cell) => {\n            if (selectedCells.map((item) => item.id).includes(cell.id)) {\n                return getNewCell(cell, fill);\n            }\n            return cell;\n        });\n    } else {\n        newCells = element.cells.map((cell) => {\n            if (cell.text) {\n                return getNewCell(cell, fill);\n            }\n            return cell;\n        });\n    }\n    Transforms.setNode(board, { cells: newCells }, path);\n};\n\nconst getNewCell = (cell: PlaitTableCell, fill: string | null) => {\n    const newCell = {\n        ...cell\n    };\n    if (fill) {\n        newCell.fill = fill;\n    } else {\n        delete newCell.fill;\n    }\n    return newCell;\n};\n","import { PlaitBoard, Transforms } from '@plait/core';\nimport { PlaitVectorLine } from '../interfaces';\nimport { getSelectedVectorLineElements } from '../utils';\n\nexport const setVectorLineShape = (board: PlaitBoard, newProperties: Partial<PlaitVectorLine>) => {\n    const elements = getSelectedVectorLineElements(board);\n    elements.map((element) => {\n        if (element.shape === newProperties.shape) {\n            return;\n        }\n        const path = PlaitBoard.findPath(board, element);\n        Transforms.setNode(board, { ...newProperties }, path);\n    });\n};\n","import { getDirectionByVector, getPointByVectorComponent } from '@plait/common';\nimport { PlaitBoard, Vector, Direction, RectangleClient, Point } from '@plait/core';\nimport { createDefaultSwimlane, insertElement } from '../utils';\nimport { insertGeometry } from './geometry';\nimport { BasicShapes, FlowchartSymbols, GeometryShapes, SwimlaneDrawSymbols, UMLSymbols } from '../interfaces';\nimport {\n    DefaultBasicShapeProperty,\n    DefaultBasicShapePropertyMap,\n    DefaultFlowchartPropertyMap,\n    DefaultSwimlanePropertyMap,\n    DefaultUMLPropertyMap,\n    getSwimlanePointers\n} from '../constants';\n\nexport const insertDrawByVector = (board: PlaitBoard, point: Point, shape: GeometryShapes | SwimlaneDrawSymbols, vector: Vector) => {\n    const swimlanePointers = getSwimlanePointers();\n    const isSwimlanePointer = swimlanePointers.includes(shape);\n    let shapeProperty =\n        DefaultFlowchartPropertyMap[shape as FlowchartSymbols] ||\n        DefaultBasicShapePropertyMap[shape as BasicShapes] ||\n        DefaultUMLPropertyMap[shape as UMLSymbols] ||\n        DefaultBasicShapeProperty;\n    if (isSwimlanePointer) {\n        shapeProperty = DefaultSwimlanePropertyMap[shape];\n    }\n    const direction = getDirectionByVector(vector);\n    if (direction) {\n        let offset = 0;\n        if ([Direction.left, Direction.right].includes(direction)) {\n            offset = -shapeProperty.width / 2;\n        } else {\n            offset = -shapeProperty.height / 2;\n        }\n        const vectorPoint = getPointByVectorComponent(point, vector, offset);\n        const points = RectangleClient.getPoints(\n            RectangleClient.getRectangleByCenterPoint(vectorPoint, shapeProperty.width, shapeProperty.height)\n        );\n        if (isSwimlanePointer) {\n            const swimlane = createDefaultSwimlane(shape as SwimlaneDrawSymbols, points);\n            insertElement(board, swimlane);\n            return swimlane;\n        }\n        return insertGeometry(board, points, shape as GeometryShapes);\n    }\n    return null;\n};\n","import { insertText, insertGeometry, resizeGeometry, switchGeometryShape } from './geometry';\nimport { setText, setTextSize } from './geometry-text';\nimport { insertImage } from './image';\nimport {\n    connectArrowLineToDraw,\n    removeArrowLineText,\n    resizeArrowLine,\n    setArrowLineMark,\n    setArrowLineShape,\n    setArrowLineTexts\n} from './arrow-line';\nimport { addSwimlaneColumn, addSwimlaneRow, removeSwimlaneColumn, removeSwimlaneRow, updateSwimlaneCount } from './swimlane';\nimport { setDrawTexts } from './multi-text-geometry-text';\nimport { setTableText } from './table-text';\nimport { setTableFill } from './table';\nimport { setVectorLineShape } from './vector-line';\nimport { insertDrawByVector } from './common';\n\nexport const DrawTransforms = {\n    setText,\n    setDrawTexts,\n    insertGeometry,\n    resizeGeometry,\n    insertText,\n    setTextSize,\n    resizeArrowLine,\n    setArrowLineTexts,\n    removeArrowLineText,\n    setArrowLineMark,\n    setArrowLineShape,\n    setVectorLineShape,\n    insertImage,\n    connectArrowLineToDraw,\n    switchGeometryShape,\n    setTableText,\n    addSwimlaneRow,\n    addSwimlaneColumn,\n    removeSwimlaneRow,\n    removeSwimlaneColumn,\n    updateSwimlaneCount,\n    setTableFill,\n    insertDrawByVector\n};\n","import { PlaitBoard, Point, RectangleClient, rotatePoints, ResizeCursorClass } from '@plait/core';\nimport {\n    RESIZE_HANDLE_DIAMETER,\n    getRectangleResizeHandleRefs,\n    getRotatedResizeCursorClassByAngle,\n    ROTATE_HANDLE_SIZE,\n    ROTATE_HANDLE_DISTANCE_TO_ELEMENT,\n    ResizeHandle\n} from '@plait/common';\n\nexport interface ResizeHandleRef {\n    rectangle: RectangleClient;\n    handle: ResizeHandle;\n    cursorClass: ResizeCursorClass;\n}\n\nexport const getHitRectangleResizeHandleRef = (\n    board: PlaitBoard,\n    rectangle: RectangleClient,\n    point: Point,\n    angle: number = 0\n): ResizeHandleRef | undefined => {\n    const centerPoint = RectangleClient.getCenterPoint(rectangle);\n    const resizeHandleRefs = getRectangleResizeHandleRefs(rectangle, RESIZE_HANDLE_DIAMETER);\n    if (angle) {\n        const rotatedPoint = rotatePoints([point], centerPoint, -angle)[0];\n        let result = resizeHandleRefs.find((resizeHandleRef) => {\n            return RectangleClient.isHit(RectangleClient.getRectangleByPoints([rotatedPoint, rotatedPoint]), resizeHandleRef.rectangle);\n        });\n        if (result) {\n            result.cursorClass = getRotatedResizeCursorClassByAngle(result.cursorClass, angle);\n        }\n        return result;\n    } else {\n        return resizeHandleRefs.find((resizeHandleRef) => {\n            return RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), resizeHandleRef.rectangle);\n        });\n    }\n};\n\nexport const getRotateHandleRectangle = (rectangle: RectangleClient) => {\n    return {\n        x: rectangle.x - ROTATE_HANDLE_DISTANCE_TO_ELEMENT - ROTATE_HANDLE_SIZE,\n        y: rectangle.y + rectangle.height + ROTATE_HANDLE_DISTANCE_TO_ELEMENT,\n        width: ROTATE_HANDLE_SIZE,\n        height: ROTATE_HANDLE_SIZE\n    };\n};\n","import {\n    ResizeRef,\n    ResizeState,\n    WithResizeOptions,\n    drawHandle,\n    getFirstTextManage,\n    getIndexByResizeHandle,\n    getResizeHandlePointByIndex,\n    getSymmetricHandleIndex,\n    isCornerHandle,\n    withResize,\n    resetPointsAfterResize,\n    normalizeShapePoints\n} from '@plait/common';\nimport {\n    PlaitBoard,\n    Point,\n    RectangleClient,\n    Transforms,\n    createG,\n    getRectangleByElements,\n    getSelectedElements,\n    isSelectionMoving,\n    getSelectionAngle,\n    rotatePoints,\n    rotatedDataPoints,\n    createDebugGenerator,\n    hasValidAngle,\n    isAxisChangedByAngle,\n    drawRectangle,\n    ACTIVE_STROKE_WIDTH,\n    SELECTION_BORDER_COLOR,\n    Path,\n    toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\nimport { PlaitDrawElement } from '../interfaces';\nimport { DrawTransforms } from '../transforms';\nimport { getHitRectangleResizeHandleRef } from '../utils/position/geometry';\nimport { getSnapResizingRefOptions, getSnapResizingRef } from '../utils/snap-resizing';\nimport { isGeometryIncludeText, isSingleSelectLine, isSingleSelectSwimlane } from '../utils';\n\nconst debugKey = 'debug:plait:resize-for-rotation';\nconst debugGenerator = createDebugGenerator(debugKey);\n\nexport interface BulkRotationRef {\n    angle: number;\n    offsetX: number;\n    offsetY: number;\n    newCenterPoint: Point;\n}\n\nexport function withDrawResize(board: PlaitBoard) {\n    const { afterChange, drawSelectionRectangle } = board;\n    let snapG: SVGGElement | null;\n    let handleG: SVGGElement | null;\n    let needCustomActiveRectangle = false;\n    let resizeActivePoints: Point[] | null = null;\n\n    const canResize = () => {\n        const elements = getSelectedElements(board);\n        return (\n            elements.length >= 1 &&\n            elements.every(\n                (el) =>\n                    (PlaitDrawElement.isDrawElement(el) || (PlaitDrawElement.isCustomGeometryElement(board, el) && el.points.length > 1)) &&\n                    !isSingleSelectLine(board) &&\n                    !isSingleSelectSwimlane(board)\n            )\n        );\n    };\n\n    const options: WithResizeOptions<PlaitDrawElement[]> = {\n        key: 'draw-elements',\n        canResize,\n        hitTest: (point: Point) => {\n            const elements = getSelectedElements(board) as PlaitDrawElement[];\n            const boundingRectangle = getRectangleByElements(board, elements, false);\n            const angle = getSelectionAngle(elements);\n            const handleRef = getHitRectangleResizeHandleRef(board, boundingRectangle, point, angle);\n            if (handleRef) {\n                return {\n                    element: [...elements],\n                    rectangle: boundingRectangle,\n                    handle: handleRef.handle,\n                    cursorClass: handleRef.cursorClass\n                };\n            }\n            return null;\n        },\n        onResize: (resizeRef: ResizeRef<PlaitDrawElement[]>, resizeState: ResizeState) => {\n            snapG?.remove();\n            debugGenerator.isDebug() && debugGenerator.clear();\n            const isFromCorner = isCornerHandle(board, resizeRef.handle);\n            const isAspectRatio = resizeState.isShift || (resizeRef.element.length === 1 && PlaitDrawElement.isImage(resizeRef.element[0]));\n            const centerPoint = RectangleClient.getCenterPoint(resizeRef.rectangle!);\n            const handleIndex = getIndexByResizeHandle(resizeRef.handle);\n            const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle!);\n            const angle = getSelectionAngle(resizeRef.element);\n            let bulkRotationRef: BulkRotationRef | undefined;\n            if (angle) {\n                bulkRotationRef = {\n                    angle: angle,\n                    offsetX: 0,\n                    offsetY: 0,\n                    newCenterPoint: [0, 0]\n                };\n                const [rotatedStartPoint, rotateEndPoint] = rotatePoints(\n                    [resizeState.startPoint, resizeState.endPoint],\n                    centerPoint,\n                    -bulkRotationRef.angle\n                );\n                resizeState.startPoint = rotatedStartPoint;\n                resizeState.endPoint = rotateEndPoint;\n            }\n            const resizeSnapRefOptions = getSnapResizingRefOptions(\n                board,\n                resizeRef,\n                resizeState,\n                {\n                    originPoint,\n                    handlePoint\n                },\n                isAspectRatio,\n                isFromCorner\n            );\n            const resizeSnapRef = getSnapResizingRef(board, resizeRef.element, resizeSnapRefOptions);\n            resizeActivePoints = resizeSnapRef.activePoints;\n            snapG = resizeSnapRef.snapG;\n            PlaitBoard.getElementTopHost(board).append(snapG);\n\n            if (bulkRotationRef) {\n                const boundingBoxCornerPoints = RectangleClient.getPoints(resizeRef.rectangle!);\n                const resizedBoundingBoxCornerPoints = boundingBoxCornerPoints.map((p) => {\n                    return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);\n                });\n                const newBoundingBox = RectangleClient.getRectangleByPoints(resizedBoundingBoxCornerPoints);\n\n                debugGenerator.isDebug() && debugGenerator.drawRectangle(board, newBoundingBox, { stroke: 'blue' });\n\n                const newBoundingBoxCenter = RectangleClient.getCenterPoint(newBoundingBox);\n                const adjustedNewBoundingBoxPoints = resetPointsAfterResize(\n                    RectangleClient.getRectangleByPoints(boundingBoxCornerPoints),\n                    RectangleClient.getRectangleByPoints(resizedBoundingBoxCornerPoints),\n                    centerPoint,\n                    newBoundingBoxCenter,\n                    bulkRotationRef.angle\n                );\n                const newCenter = RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(adjustedNewBoundingBoxPoints));\n                bulkRotationRef = Object.assign(bulkRotationRef, {\n                    offsetX: newCenter[0] - newBoundingBoxCenter[0],\n                    offsetY: newCenter[1] - newBoundingBoxCenter[1],\n                    newCenterPoint: newCenter\n                });\n\n                debugGenerator.isDebug() && debugGenerator.drawRectangle(board, adjustedNewBoundingBoxPoints);\n            }\n\n            resizeRef.element.forEach((target) => {\n                const path = PlaitBoard.findPath(board, target);\n                let points;\n                if (bulkRotationRef) {\n                    const reversedPoints = rotatedDataPoints(target.points, centerPoint, -bulkRotationRef.angle);\n                    points = reversedPoints.map((p: Point) => {\n                        return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);\n                    }) as [Point, Point];\n                    const adjustTargetPoints = points.map((p) => [\n                        p[0] + bulkRotationRef!.offsetX,\n                        p[1] + bulkRotationRef!.offsetY\n                    ]) as Point[];\n                    points = rotatedDataPoints(adjustTargetPoints, bulkRotationRef.newCenterPoint, bulkRotationRef.angle) as [Point, Point];\n                } else {\n                    if (hasValidAngle(target)) {\n                        needCustomActiveRectangle = true;\n                    }\n                    if (hasValidAngle(target) && isAxisChangedByAngle(target.angle!)) {\n                        points = getResizePointsByOtherwiseAxis(\n                            board,\n                            target.points,\n                            originPoint,\n                            resizeSnapRef.xZoom,\n                            resizeSnapRef.yZoom\n                        );\n                    } else {\n                        points = target.points.map((p) => {\n                            return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);\n                        });\n                    }\n                }\n\n                if (PlaitDrawElement.isGeometry(target)) {\n                    DrawTransforms.resizeGeometry(board, points as [Point, Point], path);\n                } else if (\n                    PlaitDrawElement.isLine(target) ||\n                    PlaitDrawElement.isCustomGeometryElement(board, target) ||\n                    PlaitDrawElement.isVectorLine(target)\n                ) {\n                    Transforms.setNode(board, { points }, path);\n                } else if (PlaitDrawElement.isImage(target)) {\n                    if (isAspectRatio) {\n                        Transforms.setNode(board, { points }, path);\n                    } else {\n                        // The image element does not follow the resize, but moves based on the center point.\n                        const targetRectangle = RectangleClient.getRectangleByPoints(target.points);\n                        const centerPoint = RectangleClient.getCenterPoint(targetRectangle);\n                        const newCenterPoint = movePointByZoomAndOriginPoint(\n                            centerPoint,\n                            originPoint,\n                            resizeSnapRef.xZoom,\n                            resizeSnapRef.yZoom\n                        );\n                        const newTargetRectangle = RectangleClient.getRectangleByCenterPoint(\n                            newCenterPoint,\n                            targetRectangle.width,\n                            targetRectangle.height\n                        );\n                        Transforms.setNode(board, { points: RectangleClient.getPoints(newTargetRectangle) }, path);\n                    }\n                }\n            });\n        },\n        afterResize: (resizeRef: ResizeRef<PlaitDrawElement[]>) => {\n            snapG?.remove();\n            snapG = null;\n            if (needCustomActiveRectangle) {\n                needCustomActiveRectangle = false;\n                resizeActivePoints = null;\n                const selectedElements = getSelectedElements(board);\n                Transforms.addSelectionWithTemporaryElements(board, selectedElements);\n            }\n        }\n    };\n\n    withResize<PlaitDrawElement[]>(board, options);\n\n    board.afterChange = () => {\n        afterChange();\n        if (handleG) {\n            handleG.remove();\n            handleG = null;\n        }\n        const selectedElements = getSelectedElements(board);\n        if (canResize() && !isSelectionMoving(board) && selectedElements.length > 1) {\n            handleG = generatorResizeHandles(board, resizeActivePoints!, needCustomActiveRectangle);\n            PlaitBoard.getActiveHost(board).append(handleG);\n        }\n    };\n\n    board.drawSelectionRectangle = () => {\n        if (needCustomActiveRectangle) {\n            const rectangle = RectangleClient.getRectangleByPoints(resizeActivePoints!);\n            const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n            return drawRectangle(board, RectangleClient.inflate(activeRectangle, ACTIVE_STROKE_WIDTH), {\n                stroke: SELECTION_BORDER_COLOR,\n                strokeWidth: ACTIVE_STROKE_WIDTH\n            });\n        }\n        return drawSelectionRectangle();\n    };\n\n    return board;\n}\n\nexport const getResizeOriginPointAndHandlePoint = (board: PlaitBoard, handleIndex: number, rectangle: RectangleClient) => {\n    const symmetricHandleIndex = getSymmetricHandleIndex(board, handleIndex);\n    const originPoint = getResizeHandlePointByIndex(rectangle as RectangleClient, symmetricHandleIndex);\n    const handlePoint = getResizeHandlePointByIndex(rectangle as RectangleClient, handleIndex);\n    return {\n        originPoint,\n        handlePoint\n    };\n};\n\nexport const getResizeZoom = (\n    resizeStartAndEnd: [Point, Point],\n    resizeOriginPoint: Point,\n    resizeHandlePoint: Point,\n    isFromCorner: boolean,\n    isAspectRatio: boolean\n) => {\n    const [startPoint, endPoint] = resizeStartAndEnd;\n    let xZoom = 0;\n    let yZoom = 0;\n    if (isFromCorner) {\n        if (isAspectRatio) {\n            let normalizedOffsetX = Point.getOffsetX(startPoint, endPoint);\n            xZoom = normalizedOffsetX / (resizeHandlePoint[0] - resizeOriginPoint[0]);\n            yZoom = xZoom;\n        } else {\n            let normalizedOffsetX = Point.getOffsetX(startPoint, endPoint);\n            let normalizedOffsetY = Point.getOffsetY(startPoint, endPoint);\n            xZoom = normalizedOffsetX / (resizeHandlePoint[0] - resizeOriginPoint[0]);\n            yZoom = normalizedOffsetY / (resizeHandlePoint[1] - resizeOriginPoint[1]);\n        }\n    } else {\n        const isHorizontal = Point.isHorizontal(resizeOriginPoint, resizeHandlePoint, 0.1) || false;\n        let normalizedOffset = isHorizontal ? Point.getOffsetX(startPoint, endPoint) : Point.getOffsetY(startPoint, endPoint);\n        let benchmarkOffset = isHorizontal ? resizeHandlePoint[0] - resizeOriginPoint[0] : resizeHandlePoint[1] - resizeOriginPoint[1];\n        const zoom = normalizedOffset / benchmarkOffset;\n        if (isAspectRatio) {\n            xZoom = zoom;\n            yZoom = zoom;\n        } else {\n            if (isHorizontal) {\n                xZoom = zoom;\n            } else {\n                yZoom = zoom;\n            }\n        }\n    }\n    return { xZoom, yZoom };\n};\n\nexport const movePointByZoomAndOriginPoint = (p: Point, resizeOriginPoint: Point, xZoom: number, yZoom: number) => {\n    const offsetX = (p[0] - resizeOriginPoint[0]) * xZoom;\n    const offsetY = (p[1] - resizeOriginPoint[1]) * yZoom;\n    return [p[0] + offsetX, p[1] + offsetY] as Point;\n};\n\n/**\n * 1. Rotate 90°\n * 2. Scale based on the rotated points\n * 3. Reverse rotate the scaled points by 90°\n */\nexport const getResizePointsByOtherwiseAxis = (\n    board: PlaitBoard,\n    points: Point[],\n    resizeOriginPoint: Point,\n    xZoom: number,\n    yZoom: number\n) => {\n    const currentRectangle = RectangleClient.getRectangleByPoints(points);\n    debugGenerator.isDebug() && debugGenerator.drawRectangle(board, currentRectangle, { stroke: 'black' });\n    let resultPoints = points;\n    resultPoints = rotatePoints(resultPoints, RectangleClient.getCenterPoint(currentRectangle), (1 / 2) * Math.PI);\n    debugGenerator.isDebug() && debugGenerator.drawRectangle(board, resultPoints, { stroke: 'blue' });\n    resultPoints = resultPoints.map((p) => {\n        return movePointByZoomAndOriginPoint(p, resizeOriginPoint, xZoom, yZoom);\n    });\n    debugGenerator.isDebug() && debugGenerator.drawRectangle(board, resultPoints);\n    const newRectangle = RectangleClient.getRectangleByPoints(resultPoints);\n    return rotatePoints(resultPoints, RectangleClient.getCenterPoint(newRectangle), -(1 / 2) * Math.PI);\n};\n\nexport const generatorResizeHandles = (board: PlaitBoard, resizeActivePoints?: Point[], needCustomActiveRectangle?: boolean) => {\n    const handleG = createG();\n    const elements = getSelectedElements(board) as PlaitDrawElement[];\n    const boundingRectangle = needCustomActiveRectangle\n        ? RectangleClient.getRectangleByPoints(resizeActivePoints!)\n        : getRectangleByElements(board, elements, false);\n    const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);\n    let corners = RectangleClient.getCornerPoints(boundingActiveRectangle);\n    const angle = getSelectionAngle(elements);\n    if (angle) {\n        const centerPoint = RectangleClient.getCenterPoint(boundingActiveRectangle);\n        corners = rotatePoints(corners, centerPoint, angle) as [Point, Point, Point, Point];\n    }\n    corners.forEach((corner) => {\n        const g = drawHandle(board, corner);\n        handleG.append(g);\n    });\n    return handleG;\n};\n","import {\n    ResizeRef,\n    ResizeState,\n    getDirectionFactorByDirectionComponent,\n    getUnitVectorByPointAndPoint,\n    resetPointsAfterResize\n} from '@plait/common';\nimport {\n    DirectionFactors,\n    PlaitBoard,\n    PlaitElement,\n    Point,\n    RectangleClient,\n    createDebugGenerator,\n    createG,\n    getSelectionAngle,\n    getRectangleByAngle,\n    getRectangleByElements,\n    SnapDelta,\n    SnapRef,\n    getSnapRectangles,\n    SNAP_TOLERANCE,\n    drawSolidLines,\n    drawPointSnapLines,\n    getTripleAxis,\n    getMinPointDelta\n} from '@plait/core';\nimport { getResizeZoom, movePointByZoomAndOriginPoint } from '../plugins/with-draw-resize';\nimport { PlaitCustomGeometry, PlaitDrawElement } from '../interfaces';\n\nconst debugKey = 'debug:plait:point-for-geometry';\nexport const debugGenerator = createDebugGenerator(debugKey);\n\nexport interface ResizeSnapRef extends SnapRef {\n    xZoom: number;\n    yZoom: number;\n    activePoints: Point[];\n}\n\nexport interface ResizeSnapOptions {\n    resizePoints: Point[];\n    activeRectangle: RectangleClient;\n    directionFactors: DirectionFactors;\n    isFromCorner: boolean;\n    isAspectRatio: boolean;\n    resizeOriginPoint?: Point[];\n    originPoint?: Point;\n    handlePoint?: Point;\n    isCreate?: boolean;\n}\n\nconst EQUAL_SPACING = 10;\n\nexport function getSnapResizingRefOptions(\n    board: PlaitBoard,\n    resizeRef: ResizeRef<PlaitDrawElement | PlaitCustomGeometry | (PlaitDrawElement | PlaitCustomGeometry)[]>,\n    resizeState: ResizeState,\n    resizeOriginPointAndHandlePoint: {\n        originPoint: Point;\n        handlePoint: Point;\n    },\n    isAspectRatio: boolean,\n    isFromCorner: boolean\n): ResizeSnapOptions {\n    const { originPoint, handlePoint } = resizeOriginPointAndHandlePoint;\n    const resizePoints: [Point, Point] = [resizeState.startPoint, resizeState.endPoint];\n    const { xZoom, yZoom } = getResizeZoom(resizePoints, originPoint, handlePoint, isFromCorner, isAspectRatio);\n\n    let activeElements: PlaitElement[];\n    let resizeOriginPoint: Point[] = [];\n    if (Array.isArray(resizeRef.element)) {\n        activeElements = resizeRef.element;\n        const rectangle = getRectangleByElements(board, resizeRef.element, false);\n        resizeOriginPoint = RectangleClient.getPoints(rectangle);\n    } else {\n        activeElements = [resizeRef.element];\n        resizeOriginPoint = resizeRef.element.points;\n    }\n\n    const points = resizeOriginPoint.map((p) => {\n        return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);\n    }) as [Point, Point];\n    const rectangle = RectangleClient.getRectangleByPoints(points);\n    const activeRectangle = getRectangleByAngle(rectangle, getSelectionAngle(activeElements));\n    const resizeHandlePoint = movePointByZoomAndOriginPoint(handlePoint, originPoint, xZoom, yZoom);\n    const [x, y] = getUnitVectorByPointAndPoint(originPoint, resizeHandlePoint);\n    return {\n        resizePoints,\n        resizeOriginPoint,\n        activeRectangle,\n        originPoint,\n        handlePoint,\n        directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],\n        isAspectRatio,\n        isFromCorner\n    };\n}\n\nexport function getSnapResizingRef(board: PlaitBoard, activeElements: PlaitElement[], resizeSnapOptions: ResizeSnapOptions): ResizeSnapRef {\n    const snapG = createG();\n    const snapRectangles = getSnapRectangles(board, activeElements);\n    let snapLineDelta = getIsometricLineDelta(snapRectangles, resizeSnapOptions);\n    if (snapLineDelta.deltaX === 0 && snapLineDelta.deltaY === 0) {\n        snapLineDelta = getSnapPointDelta(snapRectangles, resizeSnapOptions);\n    }\n    const angle = getSelectionAngle(activeElements);\n    const activePointAndZoom = getActivePointAndZoom(snapLineDelta, resizeSnapOptions, angle);\n    const isometricLinesG = drawIsometricSnapLines(board, activePointAndZoom.activePoints, snapRectangles, resizeSnapOptions, angle);\n    const pointLinesG = drawResizingPointSnapLines(board, activePointAndZoom.activePoints, snapRectangles, resizeSnapOptions, angle);\n    snapG.append(isometricLinesG, pointLinesG);\n    return { ...activePointAndZoom, ...snapLineDelta, snapG };\n}\n\nfunction getSnapPointDelta(snapRectangles: RectangleClient[], resizeSnapOptions: ResizeSnapOptions) {\n    let pointLineDelta: SnapDelta = {\n        deltaX: 0,\n        deltaY: 0\n    };\n    const { isAspectRatio, activeRectangle, directionFactors } = resizeSnapOptions;\n    const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;\n    const drawVertical = directionFactors[1] !== 0 || isAspectRatio;\n\n    if (drawHorizontal) {\n        const xSnapAxis = getTripleAxis(activeRectangle, true);\n        const pointX = directionFactors[0] === -1 ? xSnapAxis[0] : xSnapAxis[2];\n        const deltaX = getMinPointDelta(snapRectangles, pointX, true);\n        if (Math.abs(deltaX) < SNAP_TOLERANCE) {\n            pointLineDelta.deltaX = deltaX;\n            if (pointLineDelta.deltaX !== 0 && isAspectRatio) {\n                pointLineDelta.deltaY = pointLineDelta.deltaX / (activeRectangle.width / activeRectangle.height);\n                return pointLineDelta;\n            }\n        }\n    }\n\n    if (drawVertical) {\n        const ySnapAxis = getTripleAxis(activeRectangle, false);\n        const pointY = directionFactors[1] === -1 ? ySnapAxis[0] : ySnapAxis[2];\n        const deltaY = getMinPointDelta(snapRectangles, pointY, false);\n        if (Math.abs(deltaY) < SNAP_TOLERANCE) {\n            pointLineDelta.deltaY = deltaY;\n            if (pointLineDelta.deltaY !== 0 && isAspectRatio) {\n                pointLineDelta.deltaX = pointLineDelta.deltaY * (activeRectangle.width / activeRectangle.height);\n                return pointLineDelta;\n            }\n        }\n    }\n\n    return pointLineDelta;\n}\n\nfunction getActivePointAndZoom(resizeSnapDelta: SnapDelta, resizeSnapOptions: ResizeSnapOptions, angle: number) {\n    const { deltaX, deltaY } = resizeSnapDelta;\n    const { resizePoints, isCreate } = resizeSnapOptions;\n    const newResizePoints: [Point, Point] = [resizePoints[0], [resizePoints[1][0] + deltaX, resizePoints[1][1] + deltaY]];\n    let activePoints = newResizePoints;\n    let xZoom = 0;\n    let yZoom = 0;\n    if (!isCreate) {\n        const { originPoint, handlePoint, isFromCorner, isAspectRatio, resizeOriginPoint } = resizeSnapOptions;\n        const resizeZoom = getResizeZoom(newResizePoints, originPoint!, handlePoint!, isFromCorner, isAspectRatio);\n        xZoom = resizeZoom.xZoom;\n        yZoom = resizeZoom.yZoom;\n        activePoints = resizeOriginPoint!.map((p) => {\n            return movePointByZoomAndOriginPoint(p, originPoint!, xZoom, yZoom);\n        }) as [Point, Point];\n        if (angle) {\n            activePoints = resetPointsAfterResize(\n                RectangleClient.getRectangleByPoints(resizeOriginPoint!),\n                RectangleClient.getRectangleByPoints(activePoints),\n                RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(resizeOriginPoint!)),\n                RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(activePoints)),\n                angle\n            );\n        }\n    }\n\n    return {\n        xZoom,\n        yZoom,\n        activePoints\n    };\n}\n\nfunction getIsometricLineDelta(snapRectangles: RectangleClient[], resizeSnapOptions: ResizeSnapOptions) {\n    let isometricLineDelta: SnapDelta = {\n        deltaX: 0,\n        deltaY: 0\n    };\n    const { isAspectRatio, activeRectangle } = resizeSnapOptions;\n    const widthSnapRectangle = snapRectangles.find((item) => Math.abs(item.width - activeRectangle.width) < SNAP_TOLERANCE);\n    if (widthSnapRectangle) {\n        const deltaWidth = widthSnapRectangle.width - activeRectangle.width;\n        isometricLineDelta.deltaX = deltaWidth * resizeSnapOptions.directionFactors[0];\n        if (isAspectRatio) {\n            const deltaHeight = deltaWidth / (activeRectangle.width / activeRectangle.height);\n            isometricLineDelta.deltaY = deltaHeight * resizeSnapOptions.directionFactors[1];\n            return isometricLineDelta;\n        }\n    }\n    const heightSnapRectangle = snapRectangles.find((item) => Math.abs(item.height - activeRectangle.height) < SNAP_TOLERANCE);\n    if (heightSnapRectangle) {\n        const deltaHeight = heightSnapRectangle.height - activeRectangle.height;\n        isometricLineDelta.deltaY = deltaHeight * resizeSnapOptions.directionFactors[1];\n        if (isAspectRatio) {\n            const deltaWidth = deltaHeight * (activeRectangle.width / activeRectangle.height);\n            isometricLineDelta.deltaX = deltaWidth * resizeSnapOptions.directionFactors[0];\n            return isometricLineDelta;\n        }\n    }\n    return isometricLineDelta;\n}\n\nfunction getIsometricLinePoints(rectangle: RectangleClient, isHorizontal: boolean): Point[] {\n    return isHorizontal\n        ? [\n              [rectangle.x, rectangle.y - EQUAL_SPACING],\n              [rectangle.x + rectangle.width, rectangle.y - EQUAL_SPACING]\n          ]\n        : [\n              [rectangle.x - EQUAL_SPACING, rectangle.y],\n              [rectangle.x - EQUAL_SPACING, rectangle.y + rectangle.height]\n          ];\n}\n\nfunction drawResizingPointSnapLines(\n    board: PlaitBoard,\n    activePoints: Point[],\n    snapRectangles: RectangleClient[],\n    resizeSnapOptions: ResizeSnapOptions,\n    angle: number\n) {\n    debugGenerator.isDebug() && debugGenerator.clear();\n    const rectangle = RectangleClient.getRectangleByPoints(activePoints);\n    const activeRectangle = getRectangleByAngle(rectangle, angle);\n    const { isAspectRatio, directionFactors } = resizeSnapOptions;\n    const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;\n    const drawVertical = directionFactors[1] !== 0 || isAspectRatio;\n    return drawPointSnapLines(board, activeRectangle, snapRectangles, drawHorizontal, drawVertical);\n}\n\nfunction drawIsometricSnapLines(\n    board: PlaitBoard,\n    activePoints: Point[],\n    snapRectangles: RectangleClient[],\n    resizeSnapOptions: ResizeSnapOptions,\n    angle: number\n) {\n    let widthIsometricPoints = [];\n    let heightIsometricPoints = [];\n\n    const drawHorizontalLine = resizeSnapOptions.directionFactors[0] !== 0 || resizeSnapOptions.isAspectRatio;\n    const drawVerticalLine = resizeSnapOptions.directionFactors[1] !== 0 || resizeSnapOptions.isAspectRatio;\n    const rectangle = RectangleClient.getRectangleByPoints(activePoints);\n    const activeRectangle = getRectangleByAngle(rectangle, angle);\n    for (let snapRectangle of snapRectangles) {\n        if (activeRectangle.width === snapRectangle.width && drawHorizontalLine) {\n            widthIsometricPoints.push(getIsometricLinePoints(snapRectangle, true));\n        }\n        if (activeRectangle.height === snapRectangle.height && drawVerticalLine) {\n            heightIsometricPoints.push(getIsometricLinePoints(snapRectangle, false));\n        }\n    }\n    if (widthIsometricPoints.length && drawHorizontalLine) {\n        widthIsometricPoints.push(getIsometricLinePoints(activeRectangle, true));\n    }\n    if (heightIsometricPoints.length && drawVerticalLine) {\n        heightIsometricPoints.push(getIsometricLinePoints(activeRectangle, false));\n    }\n\n    const isometricLines = [...widthIsometricPoints, ...heightIsometricPoints];\n    return drawSolidLines(board, isometricLines);\n}\n","import { PlaitBoard, PlaitElement, Point, Transforms, getElementById, idCreator } from '@plait/core';\nimport { buildClipboardData as basicBuildClipboard, insertClipboardData as basicInsertClipboard } from '@plait/common';\nimport { PlaitArrowLine, PlaitDrawElement, PlaitGeometry } from '../interfaces';\nimport { getConnectionPoint } from './arrow-line/arrow-line-common';\nimport { PlaitTable } from '../interfaces/table';\nimport { updateCellIds, updateRowOrColumnIds } from './table';\n\nexport const buildClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n    return basicBuildClipboard(board, elements, startPoint, (element: PlaitElement) => {\n        if (PlaitDrawElement.isArrowLine(element)) {\n            let source = { ...element.source };\n            let target = { ...element.target };\n            let points = [...element.points];\n            if (element.source.boundId) {\n                points[0] = getConnectionPoint(getElementById<PlaitGeometry>(board, element.source.boundId)!, element.source.connection!);\n                if (!getElementById(board, element.source.boundId, elements)) {\n                    delete source.boundId;\n                    delete source.connection;\n                }\n            }\n            if (element.target.boundId) {\n                points[points.length - 1] = getConnectionPoint(\n                    getElementById<PlaitGeometry>(board, element.target.boundId)!,\n                    element.target.connection!\n                );\n                if (!getElementById(board, element.target.boundId, elements)) {\n                    delete target.boundId;\n                    delete target.connection;\n                }\n            }\n            points = points.map((point) => [point[0] - startPoint[0], point[1] - startPoint[1]]);\n            return { ...element, points, source, target } as PlaitArrowLine;\n        }\n        return undefined;\n    });\n};\n\nexport const insertClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n    basicInsertClipboard(board, elements, startPoint, (element: PlaitElement, idsMap: Record<string, string>) => {\n        if (PlaitDrawElement.isArrowLine(element)) {\n            if (element.source.boundId) {\n                const boundElement = elements.find((item) => [element.source.boundId, idsMap[element.source.boundId!]].includes(item.id));\n                if (boundElement) {\n                    element.source.boundId = idsMap[element.source.boundId];\n                }\n            }\n            if (element.target.boundId) {\n                const boundElement = elements.find((item) => [element.target.boundId, idsMap[element.target.boundId!]].includes(item.id));\n                if (boundElement) {\n                    element.target.boundId = idsMap[element.target.boundId];\n                }\n            }\n        }\n        if (PlaitDrawElement.isElementByTable(element)) {\n            updateRowOrColumnIds(element as PlaitTable, 'row');\n            updateRowOrColumnIds(element as PlaitTable, 'column');\n            updateCellIds(element.cells);\n        }\n    });\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndSegments,\n    isPointInPolygon,\n    setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getTextRectangle } from '../../utils';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nconst heightRatio = 3 / 4;\n\nexport const CommentEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const points = getCommentPoints(rectangle);\n        const rs = PlaitBoard.getRoughSVG(board);\n        const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });\n        setStrokeLinecap(polygon, 'round');\n        return polygon;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const parallelogramPoints = getCommentPoints(rectangle);\n        return isPointInPolygon(point, parallelogramPoints);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return getCommentPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, getCommentPoints(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = getCommentPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const textRectangle = getTextRectangle(board, element);\n        textRectangle.y = elementRectangle.y + (elementRectangle.height * heightRatio - textRectangle.height) / 2;\n        return textRectangle;\n    }\n};\n\nexport const getCommentPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height * heightRatio],\n        [rectangle.x + (rectangle.width * 3) / 5, rectangle.y + rectangle.height * heightRatio],\n        [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n        [rectangle.x + (rectangle.width * 2) / 5, rectangle.y + rectangle.height * heightRatio],\n        [rectangle.x, rectangle.y + rectangle.height * heightRatio]\n    ];\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    distanceBetweenPointAndPoint,\n    getNearestPointBetweenPointAndSegments,\n    isPointInPolygon,\n    setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getCrossingPointBetweenPointAndPolygon, getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport interface CreateOptions {\n    getPolygonPoints: (rectangle: RectangleClient) => Point[];\n    getConnectorPoints?: (rectangle: RectangleClient) => Point[];\n    getTextRectangle?: (board: PlaitBoard, element: PlaitGeometry) => RectangleClient;\n}\n\nexport function createPolygonEngine(options: CreateOptions): ShapeEngine {\n    const getPoints = options.getPolygonPoints;\n    const engine: ShapeEngine = {\n        draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n            const points = getPoints(rectangle);\n            const rs = PlaitBoard.getRoughSVG(board);\n            const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });\n            setStrokeLinecap(polygon, 'round');\n            return polygon;\n        },\n        isInsidePoint(rectangle: RectangleClient, point: Point) {\n            const points = getPoints(rectangle);\n            return isPointInPolygon(point, points);\n        },\n        getCornerPoints(rectangle: RectangleClient) {\n            return getPoints(rectangle);\n        },\n        getNearestPoint(rectangle: RectangleClient, point: Point) {\n            return getNearestPointBetweenPointAndSegments(point, getPoints(rectangle));\n        },\n        getNearestCrossingPoint(rectangle: RectangleClient, point: Point) {\n            const corners = getPoints(rectangle);\n            const crossingPoints = getCrossingPointBetweenPointAndPolygon(corners, point);\n            let nearestPoint = crossingPoints[0];\n            let nearestDistance = distanceBetweenPointAndPoint(point[0], point[1], nearestPoint[0], nearestPoint[1]);\n            crossingPoints\n                .filter((v, index) => index > 0)\n                .forEach((crossingPoint) => {\n                    let distance = distanceBetweenPointAndPoint(point[0], point[1], crossingPoint[0], crossingPoint[1]);\n                    if (distance < nearestDistance) {\n                        nearestDistance = distance;\n                        nearestPoint = crossingPoint;\n                    }\n                });\n\n            return nearestPoint;\n        },\n        getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n            const corners = getPoints(rectangle);\n            const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n            return getPolygonEdgeByConnectionPoint(corners, point);\n        },\n        getConnectorPoints(rectangle: RectangleClient) {\n            if (options.getConnectorPoints) {\n                return options.getConnectorPoints(rectangle);\n            }\n            return getPoints(rectangle);\n        }\n    };\n    if (options.getTextRectangle) {\n        engine.getTextRectangle = options.getTextRectangle;\n    }\n    return engine;\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\nexport const getCrossPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x + rectangle.width / 4, rectangle.y],\n        [rectangle.x + (rectangle.width * 3) / 4, rectangle.y],\n        [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 4],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 4],\n        [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 3) / 4],\n        [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + (rectangle.height * 3) / 4],\n        [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n        [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n        [rectangle.x + rectangle.width / 4, rectangle.y + (rectangle.height * 3) / 4],\n        [rectangle.x, rectangle.y + (rectangle.height * 3) / 4],\n        [rectangle.x, rectangle.y + rectangle.height / 4],\n        [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height / 4]\n    ];\n};\n\nexport const CrossEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getCrossPoints,\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const widthRatio = 1 / 2;\n        return getCustomTextRectangle(board, element, widthRatio);\n    }\n});\n","import { PlaitBoard, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle, getStrokeWidthByElement, getTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants/geometry';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const DiamondEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: RectangleClient.getEdgeCenterPoints,\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        return getCustomTextRectangle(board, element, 1 / 2);\n    }\n});\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getEllipseTangentSlope,\n    getVectorFromPointAndSlope,\n    isPointInEllipse,\n    getNearestPointBetweenPointAndEllipse,\n    setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\n\nexport interface CreateEllipseOptions {\n    draw?: (board: PlaitBoard, rectangle: RectangleClient, options: Options) => SVGGElement;\n    getTextRectangle?: (board: PlaitBoard, element: PlaitGeometry) => RectangleClient;\n}\n\nexport function createEllipseEngine(createOptions?: CreateEllipseOptions): ShapeEngine {\n    const engine: ShapeEngine = {\n        draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n            const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n            const rs = PlaitBoard.getRoughSVG(board);\n            const shape = rs.ellipse(centerPoint[0], centerPoint[1], rectangle.width, rectangle.height, { ...options, fillStyle: 'solid' });\n            setStrokeLinecap(shape, 'round');\n            return shape;\n        },\n        isInsidePoint(rectangle: RectangleClient, point: Point) {\n            const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n            return isPointInEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);\n        },\n        getCornerPoints(rectangle: RectangleClient) {\n            return RectangleClient.getEdgeCenterPoints(rectangle);\n        },\n        getNearestPoint(rectangle: RectangleClient, point: Point) {\n            const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n            return getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);\n        },\n        getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n            const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n            const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n            const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n            const a = rectangle.width / 2;\n            const b = rectangle.height / 2;\n            const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n            const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n            return vector;\n        },\n        getConnectorPoints(rectangle: RectangleClient) {\n            return RectangleClient.getEdgeCenterPoints(rectangle);\n        },\n        getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n            return getCustomTextRectangle(board, element, 3 / 4);\n        }\n    };\n\n    if (createOptions?.draw) {\n        engine.draw = createOptions.draw;\n    }\n    if (createOptions?.getTextRectangle) {\n        engine.getTextRectangle = createOptions.getTextRectangle;\n    }\n\n    return engine;\n}\n\nexport const EllipseEngine: ShapeEngine = createEllipseEngine();\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getHexagonPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x + rectangle.width / 4, rectangle.y],\n        [rectangle.x + (rectangle.width * 3) / 4, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n        [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n        [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n        [rectangle.x, rectangle.y + rectangle.height / 2]\n    ];\n};\n\nexport const HexagonEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getHexagonPoints,\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        return getCustomTextRectangle(board, element, 3 / 4);\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getLeftArrowPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x, rectangle.y + rectangle.height / 2],\n        [rectangle.x + rectangle.width * 0.32, rectangle.y],\n        [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.2],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.2],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.8],\n        [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.8],\n        [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height]\n    ];\n};\n\nexport const LeftArrowEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getLeftArrowPoints,\n    getConnectorPoints: (rectangle: RectangleClient) => {\n        return [\n            [rectangle.x, rectangle.y + rectangle.height / 2],\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n        ];\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const customTextRectangle = getCustomTextRectangle(board, element, 1 - 0.32);\n        customTextRectangle.x = elementRectangle.x + elementRectangle.width * 0.32 + ShapeDefaultSpace.rectangleAndText;\n        return customTextRectangle;\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getOctagonPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x + (rectangle.width * 3) / 10, rectangle.y],\n        [rectangle.x + (rectangle.width * 7) / 10, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 3) / 10],\n        [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 7) / 10],\n        [rectangle.x + (rectangle.width * 7) / 10, rectangle.y + rectangle.height],\n        [rectangle.x + (rectangle.width * 3) / 10, rectangle.y + rectangle.height],\n        [rectangle.x, rectangle.y + (rectangle.height * 7) / 10],\n        [rectangle.x, rectangle.y + (rectangle.height * 3) / 10]\n    ];\n};\n\nexport const OctagonEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getOctagonPoints,\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        return getCustomTextRectangle(board, element, 3 / 4);\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getParallelogramPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x + rectangle.width / 4, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y],\n        [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n        [rectangle.x, rectangle.y + rectangle.height]\n    ];\n};\nexport const ParallelogramEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getParallelogramPoints,\n    getConnectorPoints: (rectangle: RectangleClient) => {\n        const cornerPoints = getParallelogramPoints(rectangle);\n        return getCenterPointsOnPolygon(cornerPoints);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        return getCustomTextRectangle(board, element, 1 / 2);\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getPentagonPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x + rectangle.width / 2, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 2) / 5],\n        [rectangle.x + (rectangle.width * 4) / 5, rectangle.y + rectangle.height],\n        [rectangle.x + rectangle.width / 5, rectangle.y + rectangle.height],\n        [rectangle.x, rectangle.y + (rectangle.height * 2) / 5]\n    ];\n};\n\nexport const PentagonEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getPentagonPoints,\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const customTextRectangle = getCustomTextRectangle(board, element, 3 / 5);\n        const startY = elementRectangle.y + elementRectangle.height / 5;\n        const endY = elementRectangle.y + elementRectangle.height;\n        customTextRectangle.y = startY + (endY - startY - customTextRectangle.height) / 2;\n        return customTextRectangle;\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getPentagonArrowPoints = (rectangle: RectangleClient): Point[] => {\n    const wider = rectangle.width > rectangle.height / 2;\n    return [\n        [rectangle.x, rectangle.y],\n        [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n        [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y + rectangle.height],\n        [rectangle.x, rectangle.y + rectangle.height]\n    ];\n};\n\nexport const PentagonArrowEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getPentagonArrowPoints,\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const customTextRectangle = getCustomTextRectangle(board, element, 3 / 4);\n        customTextRectangle.x = elementRectangle.x + ShapeDefaultSpace.rectangleAndText;\n        return customTextRectangle;\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getProcessArrowPoints = (rectangle: RectangleClient): Point[] => {\n    const wider = rectangle.width > rectangle.height / 2;\n    return [\n        [rectangle.x, rectangle.y],\n        [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n        [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y + rectangle.height],\n        [rectangle.x, rectangle.y + rectangle.height],\n        [rectangle.x + (wider ? rectangle.height / 2 : rectangle.width), rectangle.y + rectangle.height / 2]\n    ];\n};\n\nexport const ProcessArrowEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getProcessArrowPoints,\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const wider = elementRectangle.width > elementRectangle.height + 20;\n        const widthRatio = wider ? (elementRectangle.width - elementRectangle.height) / elementRectangle.width : 3 / 4;\n        const customTextRectangle = getCustomTextRectangle(board, element, widthRatio);\n        return customTextRectangle;\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getRightArrowPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x, rectangle.y + rectangle.height * 0.2],\n        [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height * 0.2],\n        [rectangle.x + rectangle.width * 0.68, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n        [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height],\n        [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height * 0.8],\n        [rectangle.x, rectangle.y + rectangle.height * 0.8]\n    ];\n};\n\nexport const RightArrowEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getRightArrowPoints,\n    getConnectorPoints: (rectangle: RectangleClient) => {\n        return [\n            [rectangle.x, rectangle.y + rectangle.height / 2],\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n        ];\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const customTextRectangle = getCustomTextRectangle(board, element, 1 - 0.32);\n        customTextRectangle.x = elementRectangle.x + ShapeDefaultSpace.rectangleAndText;\n        return customTextRectangle;\n    }\n});\n","import { PlaitBoard, Point, PointOfRectangle, RectangleClient, drawRectangle, getNearestPointBetweenPointAndSegments } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport const RectangleEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        return drawRectangle(board, rectangle, { ...options, fillStyle: 'solid' });\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    drawRoundRectangle,\n    getNearestPointBetweenPointAndSegments,\n    isPointInRoundRectangle,\n    getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from './rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport const RoundRectangleEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        return drawRoundRectangle(\n            PlaitBoard.getRoughSVG(board),\n            rectangle.x,\n            rectangle.y,\n            rectangle.x + rectangle.width,\n            rectangle.y + rectangle.height,\n            { ...options, fillStyle: 'solid' },\n            false,\n            getRoundRectangleRadius(rectangle)\n        );\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        return isPointInRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    }\n};\n\nexport const getRoundRectangleRadius = (rectangle: RectangleClient) => {\n    return Math.min(rectangle.width * 0.1, rectangle.height * 0.1);\n};\n\nexport function getNearestPointBetweenPointAndRoundRectangle(point: Point, rectangle: RectangleClient, radius: number) {\n    const { x: rectX, y: rectY, width, height } = rectangle;\n    const cornerPoints = RectangleClient.getCornerPoints(rectangle);\n    let result = getNearestPointBetweenPointAndSegments(point, cornerPoints);\n    let circleCenter: Point | null = null;\n\n    const inLeftTop = point[0] >= rectX && point[0] <= rectX + radius && point[1] >= rectY && point[1] <= rectY + radius;\n    if (inLeftTop) {\n        circleCenter = [rectX + radius, rectY + radius];\n    }\n    const inLeftBottom =\n        point[0] >= rectX && point[0] <= rectX + radius && point[1] >= rectY + height && point[1] <= rectY + height - radius;\n    if (inLeftBottom) {\n        circleCenter = [rectX + radius, rectY + height - radius];\n    }\n    const inRightTop = point[0] >= rectX + width - radius && point[0] <= rectX + width && point[1] >= rectY && point[1] <= rectY + radius;\n    if (inRightTop) {\n        circleCenter = [rectX + width - radius, rectY + radius];\n    }\n    const inRightBottom =\n        point[0] >= rectX + width - radius &&\n        point[0] <= rectX + width &&\n        point[1] >= rectY + height - radius &&\n        point[1] <= rectY + height;\n    if (inRightBottom) {\n        circleCenter = [rectX + width - radius, rectY + height - radius];\n    }\n    if (circleCenter) {\n        result = getNearestPointBetweenPointAndEllipse(point, circleCenter, radius, radius);\n    }\n    return result;\n}\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndSegments,\n    isPointInPolygon,\n    isPointInRoundRectangle,\n    setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getRoundRectangleRadius } from './round-rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getTextRectangle } from '../../utils/common';\n\nconst heightRatio = 3 / 4;\n\nexport const RoundCommentEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const x1 = rectangle.x;\n        const y1 = rectangle.y;\n        const x2 = rectangle.x + rectangle.width;\n        const y2 = rectangle.y + rectangle.height * heightRatio;\n        const radius = getRoundRectangleRadius(rectangle);\n\n        const point1 = [x1 + radius, y1];\n        const point2 = [x2 - radius, y1];\n        const point3 = [x2, y1 + radius];\n        const point4 = [x2, y2 - radius];\n        const point5 = [x2 - radius, y2];\n        const point6 = [x1 + radius, y2];\n        const point7 = [x1, y2 - radius];\n        const point8 = [x1, y1 + radius];\n\n        const point9 = [x1 + rectangle.width / 4, y2];\n        const point10 = [x1 + rectangle.width / 4, rectangle.y + rectangle.height];\n        const point11 = [x1 + rectangle.width / 2, y2];\n\n        const shape = rs.path(\n            `M${point2[0]} ${point2[1]} A ${radius} ${radius}, 0, 0, 1, ${point3[0]} ${point3[1]} L ${point4[0]} ${point4[1]} A ${radius} ${radius}, 0, 0, 1, ${point5[0]} ${point5[1]} L    ${point11[0]} ${point11[1]}  ${point10[0]} ${point10[1]}   ${point9[0]} ${point9[1]}   ${point6[0]} ${point6[1]} A ${radius} ${radius}, 0, 0, 1, ${point7[0]} ${point7[1]} L ${point8[0]} ${point8[1]} A ${radius} ${radius}, 0, 0, 1, ${point1[0]} ${point1[1]} Z`,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const points: Point[] = [\n            [rectangle.x + rectangle.width / 4, rectangle.y + (rectangle.height * 3) / 4],\n            [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n            [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height * 3) / 4]\n        ];\n        rectangle.height = (rectangle.height * 3) / 4;\n        return isPointInPolygon(point, points) || isPointInRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return getRoundCommentPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, getRoundCommentPoints(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = getRoundCommentPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return [\n            [rectangle.x + rectangle.width / 2, rectangle.y],\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n            [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * heightRatio],\n            [rectangle.x, rectangle.y + rectangle.height / 2]\n        ];\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const textRectangle = getTextRectangle(board, element);\n        textRectangle.y = elementRectangle.y + (elementRectangle.height * heightRatio - textRectangle.height) / 2;\n        return textRectangle;\n    }\n};\n\nexport const getRoundCommentPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height * heightRatio],\n        [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * heightRatio],\n        [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n        [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height * heightRatio],\n        [rectangle.x, rectangle.y + rectangle.height * heightRatio]\n    ];\n};\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getTrapezoidPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x + rectangle.width * 0.15, rectangle.y],\n        [rectangle.x + rectangle.width * 0.85, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n        [rectangle.x, rectangle.y + rectangle.height]\n    ];\n};\n\nexport const TrapezoidEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getTrapezoidPoints,\n    getConnectorPoints(rectangle: RectangleClient) {\n        const points = getTrapezoidPoints(rectangle);\n        return getCenterPointsOnPolygon(points);\n    },\n    getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n        return getCustomTextRectangle(board, element, 3 / 4);\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getTrianglePoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x + rectangle.width / 2, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n        [rectangle.x, rectangle.y + rectangle.height]\n    ];\n};\n\nexport const TriangleEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getTrianglePoints,\n    getConnectorPoints(rectangle: RectangleClient) {\n        const cornerPoints = getTrianglePoints(rectangle);\n        const lineCenterPoints = getCenterPointsOnPolygon(cornerPoints);\n        return [...lineCenterPoints, ...cornerPoints];\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const customTextRectangle = getCustomTextRectangle(board, element, 1 / 2);\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        customTextRectangle.y =\n            elementRectangle.y +\n            (elementRectangle.height * 2.5) / 5 +\n            (elementRectangle.height - (elementRectangle.height * 2.5) / 5 - customTextRectangle.height) / 2;\n        return customTextRectangle;\n    }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\n\nexport const getTwoWayArrowPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x, rectangle.y + rectangle.height / 2],\n        [rectangle.x + (rectangle.width * 8) / 25, rectangle.y],\n        [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + rectangle.height / 5],\n        [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + rectangle.height / 5],\n        [rectangle.x + (rectangle.width * 17) / 25, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n        [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + rectangle.height],\n        [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + (rectangle.height * 4) / 5],\n        [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + (rectangle.height * 4) / 5],\n        [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + rectangle.height]\n    ];\n};\n\nexport const TwoWayArrowEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getTwoWayArrowPoints,\n    getConnectorPoints: (rectangle: RectangleClient) => {\n        return [\n            [rectangle.x, rectangle.y + rectangle.height / 2],\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n        ];\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getStarPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height * 75) / 91],\n        [rectangle.x + (rectangle.width * 18.61) / 96, rectangle.y + rectangle.height],\n        [rectangle.x + (rectangle.width * 24.2235871) / 96, rectangle.y + (rectangle.height * 57.7254249) / 91],\n        [rectangle.x, rectangle.y + (rectangle.height * 34.5491503) / 91],\n        [rectangle.x + (rectangle.width * 33.3053687) / 96, rectangle.y + (rectangle.height * 29.7745751) / 91],\n        [rectangle.x + rectangle.width / 2, rectangle.y],\n        [rectangle.x + (rectangle.width * 62.6946313) / 96, rectangle.y + (rectangle.height * 29.7745751) / 91],\n        [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 34.5491503) / 91],\n        [rectangle.x + (rectangle.width * 71.7764129) / 96, rectangle.y + (rectangle.height * 57.7254249) / 91],\n        [rectangle.x + (rectangle.width * 77.3892626) / 96, rectangle.y + rectangle.height]\n    ];\n};\n\nexport const StarEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getStarPoints,\n    getConnectorPoints: (rectangle: RectangleClient) => {\n        const points = getStarPoints(rectangle);\n        return [points[1], points[3], points[5], points[7], points[9]];\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const customTextRectangle = getCustomTextRectangle(board, element, 1 / 2);\n        customTextRectangle.y =\n            elementRectangle.y +\n            elementRectangle.height / 5 +\n            (elementRectangle.height - elementRectangle.height / 5 - customTextRectangle.height) / 2;\n        return customTextRectangle;\n    }\n});\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    drawRoundRectangle,\n    getEllipseTangentSlope,\n    getNearestPointBetweenPointAndSegments,\n    getVectorFromPointAndSlope,\n    isPointInRoundRectangle,\n    getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\n\nexport const TerminalEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        return drawRoundRectangle(\n            PlaitBoard.getRoughSVG(board),\n            rectangle.x,\n            rectangle.y,\n            rectangle.x + rectangle.width,\n            rectangle.y + rectangle.height,\n            { ...options, fillStyle: 'solid' },\n            false,\n            getStartEndRadius(rectangle)\n        );\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        return isPointInRoundRectangle(point, rectangle, getStartEndRadius(rectangle));\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndRoundRectangle(point, rectangle, getStartEndRadius(rectangle));\n    },\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        const radius = getStartEndRadius(rectangle);\n        const center = getBoundCenterOfRoundRectangle(rectangle, radius, connectionPoint);\n        if (center) {\n            const point = [connectionPoint[0] - center[0], -(connectionPoint[1] - center[1])];\n            const a = radius;\n            const b = radius;\n            const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n            return getVectorFromPointAndSlope(point[0], point[1], slope);\n        }\n        return null;\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    }\n};\n\nexport const getStartEndRadius = (rectangle: RectangleClient) => {\n    return Math.min(rectangle.width / 2, rectangle.height / 2);\n};\n\nexport function getNearestPointBetweenPointAndRoundRectangle(point: Point, rectangle: RectangleClient, radius: number) {\n    let result: Point | null = null;\n    let boundCenter: Point | null = getBoundCenterOfRoundRectangle(rectangle, radius, point);\n    if (boundCenter) {\n        result = getNearestPointBetweenPointAndEllipse(point, boundCenter, radius, radius);\n    } else {\n        const cornerPoints = RectangleClient.getCornerPoints(rectangle);\n        result = getNearestPointBetweenPointAndSegments(point, cornerPoints);\n    }\n    return result;\n}\n\nexport function getBoundCenterOfRoundRectangle(rectangle: RectangleClient, radius: number, point: Point) {\n    const { x, y, width, height } = rectangle;\n    let center: Point | null = null;\n    const inLeftTop = point[0] >= x && point[0] <= x + radius && point[1] >= y && point[1] <= y + radius;\n    if (inLeftTop) {\n        center = [x + radius, y + radius];\n    }\n    const inLeftBottom = point[0] >= x && point[0] <= x + radius && point[1] >= y + height - radius && point[1] <= y + height;\n    if (inLeftBottom) {\n        center = [x + radius, y + height - radius];\n    }\n    const inRightTop = point[0] >= x + width - radius && point[0] <= x + width && point[1] >= y && point[1] <= y + radius;\n    if (inRightTop) {\n        center = [x + width - radius, y + radius];\n    }\n    const inRightBottom =\n        point[0] >= x + width - radius && point[0] <= x + width && point[1] >= y + height - radius && point[1] <= y + height;\n    if (inRightBottom) {\n        center = [x + width - radius, y + height - radius];\n    }\n    return center;\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const getManualInputPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x, rectangle.y + rectangle.height / 4],\n        [rectangle.x + rectangle.width, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n        [rectangle.x, rectangle.y + rectangle.height]\n    ];\n};\n\nexport const ManualInputEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getManualInputPoints,\n    getConnectorPoints: (rectangle: RectangleClient) => {\n        const cornerPoints = getManualInputPoints(rectangle);\n        return getCenterPointsOnPolygon(cornerPoints);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n            y: elementRectangle.y + elementRectangle.height / 4 + ((elementRectangle.height * 3) / 4 - textSize.height) / 2\n        };\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getPreparationPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x, rectangle.y + rectangle.height / 2],\n        [rectangle.x + rectangle.width / 6, rectangle.y],\n        [rectangle.x + (rectangle.width * 5) / 6, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n        [rectangle.x + (rectangle.width * 5) / 6, rectangle.y + rectangle.height],\n        [rectangle.x + rectangle.width / 6, rectangle.y + rectangle.height]\n    ];\n};\n\nexport const PreparationEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getPreparationPoints,\n    getConnectorPoints: (rectangle: RectangleClient) => {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n        const rectangle = getCustomTextRectangle(board, element, 2 / 3);\n        return rectangle;\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\n\nexport const getManualLoopPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y],\n        [rectangle.x + (rectangle.width * 7) / 8, rectangle.y + rectangle.height],\n        [rectangle.x + rectangle.width / 8, rectangle.y + rectangle.height]\n    ];\n};\nexport const ManualLoopEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getManualLoopPoints,\n    getConnectorPoints: (rectangle: RectangleClient) => {\n        const cornerPoints = getManualLoopPoints(rectangle);\n        return getCenterPointsOnPolygon(cornerPoints);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const rectangle = getCustomTextRectangle(board, element, 3 / 4);\n        return rectangle;\n    }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\n\nexport const getMergePoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y],\n        [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height]\n    ];\n};\n\nexport const MergeEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getMergePoints,\n    getConnectorPoints: (rectangle: RectangleClient) => {\n        const cornerPoints = getMergePoints(rectangle);\n        const lineCenterPoints = getCenterPointsOnPolygon(cornerPoints);\n        return [...lineCenterPoints, ...cornerPoints];\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n        const width = (originWidth * 2) / 3;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n            y: elementRectangle.y + ((elementRectangle.height * 2) / 3 - textSize.height) / 2\n        };\n    }\n});\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getEllipseTangentSlope,\n    getNearestPointBetweenPointAndSegments,\n    getVectorFromPointAndSlope,\n    isPointInEllipse,\n    setStrokeLinecap,\n    getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\n\nexport const DelayEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x} ${rectangle.y} L${rectangle.x + (rectangle.width * 3) / 4} ${rectangle.y} A  ${rectangle.width / 4} ${\n                rectangle.height / 2\n            }, 0, 0, 1,${rectangle.x + (rectangle.width * 3) / 4} ${rectangle.y + rectangle.height} L${rectangle.x} ${\n                rectangle.y + rectangle.height\n            } Z`,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        //split shape to rectangle and a half ellipse\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        const isInRectangle = RectangleClient.isHit(\n            {\n                ...rectangle,\n                width: (rectangle.width * 3) / 4\n            },\n            rangeRectangle\n        );\n        const isInEllipse = isPointInEllipse(\n            point,\n            [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 2],\n            rectangle.width / 4,\n            rectangle.height / 2\n        );\n        return isInRectangle || isInEllipse;\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n        if (nearestPoint[0] > rectangle.x + (rectangle.width * 3) / 4) {\n            return getNearestPointBetweenPointAndEllipse(\n                point,\n                [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 2],\n                rectangle.width / 4,\n                rectangle.height / 2\n            );\n        }\n        return nearestPoint;\n    },\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        const centerPoint: Point = [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 2];\n        const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n        const a = rectangle.width / 4;\n        const b = rectangle.height / 2;\n        const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n        return getVectorFromPointAndSlope(point[0], point[1], slope);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    Vector,\n    getEllipseTangentSlope,\n    getNearestPointBetweenPointAndSegments,\n    getVectorFromPointAndSlope,\n    isPointInEllipse,\n    setStrokeLinecap,\n    getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\n\nexport const StoredDataEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x + rectangle.width / 10} ${rectangle.y} L${rectangle.x + rectangle.width} ${rectangle.y} A  ${\n                rectangle.width / 10\n            } ${rectangle.height / 2}, 0, 0, 0,${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height} L${\n                rectangle.x + rectangle.width / 10\n            } ${rectangle.y + rectangle.height}A  ${rectangle.width / 10} ${rectangle.height / 2}, 0, 0, 1,${\n                rectangle.x + rectangle.width / 10\n            } ${rectangle.y}`,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        //split shape to rectangle and a half ellipse\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        const isInRectangle = RectangleClient.isHit(\n            {\n                ...rectangle,\n                x: rectangle.x + rectangle.width / 10,\n                width: (rectangle.width * 9) / 10\n            },\n            rangeRectangle\n        );\n\n        const isInFrontEllipse = isPointInEllipse(\n            point,\n            [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2],\n            rectangle.width / 10,\n            rectangle.height / 2\n        );\n\n        const notInBackEllipse = !isPointInEllipse(\n            point,\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n            rectangle.width / 10,\n            rectangle.height / 2\n        );\n        return (isInRectangle && notInBackEllipse) || isInFrontEllipse;\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n        if (nearestPoint[0] < rectangle.x + rectangle.width / 10) {\n            const centerPoint = [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2] as Point;\n            const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 10, rectangle.height / 2);\n            if (nearestPoint[0] > centerPoint[0]) {\n                nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n            }\n            return nearestPoint;\n        }\n        if (nearestPoint[0] > rectangle.x + (rectangle.width * 9) / 10) {\n            const centerPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2] as Point;\n            const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 10, rectangle.height / 2);\n            if (nearestPoint[0] > centerPoint[0]) {\n                nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n            }\n            return nearestPoint;\n        }\n        return nearestPoint;\n    },\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        let centerPoint = [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2];\n        let a = rectangle.width / 10;\n        let b = rectangle.height / 2;\n        const isBackEllipse = connectionPoint[0] > rectangle.x + (rectangle.width * 9) / 10 && connectionPoint[1] > rectangle.y;\n        if (isBackEllipse) {\n            centerPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2];\n        }\n        const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n        const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n        const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n        return isBackEllipse ? (vector.map((num) => -num) as Vector) : vector;\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return [\n            [rectangle.x + rectangle.width / 2, rectangle.y],\n            [rectangle.x + (rectangle.width * 9) / 10, rectangle.y + rectangle.height / 2],\n            [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n            [rectangle.x, rectangle.y + rectangle.height / 2]\n        ];\n    },\n    getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n        const widthRatio = 3 / 4;\n        return getCustomTextRectangle(board, element, widthRatio);\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const PredefinedProcessEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x} ${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y + rectangle.height} H${rectangle.x} Z M${\n                rectangle.x + rectangle.width * 0.06\n            } ${rectangle.y} L${rectangle.x + rectangle.width * 0.06} ${rectangle.y + rectangle.height} M${\n                rectangle.x + rectangle.width - rectangle.width * 0.06\n            } ${rectangle.y} L${rectangle.x + rectangle.width - rectangle.width * 0.06} ${rectangle.y + rectangle.height}`,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.06 * 2;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.06,\n            y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n        };\n    }\n};\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const getOffPagePoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n        [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n        [rectangle.x, rectangle.y + rectangle.height / 2]\n    ];\n};\n\nexport const OffPageEngine: ShapeEngine = createPolygonEngine({\n    getPolygonPoints: getOffPagePoints,\n    getConnectorPoints: (rectangle: RectangleClient) => {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            width: width > 0 ? width : 0,\n            height: textSize.height,\n            x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n            y: elementRectangle.y + (elementRectangle.height - elementRectangle.height / 2 - textSize.height) / 2\n        };\n    }\n});\n","import { PlaitBoard, RectangleClient, setStrokeLinecap } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { createEllipseEngine } from '../basic-shapes/ellipse';\n\nexport const OrEngine: ShapeEngine = createEllipseEngine({\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const rx = rectangle.width / 2;\n        const ry = rectangle.height / 2;\n        const startPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2];\n        const shape = rs.path(\n            `M${startPoint[0]} ${startPoint[1]}\n        A${rx},${ry} 0 1,1 ${startPoint[0]} ${startPoint[1] - 0.01}\n        M${rectangle.x} ${rectangle.y + rectangle.height / 2}\n        L${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height / 2}\n        M${rectangle.x + rectangle.width / 2} ${rectangle.y}\n        L${rectangle.x + rectangle.width / 2} ${rectangle.y + rectangle.height}\n        `,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    }\n});\n","import { PlaitBoard, RectangleClient, getCrossingPointsBetweenEllipseAndSegment, setStrokeLinecap } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { createEllipseEngine } from '../basic-shapes/ellipse';\n\nexport const SummingJunctionEngine: ShapeEngine = createEllipseEngine({\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const rx = rectangle.width / 2;\n        const ry = rectangle.height / 2;\n        const startPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2];\n        const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n        const line1Points = getCrossingPointsBetweenEllipseAndSegment(\n            [rectangle.x, rectangle.y],\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n            centerPoint[0],\n            centerPoint[1],\n            rx,\n            ry\n        );\n        const line2Points = getCrossingPointsBetweenEllipseAndSegment(\n            [rectangle.x + rectangle.width, rectangle.y],\n            [rectangle.x, rectangle.y + rectangle.height],\n            centerPoint[0],\n            centerPoint[1],\n            rx,\n            ry\n        );\n\n        const shape = rs.path(\n            `M${startPoint[0]} ${startPoint[1]}\n        A${rx},${ry} 0 1,1 ${startPoint[0]} ${startPoint[1] - 0.01}\n        M${line1Points[0][0]} ${line1Points[0][1]}\n        L${line1Points[1][0]} ${line1Points[1][1]}\n        M${line2Points[0][0]} ${line2Points[0][1]}\n        L${line2Points[1][0]} ${line2Points[1][1]}\n        `,\n            { ...options, fillStyle: 'solid' }\n        );\n\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    }\n});\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    catmullRomFitting,\n    getNearestPointBetweenPointAndSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { pointsOnBezierCurves } from 'points-on-curve';\n\nexport const DocumentEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9} V${rectangle.y} H${rectangle.x + rectangle.width} V${\n                rectangle.y + rectangle.height - rectangle.height / 9\n            }\n            Q${rectangle.x + rectangle.width - rectangle.width / 4} ${rectangle.y + rectangle.height - (rectangle.height / 9) * 3}, ${\n                rectangle.x + rectangle.width / 2\n            } ${rectangle.y + rectangle.height - rectangle.height / 9} T${rectangle.x} ${\n                rectangle.y + rectangle.height - rectangle.height / 9\n            }           \n            `,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        let nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n        let curvePoints = catmullRomFitting([\n            [rectangle.x, rectangle.y + rectangle.height - rectangle.height / 9],\n            [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n            [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height / 9],\n            [rectangle.x + (rectangle.width / 4) * 3, rectangle.y + rectangle.height - (rectangle.height / 9) * 2],\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height - rectangle.height / 9]\n        ]);\n        curvePoints = pointsOnBezierCurves(curvePoints) as Point[];\n        if (nearestPoint[1] > rectangle.y + rectangle.height - rectangle.height / 9) {\n            if (nearestPoint[0] === rectangle.x + rectangle.width / 2) {\n                nearestPoint[1] = rectangle.y + rectangle.height - rectangle.height / 9;\n                return nearestPoint;\n            }\n            nearestPoint = getNearestPointBetweenPointAndSegments(point, curvePoints, false);\n        }\n\n        return nearestPoint;\n    },\n\n    getConnectorPoints(rectangle: RectangleClient) {\n        return [\n            [rectangle.x + rectangle.width / 2, rectangle.y],\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n            [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height / 9],\n            [rectangle.x, rectangle.y + rectangle.height / 2]\n        ];\n    },\n\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        if (connectionPoint[0] > rectangle.x && connectionPoint[0] < rectangle.x + rectangle.width / 4) {\n            return getUnitVectorByPointAndPoint([rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height], connectionPoint);\n        }\n\n        if (connectionPoint[0] > rectangle.x + rectangle.width / 4 && connectionPoint[0] < rectangle.x + (rectangle.width / 4) * 3) {\n            return getUnitVectorByPointAndPoint(\n                [rectangle.x + (rectangle.width / 4) * 3, rectangle.y + rectangle.height - rectangle.height / 9],\n                [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height]\n            );\n        }\n\n        if (connectionPoint[0] > rectangle.x + (rectangle.width / 4) * 3) {\n            return getUnitVectorByPointAndPoint(\n                [rectangle.x + rectangle.width, rectangle.y + rectangle.height - rectangle.height / 9],\n                connectionPoint\n            );\n        }\n        return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height]);\n    },\n\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        return getCustomTextRectangle(board, element, 0.88);\n    }\n};\n","import {\n    Direction,\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    catmullRomFitting,\n    distanceBetweenPointAndPoint,\n    getNearestPointBetweenPointAndSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { getDirectionByPointOfRectangle, getDirectionFactor, getUnitVectorByPointAndPoint } from '@plait/common';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { getCrossingPointBetweenPointAndPolygon } from '../../utils/polygon';\n\nexport const getMultiDocumentPoints = (rectangle: RectangleClient): Point[] => {\n    const linePoints: Point[] = [\n        [rectangle.x, rectangle.y + 10],\n        [rectangle.x + 5, rectangle.y + 10],\n        [rectangle.x + 5, rectangle.y + 5],\n        [rectangle.x + 10, rectangle.y + 5],\n        [rectangle.x + 10, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3],\n        [rectangle.x + rectangle.width - 5, rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3 - 4],\n        [rectangle.x + rectangle.width - 5, rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3],\n        [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3 - 4],\n        [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9]\n    ];\n\n    let curvePoints = catmullRomFitting([\n        [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9],\n        [rectangle.x + rectangle.width - 10 - (rectangle.width - 10) / 4, rectangle.y + rectangle.height - (rectangle.height / 9) * 2],\n        [rectangle.x + (rectangle.width - 10) / 2, rectangle.y + rectangle.height - rectangle.height / 9],\n        [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height],\n        [rectangle.x, rectangle.y + rectangle.height - rectangle.height / 9]\n    ]);\n\n    curvePoints = pointsOnBezierCurves(curvePoints) as Point[];\n    return [...linePoints, ...curvePoints];\n};\n\nexport const MultiDocumentEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9} V${rectangle.y + 10} H${rectangle.x + 5} V${\n                rectangle.y + 5\n            } H${rectangle.x + 10} V${rectangle.y} H${rectangle.x + rectangle.width} V${\n                rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3\n            } L${rectangle.x + rectangle.width - 5} ${rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3 - 4} V${\n                rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3\n            }\n                 L${rectangle.x + rectangle.width - 10} ${rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3 - 4} V${\n                rectangle.y + rectangle.height - rectangle.height / 9\n            }\n                \n             Q${rectangle.x + rectangle.width - 10 - (rectangle.width - 10) / 4} ${\n                rectangle.y + rectangle.height - (rectangle.height / 9) * 3\n            }, ${rectangle.x + (rectangle.width - 10) / 2} ${rectangle.y + rectangle.height - rectangle.height / 9} T${rectangle.x} ${\n                rectangle.y + rectangle.height - rectangle.height / 9\n            }\n              \n                M${rectangle.x + 5} ${rectangle.y + 10} H${rectangle.x + rectangle.width - 10} V${\n                rectangle.y + rectangle.height - rectangle.height / 9\n            } \n                    \n                M${rectangle.x + 10} ${rectangle.y + 5} H${rectangle.x + rectangle.width - 5} V${\n                rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3\n            }\n            `,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, getMultiDocumentPoints(rectangle), false);\n    },\n\n    getConnectorPoints(rectangle: RectangleClient) {\n        let curvePoints = catmullRomFitting([\n            [rectangle.x, rectangle.y + rectangle.height - rectangle.height / 9],\n            [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height],\n            [rectangle.x + (rectangle.width - 10) / 2, rectangle.y + rectangle.height - rectangle.height / 9],\n            [rectangle.x + ((rectangle.width - 10) / 4) * 3, rectangle.y + rectangle.height - (rectangle.height / 9) * 2],\n            [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9]\n        ]);\n        curvePoints = pointsOnBezierCurves(curvePoints) as Point[];\n        const crossingPoint = getNearestPointBetweenPointAndSegments(\n            [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n            curvePoints\n        );\n        return [\n            [rectangle.x + rectangle.width / 2, rectangle.y],\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n            [crossingPoint[0], crossingPoint[1]],\n            [rectangle.x, rectangle.y + rectangle.height / 2]\n        ];\n    },\n\n    getNearestCrossingPoint(rectangle: RectangleClient, point: Point) {\n        const crossingPoints = getCrossingPointBetweenPointAndPolygon(getMultiDocumentPoints(rectangle), point);\n        let nearestPoint = crossingPoints[0];\n        let nearestDistance = distanceBetweenPointAndPoint(point[0], point[1], nearestPoint[0], nearestPoint[1]);\n        crossingPoints\n            .filter((v, index) => index > 0)\n            .forEach((crossingPoint) => {\n                let distance = distanceBetweenPointAndPoint(point[0], point[1], crossingPoint[0], crossingPoint[1]);\n                if (distance < nearestDistance) {\n                    nearestDistance = distance;\n                    nearestPoint = crossingPoint;\n                }\n            });\n\n        return nearestPoint;\n    },\n\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        if (connectionPoint[0] > rectangle.x && connectionPoint[0] < rectangle.x + (rectangle.width - 10) / 4) {\n            return getUnitVectorByPointAndPoint(\n                [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height],\n                connectionPoint\n            );\n        }\n        if (\n            connectionPoint[0] > rectangle.x + (rectangle.width - 10) / 4 &&\n            connectionPoint[0] < rectangle.x + ((rectangle.width - 10) / 4) * 3\n        ) {\n            return getUnitVectorByPointAndPoint(\n                [rectangle.x + ((rectangle.width - 10) / 4) * 3, rectangle.y + rectangle.height - rectangle.height / 9],\n                [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height]\n            );\n        }\n\n        if (\n            connectionPoint[0] > rectangle.x + ((rectangle.width - 10) / 4) * 3 &&\n            connectionPoint[0] < rectangle.x + rectangle.width - 10\n        ) {\n            return getUnitVectorByPointAndPoint(\n                [rectangle.x + (rectangle.width - 10), rectangle.y + rectangle.height - rectangle.height / 9],\n                connectionPoint\n            );\n        }\n        const direction = getDirectionByPointOfRectangle(pointOfRectangle) || Direction.bottom;\n        const factor = getDirectionFactor(direction!);\n        return [factor.x, factor.y];\n    },\n\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        return getCustomTextRectangle(board, element, 0.88);\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getEllipseTangentSlope,\n    getNearestPointBetweenPointAndEllipse,\n    getNearestPointBetweenPointAndSegments,\n    getVectorFromPointAndSlope,\n    isPointInEllipse,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\n\nexport const DatabaseEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x} ${rectangle.y + rectangle.height * 0.15}  \n            A${rectangle.width / 2} ${rectangle.height * 0.15}, 0, 0, 0,${rectangle.x + rectangle.width} ${\n                rectangle.y + rectangle.height * 0.15\n            } \n            A${rectangle.width / 2} ${rectangle.height * 0.15}, 0, 0, 0,${rectangle.x} ${rectangle.y + rectangle.height * 0.15} \n            V${rectangle.y + rectangle.height - rectangle.height * 0.15}\n            A${rectangle.width / 2} ${rectangle.height * 0.15}, 0, 0, 0, ${rectangle.x + rectangle.width} ${\n                rectangle.y + rectangle.height - rectangle.height * 0.15\n            }\n            V${rectangle.y + rectangle.height * 0.15}`,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        const isInRectangle = RectangleClient.isHit(\n            {\n                ...rectangle,\n                y: rectangle.y + rectangle.height * 0.15,\n                height: rectangle.height - rectangle.height * 0.3\n            },\n            rangeRectangle\n        );\n\n        const isInTopEllipse = isPointInEllipse(\n            point,\n            [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * 0.15],\n            rectangle.width / 2,\n            rectangle.height * 0.15\n        );\n\n        const isInBottomEllipse = isPointInEllipse(\n            point,\n            [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height * 0.15],\n            rectangle.width / 2,\n            rectangle.height * 0.15\n        );\n        return isInRectangle || isInTopEllipse || isInBottomEllipse;\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n        if (nearestPoint[1] < rectangle.y + rectangle.height * 0.15) {\n            const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * 0.15] as Point;\n            const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height * 0.15);\n            if (nearestPoint[1] > centerPoint[1]) {\n                nearestPoint[1] = centerPoint[1] * 2 - nearestPoint[1];\n            }\n            return nearestPoint;\n        }\n        if (nearestPoint[1] > rectangle.y + rectangle.height - rectangle.height * 0.15) {\n            const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height * 0.15] as Point;\n            const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height * 0.15);\n            if (nearestPoint[1] < centerPoint[1]) {\n                nearestPoint[1] = centerPoint[0] * 2 - nearestPoint[1];\n            }\n            return nearestPoint;\n        }\n        return nearestPoint;\n    },\n\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        let centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height * 0.15];\n        let a = rectangle.width / 2;\n        let b = rectangle.height * 0.15;\n        const isInTopEllipse = connectionPoint[1] < rectangle.y + rectangle.height * 0.15 && connectionPoint[0] > rectangle.x;\n        if (isInTopEllipse) {\n            centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * 0.15];\n        }\n        const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n        const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n        const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n        return vector;\n    },\n\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const textRectangle = getCustomTextRectangle(board, element, 1);\n        textRectangle.y += getStrokeWidthByElement(element);\n        const startY = elementRectangle.y + elementRectangle.height * 0.45;\n        const endY = elementRectangle.y + elementRectangle.height - elementRectangle.height * 0.3;\n        textRectangle.y = startY + (endY - startY - textRectangle.height) / 2;\n        return textRectangle;\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getEllipseTangentSlope,\n    getNearestPointBetweenPointAndEllipse,\n    getNearestPointBetweenPointAndSegments,\n    getVectorFromPointAndSlope,\n    isPointInEllipse,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const HardDiskEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x + rectangle.width - rectangle.width * 0.15} ${rectangle.y}  \n            A${rectangle.width * 0.15} ${rectangle.height / 2}, 0, 0, 0,${rectangle.x + rectangle.width - rectangle.width * 0.15} ${\n                rectangle.y + rectangle.height\n            } \n            A${rectangle.width * 0.15} ${rectangle.height / 2}, 0, 0, 0,${rectangle.x + rectangle.width - rectangle.width * 0.15} ${\n                rectangle.y\n            } \n            H${rectangle.x + rectangle.width * 0.15}\n            A${rectangle.width * 0.15} ${rectangle.height / 2}, 0, 0, 0, ${rectangle.x + rectangle.width * 0.15} ${\n                rectangle.y + rectangle.height\n            }\n            H${rectangle.x + rectangle.width - rectangle.width * 0.15}`,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        const isInRectangle = RectangleClient.isHit(\n            {\n                ...rectangle,\n                x: rectangle.x + rectangle.width * 0.15,\n                width: rectangle.width - rectangle.width * 0.3\n            },\n            rangeRectangle\n        );\n\n        const isInLeftEllipse = isPointInEllipse(\n            point,\n            [rectangle.x + rectangle.width * 0.15, rectangle.y + rectangle.height / 2],\n            rectangle.width * 0.15,\n            rectangle.height / 2\n        );\n\n        const isInRightEllipse = isPointInEllipse(\n            point,\n            [rectangle.x + rectangle.width - rectangle.width * 0.15, rectangle.y + rectangle.height / 2],\n            rectangle.width * 0.15,\n            rectangle.height / 2\n        );\n        return isInRectangle || isInLeftEllipse || isInRightEllipse;\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n        if (nearestPoint[0] < rectangle.x + rectangle.width * 0.15) {\n            const centerPoint = [rectangle.x + rectangle.width * 0.15, rectangle.y + rectangle.height / 2] as Point;\n            const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width * 0.15, rectangle.height / 2);\n            if (nearestPoint[0] > centerPoint[0]) {\n                nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n            }\n            return nearestPoint;\n        }\n        if (nearestPoint[0] > rectangle.x + rectangle.width - rectangle.width * 0.15) {\n            const centerPoint = [rectangle.x + rectangle.width - rectangle.width * 0.15, rectangle.y + rectangle.height / 2] as Point;\n            const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width * 0.15, rectangle.height / 2);\n            if (nearestPoint[0] < centerPoint[0]) {\n                nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n            }\n            return nearestPoint;\n        }\n        return nearestPoint;\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        let centerPoint = [rectangle.x + rectangle.width * 0.15, rectangle.y + rectangle.height / 2];\n        let a = rectangle.width * 0.15;\n        let b = rectangle.height / 2;\n        const isInRightEllipse =\n            connectionPoint[0] > rectangle.x + rectangle.width - rectangle.width * 0.15 && connectionPoint[1] > rectangle.y;\n        if (isInRightEllipse) {\n            centerPoint = [rectangle.x + rectangle.width - rectangle.width * 0.15, rectangle.y + rectangle.height / 2];\n        }\n        const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n        const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n        const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n        return vector;\n    },\n\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const width = elementRectangle.width - elementRectangle.width * 0.45 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x + elementRectangle.width * 0.15 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n            y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n        };\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const InternalStorageEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x} ${rectangle.y} h${rectangle.width} v${rectangle.height} h${-rectangle.width} v${-rectangle.height}\n            M${rectangle.x} ${rectangle.y + rectangle.height / 10} h${rectangle.width}\n            M${rectangle.x + rectangle.width / 10} ${rectangle.y} v${rectangle.height}\n            `,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const width = elementRectangle.width - elementRectangle.width * 0.1 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x + elementRectangle.width * 0.1 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n            y:\n                elementRectangle.y +\n                elementRectangle.height * 0.1 +\n                (elementRectangle.height - elementRectangle.height * 0.1 - textSize.height) / 2\n        };\n    }\n};\n","import { PlaitBoard, Point, PointOfRectangle, RectangleClient, distanceBetweenPointAndPoint, setStrokeLinecap } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { pointsOnBezierCurves } from 'points-on-curve';\n\ninterface NoteCurlyLeftPathData {\n    startPoint: Point;\n    upperCurve: {\n        controlPoint1: Point;\n        controlPoint2: Point;\n        endPoint: Point;\n    };\n    lowerCurve: {\n        controlPoint1: Point;\n        controlPoint2: Point;\n        endPoint: Point;\n    };\n}\n\nfunction generateNoteCurlyLeftPath(rectangle: RectangleClient): NoteCurlyLeftPathData {\n    const curlyWidth = rectangle.width * 0.09;\n    const rightX = rectangle.x + rectangle.width;\n    const centerY = rectangle.y + rectangle.height / 2;\n\n    return {\n        startPoint: [rightX, rectangle.y],\n        upperCurve: {\n            controlPoint1: [rightX - curlyWidth, rectangle.y],\n            controlPoint2: [rightX, centerY],\n            endPoint: [rightX - curlyWidth, centerY]\n        },\n        lowerCurve: {\n            controlPoint1: [rightX, centerY],\n            controlPoint2: [rightX - curlyWidth, rectangle.y + rectangle.height],\n            endPoint: [rightX, rectangle.y + rectangle.height]\n        }\n    };\n}\n\nexport const NoteCurlyLeftEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyLeftPath(rectangle);\n\n        const pathData = [\n            `M${startPoint[0]} ${startPoint[1]}`,\n            `C${upperCurve.controlPoint1[0]} ${upperCurve.controlPoint1[1]},\n            ${upperCurve.controlPoint2[0]} ${upperCurve.controlPoint2[1]},\n            ${upperCurve.endPoint[0]} ${upperCurve.endPoint[1]}`,\n            `C${lowerCurve.controlPoint1[0]} ${lowerCurve.controlPoint1[1]},\n            ${lowerCurve.controlPoint2[0]} ${lowerCurve.controlPoint2[1]},\n            ${lowerCurve.endPoint[0]} ${lowerCurve.endPoint[1]}`\n        ].join(' ');\n\n        const shape = rs.path(pathData, { ...options, fillStyle: 'solid', fill: 'transparent' });\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyLeftPath(rectangle);\n\n        const upperBezierPoints = pointsOnBezierCurves(\n            [startPoint, upperCurve.controlPoint1, upperCurve.controlPoint2, upperCurve.endPoint],\n            0.001\n        );\n\n        const lowerBezierPoints = pointsOnBezierCurves(\n            [upperCurve.endPoint, lowerCurve.controlPoint1, lowerCurve.controlPoint2, lowerCurve.endPoint],\n            0.001\n        );\n\n        const allPoints = [...upperBezierPoints, ...lowerBezierPoints];\n\n        let minDistance = Infinity;\n        let nearestPoint = point;\n\n        for (const curvePoint of allPoints) {\n            const distance = distanceBetweenPointAndPoint(point[0], point[1], curvePoint[0], curvePoint[1]);\n            if (distance < minDistance) {\n                minDistance = distance;\n                nearestPoint = [...curvePoint];\n            }\n        }\n\n        return nearestPoint;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const textRectangle = getCustomTextRectangle(board, element, 0.9);\n        textRectangle.x = elementRectangle.x + getStrokeWidthByElement(element) + ShapeDefaultSpace.rectangleAndText;\n        return textRectangle;\n    }\n};\n","import { PlaitBoard, Point, PointOfRectangle, RectangleClient, distanceBetweenPointAndPoint, setStrokeLinecap } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { pointsOnBezierCurves } from 'points-on-curve';\n\ninterface NoteCurlyRightPathData {\n    startPoint: Point;\n    upperCurve: {\n        controlPoint1: Point;\n        controlPoint2: Point;\n        endPoint: Point;\n    };\n    lowerCurve: {\n        controlPoint1: Point;\n        controlPoint2: Point;\n        endPoint: Point;\n    };\n}\n\nfunction generateNoteCurlyRightPath(rectangle: RectangleClient): NoteCurlyRightPathData {\n    const curlyWidth = rectangle.width * 0.09;\n    const centerY = rectangle.y + rectangle.height / 2;\n\n    return {\n        startPoint: [rectangle.x, rectangle.y],\n        upperCurve: {\n            controlPoint1: [rectangle.x + curlyWidth, rectangle.y],\n            controlPoint2: [rectangle.x, centerY],\n            endPoint: [rectangle.x + curlyWidth, centerY]\n        },\n        lowerCurve: {\n            controlPoint1: [rectangle.x, centerY],\n            controlPoint2: [rectangle.x + curlyWidth, rectangle.y + rectangle.height],\n            endPoint: [rectangle.x, rectangle.y + rectangle.height]\n        }\n    };\n}\n\nexport const NoteCurlyRightEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyRightPath(rectangle);\n\n        const pathData = [\n            `M${startPoint[0]} ${startPoint[1]}`,\n            `C${upperCurve.controlPoint1[0]} ${upperCurve.controlPoint1[1]},\n            ${upperCurve.controlPoint2[0]} ${upperCurve.controlPoint2[1]},\n            ${upperCurve.endPoint[0]} ${upperCurve.endPoint[1]}`,\n            `C${lowerCurve.controlPoint1[0]} ${lowerCurve.controlPoint1[1]},\n            ${lowerCurve.controlPoint2[0]} ${lowerCurve.controlPoint2[1]},\n            ${lowerCurve.endPoint[0]} ${lowerCurve.endPoint[1]}`\n        ].join(' ');\n\n        const shape = rs.path(pathData, { ...options, fillStyle: 'solid', fill: 'transparent' });\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyRightPath(rectangle);\n\n        // 生成上部贝塞尔曲线的点\n        const upperBezierPoints = pointsOnBezierCurves(\n            [startPoint, upperCurve.controlPoint1, upperCurve.controlPoint2, upperCurve.endPoint],\n            0.001\n        );\n\n        // 生成下部贝塞尔曲线的点\n        const lowerBezierPoints = pointsOnBezierCurves(\n            [upperCurve.endPoint, lowerCurve.controlPoint1, lowerCurve.controlPoint2, lowerCurve.endPoint],\n            0.001\n        );\n\n        // 合并所有点\n        const allPoints = [...upperBezierPoints, ...lowerBezierPoints];\n\n        // 找到最近的点\n        let minDistance = Infinity;\n        let nearestPoint = [...point] as Point;\n\n        for (const curvePoint of allPoints) {\n            const distance = distanceBetweenPointAndPoint(point[0], point[1], curvePoint[0], curvePoint[1]);\n            if (distance < minDistance) {\n                minDistance = distance;\n                nearestPoint = [...curvePoint];\n            }\n        }\n\n        return nearestPoint;\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const textRectangle = getCustomTextRectangle(board, element, 0.9);\n        textRectangle.x =\n            elementRectangle.x + getStrokeWidthByElement(element) + ShapeDefaultSpace.rectangleAndText + elementRectangle.width * 0.1;\n        return textRectangle;\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const NoteSquareEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x + rectangle.width * 0.075} ${rectangle.y + rectangle.height} H${rectangle.x} V${rectangle.y} H${\n                rectangle.x + rectangle.width * 0.075\n            }\n           `,\n            { ...options, fillStyle: 'solid', fill: 'transparent' }\n        );\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        return getCustomTextRectangle(board, element, 0.88);\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getEllipseTangentSlope,\n    getNearestPointBetweenPointAndEllipse,\n    getNearestPointBetweenPointAndSegments,\n    getVectorFromPointAndSlope,\n    isPointInEllipse,\n    isPointInPolygon,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\n\nexport const getDisplayPoints = (rectangle: RectangleClient): Point[] => {\n    return [\n        [rectangle.x, rectangle.y + rectangle.height / 2],\n        [rectangle.x + rectangle.width * 0.15, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y],\n        [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n        [rectangle.x + rectangle.width * 0.15, rectangle.y + rectangle.height]\n    ];\n};\n\nexport const DisplayEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x + rectangle.width * 0.15} ${rectangle.y} \n            H${rectangle.x + rectangle.width - rectangle.width * 0.1} \n            A ${rectangle.width * 0.1} ${rectangle.height / 2}, 0, 0, 1,${rectangle.x + rectangle.width - rectangle.width * 0.1} ${\n                rectangle.y + rectangle.height\n            }\n            H${rectangle.x + rectangle.width * 0.15}\n            L${rectangle.x} ${rectangle.y + rectangle.height / 2}\n            Z\n            `,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const polygonPoints: Point[] = [\n            [rectangle.x, rectangle.y + rectangle.height / 2],\n            [rectangle.x + rectangle.width * 0.15, rectangle.y],\n            [rectangle.x + rectangle.width - rectangle.width * 0.1, rectangle.y],\n            [rectangle.x + rectangle.width - rectangle.width * 0.1, rectangle.y + rectangle.height],\n            [rectangle.x + rectangle.width * 0.15, rectangle.y + rectangle.height]\n        ];\n        const isInPolygon = isPointInPolygon(point, polygonPoints);\n        const isInEllipse = isPointInEllipse(\n            point,\n            [rectangle.x + rectangle.width - rectangle.width * 0.1, rectangle.y + rectangle.height / 2],\n            rectangle.width * 0.1,\n            rectangle.height / 2\n        );\n        return isInPolygon || isInEllipse;\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const nearestPoint = getNearestPointBetweenPointAndSegments(point, getDisplayPoints(rectangle));\n        if (nearestPoint[0] > rectangle.x + rectangle.width - rectangle.width * 0.1) {\n            return getNearestPointBetweenPointAndEllipse(\n                point,\n                [rectangle.x + rectangle.width - rectangle.width * 0.1, rectangle.y + rectangle.height / 2],\n                rectangle.width * 0.1,\n                rectangle.height / 2\n            );\n        }\n        return nearestPoint;\n    },\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        const centerPoint: Point = [rectangle.x + rectangle.width - rectangle.width * 0.1, rectangle.y + rectangle.height / 2];\n        const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n        const a = rectangle.width * 0.1;\n        const b = rectangle.height / 2;\n        const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n        return getVectorFromPointAndSlope(point[0], point[1], slope);\n    },\n\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        return getCustomTextRectangle(board, element, 0.75);\n    }\n};\n","import { PlaitBoard, RectangleClient, Point, createG, drawLine, setStrokeLinecap, drawRectangle, ACTIVE_STROKE_WIDTH } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { getCellsWithPoints, getCellWithPoints } from '../../utils/table';\nimport { ShapeEngine } from '../../interfaces';\nimport { DrawTextInfo } from '../../generators/text.generator';\nimport { PlaitTable, PlaitTableCellWithPoints, PlaitTableDrawOptions, PlaitTableElement } from '../../interfaces/table';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getNearestPointBetweenPointAndRoundRectangle, getRoundRectangleRadius } from '../basic-shapes/round-rectangle';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const TableEngine: ShapeEngine<PlaitTable, PlaitTableDrawOptions, DrawTextInfo> = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, roughOptions: Options, options?: PlaitTableDrawOptions) {\n        const g = createG();\n        try {\n            const pointCells = getCellsWithPoints(board, { ...options?.element } as PlaitTable);\n            if (pointCells) {\n                const rs = PlaitBoard.getRoughSVG(board);\n                const { x, y, width, height } = rectangle;\n                const tableTopBorder = drawLine(rs, [x, y], [x + width, y], roughOptions);\n                const tableLeftBorder = drawLine(rs, [x, y], [x, y + height], roughOptions);\n                g.append(tableTopBorder, tableLeftBorder);\n                pointCells.forEach((cell) => {\n                    const rectangle = RectangleClient.getRectangleByPoints(cell.points!);\n                    const { x, y, width, height } = rectangle;\n                    const cellRectangle = drawRectangle(\n                        board,\n                        {\n                            x: x + ACTIVE_STROKE_WIDTH,\n                            y: y + ACTIVE_STROKE_WIDTH,\n                            width: width - ACTIVE_STROKE_WIDTH * 2,\n                            height: height - ACTIVE_STROKE_WIDTH * 2\n                        },\n                        { fill: cell.fill, fillStyle: 'solid', strokeWidth: 0 }\n                    );\n                    const cellRightBorder = drawLine(rs, [x + width, y], [x + width, y + height], roughOptions);\n                    const cellBottomBorder = drawLine(rs, [x, y + height], [x + width, y + height], roughOptions);\n                    g.append(cellRectangle, cellRightBorder, cellBottomBorder);\n                });\n                setStrokeLinecap(g, 'round');\n            }\n        } catch (error) {\n            console.error(error);\n        }\n        return g;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle(board: PlaitBoard, element: PlaitTable, options?: DrawTextInfo) {\n        try {\n            if (options && options.id) {\n                const cell = getCellWithPoints(board, element, options!.id);\n                if (cell) {\n                    if (PlaitTableElement.isVerticalText(cell)) {\n                        return getVerticalTextRectangle(board, cell);\n                    } else {\n                        return getHorizontalTextRectangle(board, cell);\n                    }\n                }\n            }\n        } catch (error) {\n            console.error(error);\n        }\n        return {\n            x: 0,\n            y: 0,\n            width: 0,\n            height: 0\n        };\n    }\n};\n\nexport function getVerticalTextRectangle(board: PlaitBoard, cell: PlaitTableCellWithPoints) {\n    const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n    const strokeWidth = getStrokeWidthByElement(cell);\n    const width = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n    return getTextRectangle(board, cell, width, cellRectangle);\n}\n\nexport function getHorizontalTextRectangle(board: PlaitBoard, cell: PlaitTableCellWithPoints) {\n    const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n    const strokeWidth = getStrokeWidthByElement(cell);\n    const width = cellRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n    return getTextRectangle(board, cell, width, cellRectangle);\n}\n\nexport function getTextRectangle(board: PlaitBoard, cell: PlaitTableCellWithPoints, width: number, cellRectangle: RectangleClient) {\n    const text = cell.text;\n    if (text) {\n        const textSize = getTextSize(board, text, width);\n        return {\n            width: width > 0 ? width : 0,\n            height: textSize.height,\n            x: cellRectangle.x - width / 2 + cellRectangle.width / 2,\n            y: cellRectangle.y + (cellRectangle.height - textSize.height) / 2\n        };\n    } else {\n        return {\n            width: 0,\n            height: 0,\n            x: cellRectangle.x,\n            y: cellRectangle.y\n        };\n    }\n}\n\nexport const getCellTextHeight = (board: PlaitBoard, cell: PlaitTableCellWithPoints, isVertical: boolean = false) => {\n    if (cell.text) {\n        const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n        const strokeWidth = getStrokeWidthByElement(cell);\n        let width = cellRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n        if (isVertical) {\n            width = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n        }\n        return getTextSize(board, cell.text, width).height;\n    }\n    return 0;\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    SVGArcCommand,\n    distanceBetweenPointAndPoint,\n    getEllipseTangentSlope,\n    getNearestPointBetweenPointAndDiscreteSegments,\n    getNearestPointBetweenPointAndEllipse,\n    getVectorFromPointAndSlope,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getUnitVectorByPointAndPoint, rotateVector } from '@plait/common';\n\ninterface ActorPathData {\n    headArcCommand: SVGArcCommand;\n    bodyLine: [Point, Point];\n    armsLine: [Point, Point];\n    leftLegLine: [Point, Point];\n    rightLegLine: [Point, Point];\n}\n\nfunction generateActorPath(rectangle: RectangleClient): ActorPathData {\n    const centerX = rectangle.x + rectangle.width / 2;\n    const headRadius = { width: rectangle.width / 3 / 2, height: rectangle.height / 4 / 2 };\n    const centerY = rectangle.y + rectangle.height / 4 / 2;\n\n    return {\n        headArcCommand: {\n            rx: headRadius.width,\n            ry: headRadius.height,\n            xAxisRotation: 0,\n            largeArcFlag: 0,\n            sweepFlag: 1,\n            endX: centerX,\n            endY: rectangle.y\n        },\n        bodyLine: [\n            [centerX, rectangle.y + rectangle.height / 4],\n            [centerX, rectangle.y + (rectangle.height / 4) * 3]\n        ],\n        armsLine: [\n            [rectangle.x, rectangle.y + rectangle.height / 2],\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n        ],\n        leftLegLine: [\n            [centerX, rectangle.y + (rectangle.height / 4) * 3],\n            [rectangle.x + rectangle.width / 12, rectangle.y + rectangle.height]\n        ],\n        rightLegLine: [\n            [centerX, rectangle.y + (rectangle.height / 4) * 3],\n            [rectangle.x + (rectangle.width / 12) * 11, rectangle.y + rectangle.height]\n        ]\n    };\n}\n\nexport const ActorEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const { headArcCommand, bodyLine, armsLine, leftLegLine, rightLegLine } = generateActorPath(rectangle);\n\n        const pathData = [\n            // 头部（从中间开始画）\n            `M${bodyLine[0][0]} ${bodyLine[0][1]}`,\n            `A${headArcCommand.rx} ${headArcCommand.ry} ${headArcCommand.xAxisRotation} ${headArcCommand.largeArcFlag} ${headArcCommand.sweepFlag} ${headArcCommand.endX} ${headArcCommand.endY}`,\n            `A${headArcCommand.rx} ${headArcCommand.ry} ${headArcCommand.xAxisRotation} ${headArcCommand.largeArcFlag} ${headArcCommand.sweepFlag} ${bodyLine[0][0]} ${bodyLine[0][1]}`,\n            // 身体\n            `V${bodyLine[1][1]}`,\n            // 手臂\n            `M${armsLine[0][0]} ${armsLine[0][1]} H${armsLine[1][0]}`,\n            // 腿\n            `M${leftLegLine[0][0]} ${leftLegLine[0][1]} L${leftLegLine[1][0]} ${leftLegLine[1][1]}`,\n            `M${rightLegLine[0][0]} ${rightLegLine[0][1]} L${rightLegLine[1][0]} ${rightLegLine[1][1]}`\n        ].join(' ');\n\n        const shape = rs.path(pathData, { ...options, fillStyle: 'solid' });\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const { headArcCommand, bodyLine, armsLine, leftLegLine, rightLegLine } = generateActorPath(rectangle);\n\n        // 检查头部椭圆\n        const headCenter: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4 / 2];\n        const nearestPointForHead = getNearestPointBetweenPointAndEllipse(point, headCenter, headArcCommand.rx, headArcCommand.ry);\n        const distanceForHead = distanceBetweenPointAndPoint(...point, ...nearestPointForHead);\n\n        // 检查所有线段\n        const allSegments = [bodyLine, armsLine, leftLegLine, rightLegLine];\n        const nearestPointForLines = getNearestPointBetweenPointAndDiscreteSegments(point, allSegments);\n        const distanceForLines = distanceBetweenPointAndPoint(...point, ...nearestPointForLines);\n\n        return distanceForHead < distanceForLines ? nearestPointForHead : nearestPointForLines;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        if (connectionPoint[1] >= rectangle.y && connectionPoint[1] <= rectangle.y + rectangle.height / 4) {\n            const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4 / 2];\n            const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n            const a = rectangle.width / 2;\n            const b = rectangle.height / 2;\n            const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n            const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n            return vector;\n        }\n\n        if (connectionPoint[1] >= rectangle.y + rectangle.height / 4 && connectionPoint[1] < rectangle.y + (rectangle.height / 4) * 3) {\n            if (connectionPoint[0] < rectangle.x + rectangle.width / 2) {\n                return rotateVector(\n                    getUnitVectorByPointAndPoint([rectangle.x, rectangle.y + rectangle.height / 2], connectionPoint),\n                    -(Math.PI / 2)\n                );\n            } else {\n                return rotateVector(\n                    getUnitVectorByPointAndPoint([rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2], connectionPoint),\n                    -(Math.PI / 2)\n                );\n            }\n        }\n\n        if (connectionPoint[1] >= rectangle.y + (rectangle.height / 4) * 3) {\n            if (connectionPoint[0] < rectangle.x + rectangle.width / 2) {\n                return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x + rectangle.width / 12, rectangle.y + rectangle.height]);\n            } else {\n                return getUnitVectorByPointAndPoint(\n                    [rectangle.x + (rectangle.width / 12) * 11, rectangle.y + rectangle.height],\n                    connectionPoint\n                );\n            }\n        }\n\n        return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height]);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const width = elementRectangle.width + 40;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x - 20,\n            y: elementRectangle.y + elementRectangle.height + 4\n        };\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const ContainerEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x} ${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y + rectangle.height} H${rectangle.x} Z M${\n                rectangle.x + 40\n            } ${rectangle.y} L${rectangle.x + 40} ${rectangle.y + rectangle.height} `,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const width = 40 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n            y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n        };\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndDiscreteSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\nimport { DrawOptions, GeometryCommonTextKeys, PlaitMultipleTextGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { DrawTextInfo } from '../../generators/text.generator';\nimport { getTextSize } from '../../utils/text-size';\n\ninterface PackagePathData {\n    headerHeight: number;\n    points: {\n        leftTop: Point;\n        topStart: Point;\n        topEnd: Point;\n        cornerPoint: Point;\n        rightTop: Point;\n        rightBottom: Point;\n        leftBottom: Point;\n        leftMiddle: Point;\n        middlePoint: Point;\n    };\n}\n\nfunction generatePackagePath(rectangle: RectangleClient): PackagePathData {\n    const headerHeight = 25;\n    const topWidth = rectangle.width * 0.7;\n    const cornerX = rectangle.x + rectangle.width * 0.8;\n\n    return {\n        headerHeight,\n        points: {\n            leftTop: [rectangle.x, rectangle.y + headerHeight],\n            topStart: [rectangle.x, rectangle.y],\n            topEnd: [rectangle.x + topWidth, rectangle.y],\n            cornerPoint: [cornerX, rectangle.y + headerHeight],\n            rightTop: [rectangle.x + rectangle.width, rectangle.y + headerHeight],\n            rightBottom: [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n            leftBottom: [rectangle.x, rectangle.y + rectangle.height],\n            leftMiddle: [rectangle.x, rectangle.y + headerHeight],\n            middlePoint: [cornerX, rectangle.y + headerHeight]\n        }\n    };\n}\n\nexport const PackageEngine: ShapeEngine<PlaitMultipleTextGeometry, DrawOptions, DrawTextInfo> = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const { points } = generatePackagePath(rectangle);\n\n        const pathData = [\n            `M${points.leftTop[0]} ${points.leftTop[1]}`,\n            `V${points.topStart[1]}`,\n            `H${points.topEnd[0]}`,\n            `L${points.cornerPoint[0]} ${points.cornerPoint[1]}`,\n            `H${points.rightTop[0]}`,\n            `V${points.rightBottom[1]}`,\n            `H${points.leftBottom[0]}`,\n            `V${points.leftMiddle[1]}`,\n            `H${points.middlePoint[0]}`\n        ].join(' ');\n\n        const shape = rs.path(pathData, { ...options, fillStyle: 'solid' });\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const { points } = generatePackagePath(rectangle);\n\n        const segments: [Point, Point][] = [\n            // 左边竖线\n            [points.topStart, points.leftTop],\n            [points.leftTop, points.leftBottom],\n            // 底边\n            [points.leftBottom, points.rightBottom],\n            // 右边竖线\n            [points.rightBottom, points.rightTop],\n            // 顶部折线\n            [points.topStart, points.topEnd],\n            [points.topEnd, points.cornerPoint],\n            [points.cornerPoint, points.rightTop],\n            // 中间横线\n            [points.leftMiddle, points.middlePoint]\n        ];\n\n        return getNearestPointBetweenPointAndDiscreteSegments(point, segments);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        if (connectionPoint[0] > rectangle.x + rectangle.width * 0.7 && connectionPoint[1] < rectangle.y + 25) {\n            return getUnitVectorByPointAndPoint([rectangle.x + rectangle.width * 0.7, rectangle.y], connectionPoint);\n        }\n        return getUnitVectorByPointAndPoint([rectangle.x + rectangle.width * 0.8, rectangle.y + 25], connectionPoint);\n    },\n    getTextRectangle(board: PlaitBoard, element: PlaitMultipleTextGeometry, options?: DrawTextInfo) {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const textInfo = element.texts?.find((item) => item.id === options?.id);\n        if (options?.id === GeometryCommonTextKeys.name && textInfo) {\n            const width = elementRectangle.width * 0.7 - ShapeDefaultSpace.rectangleAndText - strokeWidth;\n            const textSize = getTextSize(board, textInfo!.text, width);\n            return {\n                height: textSize.height,\n                width: width > 0 ? width : 0,\n                x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n                y: elementRectangle.y + (25 - textSize.height) / 2\n            };\n        }\n        if (options?.id === GeometryCommonTextKeys.content && textInfo) {\n            const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n            const textSize = getTextSize(board, textInfo!.text, width);\n            return {\n                height: textSize.height,\n                width: width > 0 ? width : 0,\n                x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n                y: elementRectangle.y + 25 + (elementRectangle.height - 25 - textSize.height) / 2\n            };\n        }\n        return elementRectangle;\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { DrawOptions, GeometryCommonTextKeys, PlaitMultipleTextGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { DrawTextInfo } from '../../generators/text.generator';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const CombinedFragmentEngine: ShapeEngine<PlaitMultipleTextGeometry, DrawOptions, DrawTextInfo> = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x} ${rectangle.y + 25} \n            V${rectangle.y}\n            H${rectangle.x + rectangle.width} \n            V${rectangle.y + rectangle.height}\n            H${rectangle.x}\n            V${rectangle.y + 25}\n            H${rectangle.x + rectangle.width / 3 - 8}\n            L${rectangle.x + rectangle.width / 3} ${rectangle.y + 16}\n            V${rectangle.y}\n            `,\n\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle(board: PlaitBoard, element: PlaitMultipleTextGeometry, options?: DrawTextInfo) {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const textInfo = element.texts?.find((item) => item.id === options?.id);\n        if (options?.id === GeometryCommonTextKeys.name && textInfo) {\n            const width = elementRectangle.width / 3 - 8 - ShapeDefaultSpace.rectangleAndText - strokeWidth;\n            const textSize = getTextSize(board, textInfo!.text, width);\n            return {\n                height: textSize.height,\n                width: width > 0 ? width : 0,\n                x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n                y: elementRectangle.y + (25 - textSize.height) / 2\n            };\n        }\n        if (options?.id === GeometryCommonTextKeys.content && textInfo) {\n            const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n            const textSize = getTextSize(board, textInfo!.text, width);\n            return {\n                height: textSize.height,\n                width: width > 0 ? width : 0,\n                x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n                y: elementRectangle.y + 25 + ShapeDefaultSpace.rectangleAndText + strokeWidth\n            };\n        }\n        return elementRectangle;\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    distanceBetweenPointAndPoint,\n    getNearestPointBetweenPointAndSegment,\n    getNearestPointBetweenPointAndSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\n\nfunction getDeletionLines(rectangle: RectangleClient): Array<[Point, Point]> {\n    return [\n        [\n            [rectangle.x, rectangle.y],\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height]\n        ],\n        [\n            [rectangle.x + rectangle.width, rectangle.y],\n            [rectangle.x, rectangle.y + rectangle.height]\n        ]\n    ];\n}\n\nexport const DeletionEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const lines = getDeletionLines(rectangle);\n        const shape = rs.path(lines.map(([from, to]) => `M${from[0]} ${from[1]} L${to[0]} ${to[1]}`).join(' '), {\n            ...options,\n            fillStyle: 'solid',\n            strokeWidth: 4\n        });\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const lines = getDeletionLines(rectangle);\n        let minDistance = Infinity;\n        let nearestPoint = point;\n        lines.forEach((line) => {\n            const currentPoint = getNearestPointBetweenPointAndSegment(point, line);\n            const distance = distanceBetweenPointAndPoint(point[0], point[1], currentPoint[0], currentPoint[1]);\n            if (distance < minDistance) {\n                minDistance = distance;\n                nearestPoint = currentPoint;\n            }\n        });\n        return nearestPoint;\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const ActiveClassEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x} ${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y + rectangle.height} H${rectangle.x} Z M${\n                rectangle.x + rectangle.width * 0.125\n            } ${rectangle.y} L${rectangle.x + rectangle.width * 0.125} ${rectangle.y + rectangle.height} M${\n                rectangle.x + rectangle.width - rectangle.width * 0.125\n            } ${rectangle.y} L${rectangle.x + rectangle.width - rectangle.width * 0.125} ${rectangle.y + rectangle.height}`,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const width =\n            elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.125 * 2;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.125,\n            y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n        };\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getEllipseTangentSlope,\n    getNearestPointBetweenPointAndSegments,\n    getVectorFromPointAndSlope,\n    setStrokeLinecap,\n    getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const NoteEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const shape = rs.path(\n            `M${rectangle.x} ${rectangle.y} \n            h${rectangle.width - 16}\n            v16\n            h16\n            v${rectangle.height - 16}\n            h${-rectangle.width}\n            Z\n            M${rectangle.x + rectangle.width - 16} ${rectangle.y} \n            A16 16, 0,0,1, ${rectangle.x + rectangle.width} ${rectangle.y + 16}\n            `,\n            { ...options, fillStyle: 'solid' }\n        );\n        setStrokeLinecap(shape, 'round');\n\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n        if (nearestPoint[0] > rectangle.x + rectangle.width - 16 && nearestPoint[1] < rectangle.y + 16) {\n            return getNearestPointBetweenPointAndEllipse(point, [rectangle.x + rectangle.width - 16, rectangle.y + 16], 16, 16);\n        }\n        return nearestPoint;\n    },\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        const centerPoint: Point = [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 2];\n        const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n        const slope = getEllipseTangentSlope(point[0], point[1], 16, 16) as any;\n        return getVectorFromPointAndSlope(point[0], point[1], slope);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth - 15;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n            y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n        };\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    SVGArcCommand,\n    distanceBetweenPointAndPoint,\n    getNearestPointBetweenPointAndArc,\n    getNearestPointBetweenPointAndEllipse,\n    getNearestPointBetweenPointAndSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getUnitVectorByPointAndPoint, rotateVector } from '@plait/common';\n\ninterface AssemblyPathData {\n    startPoint: Point;\n    line1: [Point, Point];\n    circleArcCommand: SVGArcCommand;\n    verticalArcCommand: SVGArcCommand;\n    line2: [Point, Point];\n}\n\nfunction generateAssemblyPath(rectangle: RectangleClient): AssemblyPathData {\n    const centerY = rectangle.y + rectangle.height / 2;\n    const firstLineEndX = rectangle.x + rectangle.width * 0.3;\n    const circleWidth = rectangle.width * 0.13;\n    const circleHeight = rectangle.height * 0.285;\n    const verticalX = firstLineEndX + circleWidth;\n    const verticalRadius = rectangle.width * 0.233;\n\n    return {\n        startPoint: [rectangle.x, centerY],\n        line1: [\n            [rectangle.x, centerY],\n            [firstLineEndX, centerY]\n        ],\n        circleArcCommand: {\n            rx: circleWidth,\n            ry: circleHeight,\n            xAxisRotation: 0,\n            largeArcFlag: 1,\n            sweepFlag: 1,\n            endX: firstLineEndX,\n            endY: centerY\n        },\n        verticalArcCommand: {\n            rx: verticalRadius,\n            ry: rectangle.height / 2,\n            xAxisRotation: 0,\n            largeArcFlag: 0,\n            sweepFlag: 1,\n            endX: verticalX,\n            endY: rectangle.y + rectangle.height\n        },\n        line2: [\n            [verticalX + verticalRadius, centerY],\n            [rectangle.x + rectangle.width, centerY]\n        ]\n    };\n}\n\nexport const AssemblyEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const { startPoint, line1, circleArcCommand, verticalArcCommand, line2 } = generateAssemblyPath(rectangle);\n\n        const pathData = [\n            `M${startPoint[0]} ${startPoint[1]}`,\n            `H${line1[1][0]}`,\n            // 画完整的圆形：先画一个半圆，再画另一个半圆\n            `A${circleArcCommand.rx} ${circleArcCommand.ry} ${circleArcCommand.xAxisRotation} ${circleArcCommand.largeArcFlag} ${\n                circleArcCommand.sweepFlag\n            } ${line1[1][0] + circleArcCommand.rx * 2} ${circleArcCommand.endY}`,\n            `A${circleArcCommand.rx} ${circleArcCommand.ry} ${circleArcCommand.xAxisRotation} ${circleArcCommand.largeArcFlag} ${circleArcCommand.sweepFlag} ${circleArcCommand.endX} ${circleArcCommand.endY}`,\n            // 垂直椭圆\n            `M${verticalArcCommand.endX} ${rectangle.y}`,\n            `A${verticalArcCommand.rx} ${verticalArcCommand.ry} ${verticalArcCommand.xAxisRotation} ${verticalArcCommand.largeArcFlag} ${verticalArcCommand.sweepFlag} ${verticalArcCommand.endX} ${verticalArcCommand.endY}`,\n            // 最后一条线\n            `M${line2[0][0]} ${line2[0][1]} H${line2[1][0]}`\n        ].join(' ');\n\n        const shape = rs.path(pathData, {\n            ...options,\n            fillStyle: 'solid'\n        });\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const { line1, line2, circleArcCommand, verticalArcCommand } = generateAssemblyPath(rectangle);\n\n        // 检查直线段\n        const nearestPointForLines = getNearestPointBetweenPointAndSegments(point, [...line1, ...line2]);\n        const distanceForLines = distanceBetweenPointAndPoint(...point, ...nearestPointForLines);\n\n        // 检查中间圆形\n        const circleCenter = [line1[1][0] + circleArcCommand.rx, line1[1][1]] as Point;\n        const nearestPointForCircle = getNearestPointBetweenPointAndEllipse(point, circleCenter, circleArcCommand.rx, circleArcCommand.ry);\n        const distanceForCircle = distanceBetweenPointAndPoint(...point, ...nearestPointForCircle);\n\n        // 检查垂直椭圆（使用 getNearestPointBetweenPointAndArc 处理半圆弧）\n        const arcStartPoint: Point = [verticalArcCommand.endX, rectangle.y];\n        const nearestPointForEllipse = getNearestPointBetweenPointAndArc(point, arcStartPoint, verticalArcCommand);\n        const distanceForEllipse = distanceBetweenPointAndPoint(...point, ...nearestPointForEllipse);\n\n        // 返回最近的点\n        const minDistance = Math.min(distanceForLines, distanceForCircle, distanceForEllipse);\n        if (minDistance === distanceForLines) return nearestPointForLines;\n        if (minDistance === distanceForCircle) return nearestPointForCircle;\n        return nearestPointForEllipse;\n    },\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        if (connectionPoint[0] > rectangle.x + rectangle.width * 0.43 && connectionPoint[1] < rectangle.y + rectangle.height / 2) {\n            return rotateVector(getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]), -Math.PI);\n        }\n        if (connectionPoint[0] > rectangle.x + rectangle.width * 0.43 && connectionPoint[1] > rectangle.y + rectangle.height / 2) {\n            return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]);\n        }\n        return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]);\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndSegments,\n    getNearestPointBetweenPointAndArc,\n    distanceBetweenPointAndPoint,\n    setStrokeLinecap,\n    getNearestPointBetweenPointAndSegment,\n    SVGArcCommand\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\ninterface RequiredInterfacePathData {\n    startPoint: Point;\n    leftArcCommand: SVGArcCommand;\n    line: {\n        startX: number;\n        startY: number;\n        endX: number;\n        endY: number;\n    };\n}\n\nfunction generateRequiredInterfacePath(rectangle: RectangleClient): RequiredInterfacePathData {\n    const arcWidth = rectangle.width * 0.39;\n    const arcHeight = rectangle.height / 2;\n\n    return {\n        startPoint: [rectangle.x, rectangle.y],\n        leftArcCommand: {\n            rx: arcWidth,\n            ry: arcHeight,\n            xAxisRotation: 0,\n            largeArcFlag: 0,\n            sweepFlag: 1,\n            endX: rectangle.x,\n            endY: rectangle.y + rectangle.height\n        },\n        line: {\n            startX: rectangle.x + rectangle.width * 0.41,\n            startY: rectangle.y + rectangle.height / 2,\n            endX: rectangle.x + rectangle.width,\n            endY: rectangle.y + rectangle.height / 2\n        }\n    };\n}\n\nexport const RequiredInterfaceEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const { startPoint, leftArcCommand, line } = generateRequiredInterfacePath(rectangle);\n\n        const pathData = [\n            `M${startPoint[0]} ${startPoint[1]}`,\n            `A${leftArcCommand.rx} ${leftArcCommand.ry} ${leftArcCommand.xAxisRotation} ${leftArcCommand.largeArcFlag} ${leftArcCommand.sweepFlag} ${leftArcCommand.endX} ${leftArcCommand.endY}`,\n            `M${line.startX} ${line.startY} H${line.endX}`\n        ].join(' ');\n\n        const shape = rs.path(pathData, {\n            ...options,\n            fillStyle: 'solid',\n            fill: 'transparent'\n        });\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const { startPoint, leftArcCommand, line } = generateRequiredInterfacePath(rectangle);\n        let minDistance = Infinity;\n        let nearestPoint = point;\n\n        // 检查圆弧段\n        const arcNearestPoint = getNearestPointBetweenPointAndArc(point, startPoint, leftArcCommand);\n        const arcDistance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);\n        if (arcDistance < minDistance) {\n            minDistance = arcDistance;\n            nearestPoint = arcNearestPoint;\n        }\n\n        // 检查直线段\n        const lineStart: Point = [line.startX, line.startY];\n        const lineEnd: Point = [line.endX, line.endY];\n        const lineNearestPoint = getNearestPointBetweenPointAndSegment(point, [lineStart, lineEnd]);\n        const lineDistance = distanceBetweenPointAndPoint(point[0], point[1], lineNearestPoint[0], lineNearestPoint[1]);\n        if (lineDistance < minDistance) {\n            minDistance = lineDistance;\n            nearestPoint = lineNearestPoint;\n        }\n\n        return nearestPoint;\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    SVGArcCommand,\n    distanceBetweenPointAndPoint,\n    getEllipseTangentSlope,\n    getNearestPointBetweenPointAndEllipse,\n    getNearestPointBetweenPointAndSegments,\n    getVectorFromPointAndSlope,\n    setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\n\nconst percentage = 0.54;\n\ninterface ProvidedInterfacePathData {\n    startPoint: Point;\n    line: {\n        startX: number;\n        startY: number;\n        endX: number;\n        endY: number;\n    };\n    arcCommands: SVGArcCommand[];\n}\n\nfunction generateProvidedInterfacePath(rectangle: RectangleClient): ProvidedInterfacePathData {\n    const centerY = rectangle.y + rectangle.height / 2;\n    const rx = (rectangle.width * (1 - percentage)) / 2;\n    const ry = rectangle.height / 2;\n\n    const startPoint: Point = [rectangle.x, centerY];\n    const lineEndX = rectangle.x + rectangle.width * percentage;\n\n    return {\n        startPoint,\n        line: {\n            startX: startPoint[0],\n            startY: centerY,\n            endX: lineEndX,\n            endY: centerY\n        },\n        arcCommands: [\n            {\n                rx,\n                ry,\n                xAxisRotation: 0,\n                largeArcFlag: 1,\n                sweepFlag: 1,\n                endX: rectangle.x + rectangle.width,\n                endY: centerY\n            },\n            {\n                rx,\n                ry,\n                xAxisRotation: 0,\n                largeArcFlag: 1,\n                sweepFlag: 1,\n                endX: lineEndX,\n                endY: centerY\n            }\n        ]\n    };\n}\n\nexport const ProvidedInterfaceEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const { startPoint, line, arcCommands } = generateProvidedInterfacePath(rectangle);\n\n        const pathData = [\n            `M${startPoint[0]} ${startPoint[1]}`,\n            `H${line.endX}`,\n            ...arcCommands.map(\n                (command) =>\n                    `A${command.rx} ${command.ry} ${command.xAxisRotation} ${command.largeArcFlag} ${command.sweepFlag} ${command.endX} ${command.endY}`\n            )\n        ].join(' ');\n\n        const shape = rs.path(pathData, {\n            ...options,\n            fillStyle: 'solid'\n        });\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const { startPoint, line, arcCommands } = generateProvidedInterfacePath(rectangle);\n\n        // 检查直线段\n        const lineStart: Point = [line.startX, line.startY];\n        const lineEnd: Point = [line.endX, line.endY];\n        const nearestPointForLine = getNearestPointBetweenPointAndSegments(point, [lineStart, lineEnd]);\n        const distanceForLine = distanceBetweenPointAndPoint(...point, ...nearestPointForLine);\n\n        // 检查圆弧段\n        const arcCenter = [rectangle.x + (3 * rectangle.width) / 4, line.startY] as Point;\n        const nearestPointForEllipse = getNearestPointBetweenPointAndEllipse(point, arcCenter, arcCommands[0].rx, arcCommands[0].ry);\n        const distanceForEllipse = distanceBetweenPointAndPoint(...point, ...nearestPointForEllipse);\n\n        return distanceForLine < distanceForEllipse ? nearestPointForLine : nearestPointForEllipse;\n    },\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        const centerPoint: Point = [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 2];\n        if (connectionPoint[0] > rectangle.x + rectangle.width * 0.54) {\n            const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n            const rx = (rectangle.width * 0.46) / 2;\n            const ry = rectangle.height / 2;\n            const slope = getEllipseTangentSlope(point[0], point[1], rx, ry) as any;\n            return getVectorFromPointAndSlope(point[0], point[1], slope);\n        }\n        return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]);\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndDiscreteSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\n\ninterface ComponentPathData {\n    boxSize: {\n        width: number;\n        height: number;\n    };\n    points: {\n        mainStart: Point;\n        topBoxStart: Point;\n        topBoxEnd: Point;\n        bottomBoxStart: Point;\n        bottomBoxEnd: Point;\n        mainEnd: Point;\n        rightTop: Point;\n        rightBottom: Point;\n    };\n}\n\nfunction generateComponentPath(rectangle: RectangleClient): ComponentPathData {\n    const mainLineX = rectangle.x + 12;\n    const boxWidth = rectangle.width > 70 ? 24 : rectangle.width * 0.2;\n    const boxHeight = rectangle.height - 28 - rectangle.height * 0.35 > 1 ? 14 : rectangle.height * 0.175;\n    const topBoxY = rectangle.y + rectangle.height * 0.175;\n    const bottomBoxY = rectangle.y + rectangle.height - rectangle.height * 0.175 - boxHeight;\n\n    return {\n        boxSize: {\n            width: boxWidth,\n            height: boxHeight\n        },\n        points: {\n            mainStart: [mainLineX, rectangle.y],\n            topBoxStart: [mainLineX, topBoxY],\n            topBoxEnd: [mainLineX, topBoxY + boxHeight],\n            bottomBoxStart: [mainLineX, bottomBoxY],\n            bottomBoxEnd: [mainLineX, bottomBoxY + boxHeight],\n            mainEnd: [mainLineX, rectangle.y + rectangle.height],\n            rightTop: [rectangle.x + rectangle.width, rectangle.y],\n            rightBottom: [rectangle.x + rectangle.width, rectangle.y + rectangle.height]\n        }\n    };\n}\n\nexport const ComponentEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const { boxSize, points } = generateComponentPath(rectangle);\n\n        const pathData = [\n            // 主矩形轮廓\n            `M${points.mainStart[0]} ${points.mainStart[1]}`,\n            `H${points.rightTop[0]}`,\n            `V${points.rightBottom[1]}`,\n            `H${points.mainEnd[0]}`,\n\n            // 上方小矩形\n            `M${points.topBoxStart[0]} ${points.topBoxStart[1]}`,\n            `h${boxSize.width / 2} v${boxSize.height} h${-boxSize.width} v${-boxSize.height} h${boxSize.width / 2}`,\n\n            // 下方小矩形\n            `M${points.bottomBoxStart[0]} ${points.bottomBoxStart[1]}`,\n            `h${boxSize.width / 2} v${boxSize.height} h${-boxSize.width} v${-boxSize.height} h${boxSize.width / 2}`,\n\n            // 连接线\n            `M${points.mainStart[0]} ${points.mainStart[1]}`,\n            `V${points.topBoxStart[1]}`,\n            `M${points.topBoxEnd[0]} ${points.topBoxEnd[1]}`,\n            `V${points.bottomBoxStart[1]}`,\n            `M${points.bottomBoxEnd[0]} ${points.bottomBoxEnd[1]}`,\n            `V${points.mainEnd[1]}`\n        ].join(' ');\n\n        const shape = rs.path(pathData, { ...options, fillStyle: 'solid' });\n        setStrokeLinecap(shape, 'round');\n        return shape;\n    },\n\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        const { boxSize, points } = generateComponentPath(rectangle);\n\n        const segments: [Point, Point][] = [\n            // 主矩形轮廓\n            [points.mainStart, [points.rightTop[0], points.mainStart[1]]],\n            [[points.rightTop[0], points.mainStart[1]], points.rightBottom],\n            [points.rightBottom, [points.mainEnd[0], points.rightBottom[1]]],\n            [[points.mainEnd[0], points.rightBottom[1]], points.mainStart],\n\n            // 上方小矩形\n            [points.topBoxStart, [points.topBoxStart[0] + boxSize.width / 2, points.topBoxStart[1]]],\n            [\n                [points.topBoxStart[0] + boxSize.width / 2, points.topBoxStart[1]],\n                [points.topBoxStart[0] + boxSize.width / 2, points.topBoxEnd[1]]\n            ],\n            [\n                [points.topBoxStart[0] + boxSize.width / 2, points.topBoxEnd[1]],\n                [points.topBoxStart[0] - boxSize.width / 2, points.topBoxEnd[1]]\n            ],\n            [\n                [points.topBoxStart[0] - boxSize.width / 2, points.topBoxEnd[1]],\n                [points.topBoxStart[0] - boxSize.width / 2, points.topBoxStart[1]]\n            ],\n            [[points.topBoxStart[0] - boxSize.width / 2, points.topBoxStart[1]], points.topBoxStart],\n\n            // 下方小矩形\n            [points.bottomBoxStart, [points.bottomBoxStart[0] + boxSize.width / 2, points.bottomBoxStart[1]]],\n            [\n                [points.bottomBoxStart[0] + boxSize.width / 2, points.bottomBoxStart[1]],\n                [points.bottomBoxStart[0] + boxSize.width / 2, points.bottomBoxEnd[1]]\n            ],\n            [\n                [points.bottomBoxStart[0] + boxSize.width / 2, points.bottomBoxEnd[1]],\n                [points.bottomBoxStart[0] - boxSize.width / 2, points.bottomBoxEnd[1]]\n            ],\n            [\n                [points.bottomBoxStart[0] - boxSize.width / 2, points.bottomBoxEnd[1]],\n                [points.bottomBoxStart[0] - boxSize.width / 2, points.bottomBoxStart[1]]\n            ],\n            [[points.bottomBoxStart[0] - boxSize.width / 2, points.bottomBoxStart[1]], points.bottomBoxStart],\n\n            // 连接线\n            [points.mainStart, points.topBoxStart],\n            [points.topBoxEnd, points.bottomBoxStart],\n            [points.bottomBoxEnd, points.mainEnd]\n        ];\n\n        return getNearestPointBetweenPointAndDiscreteSegments(point, segments);\n    },\n\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n\n    getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n        const { points } = generateComponentPath(rectangle);\n        const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getUnitVectorByPointAndPoint(points.mainStart, connectionPoint);\n    },\n\n    getConnectorPoints(rectangle: RectangleClient) {\n        const { points } = generateComponentPath(rectangle);\n        return [\n            [rectangle.x + rectangle.width / 2, rectangle.y],\n            [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n            [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n            [points.mainStart[0], rectangle.y + rectangle.height / 2]\n        ] as [Point, Point, Point, Point];\n    },\n\n    getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const width = elementRectangle.width - 24 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x + 24 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n            y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n        };\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    getNearestPointBetweenPointAndSegments,\n    setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { ComponentEngine } from './component';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const ComponentBoxEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n        const componentWidth = rectangle.width - 45 * 2 - 18 > 1 ? 45 : rectangle.width * 0.25;\n        const componentHeight = rectangle.height - 30 - 8 * 2 > 1 ? 30 : rectangle.height * 0.2;\n\n        const componentRectangle = {\n            x: rectangle.x + rectangle.width - 18 - componentWidth,\n            y: rectangle.y + 8,\n            width: componentWidth,\n            height: componentHeight\n        };\n        const shape = rs.path(\n            `M${rectangle.x} ${rectangle.y} \n            H${rectangle.x + rectangle.width} \n            V${rectangle.y + rectangle.height} \n            H${rectangle.x} Z\n\n            `,\n            { ...options, fillStyle: 'solid' }\n        );\n\n        const componentShape = ComponentEngine.draw(board, componentRectangle, options);\n        shape.append(componentShape);\n        setStrokeLinecap(shape, 'round');\n\n        return shape;\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const componentWidth = elementRectangle.width - 45 * 2 - 18 > 1 ? 45 : elementRectangle.width * 0.25;\n        const width = elementRectangle.width - 18 - componentWidth - ShapeDefaultSpace.rectangleAndText - strokeWidth * 2;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n            y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n        };\n    }\n};\n","import {\n    PlaitBoard,\n    Point,\n    PointOfRectangle,\n    RectangleClient,\n    drawRoundRectangle,\n    getNearestPointBetweenPointAndSegments\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const TemplateEngine: ShapeEngine = {\n    draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n        const rs = PlaitBoard.getRoughSVG(board);\n\n        return drawRoundRectangle(\n            rs,\n            rectangle.x,\n            rectangle.y,\n            rectangle.x + rectangle.width,\n            rectangle.y + rectangle.height,\n            {\n                ...options,\n                fillStyle: 'solid',\n                dashGap: 10,\n                strokeLineDash: [10, 10]\n            },\n            false,\n            4\n        );\n    },\n    isInsidePoint(rectangle: RectangleClient, point: Point) {\n        const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n        return RectangleClient.isHit(rectangle, rangeRectangle);\n    },\n    getCornerPoints(rectangle: RectangleClient) {\n        return RectangleClient.getCornerPoints(rectangle);\n    },\n    getNearestPoint(rectangle: RectangleClient, point: Point) {\n        return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n    },\n    getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n        const corners = RectangleEngine.getCornerPoints(rectangle);\n        const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n        return getPolygonEdgeByConnectionPoint(corners, point);\n    },\n    getConnectorPoints(rectangle: RectangleClient) {\n        return RectangleClient.getEdgeCenterPoints(rectangle);\n    },\n    getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n        const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n        const strokeWidth = getStrokeWidthByElement(element);\n        const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n        const text = element.text!;\n        const textSize = getTextSize(board, text, width);\n        return {\n            height: textSize.height,\n            width: width > 0 ? width : 0,\n            x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n            y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n        };\n    }\n};\n","import {\n    BasicShapes,\n    DrawOptions,\n    DrawShapes,\n    FlowchartSymbols,\n    PlaitGeometry,\n    ShapeEngine,\n    SwimlaneSymbols,\n    TableSymbols,\n    TextRectangleOptions,\n    UMLSymbols\n} from '../interfaces';\nimport { CommentEngine } from './basic-shapes/comment';\nimport { CrossEngine } from './basic-shapes/cross';\nimport { DiamondEngine } from './basic-shapes/diamond';\nimport { EllipseEngine } from './basic-shapes/ellipse';\nimport { HexagonEngine } from './basic-shapes/hexagon';\nimport { LeftArrowEngine } from './basic-shapes/left-arrow';\nimport { OctagonEngine } from './basic-shapes/octagon';\nimport { ParallelogramEngine } from './basic-shapes/parallelogram';\nimport { PentagonEngine } from './basic-shapes/pentagon';\nimport { PentagonArrowEngine } from './basic-shapes/pentagon-arrow';\nimport { ProcessArrowEngine } from './basic-shapes/process-arrow';\nimport { RightArrowEngine } from './basic-shapes/right-arrow';\nimport { RoundCommentEngine } from './basic-shapes/round-comment';\nimport { RoundRectangleEngine } from './basic-shapes/round-rectangle';\nimport { TrapezoidEngine } from './basic-shapes/trapezoid';\nimport { TriangleEngine } from './basic-shapes/triangle';\nimport { TwoWayArrowEngine } from './basic-shapes/two-way-arrow';\nimport { StarEngine } from './basic-shapes/star';\nimport { TerminalEngine } from './flowchart/terminal';\nimport { ManualInputEngine } from './flowchart/manual-input';\nimport { PreparationEngine } from './flowchart/preparation';\nimport { ManualLoopEngine } from './flowchart/manual-loop';\nimport { MergeEngine } from './flowchart/merge';\nimport { DelayEngine } from './flowchart/delay';\nimport { StoredDataEngine } from './flowchart/stored-data';\nimport { PredefinedProcessEngine } from './flowchart/predefined-process';\nimport { OffPageEngine } from './flowchart/off-page';\nimport { CloudEngine } from './basic-shapes/cloud';\nimport { OrEngine } from './flowchart/or';\nimport { SummingJunctionEngine } from './flowchart/summing-junction';\nimport { DocumentEngine } from './flowchart/document';\nimport { MultiDocumentEngine } from './flowchart/multi-document';\nimport { DatabaseEngine } from './flowchart/database';\nimport { HardDiskEngine } from './flowchart/hard-disk';\nimport { InternalStorageEngine } from './flowchart/internal-storage';\nimport { NoteCurlyLeftEngine } from './flowchart/note-curly-left';\nimport { NoteCurlyRightEngine } from './flowchart/note-curly-right';\nimport { NoteSquareEngine } from './flowchart/note-square';\nimport { DisplayEngine } from './flowchart/display';\nimport { TableEngine } from './table/table';\nimport { RectangleEngine } from './basic-shapes/rectangle';\nimport { PlaitElement } from '@plait/core';\nimport { ActorEngine } from './uml/actor';\nimport { ContainerEngine } from './uml/container';\nimport { PackageEngine } from './uml/package';\nimport { CombinedFragmentEngine } from './uml/combined-fragment';\nimport { DeletionEngine } from './uml/deletion';\nimport { ActiveClassEngine } from './uml/activity-class';\nimport { NoteEngine } from './uml/note';\nimport { AssemblyEngine } from './uml/assembly';\nimport { RequiredInterfaceEngine } from './uml/required-interface';\nimport { ProvidedInterfaceEngine } from './uml/provided-interface';\nimport { ComponentEngine } from './uml/component';\nimport { ComponentBoxEngine } from './uml/component-box';\nimport { TemplateEngine } from './uml/template';\n\nconst ShapeEngineMap: Record<DrawShapes, ShapeEngine<any, any, any>> = {\n    [BasicShapes.rectangle]: RectangleEngine,\n    [BasicShapes.diamond]: DiamondEngine,\n    [BasicShapes.ellipse]: EllipseEngine,\n    [BasicShapes.parallelogram]: ParallelogramEngine,\n    [BasicShapes.roundRectangle]: RoundRectangleEngine,\n    [BasicShapes.text]: RectangleEngine,\n    [BasicShapes.triangle]: TriangleEngine,\n    [BasicShapes.leftArrow]: LeftArrowEngine,\n    [BasicShapes.trapezoid]: TrapezoidEngine,\n    [BasicShapes.rightArrow]: RightArrowEngine,\n    [BasicShapes.cross]: CrossEngine,\n    [BasicShapes.star]: StarEngine,\n    [BasicShapes.pentagon]: PentagonEngine,\n    [BasicShapes.hexagon]: HexagonEngine,\n    [BasicShapes.octagon]: OctagonEngine,\n    [BasicShapes.pentagonArrow]: PentagonArrowEngine,\n    [BasicShapes.processArrow]: ProcessArrowEngine,\n    [BasicShapes.twoWayArrow]: TwoWayArrowEngine,\n    [BasicShapes.comment]: CommentEngine,\n    [BasicShapes.roundComment]: RoundCommentEngine,\n    [BasicShapes.cloud]: CloudEngine,\n    [FlowchartSymbols.process]: RectangleEngine,\n    [FlowchartSymbols.decision]: DiamondEngine,\n    [FlowchartSymbols.connector]: EllipseEngine,\n    [FlowchartSymbols.data]: ParallelogramEngine,\n    [FlowchartSymbols.terminal]: TerminalEngine,\n    [FlowchartSymbols.database]: DatabaseEngine,\n    [FlowchartSymbols.hardDisk]: HardDiskEngine,\n    [FlowchartSymbols.internalStorage]: InternalStorageEngine,\n    [FlowchartSymbols.manualInput]: ManualInputEngine,\n    [FlowchartSymbols.preparation]: PreparationEngine,\n    [FlowchartSymbols.manualLoop]: ManualLoopEngine,\n    [FlowchartSymbols.merge]: MergeEngine,\n    [FlowchartSymbols.delay]: DelayEngine,\n    [FlowchartSymbols.storedData]: StoredDataEngine,\n    [FlowchartSymbols.or]: OrEngine,\n    [FlowchartSymbols.summingJunction]: SummingJunctionEngine,\n    [FlowchartSymbols.predefinedProcess]: PredefinedProcessEngine,\n    [FlowchartSymbols.offPage]: OffPageEngine,\n    [FlowchartSymbols.document]: DocumentEngine,\n    [FlowchartSymbols.multiDocument]: MultiDocumentEngine,\n    [FlowchartSymbols.noteCurlyLeft]: NoteCurlyLeftEngine,\n    [FlowchartSymbols.noteCurlyRight]: NoteCurlyRightEngine,\n    [FlowchartSymbols.noteSquare]: NoteSquareEngine,\n    [FlowchartSymbols.display]: DisplayEngine,\n    [SwimlaneSymbols.swimlaneHorizontal]: TableEngine,\n    [SwimlaneSymbols.swimlaneVertical]: TableEngine,\n    [TableSymbols.table]: TableEngine,\n    [UMLSymbols.actor]: ActorEngine,\n    [UMLSymbols.useCase]: EllipseEngine,\n    [UMLSymbols.container]: ContainerEngine,\n    [UMLSymbols.note]: NoteEngine,\n    [UMLSymbols.package]: PackageEngine,\n    [UMLSymbols.combinedFragment]: CombinedFragmentEngine,\n    [UMLSymbols.class]: TableEngine,\n    [UMLSymbols.interface]: TableEngine,\n    [UMLSymbols.activation]: RectangleEngine,\n    [UMLSymbols.object]: RectangleEngine,\n    [UMLSymbols.deletion]: DeletionEngine,\n    [UMLSymbols.activityClass]: ActiveClassEngine,\n    [UMLSymbols.simpleClass]: RectangleEngine,\n    [UMLSymbols.component]: ComponentEngine,\n    [UMLSymbols.componentBox]: ComponentBoxEngine,\n    [UMLSymbols.template]: TemplateEngine,\n    [UMLSymbols.port]: RectangleEngine,\n    [UMLSymbols.branchMerge]: DiamondEngine,\n    [UMLSymbols.assembly]: AssemblyEngine,\n    [UMLSymbols.requiredInterface]: RequiredInterfaceEngine,\n    [UMLSymbols.providedInterface]: ProvidedInterfaceEngine\n};\n\nexport const getEngine = <\n    T extends PlaitElement = PlaitGeometry,\n    P extends DrawOptions = DrawOptions,\n    K extends TextRectangleOptions = TextRectangleOptions\n>(\n    shape: DrawShapes\n): ShapeEngine<T, P, K> => {\n    return ShapeEngineMap[shape];\n};\n","import {\n    Point,\n    PlaitBoard,\n    getElementById,\n    RectangleClient,\n    PointOfRectangle,\n    Direction,\n    Vector,\n    hasValidAngle,\n    rotatePointsByElement,\n    findElements,\n    PlaitElement,\n    Path\n} from '@plait/core';\nimport {\n    getDirectionFactor,\n    rotateVectorAnti90,\n    getDirectionByVector,\n    getOppositeDirection,\n    getDirectionByPointOfRectangle,\n    getSourceAndTargetOuterRectangle,\n    getNextPoint,\n    rotateVector\n} from '@plait/common';\nimport {\n    BasicShapes,\n    ArrowLineHandleKey,\n    ArrowLineHandleRef,\n    ArrowLineHandleRefPair,\n    ArrowLineMarkerType,\n    PlaitArrowLine,\n    PlaitGeometry,\n    PlaitShapeElement,\n    PlaitDrawElement\n} from '../../interfaces';\nimport { getEngine } from '../../engines';\nimport { getElementShape } from '../shape';\nimport { getSourceAndTargetRectangle } from './elbow';\nimport { getStrokeWidthByElement } from '../common';\nimport { getArrowLinePoints, getHitConnection } from './arrow-line-basic';\n\nexport const getArrowLineHandleRefPair = (board: PlaitBoard, element: PlaitArrowLine): ArrowLineHandleRefPair => {\n    const strokeWidth = getStrokeWidthByElement(element);\n    const sourceBoundElement = element.source.boundId ? getElementById<PlaitShapeElement>(board, element.source.boundId) : undefined;\n    const targetBoundElement = element.target.boundId ? getElementById<PlaitShapeElement>(board, element.target.boundId) : undefined;\n    let sourcePoint = sourceBoundElement ? getConnectionPoint(sourceBoundElement, element.source.connection!) : element.points[0];\n    let targetPoint = targetBoundElement\n        ? getConnectionPoint(targetBoundElement, element.target.connection!)\n        : element.points[element.points.length - 1];\n    let sourceDirection = getDirectionByVector([targetPoint[0] - sourcePoint[0], targetPoint[1] - sourcePoint[1]]) || Direction.right;\n    let targetDirection = getOppositeDirection(sourceDirection);\n    const sourceFactor = getDirectionFactor(sourceDirection);\n    const targetFactor = getDirectionFactor(targetDirection);\n    const sourceHandleRef: ArrowLineHandleRef = {\n        key: ArrowLineHandleKey.source,\n        point: sourcePoint,\n        direction: sourceDirection,\n        vector: [sourceFactor.x, sourceFactor.y]\n    };\n    const targetHandleRef: ArrowLineHandleRef = {\n        key: ArrowLineHandleKey.target,\n        point: targetPoint,\n        direction: targetDirection,\n        vector: [targetFactor.x, targetFactor.y]\n    };\n    if (sourceBoundElement) {\n        const connectionOffset = PlaitArrowLine.isSourceMarkOrTargetMark(\n            element as PlaitArrowLine,\n            ArrowLineMarkerType.none,\n            ArrowLineHandleKey.source\n        )\n            ? 0\n            : strokeWidth;\n        const sourceVector = getVectorByConnection(sourceBoundElement, element.source.connection!);\n        sourceHandleRef.vector = sourceVector;\n        sourceHandleRef.boundElement = sourceBoundElement;\n        if (hasValidAngle(sourceBoundElement)) {\n            const direction = getDirectionByVector(rotateVector(sourceVector, sourceBoundElement.angle!));\n            sourceDirection = direction ? direction : sourceDirection;\n        } else {\n            const direction = getDirectionByVector(sourceVector);\n            sourceDirection = direction ? direction : sourceDirection;\n        }\n        sourceHandleRef.direction = sourceDirection;\n        sourcePoint = getConnectionPoint(sourceBoundElement, element.source.connection!, sourceDirection, connectionOffset);\n        sourceHandleRef.point = rotatePointsByElement(sourcePoint, sourceBoundElement) || sourcePoint;\n    }\n    if (targetBoundElement) {\n        const connectionOffset = PlaitArrowLine.isSourceMarkOrTargetMark(\n            element as PlaitArrowLine,\n            ArrowLineMarkerType.none,\n            ArrowLineHandleKey.target\n        )\n            ? 0\n            : strokeWidth;\n        const targetVector = getVectorByConnection(targetBoundElement, element.target.connection!);\n        targetHandleRef.vector = targetVector;\n        targetHandleRef.boundElement = targetBoundElement;\n        if (hasValidAngle(targetBoundElement)) {\n            const direction = getDirectionByVector(rotateVector(targetVector, targetBoundElement.angle!));\n            targetDirection = direction ? direction : targetDirection;\n        } else {\n            const direction = getDirectionByVector(targetVector);\n            targetDirection = direction ? direction : targetDirection;\n        }\n        targetHandleRef.direction = targetDirection;\n        targetPoint = getConnectionPoint(targetBoundElement, element.target.connection!, targetDirection, connectionOffset);\n        targetHandleRef.point = rotatePointsByElement(targetPoint, targetBoundElement) || targetPoint;\n    }\n    return { source: sourceHandleRef, target: targetHandleRef };\n};\n\nexport const getConnectionPoint = (geometry: PlaitShapeElement, connection: Point, direction?: Direction, delta?: number): Point => {\n    const rectangle = RectangleClient.getRectangleByPoints(geometry.points);\n    if (direction && delta) {\n        const directionFactor = getDirectionFactor(direction);\n        const point = RectangleClient.getConnectionPoint(rectangle, connection);\n        return [point[0] + directionFactor.x * delta, point[1] + directionFactor.y * delta];\n    } else {\n        return RectangleClient.getConnectionPoint(rectangle, connection);\n    }\n};\n\nexport const getVectorByConnection = (boundElement: PlaitShapeElement, connection: PointOfRectangle): Vector => {\n    const rectangle = RectangleClient.getRectangleByPoints(boundElement.points);\n    const shape = getElementShape(boundElement);\n    const engine = getEngine(shape);\n    let vector: Vector = [0, 0];\n    const direction = getDirectionByPointOfRectangle(connection);\n    if (direction && boundElement.shape !== BasicShapes.ellipse) {\n        const factor = getDirectionFactor(direction);\n        return [factor.x, factor.y];\n    }\n    if (engine.getEdgeByConnectionPoint) {\n        const edge = engine.getEdgeByConnectionPoint(rectangle, connection);\n        if (edge) {\n            const lineVector = [edge[1][0] - edge[0][0], edge[1][1] - edge[0][1]] as Vector;\n            return rotateVectorAnti90(lineVector);\n        }\n    }\n    if (engine.getTangentVectorByConnectionPoint) {\n        const lineVector = engine.getTangentVectorByConnectionPoint(rectangle, connection);\n        if (lineVector) {\n            return rotateVectorAnti90(lineVector);\n        }\n    }\n    return vector;\n};\n\nexport const getElbowLineRouteOptions = (board: PlaitBoard, element: PlaitArrowLine, handleRefPair?: ArrowLineHandleRefPair) => {\n    handleRefPair = handleRefPair ?? getArrowLineHandleRefPair(board, element);\n    const { sourceRectangle, targetRectangle } = getSourceAndTargetRectangle(board, element, handleRefPair);\n    const { sourceOuterRectangle, targetOuterRectangle } = getSourceAndTargetOuterRectangle(sourceRectangle, targetRectangle);\n    const sourcePoint = handleRefPair.source.point;\n    const targetPoint = handleRefPair.target.point;\n    const nextSourcePoint = getNextPoint(sourcePoint, sourceOuterRectangle, handleRefPair.source.direction);\n    const nextTargetPoint = getNextPoint(targetPoint, targetOuterRectangle, handleRefPair.target.direction);\n    return {\n        sourcePoint,\n        nextSourcePoint,\n        sourceRectangle,\n        sourceOuterRectangle,\n        targetPoint,\n        nextTargetPoint,\n        targetRectangle,\n        targetOuterRectangle\n    };\n};\n\nexport const collectArrowLineUpdatedRefsByGeometry = (\n    board: PlaitBoard,\n    element: PlaitShapeElement,\n    refs: { property: Partial<PlaitArrowLine>; path: Path }[]\n) => {\n    const lines = findElements(board, {\n        match: (element: PlaitElement) => {\n            if (PlaitDrawElement.isArrowLine(element)) {\n                return element.source.boundId === element.id || element.target.boundId === element.id;\n            }\n            return false;\n        },\n        recursion: (element) => true\n    }) as PlaitArrowLine[];\n    if (lines.length) {\n        lines.forEach((line) => {\n            const isSourceBound = line.source.boundId === element.id;\n            const handle = isSourceBound ? 'source' : 'target';\n            const object = { ...line[handle] };\n            const linePoints = getArrowLinePoints(board, line);\n            const point = isSourceBound ? linePoints[0] : linePoints[linePoints.length - 1];\n            object.connection = getHitConnection(board, point, element);\n            const path = PlaitBoard.findPath(board, line);\n            const index = refs.findIndex((obj) => Path.equals(obj.path, path));\n            if (index === -1) {\n                refs.push({\n                    property: {\n                        [handle]: object\n                    },\n                    path\n                });\n            } else {\n                refs[index].property = { ...refs[index].property, [handle]: object };\n            }\n        });\n    }\n};\n","import { Direction, PlaitBoard, PlaitElement, Point, PointOfRectangle, Vector, getElementById, rotatePointsByElement } from '@plait/core';\nimport { Element } from 'slate';\nimport { getConnectionPoint } from '../utils/arrow-line/arrow-line-common';\nimport { PlaitShapeElement } from '.';\nimport { StrokeStyle } from '@plait/common';\n\nexport enum ArrowLineMarkerType {\n    arrow = 'arrow',\n    none = 'none',\n    openTriangle = 'open-triangle',\n    solidTriangle = 'solid-triangle',\n    sharpArrow = 'sharp-arrow',\n    oneSideUp = 'one-side-up',\n    oneSideDown = 'one-side-down',\n    hollowTriangle = 'hollow-triangle',\n    singleSlash = 'single-slash'\n}\n\nexport enum ArrowLineShape {\n    straight = 'straight',\n    curve = 'curve',\n    elbow = 'elbow'\n}\n\nexport enum ArrowLineHandleKey {\n    source = 'source',\n    target = 'target'\n}\n\nexport interface ArrowLineText {\n    text: Element;\n    // Percentage of positioning based on line length\n    position: number;\n}\n\nexport interface ArrowLineHandle {\n    // The id of the bounded element\n    boundId?: string;\n    connection?: PointOfRectangle;\n    marker: ArrowLineMarkerType;\n}\n\nexport interface ArrowLineHandleRef {\n    key: ArrowLineHandleKey;\n    direction: Direction;\n    point: PointOfRectangle;\n    vector: Vector;\n    boundElement?: PlaitShapeElement;\n}\n\nexport interface ArrowLineHandleRefPair {\n    source: ArrowLineHandleRef;\n    target: ArrowLineHandleRef;\n}\n\nexport interface PlaitArrowLine extends PlaitElement {\n    type: 'arrow-line';\n    shape: ArrowLineShape;\n    points: Point[];\n\n    source: ArrowLineHandle;\n    target: ArrowLineHandle;\n\n    texts: ArrowLineText[];\n\n    // node style attributes\n    strokeColor?: string;\n    strokeWidth?: number;\n    strokeStyle?: StrokeStyle;\n\n    opacity: number;\n}\n\nexport interface PlaitStraightArrowLine extends PlaitArrowLine {\n    shape: ArrowLineShape.straight;\n}\n\nexport interface PlaitCurveArrowLine extends PlaitArrowLine {\n    shape: ArrowLineShape.curve;\n}\n\nexport interface PlaitElbowArrowLine extends PlaitArrowLine {\n    shape: ArrowLineShape.elbow;\n}\n\nexport const PlaitArrowLine = {\n    isSourceMarkOrTargetMark(line: PlaitArrowLine, markType: ArrowLineMarkerType, handleKey: ArrowLineHandleKey) {\n        if (handleKey === ArrowLineHandleKey.source) {\n            return line.source.marker === markType;\n        } else {\n            return line.target.marker === markType;\n        }\n    },\n    isSourceMark(line: PlaitArrowLine, markType: ArrowLineMarkerType) {\n        return PlaitArrowLine.isSourceMarkOrTargetMark(line, markType, ArrowLineHandleKey.source);\n    },\n    isTargetMark(line: PlaitArrowLine, markType: ArrowLineMarkerType) {\n        return PlaitArrowLine.isSourceMarkOrTargetMark(line, markType, ArrowLineHandleKey.target);\n    },\n    isBoundElementOfSource(line: PlaitArrowLine, element: PlaitShapeElement) {\n        return line.source.boundId === element.id;\n    },\n    isBoundElementOfTarget(line: PlaitArrowLine, element: PlaitShapeElement) {\n        return line.target.boundId === element.id;\n    },\n    getPoints(board: PlaitBoard, line: PlaitArrowLine) {\n        let sourcePoint;\n        if (line.source.boundId) {\n            const sourceElement = getElementById<PlaitShapeElement>(board, line.source.boundId)!;\n            const sourceConnectionPoint = getConnectionPoint(sourceElement, line.source.connection!);\n            sourcePoint = rotatePointsByElement(sourceConnectionPoint, sourceElement) || sourceConnectionPoint;\n        } else {\n            sourcePoint = line.points[0];\n        }\n\n        let targetPoint;\n        if (line.target.boundId) {\n            const targetElement = getElementById<PlaitShapeElement>(board, line.target.boundId)!;\n            const targetConnectionPoint = getConnectionPoint(targetElement, line.target.connection!);\n            targetPoint = rotatePointsByElement(targetConnectionPoint, targetElement) || targetConnectionPoint;\n        } else {\n            targetPoint = line.points[line.points.length - 1];\n        }\n        const restPoints = line.points.length > 2 ? line.points.slice(1, line.points.length - 1) : [];\n        return [sourcePoint, ...restPoints, targetPoint];\n    }\n};\n","export enum MemorizeKey {\n    basicShape = 'basicShape',\n    flowchart = 'flowchart',\n    text = 'text',\n    arrowLine = 'arrow-line',\n    UML = 'UML'\n}\n","import { Path, PlaitElement, Point } from '@plait/core';\nimport { ArrowLineShape } from './arrow-line';\nimport { StrokeStyle } from '@plait/common';\n\nexport enum VectorLinePointerType {\n    vectorLine = 'vectorLine'\n}\n\nexport enum VectorLineShape {\n    straight = ArrowLineShape.straight,\n    curve = ArrowLineShape.curve\n}\n\nexport interface PlaitVectorLine extends PlaitElement {\n    type: 'vector-line';\n    shape: VectorLineShape;\n    points: Point[];\n    strokeColor?: string;\n    strokeWidth?: number;\n    strokeStyle?: StrokeStyle;\n    fill?: string;\n    opacity: number;\n}\n","import { BasicShapes, FlowchartSymbols, GeometryShapes, PlaitCustomGeometry, PlaitGeometry, UMLSymbols } from './geometry';\nimport { PlaitImage } from './image';\nimport { PlaitArrowLine } from './arrow-line';\nimport { PlaitSwimlane, SwimlaneSymbols } from './swimlane';\nimport { PlaitBaseTable, PlaitTable, PlaitTableElement, TableSymbols } from './table';\nimport { PlaitText } from './text';\nimport { PlaitVectorLine } from './vector-line';\nimport { PlaitLine } from './line';\nimport { PlaitBoard, PlaitOptionsBoard } from '@plait/core';\nimport { WithDrawOptions } from './options';\nimport { WithDrawPluginKey } from '../constants/default';\n\nexport * from './arrow-line';\nexport * from './geometry';\nexport * from './text';\nexport * from './element';\nexport * from './engine';\nexport * from './swimlane';\nexport * from './table';\nexport * from './vector-line';\nexport * from './options';\nexport * from './image';\n\nexport type PlaitDrawElement = PlaitGeometry | PlaitArrowLine | PlaitVectorLine | PlaitImage | PlaitBaseTable | PlaitSwimlane;\n\nexport type PlaitShapeElement = PlaitGeometry | PlaitImage | PlaitTable | PlaitSwimlane;\n\nexport type DrawShapes = GeometryShapes | TableSymbols | SwimlaneSymbols;\n\nexport const PlaitDrawElement = {\n    isGeometry: (value: any): value is PlaitGeometry => {\n        return value.type === 'geometry';\n    },\n    isArrowLine: (value: any): value is PlaitArrowLine => {\n        return value.type === 'arrow-line' || value.type === 'line';\n    },\n    isVectorLine: (value: any): value is PlaitVectorLine => {\n        return value.type === 'vector-line';\n    },\n    isLine: (value: any): value is PlaitLine => {\n        return PlaitDrawElement.isArrowLine(value) || PlaitDrawElement.isVectorLine(value);\n    },\n    isText: (value: any): value is PlaitText => {\n        return value.type === 'geometry' && value.shape === BasicShapes.text;\n    },\n    isImage: (value: any): value is PlaitImage => {\n        return value.type === 'image';\n    },\n    isTable: (value: any): value is PlaitTable => {\n        return PlaitTableElement.isTable(value);\n    },\n    isDrawElement: (value: any): value is PlaitDrawElement => {\n        if (\n            PlaitDrawElement.isGeometry(value) ||\n            PlaitDrawElement.isLine(value) ||\n            PlaitDrawElement.isImage(value) ||\n            PlaitDrawElement.isTable(value) ||\n            PlaitDrawElement.isSwimlane(value)\n        ) {\n            return true;\n        } else {\n            return false;\n        }\n    },\n    isCustomGeometryElement: (board: PlaitBoard, value: any): value is PlaitCustomGeometry => {\n        const options = (board as PlaitOptionsBoard).getPluginOptions<WithDrawOptions | undefined>(WithDrawPluginKey);\n        const customGeometryTypes = options?.customGeometryTypes || [];\n        if (customGeometryTypes.includes(value.type)) {\n            return true;\n        } else {\n            return false;\n        }\n    },\n    isShapeElement: (value: any): value is PlaitShapeElement => {\n        return (\n            PlaitDrawElement.isImage(value) ||\n            PlaitDrawElement.isGeometry(value) ||\n            PlaitDrawElement.isTable(value) ||\n            PlaitDrawElement.isSwimlane(value)\n        );\n    },\n    isBasicShape: (value: any) => {\n        return Object.keys(BasicShapes).includes(value.shape);\n    },\n    isFlowchart: (value: any) => {\n        return Object.keys(FlowchartSymbols).includes(value.shape);\n    },\n    isUML: (value: any) => {\n        return Object.keys(UMLSymbols).includes(value.shape);\n    },\n    isSwimlane: (value: any): value is PlaitSwimlane => {\n        return value.type === 'swimlane';\n    },\n    isVerticalSwimlane: (value: any) => {\n        return PlaitDrawElement.isSwimlane(value) && value.shape === SwimlaneSymbols.swimlaneVertical;\n    },\n    isHorizontalSwimlane: (value: any) => {\n        return PlaitDrawElement.isSwimlane(value) && value.shape === SwimlaneSymbols.swimlaneHorizontal;\n    },\n    isUMLClassOrInterface: (value: any) => {\n        return Object.keys(UMLSymbols).includes(value.shape) && [UMLSymbols.class, UMLSymbols.interface].includes(value.shape);\n    },\n    isGeometryByTable: (value: any): value is PlaitBaseTable => {\n        return PlaitDrawElement.isUMLClassOrInterface(value);\n    },\n    isElementByTable: (value: any): value is PlaitBaseTable => {\n        return PlaitDrawElement.isTable(value) || PlaitDrawElement.isSwimlane(value) || PlaitDrawElement.isGeometryByTable(value);\n    }\n};\n","import {\n    PlaitBoard,\n    PlaitPluginElementContext,\n    OnContextChanged,\n    isSelectionMoving,\n    getSelectedElements,\n    ACTIVE_STROKE_WIDTH,\n    RectangleClient\n} from '@plait/core';\nimport { PlaitCommonGeometry, PlaitGeometry, PlaitMultipleTextGeometry } from './interfaces/geometry';\nimport { GeometryShapeGenerator } from './generators/geometry-shape.generator';\nimport { DrawTransforms } from './transforms';\nimport { ActiveGenerator, CommonElementFlavour, TextManageChangeData, createActiveGenerator, hasResizeHandle } from '@plait/common';\nimport { ArrowLineAutoCompleteGenerator } from './generators/arrow-line-auto-complete.generator';\nimport { getTextRectangle, isGeometryIncludeText, isMultipleTextGeometry, memorizeLatestText } from './utils';\nimport { DrawTextInfo, TextGenerator } from './generators/text.generator';\nimport { SingleTextGenerator } from './generators/single-text.generator';\nimport { PlaitDrawElement, PlaitText } from './interfaces';\nimport { GeometryThreshold } from './constants';\nimport { getEngine } from './engines';\n\nexport class GeometryComponent\n    extends CommonElementFlavour<PlaitCommonGeometry, PlaitBoard>\n    implements OnContextChanged<PlaitCommonGeometry, PlaitBoard>\n{\n    activeGenerator!: ActiveGenerator<PlaitCommonGeometry>;\n\n    lineAutoCompleteGenerator!: ArrowLineAutoCompleteGenerator;\n\n    shapeGenerator!: GeometryShapeGenerator;\n\n    textGenerator!: TextGenerator<PlaitMultipleTextGeometry> | SingleTextGenerator;\n\n    constructor() {\n        super();\n    }\n\n    initializeGenerator() {\n        this.activeGenerator = createActiveGenerator(this.board, {\n            getStrokeWidth: () => {\n                const selectedElements = getSelectedElements(this.board);\n                if (selectedElements.length === 1 && !isSelectionMoving(this.board)) {\n                    return ACTIVE_STROKE_WIDTH;\n                } else {\n                    return ACTIVE_STROKE_WIDTH;\n                }\n            },\n            getStrokeOpacity: () => {\n                const selectedElements = getSelectedElements(this.board);\n                if (selectedElements.length === 1 && !isSelectionMoving(this.board)) {\n                    return 1;\n                } else {\n                    return 0.5;\n                }\n            },\n            getRectangle: (element: PlaitCommonGeometry) => {\n                return RectangleClient.getRectangleByPoints(element.points);\n            },\n            hasResizeHandle: () => {\n                return hasResizeHandle(this.board, this.element);\n            }\n        });\n        this.lineAutoCompleteGenerator = new ArrowLineAutoCompleteGenerator(this.board);\n        this.shapeGenerator = new GeometryShapeGenerator(this.board);\n        if (isGeometryIncludeText(this.element)) {\n            this.initializeTextManage();\n        }\n        this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);\n        this.getRef().addGenerator(ActiveGenerator.key, this.activeGenerator);\n        this.getRef().updateActiveSection = () => {\n            this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected\n            });\n            this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected\n            });\n        };\n    }\n\n    initialize(): void {\n        super.initialize();\n        this.initializeGenerator();\n        this.shapeGenerator.processDrawing(this.element as PlaitGeometry, this.getElementG());\n        this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n            selected: this.selected\n        });\n        this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getElementTopHost(this.board), {\n            selected: this.selected\n        });\n        this.textGenerator && this.textGenerator.draw(this.getElementG());\n    }\n\n    onContextChanged(\n        value: PlaitPluginElementContext<PlaitCommonGeometry, PlaitBoard>,\n        previous: PlaitPluginElementContext<PlaitCommonGeometry, PlaitBoard>\n    ) {\n        if (value.element !== previous.element || value.hasThemeChanged) {\n            this.shapeGenerator.processDrawing(this.element as PlaitGeometry, this.getElementG());\n            this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), { selected: this.selected });\n            this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected\n            });\n            this.textGenerator && this.updateText(previous.element, value.element);\n        } else {\n            const hasSameSelected = value.selected === previous.selected;\n            if (!hasSameSelected || value.selected) {\n                this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                    selected: this.selected\n                });\n                this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getActiveHost(this.board), {\n                    selected: this.selected\n                });\n            }\n        }\n    }\n\n    updateText(previousElement: PlaitCommonGeometry, currentElement: PlaitCommonGeometry) {\n        if (isMultipleTextGeometry(this.element)) {\n            (this.textGenerator as TextGenerator<PlaitMultipleTextGeometry>).update(\n                this.element,\n                previousElement.texts,\n                currentElement.texts,\n                this.getElementG()\n            );\n        } else {\n            (this.textGenerator as SingleTextGenerator).update(\n                this.element as PlaitGeometry,\n                previousElement.text,\n                currentElement.text,\n                this.getElementG()\n            );\n        }\n    }\n\n    initializeTextManage() {\n        const onTextChange = (element: PlaitCommonGeometry, textManageChangeData: TextManageChangeData, text: DrawTextInfo) => {\n            if (textManageChangeData.newText) {\n                if (isMultipleTextGeometry(element)) {\n                    DrawTransforms.setDrawTexts(this.board, element, {\n                        id: text.id,\n                        text: textManageChangeData.newText\n                    });\n                } else {\n                    DrawTransforms.setText(\n                        this.board,\n                        element as PlaitGeometry,\n                        textManageChangeData.newText,\n                        textManageChangeData.width,\n                        textManageChangeData.height\n                    );\n                }\n            } else {\n                DrawTransforms.setTextSize(this.board, element as PlaitGeometry, textManageChangeData.width, textManageChangeData.height);\n            }\n            textManageChangeData.operations && memorizeLatestText(element, textManageChangeData.operations);\n        };\n\n        if (isMultipleTextGeometry(this.element)) {\n            this.textGenerator = new TextGenerator<PlaitMultipleTextGeometry>(\n                this.board,\n                this.element as PlaitMultipleTextGeometry,\n                this.element.texts!,\n                {\n                    onChange: onTextChange\n                }\n            );\n        } else {\n            this.textGenerator = new SingleTextGenerator(this.board, this.element as PlaitGeometry, this.element.text, {\n                onChange: onTextChange,\n                getMaxWidth: () => {\n                    let width = getTextRectangle(this.board, this.element).width;\n                    const getRectangle = getEngine(this.element.shape).getTextRectangle;\n                    if (getRectangle) {\n                        width = getRectangle(this.board, this.element as PlaitGeometry).width;\n                    }\n                    return PlaitDrawElement.isText(this.element) && this.element.autoSize ? GeometryThreshold.defaultTextMaxWidth : width;\n                }\n            });\n        }\n        this.textGenerator.initialize();\n    }\n\n    destroy(): void {\n        super.destroy();\n        this.activeGenerator.destroy();\n        this.lineAutoCompleteGenerator.destroy();\n        this.textGenerator?.destroy();\n    }\n}\n","import { PlaitBoard, PlaitPluginElementContext, OnContextChanged, getElementById, createDebugGenerator, PlaitNode } from '@plait/core';\nimport { ArrowLineText, PlaitArrowLine, PlaitGeometry } from './interfaces';\nimport { LineActiveGenerator } from './generators/line-active.generator';\nimport { DrawTransforms } from './transforms';\nimport { GeometryThreshold, MIN_TEXT_WIDTH } from './constants';\nimport { CommonElementFlavour, TextManage, TextManageChangeData } from '@plait/common';\nimport { getArrowLineTextRectangle } from './utils/arrow-line/arrow-line-basic';\nimport { memorizeLatestText } from './utils/memorize';\nimport { ArrowLineShapeGenerator } from './generators/arrow-line.generator';\nimport { getArrowLinePoints } from './utils';\n\ninterface BoundedElements {\n    source?: PlaitGeometry;\n    target?: PlaitGeometry;\n}\n\nconst debugKey = 'debug:plait:line-turning';\nconst debugGenerator = createDebugGenerator(debugKey);\n\nexport class ArrowLineComponent\n    extends CommonElementFlavour<PlaitArrowLine, PlaitBoard>\n    implements OnContextChanged<PlaitArrowLine, PlaitBoard>\n{\n    shapeGenerator!: ArrowLineShapeGenerator;\n\n    activeGenerator!: LineActiveGenerator;\n\n    boundedElements: BoundedElements = {};\n\n    constructor() {\n        super();\n    }\n\n    initializeGenerator() {\n        this.shapeGenerator = new ArrowLineShapeGenerator(this.board);\n        this.activeGenerator = new LineActiveGenerator(this.board);\n        this.initializeTextManages();\n    }\n\n    initialize(): void {\n        this.initializeGenerator();\n        this.shapeGenerator.processDrawing(this.element, this.getElementG());\n        const linePoints = getArrowLinePoints(this.board, this.element);\n        this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n            selected: this.selected,\n            linePoints\n        });\n        super.initialize();\n        this.boundedElements = this.getBoundedElements();\n        this.drawText();\n        this.getRef().updateActiveSection = () => {\n            const linePoints = getArrowLinePoints(this.board, this.element);\n            this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected,\n                linePoints\n            });\n        };\n        debugGenerator.isDebug() && debugGenerator.drawCircles(this.board, this.element.points.slice(1, -1), 4, true);\n    }\n\n    getBoundedElements() {\n        const boundedElements: BoundedElements = {};\n        if (this.element.source.boundId) {\n            const boundElement = getElementById<PlaitGeometry>(this.board, this.element.source.boundId);\n            if (boundElement) {\n                boundedElements.source = boundElement;\n            }\n        }\n        if (this.element.target.boundId) {\n            const boundElement = getElementById<PlaitGeometry>(this.board, this.element.target.boundId);\n            if (boundElement) {\n                boundedElements.target = boundElement;\n            }\n        }\n        return boundedElements;\n    }\n\n    onContextChanged(\n        value: PlaitPluginElementContext<PlaitArrowLine, PlaitBoard>,\n        previous: PlaitPluginElementContext<PlaitArrowLine, PlaitBoard>\n    ) {\n        const boundedElements = this.getBoundedElements();\n        const isBoundedElementsChanged =\n            boundedElements.source !== this.boundedElements.source || boundedElements.target !== this.boundedElements.target;\n        this.boundedElements = boundedElements;\n        const linePoints = getArrowLinePoints(this.board, this.element);\n        if (value.element !== previous.element || value.hasThemeChanged) {\n            this.shapeGenerator.processDrawing(this.element, this.getElementG());\n            this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected,\n                linePoints\n            });\n            this.updateText(previous.element.texts, value.element.texts);\n            this.updateTextRectangle();\n        } else {\n            const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate();\n            if (needUpdate || value.selected) {\n                this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                    selected: this.selected,\n                    linePoints\n                });\n            }\n        }\n        if (isBoundedElementsChanged) {\n            this.shapeGenerator.processDrawing(this.element, this.getElementG());\n            this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected,\n                linePoints\n            });\n            this.updateTextRectangle();\n            return;\n        }\n    }\n\n    initializeTextManages() {\n        if (this.element.texts?.length) {\n            const textManages: TextManage[] = [];\n            this.element.texts.forEach((text: ArrowLineText, index: number) => {\n                const manage = this.createTextManage(text, index);\n                textManages.push(manage);\n            });\n            this.getRef().initializeTextManage(textManages);\n        }\n    }\n\n    drawText() {\n        if (this.element.texts?.length) {\n            this.getRef()\n                .getTextManages()\n                .forEach((manage, index) => {\n                    manage.draw(this.element.texts![index].text);\n                    this.getElementG().append(manage.g);\n                });\n        }\n    }\n\n    createTextManage(text: ArrowLineText, index: number) {\n        return new TextManage(this.board, {\n            getRectangle: () => {\n                return getArrowLineTextRectangle(this.board, this.element as PlaitArrowLine, index);\n            },\n            onChange: (textManageChangeData: TextManageChangeData) => {\n                const path = PlaitBoard.findPath(this.board, this.element);\n                const node = PlaitNode.get(this.board, path) as PlaitArrowLine;\n                const texts = [...node.texts];\n                // const newWidth = textManageChangeData.width < MIN_TEXT_WIDTH ? MIN_TEXT_WIDTH : textManageChangeData.width;\n                texts.splice(index, 1, {\n                    text: textManageChangeData.newText ? textManageChangeData.newText : this.element.texts[index].text,\n                    position: this.element.texts[index].position\n                });\n                DrawTransforms.setArrowLineTexts(this.board, this.element as PlaitArrowLine, texts);\n                textManageChangeData.operations && memorizeLatestText(this.element, textManageChangeData.operations);\n            },\n            getMaxWidth: () => GeometryThreshold.defaultTextMaxWidth,\n            textPlugins: []\n        });\n    }\n\n    updateText(previousTexts: ArrowLineText[], currentTexts: ArrowLineText[]) {\n        if (previousTexts === currentTexts) return;\n        const previousTextsLength = previousTexts.length;\n        const currentTextsLength = currentTexts.length;\n        const textManages = this.getRef().getTextManages();\n        if (currentTextsLength === previousTextsLength) {\n            for (let i = 0; i < previousTextsLength; i++) {\n                if (previousTexts[i].text !== currentTexts[i].text) {\n                    textManages[i].updateText(currentTexts[i].text);\n                }\n            }\n        } else {\n            this.getRef().destroyTextManage();\n            this.initializeTextManages();\n            this.drawText();\n        }\n    }\n\n    updateTextRectangle() {\n        const textManages = this.getRef().getTextManages();\n        textManages.forEach((manage) => {\n            manage.updateRectangle();\n        });\n    }\n\n    destroy(): void {\n        super.destroy();\n        this.activeGenerator.destroy();\n        this.getRef().destroyTextManage();\n    }\n}\n","import { PlaitBoard, PlaitPluginElementContext, OnContextChanged } from '@plait/core';\nimport { PlaitVectorLine } from './interfaces';\nimport { LineActiveGenerator } from './generators/line-active.generator';\nimport { CommonElementFlavour } from '@plait/common';\nimport { getVectorLinePoints } from './utils';\nimport { VectorLineShapeGenerator } from './generators/vector-line-generator';\n\nexport class VectorLineComponent\n    extends CommonElementFlavour<PlaitVectorLine, PlaitBoard>\n    implements OnContextChanged<PlaitVectorLine, PlaitBoard>\n{\n    shapeGenerator!: VectorLineShapeGenerator;\n\n    activeGenerator!: LineActiveGenerator;\n\n    constructor() {\n        super();\n    }\n\n    initializeGenerator() {\n        this.shapeGenerator = new VectorLineShapeGenerator(this.board);\n        this.activeGenerator = new LineActiveGenerator(this.board);\n        this.getRef().updateActiveSection = () => {\n            const linePoints = getVectorLinePoints(this.board, this.element)!;\n            this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected,\n                linePoints\n            });\n        };\n    }\n\n    initialize(): void {\n        this.initializeGenerator();\n        this.shapeGenerator.processDrawing(this.element, this.getElementG());\n        const linePoints = getVectorLinePoints(this.board, this.element)!;\n        this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n            selected: this.selected,\n            linePoints\n        });\n        super.initialize();\n    }\n\n    onContextChanged(\n        value: PlaitPluginElementContext<PlaitVectorLine, PlaitBoard>,\n        previous: PlaitPluginElementContext<PlaitVectorLine, PlaitBoard>\n    ) {\n        const linePoints = getVectorLinePoints(this.board, this.element)!;\n        if (value.element !== previous.element || value.hasThemeChanged) {\n            this.shapeGenerator.processDrawing(this.element, this.getElementG());\n            this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected,\n                linePoints\n            });\n        } else {\n            const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate() || value.selected;\n            if (needUpdate) {\n                this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                    selected: this.selected,\n                    linePoints\n                });\n            }\n        }\n    }\n\n    destroy(): void {\n        super.destroy();\n        this.activeGenerator.destroy();\n    }\n}\n","import { PlaitBoard, getHitElementByPoint, getSelectedElements, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { isVirtualKey, isSpaceHotkey, isDelete } from '@plait/common';\nimport { GeometryCommonTextKeys, PlaitDrawElement } from '../interfaces';\nimport { editText } from '../utils/geometry';\nimport { getHitMultipleGeometryText, isDrawElementIncludeText, isMultipleTextGeometry } from '../utils';\n\nexport const withDrawHotkey = (board: PlaitBoard) => {\n    const { keyDown, dblClick } = board;\n\n    board.keyDown = (event: KeyboardEvent) => {\n        const selectedElements = getSelectedElements(board);\n        const isSingleSelection = selectedElements.length === 1;\n        const targetElement = selectedElements[0];\n        if (\n            !PlaitBoard.isReadonly(board) &&\n            !isVirtualKey(event) &&\n            !isDelete(event) &&\n            !isSpaceHotkey(event) &&\n            isSingleSelection &&\n            PlaitDrawElement.isGeometry(targetElement)\n        ) {\n            event.preventDefault();\n            editText(board, targetElement);\n            return;\n        }\n\n        keyDown(event);\n    };\n\n    board.dblClick = (event: MouseEvent) => {\n        event.preventDefault();\n        if (!PlaitBoard.isReadonly(board)) {\n            const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            const hitElement = getHitElementByPoint(board, point, undefined, false);\n            if (hitElement && PlaitDrawElement.isGeometry(hitElement) && isDrawElementIncludeText(hitElement)) {\n                if (isMultipleTextGeometry(hitElement)) {\n                    const hitText =\n                        getHitMultipleGeometryText(board, hitElement, point) ||\n                        hitElement.texts.find((item) => item.id.includes(GeometryCommonTextKeys.content)) ||\n                        hitElement.texts[0];\n                    editText(board, hitElement, hitText);\n                } else {\n                    editText(board, hitElement);\n                }\n                return;\n            }\n        }\n        dblClick(event);\n    };\n    return board;\n};\n","import { PlaitBoard, Point, RectangleClient, createG, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { BasicShapes, GeometryShapes, PlaitCommonGeometry, PlaitGeometry } from '../interfaces';\nimport {\n    createDefaultGeometry,\n    createTextElement,\n    getDefaultGeometryPoints,\n    getTextShapeProperty,\n    getMemorizedLatestByPointer,\n    getTextRectangle,\n    insertElement,\n    getDefaultGeometryText\n} from '../utils';\nimport { DrawPointerType, getGeometryPointers } from '../constants';\nimport {\n    normalizeShapePoints,\n    isDndMode,\n    isDrawingMode,\n    getDirectionFactorByDirectionComponent,\n    getUnitVectorByPointAndPoint,\n    TextManage\n} from '@plait/common';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { getSnapResizingRef } from '../utils/snap-resizing';\nimport { getGeometryGeneratorByShape } from '../utils/shape';\n\nexport interface FakeCreateTextRef {\n    g: SVGGElement;\n    textManage: TextManage;\n}\n\nconst isGeometryDndMode = (board: PlaitBoard) => {\n    const geometryPointers = getGeometryPointers();\n    const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n    const dndMode = isGeometryPointer && isDndMode(board);\n    return dndMode;\n};\n\nconst isGeometryDrawingMode = (board: PlaitBoard) => {\n    const geometryPointers = getGeometryPointers();\n    const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n    const drawingMode = isGeometryPointer && isDrawingMode(board);\n    return drawingMode;\n};\n\nexport const withGeometryCreateByDrag = (board: PlaitBoard) => {\n    const { pointerMove, globalPointerUp, pointerUp } = board;\n\n    let geometryShapeG: SVGGElement | null = null;\n\n    let temporaryElement: PlaitCommonGeometry | null = null;\n\n    let fakeCreateTextRef: FakeCreateTextRef | null = null;\n\n    board.pointerMove = (event: PointerEvent) => {\n        geometryShapeG?.remove();\n        geometryShapeG = createG();\n\n        const geometryPointers = getGeometryPointers();\n        const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n        const dragMode = isGeometryPointer && isDndMode(board);\n        const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n        const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n        const geometryGenerator = getGeometryGeneratorByShape(board, pointer);\n        if (dragMode) {\n            const memorizedLatest = getMemorizedLatestByPointer(pointer);\n            if (pointer === BasicShapes.text) {\n                const property = getTextShapeProperty(board, getDefaultGeometryText(board), memorizedLatest.textProperties['font-size']);\n                const points = RectangleClient.getPoints(\n                    RectangleClient.getRectangleByCenterPoint(movingPoint, property.width, property.height)\n                );\n                temporaryElement = createTextElement(board, points, getDefaultGeometryText(board));\n                if (!fakeCreateTextRef) {\n                    const textManage = new TextManage(board, {\n                        getRectangle: () => {\n                            return getTextRectangle(board, temporaryElement!);\n                        }\n                    });\n                    textManage.draw(temporaryElement!.text);\n                    fakeCreateTextRef = {\n                        g: createG(),\n                        textManage\n                    };\n\n                    PlaitBoard.getHost(board).append(fakeCreateTextRef.g);\n                    fakeCreateTextRef.g.append(textManage.g);\n                } else {\n                    fakeCreateTextRef.textManage.updateRectangle();\n                    fakeCreateTextRef.g.append(fakeCreateTextRef.textManage.g);\n                }\n            } else {\n                const points = getDefaultGeometryPoints(pointer, movingPoint);\n                temporaryElement = createDefaultGeometry(board, points, pointer as GeometryShapes);\n                geometryGenerator.processDrawing(temporaryElement as PlaitGeometry, geometryShapeG);\n                PlaitBoard.getElementTopHost(board).append(geometryShapeG);\n            }\n        }\n\n        pointerMove(event);\n    };\n\n    board.pointerUp = (event: PointerEvent) => {\n        if (isGeometryDndMode(board) && temporaryElement) {\n            return;\n        }\n        pointerUp(event);\n    };\n\n    board.globalPointerUp = (event: PointerEvent) => {\n        if (isGeometryDndMode(board) && temporaryElement) {\n            insertElement(board, temporaryElement);\n            fakeCreateTextRef?.textManage.destroy();\n            fakeCreateTextRef?.g.remove();\n            fakeCreateTextRef = null;\n        }\n        temporaryElement = null;\n        geometryShapeG?.remove();\n        geometryShapeG = null;\n        globalPointerUp(event);\n    };\n\n    return board;\n};\n\nexport const withGeometryCreateByDrawing = (board: PlaitBoard) => {\n    const { pointerDown, pointerMove, pointerUp, keyDown, keyUp, touchMove } = board;\n    let start: Point | null = null;\n\n    let geometryShapeG: SVGGElement | null = null;\n\n    let temporaryElement: PlaitCommonGeometry | null = null;\n\n    let isShift = false;\n\n    let snapG: SVGGElement | null;\n\n    board.keyDown = (event: KeyboardEvent) => {\n        isShift = isKeyHotkey('shift', event);\n        keyDown(event);\n    };\n\n    board.keyUp = (event: KeyboardEvent) => {\n        isShift = false;\n        keyUp(event);\n    };\n\n    board.pointerDown = (event: PointerEvent) => {\n        if (!PlaitBoard.isReadonly(board) && isGeometryDrawingMode(board)) {\n            const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            start = point;\n            const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n            if (pointer === BasicShapes.text) {\n                const memorizedLatest = getMemorizedLatestByPointer(pointer);\n                const property = getTextShapeProperty(board, getDefaultGeometryText(board), memorizedLatest.textProperties['font-size']);\n                const points = RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(point, property.width, property.height));\n                const textElement = createTextElement(board, points, getDefaultGeometryText(board));\n                insertElement(board, textElement);\n                start = null;\n            }\n        }\n        pointerDown(event);\n    };\n\n    board.touchMove = (event: TouchEvent) => {\n        if (start && isGeometryDrawingMode(board)) {\n            event.preventDefault();\n        }\n        touchMove(event);\n    };\n\n    board.pointerMove = (event: PointerEvent) => {\n        geometryShapeG?.remove();\n        geometryShapeG = createG();\n        const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n        const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n        const geometryGenerator = getGeometryGeneratorByShape(board, pointer);\n\n        snapG?.remove();\n        if (start && isGeometryDrawingMode(board)) {\n            let points: [Point, Point] = normalizeShapePoints([start, movingPoint], isShift);\n            const activeRectangle = RectangleClient.getRectangleByPoints(points);\n            const [x, y] = getUnitVectorByPointAndPoint(start, movingPoint);\n            const resizeSnapRef = getSnapResizingRef(board, [], {\n                resizePoints: points,\n                activeRectangle,\n                directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],\n                isAspectRatio: isShift,\n                isFromCorner: true,\n                isCreate: true\n            });\n            snapG = resizeSnapRef.snapG;\n            PlaitBoard.getElementTopHost(board).append(snapG);\n            points = normalizeShapePoints(resizeSnapRef.activePoints as [Point, Point], isShift);\n            temporaryElement = createDefaultGeometry(board, points, pointer as GeometryShapes);\n            geometryGenerator.processDrawing(temporaryElement as PlaitGeometry, geometryShapeG);\n            PlaitBoard.getElementTopHost(board).append(geometryShapeG);\n        }\n        pointerMove(event);\n    };\n\n    board.pointerUp = (event: PointerEvent) => {\n        if (isGeometryDrawingMode(board) && start) {\n            const targetPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            const { width, height } = RectangleClient.getRectangleByPoints([start!, targetPoint]);\n            if (Math.hypot(width, height) < 8) {\n                const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n                if (pointer !== BasicShapes.text) {\n                    const points = getDefaultGeometryPoints(pointer, targetPoint);\n                    temporaryElement = createDefaultGeometry(board, points, pointer as GeometryShapes);\n                }\n            }\n            if (temporaryElement) {\n                insertElement(board, temporaryElement);\n            }\n            snapG?.remove();\n            geometryShapeG?.remove();\n            geometryShapeG = null;\n            start = null;\n            temporaryElement = null;\n            return;\n        }\n        pointerUp(event);\n    };\n    return board;\n};\n","import {\n    ClipboardData,\n    PlaitBoard,\n    PlaitElement,\n    Point,\n    RectangleClient,\n    WritableClipboardContext,\n    WritableClipboardOperationType,\n    WritableClipboardType,\n    addOrCreateClipboardContext,\n    getSelectedElements\n} from '@plait/core';\nimport { getSelectedDrawElements } from '../utils/selected';\nimport { PlaitDrawElement, PlaitGeometry, PlaitArrowLine, PlaitShapeElement, PlaitSwimlane, PlaitVectorLine } from '../interfaces';\nimport { buildClipboardData, insertClipboardData } from '../utils/clipboard';\nimport { DrawTransforms } from '../transforms';\nimport { getArrowLines } from '../utils/arrow-line/arrow-line-basic';\nimport { PlaitImage } from '../interfaces/image';\nimport { acceptImageTypes, buildImage, getElementOfFocusedImage, getElementsText } from '@plait/common';\nimport { DEFAULT_IMAGE_WIDTH } from '../constants';\nimport { PlaitTable } from '../interfaces/table';\n\nexport const withDrawFragment = (baseBoard: PlaitBoard) => {\n    const board = baseBoard as PlaitBoard;\n    const { getDeletedFragment, buildFragment, insertFragment } = board;\n\n    board.getDeletedFragment = (data: PlaitElement[]) => {\n        const drawElements = getSelectedDrawElements(board);\n        if (drawElements.length) {\n            const geometryElements = drawElements.filter((value) => PlaitDrawElement.isGeometry(value)) as PlaitGeometry[];\n            const arrowLineElements = drawElements.filter((value) => PlaitDrawElement.isArrowLine(value)) as PlaitArrowLine[];\n            const vectorLineElements = drawElements.filter((value) => PlaitDrawElement.isVectorLine(value)) as PlaitVectorLine[];\n            const imageElements = drawElements.filter((value) => PlaitDrawElement.isImage(value)) as PlaitImage[];\n            const tableElements = drawElements.filter((value) => PlaitDrawElement.isTable(value)) as PlaitTable[];\n            const swimlaneElements = drawElements.filter((value) => PlaitDrawElement.isSwimlane(value)) as PlaitSwimlane[];\n\n            const boundLineElements = [\n                ...getBoundedArrowLineElements(board, geometryElements),\n                ...getBoundedArrowLineElements(board, imageElements),\n                ...getBoundedArrowLineElements(board, tableElements),\n                ...getBoundedArrowLineElements(board, swimlaneElements)\n            ].filter((line) => !arrowLineElements.includes(line));\n            data.push(\n                ...[\n                    ...geometryElements,\n                    ...arrowLineElements,\n                    ...vectorLineElements,\n                    ...imageElements,\n                    ...tableElements,\n                    ...swimlaneElements,\n                    ...boundLineElements.filter((line) => !arrowLineElements.includes(line))\n                ]\n            );\n        }\n        return getDeletedFragment(data);\n    };\n\n    board.buildFragment = (\n        clipboardContext: WritableClipboardContext | null,\n        rectangle: RectangleClient | null,\n        operationType: WritableClipboardOperationType,\n        originData?: PlaitElement[]\n    ) => {\n        const targetDrawElements = getSelectedDrawElements(board, originData);\n        let boundLineElements: PlaitArrowLine[] = [];\n        if (targetDrawElements.length) {\n            if (operationType === WritableClipboardOperationType.cut) {\n                const geometryElements = targetDrawElements.filter((value) => PlaitDrawElement.isGeometry(value)) as PlaitGeometry[];\n                const lineElements = targetDrawElements.filter((value) => PlaitDrawElement.isArrowLine(value)) as PlaitArrowLine[];\n                boundLineElements = getBoundedArrowLineElements(board, geometryElements).filter((line) => !lineElements.includes(line));\n            }\n            const selectedElements = [...targetDrawElements, ...boundLineElements];\n            const elements = buildClipboardData(board, selectedElements, rectangle ? [rectangle.x, rectangle.y] : [0, 0]);\n            const text = getElementsText(selectedElements);\n            const addition: WritableClipboardContext = {\n                text,\n                type: WritableClipboardType.elements,\n                elements: elements\n            };\n            clipboardContext = addOrCreateClipboardContext(clipboardContext, addition);\n        }\n        return buildFragment(clipboardContext, rectangle, operationType, originData);\n    };\n\n    board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n        const selectedElements = getSelectedElements(board);\n        if (clipboardData?.files?.length) {\n            const acceptImageArray = acceptImageTypes.map((type) => 'image/' + type);\n            const canInsertionImage =\n                !getElementOfFocusedImage(board) && !(selectedElements.length === 1 && board.isImageBindingAllowed(selectedElements[0]));\n            if (acceptImageArray.includes(clipboardData.files[0].type) && canInsertionImage) {\n                const imageFile = clipboardData.files[0];\n                buildImage(board, imageFile, DEFAULT_IMAGE_WIDTH, (imageItem) => {\n                    DrawTransforms.insertImage(board, imageItem, targetPoint);\n                });\n                return;\n            }\n        }\n\n        if (clipboardData?.elements?.length) {\n            const drawElements = clipboardData.elements?.filter((value) => PlaitDrawElement.isDrawElement(value)) as PlaitDrawElement[];\n            if (clipboardData.elements && clipboardData.elements.length > 0 && drawElements.length > 0) {\n                insertClipboardData(board, drawElements, targetPoint);\n            }\n        }\n\n        if (clipboardData?.text) {\n            if (!clipboardData.elements || clipboardData.elements.length === 0) {\n                // (*￣︶￣)\n                const insertAsChildren = selectedElements.length === 1 && selectedElements[0].children;\n                const insertAsFreeText = !insertAsChildren;\n                if (insertAsFreeText) {\n                    DrawTransforms.insertText(board, targetPoint, clipboardData.text);\n                    return;\n                }\n            }\n        }\n\n        insertFragment(clipboardData, targetPoint, operationType);\n    };\n\n    return board;\n};\n\nexport const getBoundedArrowLineElements = (board: PlaitBoard, plaitShapes: PlaitShapeElement[]) => {\n    const lines = getArrowLines(board);\n    return lines.filter((line) =>\n        plaitShapes.find(\n            (shape) => PlaitArrowLine.isBoundElementOfSource(line, shape) || PlaitArrowLine.isBoundElementOfTarget(line, shape)\n        )\n    );\n};\n","import {\n    BoardTransforms,\n    PlaitBoard,\n    PlaitPointerType,\n    Point,\n    Transforms,\n    addSelectedElement,\n    clearSelectedElement,\n    createG,\n    toHostPoint,\n    toViewBoxPoint\n} from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitShapeElement } from '../../interfaces';\nimport { getArrowLinePointers } from '../../constants';\nimport { isDrawingMode } from '@plait/common';\nimport { handleArrowLineCreating } from '../../utils/arrow-line/arrow-line-basic';\nimport { getSnappingRef, getSnappingShape } from '../../utils';\n\nexport const withArrowLineCreateByDraw = (board: PlaitBoard) => {\n    const { pointerDown, pointerMove, globalPointerUp, touchStart } = board;\n\n    let start: Point | null = null;\n\n    let sourceElement: PlaitShapeElement | null;\n\n    let lineShapeG: SVGGElement | null = null;\n\n    let temporaryElement: PlaitArrowLine | null = null;\n\n    board.touchStart = (event: TouchEvent) => {\n        const linePointers = getArrowLinePointers();\n        const isLinePointer = PlaitBoard.isInPointer(board, linePointers);\n        if (!PlaitBoard.isReadonly(board) && isLinePointer && isDrawingMode(board)) {\n            return event.preventDefault();\n        }\n        touchStart(event);\n    };\n\n    board.pointerDown = (event: PointerEvent) => {\n        const linePointers = getArrowLinePointers();\n        const isLinePointer = PlaitBoard.isInPointer(board, linePointers);\n        if (!PlaitBoard.isReadonly(board) && isLinePointer && isDrawingMode(board)) {\n            const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            start = point;\n            const hitElement = getSnappingShape(board, point);\n            if (hitElement) {\n                sourceElement = hitElement;\n                const ref = getSnappingRef(board, hitElement, point);\n                start = ref.connectorPoint || ref.edgePoint;\n            }\n        }\n        pointerDown(event);\n    };\n\n    board.pointerMove = (event: PointerEvent) => {\n        lineShapeG?.remove();\n        lineShapeG = createG();\n        let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n        if (start) {\n            const lineShape = PlaitBoard.getPointer(board) as ArrowLineShape;\n            temporaryElement = handleArrowLineCreating(board, lineShape, start, movingPoint, sourceElement, lineShapeG);\n        }\n\n        pointerMove(event);\n    };\n\n    board.globalPointerUp = (event: PointerEvent) => {\n        if (temporaryElement) {\n            Transforms.insertNode(board, temporaryElement, [board.children.length]);\n            clearSelectedElement(board);\n            addSelectedElement(board, temporaryElement);\n            BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n        }\n        lineShapeG?.remove();\n        lineShapeG = null;\n        sourceElement = null;\n        start = null;\n        temporaryElement = null;\n        globalPointerUp(event);\n    };\n\n    return board;\n};\n","import { createDebugGenerator, Path, PlaitBoard, PlaitNode, Point } from '@plait/core';\nimport { ResizeRef, ResizeState, WithResizeOptions, simplifyOrthogonalPoints, withResize } from '@plait/common';\nimport { getSelectedArrowLineElements } from '../../utils/selected';\nimport { getHitLineResizeHandleRef, LineResizeHandle } from '../../utils/position/line';\nimport { ArrowLineHandle, ArrowLineShape, PlaitArrowLine } from '../../interfaces';\nimport { DrawTransforms } from '../../transforms';\nimport { getElbowPoints, getNextRenderPoints, isUseDefaultOrthogonalRoute } from '../../utils/arrow-line/elbow';\nimport {\n    alignElbowSegment,\n    alignPoints,\n    getIndexAndDeleteCountByKeyPoint,\n    getResizedPreviousAndNextPoint,\n    hasIllegalElbowPoint\n} from '../../utils/arrow-line/arrow-line-resize';\nimport { getHitConnection, getArrowLinePoints } from '../../utils/arrow-line/arrow-line-basic';\nimport { getElbowLineRouteOptions } from '../../utils/arrow-line';\nimport { getSnappingShape } from '../../utils';\n\nconst debugGenerator = createDebugGenerator('debug:plait:arrow-line-resize');\n\nexport const withArrowLineResize = (board: PlaitBoard) => {\n    let elbowLineIndex: number | null;\n    let elbowLineDeleteCount: number | null;\n    let elbowSourcePoint: Point | null;\n    let elbowTargetPoint: Point | null;\n    let elbowNextRenderPoints: Point[] | null;\n\n    const options: WithResizeOptions<PlaitArrowLine, LineResizeHandle> = {\n        key: 'draw-line',\n        canResize: () => {\n            return true;\n        },\n        hitTest: (point: Point) => {\n            const selectedLineElements = getSelectedArrowLineElements(board);\n            if (selectedLineElements.length > 0) {\n                let result = null;\n                selectedLineElements.forEach((value) => {\n                    const handleRef = getHitLineResizeHandleRef(board, value, point);\n                    if (handleRef) {\n                        result = {\n                            element: value,\n                            handle: handleRef.handle,\n                            handleIndex: handleRef.handleIndex\n                        };\n                    }\n                });\n                return result;\n            }\n            return null;\n        },\n        beforeResize: (resizeRef: ResizeRef<PlaitArrowLine, LineResizeHandle>) => {\n            if (\n                resizeRef.element.shape === ArrowLineShape.elbow &&\n                resizeRef.handle !== LineResizeHandle.source &&\n                resizeRef.handle !== LineResizeHandle.target\n            ) {\n                const params = getElbowLineRouteOptions(board, resizeRef.element);\n                if (isUseDefaultOrthogonalRoute(resizeRef.element, params)) {\n                    return;\n                }\n                const points: Point[] = [...resizeRef.element.points];\n                const handleIndex = resizeRef.handleIndex!;\n                const pointsOnElbow = getElbowPoints(board, resizeRef.element);\n                elbowSourcePoint = pointsOnElbow[0];\n                elbowTargetPoint = pointsOnElbow[pointsOnElbow.length - 1];\n                elbowNextRenderPoints = getNextRenderPoints(board, resizeRef.element, pointsOnElbow);\n                const value = getIndexAndDeleteCountByKeyPoint(board, resizeRef.element, [...points], elbowNextRenderPoints, handleIndex);\n                elbowLineIndex = value.index;\n                elbowLineDeleteCount = value.deleteCount;\n            }\n        },\n        onResize: (resizeRef: ResizeRef<PlaitArrowLine, LineResizeHandle>, resizeState: ResizeState) => {\n            const drawPoints = getArrowLinePoints(board, resizeRef.element);\n            let points: Point[] = [...resizeRef.element.points];\n            points[0] = drawPoints[0];\n            points[points.length - 1] = drawPoints[drawPoints.length - 1];\n            let source: ArrowLineHandle = { ...resizeRef.element.source };\n            let target: ArrowLineHandle = { ...resizeRef.element.target };\n            let handleIndex = resizeRef.handleIndex!;\n            const hitElement = getSnappingShape(board, resizeState.endPoint);\n            if (resizeRef.handle === LineResizeHandle.source || resizeRef.handle === LineResizeHandle.target) {\n                const handleObject = resizeRef.handle === LineResizeHandle.source ? source : target;\n                if (debugGenerator.isDebug()) {\n                    debugGenerator.clear();\n                    debugGenerator.drawCircles(board, points, 3, false);\n                    debugGenerator.drawCircles(board, [resizeState.endPoint], 4, false, { fill: 'yellow' });\n                }\n                points[handleIndex] = resizeState.endPoint;\n                points[handleIndex] = alignPoints(points, points[handleIndex], handleIndex);\n                if (debugGenerator.isDebug()) {\n                    debugGenerator.drawCircles(board, [points[handleIndex]], 2, false, { fill: 'green' });\n                }\n                if (hitElement) {\n                    handleObject.connection = getHitConnection(board, points[handleIndex], hitElement);\n                    handleObject.boundId = hitElement.id;\n                } else {\n                    handleObject.connection = undefined;\n                    handleObject.boundId = undefined;\n                }\n            } else {\n                if (resizeRef.element.shape === ArrowLineShape.elbow) {\n                    if (elbowNextRenderPoints && elbowSourcePoint && elbowTargetPoint) {\n                        const resizedPreviousAndNextPoint = getResizedPreviousAndNextPoint(\n                            elbowNextRenderPoints,\n                            elbowSourcePoint,\n                            elbowTargetPoint,\n                            handleIndex\n                        );\n                        const startKeyPoint = elbowNextRenderPoints[handleIndex];\n                        const endKeyPoint = elbowNextRenderPoints[handleIndex + 1];\n                        const [newStartPoint, newEndPoint] = alignElbowSegment(\n                            startKeyPoint,\n                            endKeyPoint,\n                            resizeState,\n                            resizedPreviousAndNextPoint\n                        );\n                        let midDataPoints: Point[] = [...points].slice(1, points.length - 1);\n                        if (elbowLineIndex !== null && elbowLineDeleteCount !== null) {\n                            if (hasIllegalElbowPoint(midDataPoints)) {\n                                midDataPoints = [newStartPoint, newEndPoint];\n                            } else {\n                                midDataPoints.splice(elbowLineIndex, elbowLineDeleteCount, newStartPoint, newEndPoint);\n                            }\n                            points = [elbowSourcePoint, ...midDataPoints, elbowTargetPoint];\n                        }\n                    }\n                } else {\n                    if (resizeRef.handle === LineResizeHandle.addHandle) {\n                        points.splice(handleIndex + 1, 0, resizeState.endPoint);\n                    } else {\n                        points[handleIndex] = resizeState.endPoint;\n                    }\n                }\n                if (\n                    resizeRef.element.shape !== ArrowLineShape.elbow ||\n                    (resizeRef.element.shape === ArrowLineShape.elbow && points.length === 2)\n                ) {\n                    points[handleIndex] = alignPoints(points, points[handleIndex], handleIndex);\n                }\n            }\n            DrawTransforms.resizeArrowLine(board, { points, source, target }, resizeRef.path as Path);\n        },\n        afterResize: (resizeRef: ResizeRef<PlaitArrowLine, LineResizeHandle>) => {\n            if (resizeRef.element.shape === ArrowLineShape.elbow) {\n                const element = PlaitNode.get(board, resizeRef.path as Path);\n                let points = element && [...element.points!];\n                if (points.length > 2 && elbowNextRenderPoints && elbowSourcePoint && elbowTargetPoint) {\n                    const nextSourcePoint = elbowNextRenderPoints[0];\n                    const nextTargetPoint = elbowNextRenderPoints[elbowNextRenderPoints.length - 1];\n                    points.splice(0, 1, nextSourcePoint);\n                    points.splice(-1, 1, nextTargetPoint);\n                    points = simplifyOrthogonalPoints(points!);\n                    if (Point.isEquals(points[0], nextSourcePoint)) {\n                        points.splice(0, 1);\n                    }\n                    if (Point.isEquals(points[points.length - 1], nextTargetPoint)) {\n                        points.pop();\n                    }\n                    if (points.length === 1) {\n                        points = [];\n                    }\n                    points = [elbowSourcePoint, ...points, elbowTargetPoint];\n                    DrawTransforms.resizeArrowLine(board, { points }, resizeRef.path as Path);\n                }\n            }\n            elbowLineIndex = null;\n            elbowLineDeleteCount = null;\n            elbowSourcePoint = null;\n            elbowTargetPoint = null;\n            elbowNextRenderPoints = null;\n        }\n    };\n\n    withResize<PlaitArrowLine, LineResizeHandle>(board, options);\n\n    return board;\n};\n","import {\n    SNAPPING_STROKE_WIDTH,\n    PlaitBoard,\n    PlaitElement,\n    RectangleClient,\n    SELECTION_BORDER_COLOR,\n    drawCircle,\n    hasValidAngle,\n    setAngleForG,\n    toHostPoint,\n    toViewBoxPoint\n} from '@plait/core';\nimport { ArrowLineShape, PlaitDrawElement } from '../../interfaces';\nimport { isResizingByCondition } from '@plait/common';\nimport { LineResizeHandle } from '../../utils/position/line';\nimport { drawBoundReaction, getHitShape, getSnappingRef } from '../../utils';\n\n/*\nPurpose: Visual feedback for snapping/binding arrow-line endpoints to shapes.\n- Active when using arrow-line pointers or resizing source/target handles.\n- Detects target shape under cursor and whether edge/connector snapping applies.\n- Draws bound outline/mask and a connector marker at the snap point.\n- Applies rotation to reaction graphics for angled (rotated) shapes.\nLifecycle: pointerMove → detect hit/snapping → render reaction → pointerUp cleanup.\n*/\nexport const withArrowLineBoundReaction = (board: PlaitBoard) => {\n    const { pointerMove, pointerUp } = board;\n\n    let boundShapeG: SVGGElement | null = null;\n\n    board.pointerMove = (event: PointerEvent) => {\n        boundShapeG?.remove();\n        if (PlaitBoard.isReadonly(board)) {\n            pointerMove(event);\n            return;\n        }\n        const linePointers = Object.keys(ArrowLineShape);\n        const isLinePointer = PlaitBoard.isInPointer(board, linePointers);\n        const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n        const isLineResizing = isResizingByCondition<PlaitElement, LineResizeHandle>(board, (resizeRef) => {\n            const { element, handle } = resizeRef;\n            const isSourceOrTarget = handle === LineResizeHandle.target || handle === LineResizeHandle.source;\n            return PlaitDrawElement.isArrowLine(element) && isSourceOrTarget;\n        });\n        if (isLinePointer || isLineResizing) {\n            const hitElement = getHitShape(board, movingPoint);\n            if (hitElement) {\n                const ref = getSnappingRef(board, hitElement, movingPoint);\n                const isSnapping = ref.isHitEdge || ref.isHitConnector;\n                boundShapeG = drawBoundReaction(board, hitElement, { hasMask: isSnapping, hasConnector: true });\n                if (isSnapping) {\n                    const circleG = drawCircle(PlaitBoard.getRoughSVG(board), ref.connectorPoint || ref.edgePoint, 6, {\n                        stroke: SELECTION_BORDER_COLOR,\n                        strokeWidth: SNAPPING_STROKE_WIDTH,\n                        fill: SELECTION_BORDER_COLOR,\n                        fillStyle: 'solid'\n                    });\n                    boundShapeG.appendChild(circleG);\n                }\n                if (hasValidAngle(hitElement)) {\n                    setAngleForG(boundShapeG, RectangleClient.getCenterPointByPoints(hitElement.points), hitElement.angle!);\n                }\n                PlaitBoard.getElementTopHost(board).append(boundShapeG);\n            }\n        }\n        pointerMove(event);\n    };\n\n    board.pointerUp = (event) => {\n        boundShapeG?.remove();\n        boundShapeG = null;\n        pointerUp(event);\n    };\n\n    return board;\n};\n","import {\n    PlaitBoard,\n    PlaitNode,\n    getHitElementByPoint,\n    getI18nValue,\n    getNearestPointBetweenPointAndSegments,\n    toHostPoint,\n    toViewBoxPoint\n} from '@plait/core';\nimport { PlaitArrowLine, PlaitDrawElement } from '../../interfaces';\nimport { Node } from 'slate';\nimport { buildText, getMemorizedLatest, getRatioByPoint, getTextManages } from '@plait/common';\nimport { DrawTransforms } from '../../transforms';\nimport { getArrowLinePoints } from '../../utils/arrow-line/arrow-line-basic';\nimport { getHitArrowLineTextIndex } from '../../utils/position/arrow-line';\nimport { isHitArrowLineText } from '../../utils/hit';\nimport { LINE_TEXT } from '../../constants/line';\nimport { DrawI18nKey } from '../../constants/default';\n\nexport const getDefaultLineText = (board: PlaitBoard) => {\n    return getI18nValue(board, DrawI18nKey.lineText, LINE_TEXT);\n};\n\nexport const withArrowLineText = (board: PlaitBoard) => {\n    const { dblClick } = board;\n\n    board.dblClick = (event: MouseEvent) => {\n        if (!PlaitBoard.isReadonly(board)) {\n            const clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            const hitTarget = getHitElementByPoint(board, clickPoint) as undefined | PlaitArrowLine;\n            if (hitTarget && PlaitDrawElement.isArrowLine(hitTarget)) {\n                const hitTargetPath = hitTarget && PlaitBoard.findPath(board, hitTarget);\n                const points = getArrowLinePoints(board, hitTarget);\n                const point = getNearestPointBetweenPointAndSegments(clickPoint, points);\n                const texts = hitTarget.texts?.length ? [...hitTarget.texts] : [];\n                const textIndex = getHitArrowLineTextIndex(board, hitTarget, clickPoint);\n                const isHitText = isHitArrowLineText(board, hitTarget, clickPoint);\n                if (isHitText) {\n                    editHandle(board, hitTarget, textIndex);\n                } else {\n                    const defaultLineText = getDefaultLineText(board);\n                    const textMemory = getMemorizedLatest('arrow-line')?.text || {};\n                    const textElement = buildText(defaultLineText, undefined, textMemory);\n                    const ratio = getRatioByPoint(points, point);\n                    texts.push({\n                        text: textElement,\n                        position: ratio\n                    });\n                    DrawTransforms.setArrowLineTexts(board, hitTarget, texts);\n                    setTimeout(() => {\n                        if (hitTargetPath) {\n                            const newHitTarget = PlaitNode.get(board, hitTargetPath) as PlaitArrowLine;\n                            const textManages = getTextManages(newHitTarget);\n                            editHandle(board, newHitTarget, textManages.length - 1, true);\n                        }\n                    });\n                }\n                return;\n            }\n        }\n        dblClick(event);\n    };\n\n    return board;\n};\n\nfunction editHandle(board: PlaitBoard, element: PlaitArrowLine, manageIndex: number, isFirstEdit: boolean = false) {\n    const textManages = getTextManages(element);\n    const textManage = textManages[manageIndex];\n    textManage.edit(() => {\n        const text = Node.string(textManage.getText());\n        const defaultLineText = getDefaultLineText(board);\n        const shouldRemove = !text || (isFirstEdit && text === defaultLineText);\n        if (shouldRemove) {\n            DrawTransforms.removeArrowLineText(board, element, manageIndex);\n        }\n    });\n}\n","import { PlaitBoard, PlaitPluginElementContext, OnContextChanged } from '@plait/core';\nimport { CommonElementFlavour, ImageGenerator } from '@plait/common';\nimport { PlaitImage } from './interfaces/image';\nimport { ArrowLineAutoCompleteGenerator } from './generators/arrow-line-auto-complete.generator';\n\nexport class ImageComponent extends CommonElementFlavour<PlaitImage, PlaitBoard> implements OnContextChanged<PlaitImage, PlaitBoard> {\n    imageGenerator!: ImageGenerator<PlaitImage>;\n\n    lineAutoCompleteGenerator!: ArrowLineAutoCompleteGenerator<PlaitImage>;\n\n    constructor() {\n        super();\n    }\n\n    initializeGenerator() {\n        this.imageGenerator = new ImageGenerator<PlaitImage>(this.board, {\n            getRectangle: (element: PlaitImage) => {\n                return {\n                    x: element.points[0][0],\n                    y: element.points[0][1],\n                    width: element.points[1][0] - element.points[0][0],\n                    height: element.points[1][1] - element.points[0][1]\n                };\n            },\n            getImageItem: (element) => {\n                return {\n                    url: element.url,\n                    width: element.points[1][0] - element.points[0][0],\n                    height: element.points[1][1] - element.points[0][1]\n                };\n            }\n        });\n        this.lineAutoCompleteGenerator = new ArrowLineAutoCompleteGenerator(this.board);\n        this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);\n        this.getRef().updateActiveSection = () => {\n            this.imageGenerator.setFocus(this.element, this.selected);\n            this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected\n            });\n        };\n    }\n\n    initialize(): void {\n        super.initialize();\n        this.initializeGenerator();\n        this.imageGenerator.processDrawing(this.element, this.getElementG());\n        this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n            selected: this.selected\n        });\n    }\n\n    onContextChanged(\n        value: PlaitPluginElementContext<PlaitImage, PlaitBoard>,\n        previous: PlaitPluginElementContext<PlaitImage, PlaitBoard>\n    ) {\n        if (value.element !== previous.element) {\n            this.imageGenerator.updateImage(this.getElementG(), previous.element, value.element);\n            this.imageGenerator.setFocus(this.element, this.selected);\n            this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected\n            });\n        } else {\n            const hasSameSelected = value.selected === previous.selected;\n            if (!hasSameSelected || value.selected) {\n                this.imageGenerator.setFocus(this.element, this.selected);\n                this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                    selected: this.selected\n                });\n            }\n        }\n    }\n\n    destroy(): void {\n        super.destroy();\n        this.imageGenerator.destroy();\n        this.lineAutoCompleteGenerator.destroy();\n    }\n}\n","import {\n    BoardTransforms,\n    PRESS_AND_MOVE_BUFFER,\n    PlaitBoard,\n    PlaitOptionsBoard,\n    PlaitPointerType,\n    Point,\n    RectangleClient,\n    Transforms,\n    addSelectedElement,\n    clearSelectedElement,\n    createG,\n    distanceBetweenPointAndPoint,\n    rotateAntiPointsByElement,\n    rotatePointsByElement,\n    temporaryDisableSelection,\n    toActivePoint,\n    toHostPoint,\n    toScreenPointFromActivePoint,\n    toViewBoxPoint\n} from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement, PlaitGeometry, PlaitShapeElement, PlaitSwimlane } from '../../interfaces';\nimport { getElementShape } from '../../utils/shape';\nimport { getEngine } from '../../engines';\nimport { handleArrowLineCreating } from '../../utils/arrow-line/arrow-line-basic';\nimport { getSelectedDrawElements } from '../../utils/selected';\nimport { getAutoCompletePoints, getHitIndexOfAutoCompletePoint } from '../../utils/geometry';\nimport { insertElement } from '../../utils';\n\nexport const WithArrowLineAutoCompletePluginKey = 'plait-arrow-line-auto-complete-plugin-key';\n\nexport interface ArrowLineAutoCompleteOptions {\n    afterComplete: (element: PlaitArrowLine) => {};\n}\n\nexport type PreCommitRef = { temporaryArrowLineElement: PlaitArrowLine; temporaryShapeElement: PlaitGeometry };\n\nexport const BOARD_TO_PRE_COMMIT = new WeakMap<PlaitBoard, PreCommitRef>();\n\n/*\nPurpose: Create arrow line via auto-complete drag from a shape edge.\n- On pointerDown at an auto-complete point, set elbow mode and capture source.\n- On drag (beyond buffer), choose nearest crossing on the source edge if available.\n- Rotate source point; build temporary elbow arrow while moving.\n- On release, insert the arrow and select; otherwise commit preview pair if present.\nLifecycle: pointerDown → pointerMove (create temp) → pointerUp insert/commit → reset.\n*/\nexport const withArrowLineAutoComplete = (board: PlaitBoard) => {\n    const { pointerDown, pointerMove, globalPointerUp, touchMove } = board;\n\n    let autoCompletePoint: Point | null = null;\n    let lineShapeG: SVGGElement | null = null;\n    let sourceElement: PlaitShapeElement | null;\n    let temporaryElement: PlaitArrowLine | null;\n\n    board.pointerDown = (event: PointerEvent) => {\n        const selectedElements = getSelectedDrawElements(board);\n        const targetElement = selectedElements.length === 1 && selectedElements[0];\n        const activePoint = toActivePoint(board, event.x, event.y);\n        if (!PlaitBoard.isReadonly(board) && targetElement && PlaitDrawElement.isShapeElement(targetElement)) {\n            const points = getAutoCompletePoints(board, targetElement, true);\n            const index = getHitIndexOfAutoCompletePoint(\n                rotateAntiPointsByElement(board, activePoint, targetElement, true) || activePoint,\n                points\n            );\n            const hitPoint = points[index];\n            if (hitPoint) {\n                temporaryDisableSelection(board as PlaitOptionsBoard);\n                const screenPoint = toScreenPointFromActivePoint(board, hitPoint);\n                autoCompletePoint = toViewBoxPoint(board, toHostPoint(board, screenPoint[0], screenPoint[1]));\n                sourceElement = targetElement;\n                BoardTransforms.updatePointerType(board, ArrowLineShape.elbow);\n            }\n        }\n        pointerDown(event);\n    };\n\n    board.touchMove = (event: TouchEvent) => {\n        if (autoCompletePoint && sourceElement) {\n            return event.preventDefault();\n        }\n        touchMove(event);\n    };\n\n    board.pointerMove = (event: PointerEvent) => {\n        lineShapeG?.remove();\n        lineShapeG = createG();\n        let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n        if (autoCompletePoint && sourceElement) {\n            const distance = distanceBetweenPointAndPoint(\n                ...(rotateAntiPointsByElement(board, movingPoint, sourceElement) || movingPoint),\n                ...autoCompletePoint\n            );\n            if (distance > PRESS_AND_MOVE_BUFFER * 2) {\n                const rectangle = RectangleClient.getRectangleByPoints(sourceElement.points);\n                const shape = getElementShape(sourceElement);\n                const engine = getEngine(shape);\n                let sourcePoint = autoCompletePoint;\n                if (engine.getNearestCrossingPoint) {\n                    const crossingPoint = engine.getNearestCrossingPoint(rectangle, autoCompletePoint);\n                    sourcePoint = crossingPoint;\n                }\n                // source point must be click point\n                const rotatedSourcePoint = rotatePointsByElement(sourcePoint, sourceElement) || sourcePoint;\n                temporaryElement = handleArrowLineCreating(\n                    board,\n                    ArrowLineShape.elbow,\n                    rotatedSourcePoint,\n                    movingPoint,\n                    sourceElement,\n                    lineShapeG\n                );\n                Transforms.addSelectionWithTemporaryElements(board, []);\n            }\n        }\n        pointerMove(event);\n    };\n\n    board.globalPointerUp = (event) => {\n        if (temporaryElement) {\n            Transforms.insertNode(board, temporaryElement, [board.children.length]);\n            clearSelectedElement(board);\n            addSelectedElement(board, temporaryElement);\n            const afterComplete = (board as PlaitOptionsBoard).getPluginOptions<ArrowLineAutoCompleteOptions>(\n                WithArrowLineAutoCompletePluginKey\n            )?.afterComplete;\n            afterComplete && afterComplete(temporaryElement);\n        } else {\n            const preCommitRef = BOARD_TO_PRE_COMMIT.get(board);\n            if (preCommitRef) {\n                Transforms.insertNode(board, preCommitRef.temporaryArrowLineElement, [board.children.length]);\n                insertElement(board, preCommitRef.temporaryShapeElement);\n                BOARD_TO_PRE_COMMIT.delete(board);\n            }\n        }\n        if (autoCompletePoint) {\n            BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n            autoCompletePoint = null;\n        }\n        lineShapeG?.remove();\n        lineShapeG = null;\n        sourceElement = null;\n        temporaryElement = null;\n        globalPointerUp(event);\n    };\n\n    return board;\n};\n","import {\n    CursorClass,\n    PlaitBoard,\n    PlaitElement,\n    RectangleClient,\n    rgbaToHEX,\n    drawCircle,\n    hasValidAngle,\n    isSelectionMoving,\n    rotateAntiPointsByElement,\n    setAngleForG,\n    toActivePoint,\n    toActiveRectangleFromViewBoxRectangle,\n    createG,\n    rotatePointsByElement,\n    isHorizontalDirection,\n    Point\n} from '@plait/core';\nimport {\n    createDefaultGeometry,\n    createDefaultSwimlane,\n    getAutoCompletePoints,\n    getHitConnection,\n    getHitIndexOfAutoCompletePoint,\n    getSelectedDrawElements,\n    handleArrowLineCreating\n} from '../../utils';\nimport { PRIMARY_COLOR, PlaitCommonElementRef, getDirectionByIndex, getXDistanceBetweenPoint, moveXOfPoint } from '@plait/common';\nimport { BOARD_TO_PRE_COMMIT } from './with-arrow-line-auto-complete';\nimport { LINE_AUTO_COMPLETE_HOVERED_DIAMETER, LINE_AUTO_COMPLETE_HOVERED_OPACITY } from '../../constants';\nimport { ArrowLineAutoCompleteGenerator } from '../../generators';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement, PlaitGeometry, PlaitSwimlane, SwimlaneDrawSymbols } from '../../interfaces';\nimport { getGeometryGeneratorByShape } from '../../utils/shape';\n\nconst PREVIEW_ARROW_LINE_DISTANCE = 100;\n\n/*\nPurpose: Hover-driven auto-complete preview for arrow lines.\n- When hovering a selected shape’s auto-complete point, show a hint circle.\n- Offset a temporary shape and build an elbow arrow from the hit edge.\n- Rotate points by element angle; compute target connection; bind target id.\n- Store temporary arrow/shape for pre-commit; commit on click via auto-complete plugin.\nLifecycle: pointerMove (hit/preview) → pointerLeave/globalPointerUp cleanup.\n*/\nexport const withArrowLineAutoCompleteReaction = (board: PlaitBoard) => {\n    const { pointerMove, pointerLeave, globalPointerUp } = board;\n    let reactionG: SVGGElement | null = null;\n    let temporaryArrowLineElement: PlaitArrowLine | null = null;\n    let temporaryShapeElement: PlaitGeometry | PlaitSwimlane | null = null;\n    let temporaryArrowLineG: SVGGElement | null = null;\n    let temporaryShapeG: SVGGElement | null = null;\n\n    board.pointerMove = (event: PointerEvent) => {\n        reactionG?.remove();\n        PlaitBoard.getBoardContainer(board).classList.remove(CursorClass.crosshair);\n        const selectedElements = getSelectedDrawElements(board);\n        temporaryArrowLineG?.remove();\n        temporaryShapeG?.remove();\n        const originElement = selectedElements.length === 1 && selectedElements[0];\n        const activePoint = toActivePoint(board, event.x, event.y);\n        if (!PlaitBoard.isReadonly(board) && !isSelectionMoving(board) && originElement && PlaitDrawElement.isShapeElement(originElement)) {\n            const points = getAutoCompletePoints(board, originElement, true);\n            const hitIndex = getHitIndexOfAutoCompletePoint(\n                rotateAntiPointsByElement(board, activePoint, originElement, true) || activePoint,\n                points\n            );\n            const hitPoint = points[hitIndex];\n            const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(originElement);\n            const lineAutoCompleteGenerator = ref.getGenerator<ArrowLineAutoCompleteGenerator>(ArrowLineAutoCompleteGenerator.key);\n            lineAutoCompleteGenerator.recoverAutoCompleteG();\n            if (hitPoint) {\n                // function 1: dnd\n                reactionG = drawCircle(PlaitBoard.getRoughSVG(board), hitPoint, LINE_AUTO_COMPLETE_HOVERED_DIAMETER, {\n                    stroke: 'none',\n                    fill: rgbaToHEX(PRIMARY_COLOR, LINE_AUTO_COMPLETE_HOVERED_OPACITY),\n                    fillStyle: 'solid'\n                });\n                PlaitBoard.getActiveHost(board).append(reactionG);\n                PlaitBoard.getBoardContainer(board).classList.add(CursorClass.crosshair);\n                if (hasValidAngle(originElement)) {\n                    const rectangle = board.getRectangle(originElement)!;\n                    const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n                    setAngleForG(reactionG, RectangleClient.getCenterPoint(activeRectangle), originElement.angle!);\n                }\n                // function 2: hover to preview and click to commit\n                if (PlaitDrawElement.isGeometry(originElement) && !PlaitDrawElement.isText(originElement)) {\n                    const originRect = RectangleClient.getRectangleByPoints(originElement.points);\n                    let arrowLineStartPoint = RectangleClient.getEdgeCenterPoints(originRect)[hitIndex];\n                    const arrowLineDirection = getDirectionByIndex(hitIndex);\n                    let arrowLineEndPoint = moveXOfPoint(arrowLineStartPoint, PREVIEW_ARROW_LINE_DISTANCE, arrowLineDirection);\n                    const geometryGenerator = getGeometryGeneratorByShape(board, originElement.shape);\n                    const temporaryShapePoints = originElement.points.map((point) =>\n                        moveXOfPoint(\n                            point,\n                            PREVIEW_ARROW_LINE_DISTANCE +\n                                getXDistanceBetweenPoint(\n                                    originElement.points[0],\n                                    originElement.points[1],\n                                    isHorizontalDirection(arrowLineDirection)\n                                ),\n                            arrowLineDirection\n                        )\n                    );\n                    temporaryArrowLineG = createG();\n                    temporaryShapeG = createG();\n                    temporaryArrowLineG.style.opacity = '0.6';\n                    temporaryShapeG.style.opacity = '0.6';\n\n                    temporaryShapeElement = createDefaultGeometry(board, temporaryShapePoints as [Point, Point], originElement.shape);\n                    temporaryShapeElement.angle = originElement.angle;\n                    temporaryShapeElement.fill = originElement.fill;\n                    temporaryShapeElement.strokeColor = originElement.strokeColor;\n                    temporaryShapeElement.strokeStyle = originElement.strokeStyle;\n                    temporaryShapeElement.strokeWidth = originElement.strokeWidth;\n                    temporaryShapeElement.groupId = originElement.groupId;\n\n                    const rotatedArrowLineStartPoint = rotatePointsByElement(arrowLineStartPoint, originElement) || arrowLineStartPoint;\n                    const rotatedArrowLineEndPoint = rotatePointsByElement(arrowLineEndPoint, temporaryShapeElement) || arrowLineEndPoint;\n                    temporaryArrowLineElement = handleArrowLineCreating(\n                        board,\n                        ArrowLineShape.elbow,\n                        rotatedArrowLineStartPoint,\n                        rotatedArrowLineEndPoint,\n                        originElement,\n                        temporaryArrowLineG\n                    );\n                    BOARD_TO_PRE_COMMIT.set(board, { temporaryArrowLineElement, temporaryShapeElement });\n                    const connectionInfo = getHitConnection(board, rotatedArrowLineEndPoint, temporaryShapeElement);\n                    temporaryArrowLineElement.target.boundId = temporaryShapeElement.id;\n                    temporaryArrowLineElement.target.connection = connectionInfo;\n                    geometryGenerator.processDrawing(temporaryShapeElement as PlaitGeometry, temporaryShapeG);\n                    PlaitBoard.getElementTopHost(board).append(temporaryShapeG);\n                }\n                return;\n            }\n        }\n        BOARD_TO_PRE_COMMIT.delete(board);\n        pointerMove(event);\n    };\n\n    board.pointerLeave = (pointer: PointerEvent) => {\n        clearRef();\n        pointerLeave(pointer);\n    };\n\n    const clearRef = () => {\n        if (reactionG) {\n            reactionG?.remove();\n            PlaitBoard.getBoardContainer(board).classList.remove(CursorClass.crosshair);\n            temporaryArrowLineG?.remove();\n            temporaryShapeG?.remove();\n        }\n        if (BOARD_TO_PRE_COMMIT.get(board)) {\n            BOARD_TO_PRE_COMMIT.delete(board);\n        }\n    };\n\n    board.globalPointerUp = (event: PointerEvent) => {\n        globalPointerUp(event);\n        clearRef();\n    };\n\n    return board;\n};\n","import {\n    PlaitBoard,\n    PlaitElement,\n    Point,\n    distanceBetweenPointAndSegments,\n    getHitElementByPoint,\n    getNearestPointBetweenPointAndSegments\n} from '@plait/core';\nimport { PlaitArrowLine, PlaitDrawElement } from '../../interfaces';\nimport { ResizeHandle, ResizeRef, ResizeState, WithResizeOptions, getRatioByPoint, getTextManages, withResize } from '@plait/common';\nimport { DrawTransforms } from '../../transforms';\nimport { getArrowLinePoints } from '../../utils/arrow-line/arrow-line-basic';\nimport { getHitArrowLineTextIndex } from '../../utils/position/arrow-line';\n\nexport const withArrowLineTextMove = (board: PlaitBoard) => {\n    let textIndex = 0;\n    const movableBuffer = 100;\n    const options: WithResizeOptions<PlaitArrowLine> = {\n        key: 'line-text',\n        canResize: () => {\n            return true;\n        },\n        hitTest: (point: Point) => {\n            let result = null;\n            const line = getHitElementByPoint(board, point, (element: PlaitElement) => {\n                return PlaitDrawElement.isArrowLine(element);\n            }) as undefined | PlaitArrowLine;\n            if (line) {\n                const index = getHitArrowLineTextIndex(board, line, point);\n                const textManages = getTextManages(line);\n                const textManage = textManages[index];\n                if (index !== -1 && !textManage.isEditing) {\n                    textIndex = index;\n                    return { element: line, handle: ResizeHandle.e };\n                }\n            }\n            return result;\n        },\n        onResize: (resizeRef: ResizeRef<PlaitArrowLine>, resizeState: ResizeState) => {\n            const element = resizeRef.element;\n            if (element) {\n                const movingPoint = resizeState.endPoint;\n                const points = getArrowLinePoints(board, element);\n                const distance = distanceBetweenPointAndSegments(movingPoint, points);\n                if (distance <= movableBuffer) {\n                    const point = getNearestPointBetweenPointAndSegments(movingPoint, points, false);\n                    const position = getRatioByPoint(points, point);\n                    const texts = [...element.texts];\n                    texts[textIndex] = {\n                        ...texts[textIndex],\n                        position\n                    };\n                    DrawTransforms.setArrowLineTexts(board, element, texts);\n                }\n            }\n        }\n    };\n\n    withResize<PlaitArrowLine>(board, options);\n\n    return board;\n};\n","import {\n    MERGING,\n    PlaitBoard,\n    RectangleClient,\n    Transforms,\n    getRectangleByElements,\n    getSelectedElements,\n    getSelectionAngle,\n    isMainPointer,\n    isSelectionMoving,\n    rotatePoints,\n    throttleRAF,\n    drawRectangle,\n    ACTIVE_STROKE_WIDTH,\n    SELECTION_BORDER_COLOR,\n    setAngleForG,\n    rotateElements,\n    getAngleBetweenPoints,\n    ROTATE_HANDLE_CLASS_NAME,\n    SELECTION_RECTANGLE_CLASS_NAME,\n    normalizeAngle,\n    degreesToRadians,\n    toActiveRectangleFromViewBoxRectangle,\n    toActivePoint\n} from '@plait/core';\nimport { addRotating, removeRotating, drawRotateHandle, RotateRef } from '@plait/common';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getRotateHandleRectangle } from '../utils/position/geometry';\n\nexport const withDrawRotate = (board: PlaitBoard) => {\n    const { pointerDown, pointerMove, globalPointerUp, afterChange, drawSelectionRectangle } = board;\n    let rotateRef: RotateRef | null = null;\n    let rotateHandleG: SVGGElement | null;\n    let needCustomActiveRectangle = false;\n\n    const canRotate = () => {\n        const elements = getSelectedElements(board);\n        return (\n            elements.length > 0 &&\n            elements.every(\n                (el) =>\n                    (PlaitDrawElement.isDrawElement(el) && !PlaitDrawElement.isArrowLine(el)) ||\n                    PlaitDrawElement.isCustomGeometryElement(board, el)\n            )\n        );\n    };\n\n    board.pointerDown = (event: PointerEvent) => {\n        if (!canRotate() || PlaitBoard.isReadonly(board) || PlaitBoard.hasBeenTextEditing(board) || !isMainPointer(event)) {\n            pointerDown(event);\n            return;\n        }\n        const activePoint = toActivePoint(board, event.x, event.y);\n        const elements = getSelectedElements(board) as PlaitDrawElement[];\n        const rectangle = getRectangleByElements(board, elements, false);\n        const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n        const handleRectangle = getRotateHandleRectangle(activeRectangle);\n        const angle = getSelectionAngle(elements);\n        const rotatedPoint = angle ? rotatePoints(activePoint, RectangleClient.getCenterPoint(activeRectangle), -angle) : activePoint;\n        if (handleRectangle && RectangleClient.isHit(RectangleClient.getRectangleByPoints([rotatedPoint, rotatedPoint]), handleRectangle)) {\n            rotateRef = {\n                elements: [...elements],\n                startPoint: activePoint\n            };\n        }\n        pointerDown(event);\n    };\n\n    board.pointerMove = (event: PointerEvent) => {\n        if (rotateRef) {\n            event.preventDefault();\n            const isShift = !!event.shiftKey;\n            addRotating(board, rotateRef);\n            const endPoint = toActivePoint(board, event.x, event.y);\n            const rectangle = getRectangleByElements(board, rotateRef.elements, false);\n            const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n            const selectionCenterPoint = RectangleClient.getCenterPoint(activeRectangle);\n            if (!getSelectionAngle(rotateRef.elements) && rotateRef.elements.length > 1) {\n                needCustomActiveRectangle = true;\n            }\n\n            throttleRAF(board, 'with-common-rotate', () => {\n                if (rotateRef && rotateRef.startPoint) {\n                    let angle = getAngleBetweenPoints(rotateRef.startPoint, endPoint, selectionCenterPoint);\n                    const selectionAngle = getSelectionAngle(rotateRef.elements);\n                    angle = normalizeAngle(selectionAngle + angle);\n                    if (isShift) {\n                        angle += Math.PI / 12 / 2;\n                        angle -= angle % (Math.PI / 12);\n                    }\n\n                    let remainder = angle % (Math.PI / 2);\n                    if (Math.PI / 2 - remainder <= degreesToRadians(5)) {\n                        const snapAngle = Math.PI / 2 - remainder;\n                        angle += snapAngle;\n                    }\n\n                    if (remainder <= degreesToRadians(5)) {\n                        const snapAngle = -remainder;\n                        angle += snapAngle;\n                    }\n\n                    rotateRef.angle = normalizeAngle(angle - selectionAngle) || 0;\n                    rotateElements(board, rotateRef.elements, rotateRef.angle);\n                    MERGING.set(board, true);\n                    PlaitBoard.getBoardContainer(board).classList.add('element-rotating');\n                }\n            });\n            return;\n        }\n\n        pointerMove(event);\n    };\n\n    board.globalPointerUp = (event: PointerEvent) => {\n        globalPointerUp(event);\n        if (needCustomActiveRectangle) {\n            needCustomActiveRectangle = false;\n            const selectedElements = getSelectedElements(board);\n            Transforms.addSelectionWithTemporaryElements(board, selectedElements);\n        }\n        PlaitBoard.getBoardContainer(board).classList.remove('element-rotating');\n        removeRotating(board);\n        rotateRef = null;\n        MERGING.set(board, false);\n    };\n\n    board.afterChange = () => {\n        afterChange();\n        if (rotateHandleG) {\n            rotateHandleG.remove();\n            rotateHandleG = null;\n        }\n\n        if (canRotate() && !isSelectionMoving(board)) {\n            if (needCustomActiveRectangle && rotateRef) {\n                const boundingRectangle = getRectangleByElements(board, rotateRef.elements, false);\n                const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);\n                rotateHandleG = drawRotateHandle(board, boundingActiveRectangle);\n                rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);\n                if (rotateRef.angle) {\n                    setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingActiveRectangle), rotateRef.angle);\n                }\n            } else {\n                const elements = getSelectedElements(board) as PlaitDrawElement[];\n                const boundingRectangle = getRectangleByElements(board, elements, false);\n                const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);\n                rotateHandleG = drawRotateHandle(board, boundingActiveRectangle);\n                rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);\n                setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingActiveRectangle), getSelectionAngle(elements));\n            }\n            PlaitBoard.getActiveHost(board).append(rotateHandleG);\n        }\n    };\n\n    board.drawSelectionRectangle = () => {\n        if (needCustomActiveRectangle && rotateRef) {\n            const rectangle = getRectangleByElements(board, rotateRef.elements, false);\n            const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n            const rectangleG = drawRectangle(board, RectangleClient.inflate(activeRectangle, ACTIVE_STROKE_WIDTH), {\n                stroke: SELECTION_BORDER_COLOR,\n                strokeWidth: ACTIVE_STROKE_WIDTH\n            });\n            rectangleG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n            if (rotateRef.angle) {\n                setAngleForG(rectangleG, RectangleClient.getCenterPoint(activeRectangle), rotateRef.angle);\n            }\n            return rectangleG;\n        }\n        return drawSelectionRectangle();\n    };\n\n    return board;\n};\n","import {\n    PlaitBoard,\n    PlaitPluginElementContext,\n    OnContextChanged,\n    ACTIVE_STROKE_WIDTH,\n    RectangleClient,\n    setAngleForG,\n    degreesToRadians\n} from '@plait/core';\nimport { ActiveGenerator, CommonElementFlavour, TextManageChangeData, createActiveGenerator, hasResizeHandle } from '@plait/common';\nimport { PlaitTable, PlaitTableBoard, PlaitTableCell, PlaitTableElement } from './interfaces/table';\nimport { DrawTextInfo, TextGenerator } from './generators/text.generator';\nimport { TableGenerator } from './generators/table.generator';\nimport { DrawTransforms } from './transforms';\nimport { getCellWithPoints, getTextManageByCell, isCellIncludeText } from './utils/table';\nimport {\n    clearSelectedCells,\n    getCellsRectangle,\n    getSelectedCells,\n    getStrokeWidthByElement,\n    memorizeLatestText,\n    setSelectedCells\n} from './utils';\nimport { getEngine } from './engines';\nimport { TableSymbols } from './interfaces';\nimport { getCellTextHeight, getHorizontalTextRectangle } from './engines/table/table';\nimport { ShapeDefaultSpace } from './constants';\nimport { ArrowLineAutoCompleteGenerator } from './generators/arrow-line-auto-complete.generator';\n\nexport class TableComponent<T extends PlaitTable> extends CommonElementFlavour<T, PlaitBoard> implements OnContextChanged<T, PlaitBoard> {\n    activeGenerator!: ActiveGenerator<T>;\n\n    tableGenerator!: TableGenerator<T>;\n\n    textGenerator!: TextGenerator<T>;\n\n    lineAutoCompleteGenerator!: ArrowLineAutoCompleteGenerator<PlaitTable>;\n\n    constructor() {\n        super();\n    }\n\n    initializeGenerator() {\n        this.activeGenerator = createActiveGenerator<T>(this.board, {\n            getStrokeWidth: () => {\n                return ACTIVE_STROKE_WIDTH;\n            },\n            getStrokeOpacity: () => {\n                return 1;\n            },\n            getRectangle: (value: T) => {\n                const cells = getSelectedCells(value);\n                if (cells?.length) {\n                    return getCellsRectangle(this.board as PlaitTableBoard, this.element, cells);\n                }\n                return RectangleClient.getRectangleByPoints(value.points!);\n            },\n            hasResizeHandle: () => {\n                const cells = getSelectedCells(this.element);\n                if (cells?.length) {\n                    return false;\n                }\n                return hasResizeHandle(this.board, this.element);\n            }\n        });\n        this.tableGenerator = new TableGenerator<T>(this.board);\n        this.initializeTextManage();\n        this.lineAutoCompleteGenerator = new ArrowLineAutoCompleteGenerator(this.board);\n        this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);\n        this.getRef().updateActiveSection = () => {\n            this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected\n            });\n            this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n                selected: this.selected\n            });\n        };\n    }\n\n    initialize(): void {\n        super.initialize();\n        this.initializeGenerator();\n        this.draw();\n    }\n\n    draw() {\n        this.tableGenerator.processDrawing(this.element, this.getElementG());\n        this.textGenerator.draw(this.getElementG());\n        this.rotateVerticalText();\n        this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n            selected: this.selected\n        });\n    }\n\n    rotateVerticalText() {\n        const table = (this.board as PlaitTableBoard).buildTable(this.element);\n        table.cells.forEach((item) => {\n            if (PlaitTableElement.isVerticalText(item)) {\n                const textManage = getTextManageByCell(this.board, item);\n                if (textManage) {\n                    const engine = getEngine<PlaitTable>(TableSymbols.table);\n                    const rectangle = engine.getTextRectangle!(this.board, this.element, { id: item.id, board: this.board });\n                    textManage.g.classList.add('vertical-cell-text');\n                    setAngleForG(textManage.g, RectangleClient.getCenterPoint(rectangle), degreesToRadians(-90));\n                }\n            }\n        });\n    }\n\n    getDrawShapeTexts(cells: PlaitTableCell[]): DrawTextInfo[] {\n        return cells\n            .filter((item) => isCellIncludeText(item))\n            .map((item) => {\n                return {\n                    id: item.id,\n                    text: item.text!,\n                    board: this.board\n                };\n            });\n    }\n\n    initializeTextManage() {\n        const texts = this.getDrawShapeTexts(this.element.cells);\n        this.textGenerator = new TextGenerator(this.board, this.element, texts, {\n            onChange: (value: PlaitTable, data: TextManageChangeData, text: DrawTextInfo) => {\n                const path = PlaitBoard.findPath(this.board, value);\n                if (data.newText) {\n                    DrawTransforms.setTableText(this.board, path, text.id, data.newText, data.height);\n                }\n                data.operations && memorizeLatestText(value, data.operations);\n            },\n            getRenderRectangle: (value: PlaitTable, text: DrawTextInfo) => {\n                const cell = getCellWithPoints(this.board, value, text.id);\n                if (PlaitTableElement.isVerticalText(cell)) {\n                    const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n                    const strokeWidth = getStrokeWidthByElement(cell);\n                    const width = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n                    const height = getCellTextHeight(this.board, cell, true);\n                    return {\n                        width: height,\n                        height: width > 0 ? width : 0,\n                        x: cellRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n                        y: cellRectangle.y + (cellRectangle.height - width) / 2\n                    };\n                } else {\n                    return getHorizontalTextRectangle(this.board, cell);\n                }\n            }\n        });\n        this.textGenerator.initialize();\n    }\n\n    onContextChanged(value: PlaitPluginElementContext<T, PlaitBoard>, previous: PlaitPluginElementContext<T, PlaitBoard>) {\n        if (value.element !== previous.element || value.hasThemeChanged) {\n            const previousSelectedCells = getSelectedCells(previous.element);\n            if (previousSelectedCells?.length) {\n                clearSelectedCells(previous.element);\n                setSelectedCells(value.element, previousSelectedCells);\n            }\n            this.tableGenerator.processDrawing(value.element, this.getElementG());\n            this.activeGenerator.processDrawing(value.element, PlaitBoard.getActiveHost(this.board), { selected: this.selected });\n            const previousTexts = this.getDrawShapeTexts(previous.element.cells);\n            const currentTexts = this.getDrawShapeTexts(value.element.cells);\n            this.textGenerator.update(value.element, previousTexts, currentTexts, this.getElementG());\n            this.rotateVerticalText();\n        } else {\n            const hasSameSelected = value.selected === previous.selected;\n            const currentSelectedCells = getSelectedCells(value.element);\n            if (!hasSameSelected || currentSelectedCells?.length || value.selected) {\n                this.activeGenerator.processDrawing(value.element, PlaitBoard.getActiveHost(this.board), {\n                    selected: this.selected\n                });\n            }\n            if (!this.selected) {\n                clearSelectedCells(value.element);\n            }\n        }\n        this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n            selected: this.selected\n        });\n    }\n\n    destroy(): void {\n        super.destroy();\n        this.activeGenerator.destroy();\n        this.tableGenerator.destroy();\n        this.textGenerator.destroy();\n        this.lineAutoCompleteGenerator.destroy();\n    }\n}\n","import { PlaitBoard, Point, RectangleClient, Transforms, isSelectedElement, getSelectedElements, hasValidAngle } from '@plait/core';\nimport { PlaitBaseTable, PlaitTableBoard, PlaitTableCellWithPoints } from '../interfaces/table';\nimport {\n    getIndexByResizeHandle,\n    isCornerHandle,\n    ResizeOptions,\n    ResizeHandle,\n    ResizeRef,\n    ResizeState,\n    withResize,\n    WithResizeOptions,\n    normalizeShapePoints\n} from '@plait/common';\nimport { getCellsWithPoints, updateColumns, updateRows } from '../utils/table';\nimport { getHitRectangleResizeHandleRef } from '../utils/position/geometry';\nimport { getResizeOriginPointAndHandlePoint, getResizeZoom, movePointByZoomAndOriginPoint } from './with-draw-resize';\nimport { getSnapResizingRef, getSnapResizingRefOptions } from '../utils/snap-resizing';\nimport { PlaitDrawElement } from '../interfaces';\nimport { isSingleSelectTable } from '../utils';\n\n// const debugKey = 'debug:plait:table:resize';\n// const debugGenerator = createDebugGenerator(debugKey);\n\ninterface TableResizeOptions extends ResizeOptions {\n    cell: PlaitTableCellWithPoints;\n}\n\nconst MIN_CELL_SIZE = 20;\n\nexport function withTableResize(board: PlaitTableBoard) {\n    let snapG: SVGGElement | null;\n\n    const options: WithResizeOptions<PlaitBaseTable, ResizeHandle, TableResizeOptions> = {\n        key: 'draw-table',\n        canResize: () => {\n            const selectedElements = getSelectedElements(board);\n            return isSingleSelectTable(board) && !hasValidAngle(selectedElements[0]);\n        },\n        hitTest: (point: Point) => {\n            const selectedElements = getSelectedElements(board);\n            const hitElement = selectedElements[0];\n            // debugGenerator.clear();\n            if (hitElement && PlaitDrawElement.isElementByTable(hitElement)) {\n                let rectangle = board.getRectangle(hitElement) as RectangleClient;\n                // debugGenerator.drawRectangle(board, rectangle);\n                // debugGenerator.drawCircles(board, [point], 5);\n                let handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, hitElement.angle);\n                if (handleRef) {\n                    const selectElement = isSelectedElement(board, hitElement);\n                    if ((selectElement && isSingleSelectTable(board)) || (!selectElement && !isCornerHandle(board, handleRef.handle))) {\n                        return {\n                            element: hitElement,\n                            handle: handleRef.handle,\n                            cursorClass: handleRef.cursorClass,\n                            rectangle\n                        };\n                    }\n                }\n                const cells = getCellsWithPoints(board, hitElement);\n                for (let i = 0; i < cells.length; i++) {\n                    rectangle = RectangleClient.getRectangleByPoints(cells[i].points);\n                    handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, 0);\n                    if (handleRef && !isCornerHandle(board, handleRef.handle)) {\n                        return {\n                            element: hitElement,\n                            handle: handleRef.handle,\n                            cursorClass: handleRef.cursorClass,\n                            rectangle,\n                            options: {\n                                cell: cells[i]\n                            }\n                        };\n                    }\n                }\n            }\n            return null;\n        },\n        onResize: (resizeRef: ResizeRef<PlaitBaseTable, ResizeHandle, TableResizeOptions>, resizeState: ResizeState) => {\n            snapG?.remove();\n            const path = PlaitBoard.findPath(board, resizeRef.element);\n            if (resizeRef.options?.cell && resizeRef.rectangle) {\n                const handleIndex = getIndexByResizeHandle(resizeRef.handle);\n                const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle!);\n                const resizePoints: [Point, Point] = [resizeState.startPoint, resizeState.endPoint];\n                const { xZoom, yZoom } = getResizeZoom(resizePoints, originPoint, handlePoint, false, false);\n                const originPoints = resizeRef.options?.cell.points;\n                const targetPoints = originPoints.map((p) => {\n                    return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);\n                }) as [Point, Point];\n                const offsetX = targetPoints[1][0] - originPoints[1][0];\n                const offsetY = targetPoints[1][1] - originPoints[1][1];\n                const width = targetPoints[1][0] - targetPoints[0][0];\n                const height = targetPoints[1][1] - targetPoints[0][1];\n                if (offsetX !== 0 && width >= MIN_CELL_SIZE) {\n                    const { columns, points } = updateColumns(resizeRef.element, resizeRef.options?.cell.columnId, width, offsetX);\n                    Transforms.setNode(board, { columns, points }, path);\n                } else if (offsetY !== 0 && height >= MIN_CELL_SIZE) {\n                    const { rows, points } = updateRows(resizeRef.element, resizeRef.options?.cell.rowId, height, offsetY);\n                    Transforms.setNode(board, { rows, points }, path);\n                }\n            } else {\n                const isFromCorner = isCornerHandle(board, resizeRef.handle);\n                const isAspectRatio = resizeState.isShift;\n                const handleIndex = getIndexByResizeHandle(resizeRef.handle);\n                const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle!);\n                const resizeSnapRefOptions = getSnapResizingRefOptions(\n                    board,\n                    resizeRef,\n                    resizeState,\n                    {\n                        originPoint,\n                        handlePoint\n                    },\n                    isAspectRatio,\n                    isFromCorner\n                );\n                const resizeSnapRef = getSnapResizingRef(board, [resizeRef.element], resizeSnapRefOptions);\n                snapG = resizeSnapRef.snapG;\n                PlaitBoard.getElementTopHost(board).append(snapG);\n                const points = resizeSnapRef.activePoints as [Point, Point];\n                const originPoints = resizeRef.element.points;\n                const originRect = RectangleClient.getRectangleByPoints(originPoints);\n                const targetRect = RectangleClient.getRectangleByPoints(points);\n                const offsetWidth = targetRect.width - originRect.width;\n                const offsetHeight = targetRect.height - originRect.height;\n                let columns = [...resizeRef.element.columns];\n                let rows = [...resizeRef.element.rows];\n                if (offsetWidth !== 0) {\n                    columns = columns.map((item) => {\n                        if (item.width) {\n                            return {\n                                ...item,\n                                width: item.width + offsetWidth * (item.width / originRect.width)\n                            };\n                        }\n                        return item;\n                    });\n                }\n                if (offsetHeight !== 0) {\n                    rows = rows.map((item) => {\n                        if (item.height) {\n                            return {\n                                ...item,\n                                height: item.height + offsetHeight * (item.height / originRect.height)\n                            };\n                        }\n                        return item;\n                    });\n                }\n                Transforms.setNode(board, { points: normalizeShapePoints(points), columns, rows }, path);\n            }\n        },\n        afterResize: (resizeRef: ResizeRef<PlaitBaseTable, ResizeHandle, TableResizeOptions>) => {\n            snapG?.remove();\n            snapG = null;\n        }\n    };\n\n    withResize<PlaitBaseTable, ResizeHandle, TableResizeOptions>(board, options);\n\n    return board;\n}\n","import { TableComponent } from '../table.component';\nimport { PlaitBaseTable, PlaitTableBoard } from '../interfaces/table';\nimport {\n    PlaitBoard,\n    PlaitPluginElementContext,\n    PlaitElement,\n    RectangleClient,\n    Selection,\n    isLineHitRectangle,\n    toViewBoxPoint,\n    toHostPoint,\n    getHitElementByPoint,\n    getSelectedElements,\n    PlaitPointerType,\n    isDragging,\n    isMainPointer,\n    distanceBetweenPointAndPoint,\n    HIT_DISTANCE_BUFFER\n} from '@plait/core';\nimport { editCell, getHitCell } from '../utils/table';\nimport { withTableResize } from './with-table-resize';\nimport { isVirtualKey, isDelete, isSpaceHotkey } from '@plait/common';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getSelectedCells, getSelectedTableElements, isHitEdgeOfShape, isSingleSelectTable, setSelectedCells } from '../utils';\nimport { TableEngine } from '../engines/table/table';\n\nexport const withTable = (board: PlaitBoard) => {\n    const tableBoard = board as PlaitTableBoard;\n\n    const { drawElement, getRectangle, isRectangleHit, isHit, isMovable, dblClick, keyDown, pointerUp } = tableBoard;\n\n    tableBoard.drawElement = (context: PlaitPluginElementContext) => {\n        if (PlaitDrawElement.isElementByTable(context.element)) {\n            return TableComponent;\n        }\n        return drawElement(context);\n    };\n\n    tableBoard.isHit = (element, point, isStrict?: boolean) => {\n        if (PlaitDrawElement.isElementByTable(element)) {\n            const client = RectangleClient.getRectangleByPoints(element.points);\n            const nearestPoint = TableEngine.getNearestPoint(client, point);\n            const distance = distanceBetweenPointAndPoint(nearestPoint[0], nearestPoint[1], point[0], point[1]);\n            return distance <= HIT_DISTANCE_BUFFER || RectangleClient.isPointInRectangle(client, point);\n        }\n        return isHit(element, point, isStrict);\n    };\n\n    tableBoard.getRectangle = (element: PlaitElement) => {\n        if (PlaitDrawElement.isElementByTable(element)) {\n            return RectangleClient.getRectangleByPoints(element.points);\n        }\n        return getRectangle(element);\n    };\n\n    tableBoard.isMovable = (element: PlaitElement) => {\n        if (PlaitDrawElement.isElementByTable(element)) {\n            return true;\n        }\n\n        return isMovable(element);\n    };\n\n    tableBoard.isRectangleHit = (element: PlaitElement, selection: Selection) => {\n        if (PlaitDrawElement.isElementByTable(element)) {\n            const rangeRectangle = RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]);\n            const client = RectangleClient.getRectangleByPoints(element.points);\n            return isLineHitRectangle(RectangleClient.getCornerPoints(client), rangeRectangle);\n        }\n        return isRectangleHit(element, selection);\n    };\n\n    tableBoard.keyDown = (event: KeyboardEvent) => {\n        const selectedElements = getSelectedElements(board);\n        const isSingleSelection = selectedElements.length === 1;\n        const targetElement = selectedElements[0];\n        if (\n            !PlaitBoard.isReadonly(board) &&\n            !PlaitBoard.hasBeenTextEditing(tableBoard) &&\n            !isVirtualKey(event) &&\n            !isDelete(event) &&\n            !isSpaceHotkey(event) &&\n            isSingleSelection\n        ) {\n            event.preventDefault();\n            if (PlaitDrawElement.isElementByTable(targetElement)) {\n                const cells = getSelectedCells(targetElement);\n                let cell = targetElement.cells.find((item) => item.text);\n                if (cells?.length) {\n                    cell = cells.find((item) => item.text);\n                }\n                if (cell) {\n                    editCell(board, cell);\n                    return;\n                }\n            }\n        }\n        keyDown(event);\n    };\n\n    tableBoard.dblClick = (event: MouseEvent) => {\n        event.preventDefault();\n        if (!PlaitBoard.isReadonly(board)) {\n            const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            const hitElement = getHitElementByPoint(board, point);\n            if (hitElement && PlaitDrawElement.isElementByTable(hitElement)) {\n                const hitCell = getHitCell(tableBoard, hitElement, point);\n                if (hitCell && hitCell.text) {\n                    editCell(board, hitCell);\n                    return;\n                }\n            }\n        }\n        dblClick(event);\n    };\n\n    tableBoard.pointerUp = (event: PointerEvent) => {\n        const isSetSelectionPointer =\n            PlaitBoard.isPointer(tableBoard, PlaitPointerType.selection) || PlaitBoard.isPointer(tableBoard, PlaitPointerType.hand);\n        const isSkip = !isMainPointer(event) || isDragging(tableBoard) || !isSetSelectionPointer;\n        if (isSkip) {\n            pointerUp(event);\n            return;\n        }\n        if (isSingleSelectTable(tableBoard)) {\n            const point = toViewBoxPoint(tableBoard, toHostPoint(tableBoard, event.x, event.y));\n            const element = getSelectedTableElements(tableBoard)[0];\n            const hitCell = getHitCell(tableBoard, element, point);\n            if (hitCell && hitCell.text) {\n                setSelectedCells(element, [hitCell]);\n            }\n        }\n        pointerUp(event);\n    };\n\n    tableBoard.buildTable = (element: PlaitBaseTable) => {\n        return element;\n    };\n\n    return withTableResize(tableBoard);\n};\n","import { PlaitBoard, Point, RectangleClient, createG, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { PlaitSwimlane, SwimlaneDrawSymbols } from '../interfaces';\nimport { insertElement } from '../utils';\nimport {\n    normalizeShapePoints,\n    isDndMode,\n    isDrawingMode,\n    getDirectionFactorByDirectionComponent,\n    getUnitVectorByPointAndPoint,\n    TextManage\n} from '@plait/common';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { getSnapResizingRef } from '../utils/snap-resizing';\nimport { TableGenerator } from '../generators/table.generator';\nimport { createDefaultSwimlane, getDefaultSwimlanePoints, isSwimlanePointers } from '../utils/swimlane';\nimport { getGeometryGeneratorByShape } from '../utils/shape';\nimport { DrawPointerType } from '../constants/pointer';\n\nexport interface FakeCreateTextRef {\n    g: SVGGElement;\n    textManage: TextManage;\n}\n\nconst isSwimlaneDndMode = (board: PlaitBoard) => {\n    const isSwimlanePointer = isSwimlanePointers(board);\n    const dndMode = isSwimlanePointer && isDndMode(board);\n    return dndMode;\n};\n\nconst isSwimlaneDrawingMode = (board: PlaitBoard) => {\n    const isSwimlanePointer = isSwimlanePointers(board);\n    const drawingMode = isSwimlanePointer && isDrawingMode(board);\n    return drawingMode;\n};\n\nexport const withSwimlaneCreateByDrag = (board: PlaitBoard) => {\n    const { pointerMove, globalPointerUp, pointerUp } = board;\n\n    let swimlaneG: SVGGElement | null = null;\n\n    let temporaryElement: PlaitSwimlane | null = null;\n\n    board.pointerMove = (event: PointerEvent) => {\n        swimlaneG?.remove();\n        swimlaneG = createG();\n        const tableGenerator = new TableGenerator(board);\n        const pointer = PlaitBoard.getPointer(board) as SwimlaneDrawSymbols;\n        const dragMode = isSwimlaneDndMode(board);\n        const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n\n        if (dragMode) {\n            const points = getDefaultSwimlanePoints(pointer, movingPoint);\n            temporaryElement = createDefaultSwimlane(pointer, points);\n            tableGenerator.processDrawing(temporaryElement, swimlaneG);\n            PlaitBoard.getElementTopHost(board).append(swimlaneG);\n        }\n\n        pointerMove(event);\n    };\n\n    board.pointerUp = (event: PointerEvent) => {\n        if (isSwimlaneDndMode(board) && temporaryElement) {\n            return;\n        }\n        pointerUp(event);\n    };\n\n    board.globalPointerUp = (event: PointerEvent) => {\n        if (isSwimlaneDndMode(board) && temporaryElement) {\n            insertElement(board, temporaryElement);\n        }\n        temporaryElement = null;\n        swimlaneG?.remove();\n        swimlaneG = null;\n        globalPointerUp(event);\n    };\n\n    return board;\n};\n\nexport const withSwimlaneCreateByDrawing = (board: PlaitBoard) => {\n    const { pointerDown, pointerMove, pointerUp, keyDown, keyUp } = board;\n    let start: Point | null = null;\n\n    let swimlaneG: SVGGElement | null = null;\n\n    let temporaryElement: PlaitSwimlane | null = null;\n\n    let isShift = false;\n\n    let snapG: SVGGElement | null;\n\n    board.keyDown = (event: KeyboardEvent) => {\n        isShift = isKeyHotkey('shift', event);\n        keyDown(event);\n    };\n\n    board.keyUp = (event: KeyboardEvent) => {\n        isShift = false;\n        keyUp(event);\n    };\n\n    board.pointerDown = (event: PointerEvent) => {\n        if (!PlaitBoard.isReadonly(board) && isSwimlaneDrawingMode(board)) {\n            const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            start = point;\n        }\n        pointerDown(event);\n    };\n\n    board.pointerMove = (event: PointerEvent) => {\n        swimlaneG?.remove();\n        swimlaneG = createG();\n        const tableGenerator = new TableGenerator(board);\n        const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n        const pointer = PlaitBoard.getPointer(board) as SwimlaneDrawSymbols;\n        snapG?.remove();\n        if (start && isSwimlaneDrawingMode(board)) {\n            let points: [Point, Point] = normalizeShapePoints([start, movingPoint], isShift);\n            const activeRectangle = RectangleClient.getRectangleByPoints(points);\n            const [x, y] = getUnitVectorByPointAndPoint(start, movingPoint);\n            const resizeSnapRef = getSnapResizingRef(board, [], {\n                resizePoints: points,\n                activeRectangle,\n                directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],\n                isAspectRatio: isShift,\n                isFromCorner: true,\n                isCreate: true\n            });\n            snapG = resizeSnapRef.snapG;\n            PlaitBoard.getElementTopHost(board).append(snapG);\n            points = normalizeShapePoints(resizeSnapRef.activePoints as [Point, Point], isShift);\n            temporaryElement = createDefaultSwimlane(pointer, points);\n            tableGenerator.processDrawing(temporaryElement, swimlaneG);\n            PlaitBoard.getElementTopHost(board).append(swimlaneG);\n        }\n        pointerMove(event);\n    };\n\n    board.pointerUp = (event: PointerEvent) => {\n        if (isSwimlaneDrawingMode(board) && start) {\n            const targetPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            const { width, height } = RectangleClient.getRectangleByPoints([start!, targetPoint]);\n            if (Math.hypot(width, height) < 8) {\n                const pointer = PlaitBoard.getPointer(board) as SwimlaneDrawSymbols;\n                const points = getDefaultSwimlanePoints(pointer, targetPoint);\n                temporaryElement = createDefaultSwimlane(pointer, points);\n            }\n            if (temporaryElement) {\n                insertElement(board, temporaryElement);\n            }\n            snapG?.remove();\n            swimlaneG?.remove();\n            swimlaneG = null;\n            start = null;\n            temporaryElement = null;\n            return;\n        }\n        pointerUp(event);\n    };\n    return board;\n};\n","import { PlaitPluginElementContext } from '@plait/core';\nimport { PlaitDrawElement, PlaitSwimlane } from '../interfaces';\nimport { buildSwimlaneTable } from '../utils/swimlane';\nimport { TableComponent } from '../table.component';\nimport { withSwimlaneCreateByDrag, withSwimlaneCreateByDrawing } from './with-swimlane-create';\nimport { PlaitBaseTable, PlaitTableBoard } from '../interfaces/table';\n\nexport const withSwimlane = (board: PlaitTableBoard) => {\n    const { drawElement, buildTable, pointerUp } = board;\n\n    board.drawElement = (context: PlaitPluginElementContext) => {\n        if (PlaitDrawElement.isSwimlane(context.element)) {\n            return TableComponent;\n        }\n        return drawElement(context);\n    };\n\n    board.buildTable = (element: PlaitBaseTable) => {\n        if (PlaitDrawElement.isSwimlane(element)) {\n            return buildSwimlaneTable(element as PlaitSwimlane);\n        }\n        return buildTable(element);\n    };\n\n    return withSwimlaneCreateByDrawing(withSwimlaneCreateByDrag(board));\n};\n","import {\n    BoardTransforms,\n    PlaitBoard,\n    PlaitPointerType,\n    Point,\n    Transforms,\n    addSelectedElement,\n    createG,\n    distanceBetweenPointAndPoint,\n    toHostPoint,\n    toViewBoxPoint\n} from '@plait/core';\nimport { PlaitVectorLine, VectorLineShape, VectorLinePointerType } from '../interfaces';\nimport { DrawPointerType, LINE_HIT_GEOMETRY_BUFFER, getVectorLinePointers } from '../constants';\nimport { isDrawingMode } from '@plait/common';\nimport { vectorLineCreating } from '../utils';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport const withVectorLineCreateByDraw = (board: PlaitBoard) => {\n    const { pointerDown, pointerMove, dblClick, globalKeyDown } = board;\n\n    let lineShapeG: SVGGElement | null = null;\n\n    let temporaryElement: PlaitVectorLine | null = null;\n\n    let drawPoints: Point[] = [];\n\n    const vectorLineComplete = () => {\n        if (temporaryElement) {\n            Transforms.insertNode(board, temporaryElement, [board.children.length]);\n        }\n        PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);\n        lineShapeG?.remove();\n        lineShapeG = null;\n        temporaryElement = null;\n        drawPoints = [];\n    };\n\n    board.pointerDown = (event: PointerEvent) => {\n        const penPointers = getVectorLinePointers();\n        const isVectorLinePointer = PlaitBoard.isInPointer(board, penPointers);\n        if (!PlaitBoard.isReadonly(board) && isVectorLinePointer && isDrawingMode(board)) {\n            let point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            if (drawPoints.length > 1) {\n                const isClosed = distanceBetweenPointAndPoint(...point, ...drawPoints[0]) <= LINE_HIT_GEOMETRY_BUFFER;\n                if (isClosed) {\n                    drawPoints.push(drawPoints[0]);\n                    vectorLineComplete();\n                    return;\n                }\n            }\n            drawPoints.push(point);\n            return;\n        }\n        pointerDown(event);\n    };\n\n    board.pointerMove = (event: PointerEvent) => {\n        lineShapeG?.remove();\n        lineShapeG = createG();\n        let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n        const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n        if (pointer === VectorLinePointerType.vectorLine) {\n            if (drawPoints.length > 0) {\n                const distance = distanceBetweenPointAndPoint(...movingPoint, ...drawPoints[0]);\n                if (distance <= LINE_HIT_GEOMETRY_BUFFER) {\n                    movingPoint = drawPoints[0];\n                    PlaitBoard.getBoardContainer(board).classList.add(`vector-line-closed`);\n                } else {\n                    PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);\n                }\n                temporaryElement = vectorLineCreating(board, VectorLineShape.straight, drawPoints, movingPoint, lineShapeG);\n            }\n        }\n        pointerMove(event);\n    };\n\n    board.dblClick = (event: MouseEvent) => {\n        if (!PlaitBoard.isReadonly(board)) {\n            if (temporaryElement) {\n                vectorLineComplete();\n                BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n                return;\n            }\n        }\n        dblClick(event);\n    };\n\n    board.globalKeyDown = (event: KeyboardEvent) => {\n        if (!PlaitBoard.isReadonly(board)) {\n            const isEsc = isKeyHotkey('esc', event);\n            const isV = isKeyHotkey('v', event);\n            if ((isEsc || isV) && temporaryElement) {\n                vectorLineComplete();\n                if (isV) {\n                    BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n                }\n            }\n        }\n        globalKeyDown(event);\n    };\n\n    return board;\n};\n","import { Path, PlaitBoard, Point, Transforms, distanceBetweenPointAndPoint } from '@plait/core';\nimport { ResizeRef, ResizeState, WithResizeOptions, withResize } from '@plait/common';\nimport { getSelectedVectorLineElements } from '../utils/selected';\nimport { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';\nimport { PlaitVectorLine } from '../interfaces';\nimport { LINE_HIT_GEOMETRY_BUFFER } from '../constants';\nimport { isClosedPoints } from '../utils';\n\nexport const withVectorLineResize = (board: PlaitBoard) => {\n    const options: WithResizeOptions<PlaitVectorLine, LineResizeHandle> = {\n        key: 'draw-vector-line',\n        canResize: () => {\n            return true;\n        },\n        hitTest: (point: Point) => {\n            const selectedVectorLineElements = getSelectedVectorLineElements(board);\n            if (selectedVectorLineElements.length > 0) {\n                let result = null;\n                selectedVectorLineElements.forEach((value) => {\n                    const handleRef = getHitLineResizeHandleRef(board, value, point);\n                    if (handleRef) {\n                        result = {\n                            element: value,\n                            handle: handleRef.handle,\n                            handleIndex: handleRef.handleIndex\n                        };\n                    }\n                });\n                return result;\n            }\n            return null;\n        },\n\n        onResize: (resizeRef: ResizeRef<PlaitVectorLine, LineResizeHandle>, resizeState: ResizeState) => {\n            let points: Point[] = [...resizeRef.element.points];\n            let handleIndex = resizeRef.handleIndex!;\n            if (resizeRef.handle === LineResizeHandle.source || resizeRef.handle === LineResizeHandle.target) {\n                points[handleIndex] = resizeState.endPoint;\n                if (isClosedPoints(resizeRef.element.points)) {\n                    points[points.length - 1] = resizeState.endPoint;\n                } else {\n                    const targetPoint = resizeRef.handle === LineResizeHandle.source ? points[points.length - 1] : points[0];\n                    const distance = distanceBetweenPointAndPoint(...resizeState.endPoint, ...targetPoint);\n                    if (distance <= LINE_HIT_GEOMETRY_BUFFER) {\n                        points[handleIndex] = targetPoint;\n                    }\n                }\n            } else {\n                if (resizeRef.handle === LineResizeHandle.addHandle) {\n                    points.splice(handleIndex + 1, 0, resizeState.endPoint);\n                } else {\n                    points[handleIndex] = resizeState.endPoint;\n                }\n            }\n\n            Transforms.setNode(board, { points }, resizeRef.path as Path);\n        }\n    };\n\n    withResize<PlaitVectorLine, LineResizeHandle>(board, options);\n\n    return board;\n};\n","import { PlaitBoard, PlaitElement, PlaitPluginElementContext, Point, RectangleClient, Selection, getSelectedElements } from '@plait/core';\nimport { GeometryComponent } from '../geometry.component';\nimport { ArrowLineComponent } from '../arrow-line.component';\nimport { VectorLineComponent } from '../vector-line.component';\nimport { PlaitDrawElement } from '../interfaces';\nimport { withDrawHotkey } from './with-draw-hotkey';\nimport { withGeometryCreateByDrawing, withGeometryCreateByDrag } from './with-geometry-create';\nimport { withDrawFragment } from './with-draw-fragment';\nimport { withArrowLineCreateByDraw } from './arrow-line/with-arrow-line-create';\nimport { withArrowLineResize } from './arrow-line/with-arrow-line-resize';\nimport { withArrowLineBoundReaction } from './arrow-line/with-arrow-line-bound-reaction';\nimport { withArrowLineText } from './arrow-line/with-arrow-line-text';\nimport { ImageComponent } from '../image.component';\nimport { withArrowLineAutoCompleteReaction } from './arrow-line/with-arrow-line-auto-complete-reaction';\nimport { withArrowLineAutoComplete } from './arrow-line/with-arrow-line-auto-complete';\nimport { withArrowLineTextMove } from './arrow-line/with-arrow-line-text-move';\nimport { withDrawResize } from './with-draw-resize';\nimport { getHitDrawElement, isHitDrawElement, isHitElementInside, isRectangleHitDrawElement } from '../utils/hit';\nimport { getArrowLinePoints, getArrowLineTextRectangle } from '../utils/arrow-line/arrow-line-basic';\nimport { withDrawRotate } from './with-draw-rotate';\nimport { withTable } from './with-table';\nimport { withSwimlane } from './with-swimlane';\nimport { withVectorLineCreateByDraw } from './with-vector-line-create';\nimport { getVectorLinePoints } from '../utils/vector-line';\nimport { withVectorLineResize } from './with-vector-line-resize';\n\nexport const withDraw = (board: PlaitBoard) => {\n    const { drawElement, getRectangle, isRectangleHit, isHit, isInsidePoint, isMovable, isAlign, getRelatedFragment, getOneHitElement } =\n        board;\n\n    board.drawElement = (context: PlaitPluginElementContext) => {\n        if (PlaitDrawElement.isGeometry(context.element)) {\n            if (PlaitDrawElement.isUML(context.element)) {\n                return GeometryComponent;\n            }\n            return GeometryComponent;\n        } else if (PlaitDrawElement.isArrowLine(context.element)) {\n            return ArrowLineComponent;\n        } else if (PlaitDrawElement.isVectorLine(context.element)) {\n            return VectorLineComponent;\n        } else if (PlaitDrawElement.isImage(context.element)) {\n            return ImageComponent;\n        }\n        return drawElement(context);\n    };\n\n    board.getRectangle = (element: PlaitElement) => {\n        if (PlaitDrawElement.isGeometry(element)) {\n            return RectangleClient.getRectangleByPoints(element.points);\n        }\n        if (PlaitDrawElement.isArrowLine(element)) {\n            const points = getArrowLinePoints(board, element);\n            const lineTextRectangles = element.texts.map((text, index) => {\n                const rectangle = getArrowLineTextRectangle(board, element, index);\n                return rectangle;\n            });\n            const linePointsRectangle = RectangleClient.getRectangleByPoints(points);\n            return RectangleClient.getBoundingRectangle([linePointsRectangle, ...lineTextRectangles]);\n        }\n        if (PlaitDrawElement.isVectorLine(element)) {\n            const points = getVectorLinePoints(board, element);\n            const linePointsRectangle = RectangleClient.getRectangleByPoints(points!);\n            return RectangleClient.getBoundingRectangle([linePointsRectangle]);\n        }\n        if (PlaitDrawElement.isImage(element)) {\n            return RectangleClient.getRectangleByPoints(element.points);\n        }\n        return getRectangle(element);\n    };\n\n    board.isRectangleHit = (element: PlaitElement, selection: Selection) => {\n        const result = isRectangleHitDrawElement(board, element, selection);\n        if (result !== null) {\n            return result;\n        }\n        return isRectangleHit(element, selection);\n    };\n\n    board.isHit = (element, point, isStrict?: boolean) => {\n        const result = isHitDrawElement(board, element, point, isStrict);\n        if (result !== null) {\n            return result;\n        }\n        return isHit(element, point, isStrict);\n    };\n\n    board.getOneHitElement = (elements, hitPoint: Point) => {\n        const isAllDrawElements = elements.every((item) => PlaitDrawElement.isDrawElement(item));\n        if (isAllDrawElements) {\n            return getHitDrawElement(board, elements as PlaitDrawElement[], hitPoint);\n        }\n        return getOneHitElement(elements, hitPoint);\n    };\n\n    board.isInsidePoint = (element: PlaitElement, point: Point) => {\n        const result = isHitElementInside(board, element, point);\n        if (result !== null) {\n            return result;\n        }\n        return isInsidePoint(element, point);\n    };\n\n    board.isMovable = (element: PlaitElement) => {\n        if (PlaitDrawElement.isGeometry(element)) {\n            return true;\n        }\n        if (PlaitDrawElement.isImage(element)) {\n            return true;\n        }\n        if (PlaitDrawElement.isVectorLine(element)) {\n            return true;\n        }\n        if (PlaitDrawElement.isArrowLine(element)) {\n            const selectedElements = getSelectedElements(board);\n            const isSelected = (boundId: string) => {\n                return !!selectedElements.find((value) => value.id === boundId);\n            };\n            if (!element.source.boundId && !element.target.boundId) {\n                return true;\n            }\n            if (element.source.boundId && isSelected(element.source.boundId) && selectedElements.includes(element)) {\n                return true;\n            }\n            if (element.target.boundId && isSelected(element.target.boundId) && selectedElements.includes(element)) {\n                return true;\n            }\n            return false;\n        }\n        return isMovable(element);\n    };\n\n    board.isAlign = (element: PlaitElement) => {\n        if (PlaitDrawElement.isGeometry(element) || PlaitDrawElement.isImage(element)) {\n            return true;\n        }\n        return isAlign(element);\n    };\n\n    board.getRelatedFragment = (elements: PlaitElement[], originData?: PlaitElement[]) => {\n        const selectedElements = originData?.length ? originData : getSelectedElements(board);\n        const lineElements = board.children.filter((element) => PlaitDrawElement.isArrowLine(element));\n        const activeLines = lineElements.filter((line) => {\n            const source = selectedElements.find((element) => element.id === line.source.boundId);\n            const target = selectedElements.find((element) => element.id === line.target.boundId);\n            const isSelected = selectedElements.includes(line);\n            return source && target && !isSelected;\n        });\n        return getRelatedFragment([...elements, ...activeLines], originData);\n    };\n\n    return withSwimlane(\n        withTable(\n            withDrawResize(\n                withVectorLineCreateByDraw(\n                    withArrowLineAutoCompleteReaction(\n                        withArrowLineBoundReaction(\n                            withVectorLineResize(\n                                withArrowLineResize(\n                                    withArrowLineTextMove(\n                                        withArrowLineText(\n                                            withDrawRotate(\n                                                withArrowLineCreateByDraw(\n                                                    withArrowLineAutoComplete(\n                                                        withGeometryCreateByDrag(\n                                                            withGeometryCreateByDrawing(withDrawFragment(withDrawHotkey(board)))\n                                                        )\n                                                    )\n                                                )\n                                            )\n                                        )\n                                    )\n                                )\n                            )\n                        )\n                    )\n                )\n            )\n        )\n    );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getTextRectangle","debugKey","debugGenerator","getCenterPointsOnPolygon","basicBuildClipboard","basicInsertClipboard","heightRatio","getNearestPointBetweenPointAndRoundRectangle"],"mappings":"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"}