@plait/draw 0.68.0 → 0.69.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/plugins/with-arrow-line-create.mjs +2 -4
- package/esm2022/plugins/with-draw-rotate.mjs +2 -3
- package/esm2022/plugins/with-geometry-create.mjs +2 -5
- package/esm2022/plugins/with-swimlane-create.mjs +2 -4
- package/esm2022/plugins/with-vector-pen-create.mjs +2 -3
- package/fesm2022/plait-draw.mjs +1 -10
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/package.json +1 -1
- package/utils/clipboard.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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/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/utils/shape.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/position/arrow-line.ts","../../../packages/draw/src/utils/multi-text-geometry.ts","../../../packages/draw/src/constants/line.ts","../../../packages/draw/src/generators/vector-line-generator.ts","../../../packages/draw/src/utils/vector-line.ts","../../../packages/draw/src/utils/hit.ts","../../../packages/draw/src/utils/common.ts","../../../packages/draw/src/utils/style/stroke.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/arrow-line/arrow-line-basic.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/line.ts","../../../packages/draw/src/utils/polygon.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/basic-shapes/cloud.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/generators/geometry-shape.generator.ts","../../../packages/draw/src/generators/arrow-line-auto-complete.generator.ts","../../../packages/draw/src/generators/single-text.generator.ts","../../../packages/draw/src/geometry.component.ts","../../../packages/draw/src/utils/position/line.ts","../../../packages/draw/src/generators/line-active.generator.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/generators/table.generator.ts","../../../packages/draw/src/plugins/with-geometry-create.ts","../../../packages/draw/src/utils/clipboard.ts","../../../packages/draw/src/plugins/with-draw-fragment.ts","../../../packages/draw/src/plugins/with-arrow-line-create.ts","../../../packages/draw/src/plugins/with-geometry-resize.ts","../../../packages/draw/src/plugins/with-arrow-line-resize.ts","../../../packages/draw/src/plugins/with-arrow-line-bound-reaction.ts","../../../packages/draw/src/plugins/with-arrow-line-text.ts","../../../packages/draw/src/image.component.ts","../../../packages/draw/src/plugins/with-arrow-line-auto-complete-reaction.ts","../../../packages/draw/src/plugins/with-arrow-line-auto-complete.ts","../../../packages/draw/src/plugins/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-pen-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 { StrokeStyle } from './element';\nimport { PlaitDrawShapeText } from '../generators/text.generator';\nimport { ParagraphElement } 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 MultipleTextGeometryCommonTextKeys {\n name = 'name',\n content = 'content'\n}\n\nexport type GeometryShapes = BasicShapes | FlowchartSymbols | UMLSymbols;\n\nexport type SwimlaneDirection = 'horizontal' | 'vertical';\n\nexport interface PlaitBaseGeometry extends PlaitElement {\n type: 'geometry';\n points: [Point, Point];\n shape: GeometryShapes;\n}\n\nexport interface PlaitCommonGeometry extends PlaitBaseGeometry {\n // node style attributes\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n\n angle?: number;\n opacity?: number;\n}\n\nexport interface PlaitMultipleTextGeometry extends PlaitCommonGeometry {\n texts: PlaitDrawShapeText[];\n}\n\nexport interface PlaitGeometry extends PlaitCommonGeometry {\n text?: ParagraphElement;\n textHeight?: number;\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 { EngineExtraData } from './engine';\nimport { ParagraphElement } from '@plait/common';\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 textHeight?: number;\n fill?: string;\n}\n\nexport interface PlaitTableDrawOptions extends EngineExtraData {\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","import { ACTIVE_STROKE_WIDTH, DEFAULT_COLOR } from '@plait/core';\nimport { BasicShapes, FlowchartSymbols, GeometryShapes, MultipleTextGeometryCommonTextKeys, 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 key: MultipleTextGeometryCommonTextKeys.name,\n text: '包名',\n align: Alignment.left\n },\n {\n key: MultipleTextGeometryCommonTextKeys.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 key: MultipleTextGeometryCommonTextKeys.name,\n text: 'Opt | Alt | Loop',\n align: Alignment.left\n },\n {\n key: MultipleTextGeometryCommonTextKeys.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(MultipleTextGeometryCommonTextKeys),\n [UMLSymbols.combinedFragment]: Object.keys(MultipleTextGeometryCommonTextKeys)\n};\n\nexport const LINE_HIT_GEOMETRY_BUFFER = 10;\n\nexport const LINE_SNAPPING_BUFFER = 6;\n\nexport const LINE_SNAPPING_CONNECTOR_BUFFER = 8;\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 VectorPenPointerType\n} from '../interfaces';\n\nexport type DrawPointerType =\n | BasicShapes\n | ArrowLineShape\n | FlowchartSymbols\n | SwimlaneDrawSymbols\n | TableSymbols\n | UMLSymbols\n | VectorPenPointerType;\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 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 getVectorPenPointers = () => {\n return Object.keys(VectorPenPointerType);\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","import { BasicShapes, PlaitDrawElement, PlaitShapeElement, TableSymbols } from '../interfaces';\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","import {\n ELEMENT_TO_TEXT_MANAGES,\n ParagraphElement,\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, EngineExtraData, PlaitGeometry } from '../interfaces';\nimport { getTextKey, getTextRectangle } from '../utils';\n\nexport interface PlaitDrawShapeText extends EngineExtraData {\n key: string;\n text: ParagraphElement;\n textHeight: number;\n board?: PlaitBoard;\n}\n\nexport interface TextGeneratorOptions<T> {\n onChange: (element: T, textChangeRef: TextManageChangeData, text: PlaitDrawShapeText) => void;\n getRenderRectangle?: (element: T, text: PlaitDrawShapeText) => RectangleClient;\n getMaxWidth?: () => number;\n}\n\nexport const KEY_TO_TEXT_MANAGE: WeakMap<PlaitBoard, { [key: string]: TextManage }> = new WeakMap();\n\nexport const setTextManage = (board: PlaitBoard, key: string, textManage: TextManage) => {\n const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n return KEY_TO_TEXT_MANAGE.set(board, { ...textManages, [key]: textManage });\n};\n\nexport const getTextManage = (board: PlaitBoard, key: string): TextManage => {\n const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n return textManages[key];\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: PlaitDrawShapeText[];\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: PlaitDrawShapeText[], 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, getTextKey(this.element, text), textManage);\n return textManage;\n });\n ELEMENT_TO_TEXT_MANAGES.set(this.element, 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, getTextKey(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: PlaitDrawShapeText[], currentDrawShapeTexts: PlaitDrawShapeText[], elementG: SVGElement) {\n this.element = element;\n ELEMENT_TO_TEXT_MANAGES.set(this.element, this.textManages);\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.key === value.key);\n });\n if (removedTexts.length) {\n removedTexts.forEach(item => {\n const textManage = getTextManage(this.board, item.key);\n const index = this.textManages.findIndex(value => value === textManage);\n if (index > -1 && item.text && item.textHeight) {\n this.textManages.splice(index, 1);\n }\n textManage?.destroy();\n deleteTextManage(this.board, item.key);\n });\n }\n currentDrawShapeTexts.forEach(drawShapeText => {\n if (drawShapeText.text) {\n let textManage = getTextManage(this.board, getTextKey(this.element, drawShapeText));\n if (!textManage) {\n textManage = this.createTextManage(drawShapeText, textPlugins);\n setTextManage(this.board, drawShapeText.key, 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: PlaitDrawShapeText, 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: PlaitDrawShapeText) {\n const getRectangle = getEngine<T>(this.shape).getTextRectangle;\n if (getRectangle) {\n return getRectangle(this.element, text);\n }\n return getTextRectangle(this.element);\n }\n\n getMaxWidth(text: PlaitDrawShapeText) {\n return this.options.getMaxWidth ? this.options.getMaxWidth() : this.getRectangle(text).width;\n }\n\n destroy() {\n this.textManages.forEach(manage => {\n manage.destroy();\n });\n this.textManages = [];\n ELEMENT_TO_TEXT_MANAGES.delete(this.element);\n this.texts.forEach(item => {\n deleteTextManage(this.board, item.key);\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 isSingleSelectElementByTable = (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, isSingleSelectElementByTable } 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, cell.id);\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 && cell.textHeight;\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['textHeight'] = TEXT_DEFAULT_HEIGHT;\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 (isSingleSelectElementByTable(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 { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitArrowLine } from '../../interfaces';\nimport { getPointOnPolyline } from '@plait/common';\nimport { getArrowLinePoints } from '../arrow-line/arrow-line-basic';\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 rectangle = {\n x: center[0] - text.width! / 2,\n y: center[1] - text.height! / 2,\n width: text.width!,\n height: text.height!\n };\n return RectangleClient.isHit(rectangle, RectangleClient.getRectangleByPoints([point, point]));\n });\n};\n","import { Point, RectangleClient, idCreator } from '@plait/core';\nimport { GeometryShapes, UMLSymbols, PlaitMultipleTextGeometry, PlaitCommonGeometry } from '../interfaces/geometry';\nimport { DefaultTextProperty, GEOMETRY_WITH_MULTIPLE_TEXT, MultipleTextGeometryTextKeys } from '../constants';\nimport { getEngine } from '../engines';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { PlaitDrawShapeText } 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: PlaitCommonGeometry): 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: PlaitDrawShapeText[] = 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) => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n const textProperties = { ...memorizedLatest.textProperties };\n const alignment = textProperties?.align;\n const textHeight = textProperties?.textHeight || DefaultTextProperty.height;\n delete textProperties?.align;\n delete textProperties?.textHeight;\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 key: textKey,\n text: buildText(text?.text || '', alignment || text?.align || Alignment.center, textProperties),\n textHeight: textHeight\n };\n });\n};\n\nexport const getHitMultipleGeometryText = (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!(element, { key: text.key });\n return RectangleClient.isHit(rectangle, textRectangle);\n });\n }\n return hitText;\n};\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 = 0.6;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_OPACITY = 0.8;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_DIAMETER = 10;\n\nexport const LINE_ALIGN_TOLERANCE = 3;\n\nexport const LINE_TEXT = '文本';\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, StrokeStyle, VectorLineShape } from '../interfaces';\nimport { getLineMemorizedLatest } from './memorize';\nimport { DefaultLineStyle } from '../constants/line';\nimport { alignPoints } from './arrow-line';\nimport { getStrokeWidthByElement } from './common';\nimport { getFillByElement, getLineDashByElement, getStrokeColorByElement } from './style';\nimport { VectorLineShapeGenerator } from '../generators/vector-line-generator';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { removeDuplicatePoints } from '@plait/common';\n\nexport const isClosedVectorLine = (vectorLine: PlaitVectorLine) => {\n const points = vectorLine.points;\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 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] = alignPoints(otherPoint, movingPoint);\n lineGenerator.processDrawing(temporaryLineElement, lineShapeG);\n PlaitBoard.getElementActiveHost(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 strokeLineDash = getLineDashByElement(element);\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 {\n PlaitElement,\n RectangleClient,\n Selection,\n PlaitBoard,\n isPolylineHitRectangle,\n Point,\n distanceBetweenPointAndSegments,\n distanceBetweenPointAndPoint,\n HIT_DISTANCE_BUFFER,\n rotatePointsByElement,\n rotateAntiPointsByElement,\n isPointInPolygon\n} from '@plait/core';\nimport { PlaitArrowLine, PlaitCommonGeometry, PlaitDrawElement, PlaitGeometry, PlaitShapeElement, PlaitVectorLine } 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, isDrawElementClosed } from './common';\nimport { isMultipleTextGeometry } from './multi-text-geometry';\nimport { isFilled, sortElementsByArea } from '@plait/common';\nimport { getVectorLinePoints, isClosedVectorLine } from './vector-line';\n\nexport const isTextExceedingBounds = (geometry: PlaitGeometry) => {\n const client = RectangleClient.getRectangleByPoints(geometry.points);\n if (geometry.textHeight && geometry.textHeight > client.height) {\n return true;\n }\n return false;\n};\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(pathPoints, point);\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 (isClosedVectorLine(element)) {\n return isPointInPolygon(point, points) || isHitPolyLine(points, point);\n } else {\n return isHitPolyLine(points, point);\n }\n};\n\nexport const isRectangleHitElementText = (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!(element, { key: item.key });\n const rotatedCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(textClient), element) || RectangleClient.getCornerPoints(textClient);\n return isPolylineHitRectangle(rotatedCornerPoints, rectangle);\n });\n } else {\n const textClient = engine.getTextRectangle ? engine.getTextRectangle(element) : getTextRectangle(element);\n const rotatedCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(textClient), element) || RectangleClient.getCornerPoints(textClient);\n return isPolylineHitRectangle(rotatedCornerPoints, rectangle);\n }\n};\n\nexport const isHitElementText = (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!(element, { key: item.key });\n return RectangleClient.isPointInRectangle(textClient, point);\n });\n } else {\n const textClient = engine.getTextRectangle ? engine.getTextRectangle(element) : getTextRectangle(element);\n return RectangleClient.isPointInRectangle(textClient, point);\n }\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 client = RectangleClient.getRectangleByPoints(element.points);\n let rotatedCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(client), element) || RectangleClient.getCornerPoints(client);\n const isHitElement = isPolylineHitRectangle(rotatedCornerPoints, rangeRectangle);\n if (isHitElement) {\n return isHitElement;\n }\n return isRectangleHitElementText(element, rangeRectangle);\n }\n\n if (PlaitDrawElement.isImage(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n const rotatedCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(client), element) || RectangleClient.getCornerPoints(client);\n return isPolylineHitRectangle(rotatedCornerPoints, rangeRectangle);\n }\n\n if (PlaitDrawElement.isArrowLine(element)) {\n const points = getArrowLinePoints(board, element);\n return isPolylineHitRectangle(points, rangeRectangle);\n }\n\n if (PlaitDrawElement.isVectorLine(element)) {\n const points = getVectorLinePoints(board, element)!;\n return isPolylineHitRectangle(points, rangeRectangle, false);\n }\n\n return null;\n};\n\nexport const getDrawHitElement = (board: PlaitBoard, elements: PlaitDrawElement[]) => {\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 element = getFirstTextOrLineElement(newElements);\n if (element) {\n return element;\n }\n const sortElements = sortElementsByArea(board, newElements, 'asc');\n return sortElements[0];\n};\n\nexport const getFirstFilledDrawElement = (board: PlaitBoard, elements: PlaitDrawElement[]) => {\n let filledElement: PlaitGeometry | null = null;\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (isDrawElementClosed(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 getFirstTextOrLineElement = (elements: PlaitDrawElement[]) => {\n const texts = elements.filter(item => PlaitDrawElement.isText(item));\n if (texts.length) {\n return texts[0];\n }\n const lines = elements.filter(item => PlaitDrawElement.isArrowLine(item));\n if (lines.length) {\n return lines[0];\n }\n return null;\n};\n\nexport const isHitDrawElement = (board: PlaitBoard, element: PlaitElement, point: Point) => {\n const rectangle = board.getRectangle(element);\n point = rotateAntiPointsByElement(point, element) || point;\n if (PlaitDrawElement.isGeometry(element)) {\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(element);\n return RectangleClient.isPointInRectangle(textClient, point);\n }\n const isHitText = isHitElementText(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(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(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 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 { DefaultDrawStyle, LINE_HIT_GEOMETRY_BUFFER, LINE_SNAPPING_BUFFER, ShapeDefaultSpace } from '../constants';\nimport {\n DrawShapes,\n EngineExtraData,\n MultipleTextGeometryCommonTextKeys,\n PlaitBaseGeometry,\n PlaitCommonGeometry,\n PlaitDrawElement,\n PlaitGeometry,\n PlaitMultipleTextGeometry,\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 { PlaitDrawShapeText } from '../generators/text.generator';\nimport { isClosedVectorLine } from '.';\n\nexport const getTextRectangle = <T extends PlaitElement = PlaitGeometry>(element: T) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - 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 isDrawElementClosed = (element: PlaitDrawElement) => {\n if (PlaitDrawElement.isText(element) || PlaitDrawElement.isArrowLine(element) || PlaitDrawElement.isImage(element)) {\n return false;\n }\n\n if (PlaitDrawElement.isVectorLine(element)) {\n return isClosedVectorLine(element);\n }\n\n if (PlaitDrawElement.isGeometry(element)) {\n return isGeometryClosed(element);\n }\n\n return true;\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(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(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: EngineExtraData\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: EngineExtraData = {};\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: isDrawElementClosed(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 = <T extends PlaitElement = PlaitGeometry>(element: T, text: PlaitDrawShapeText) => {\n if (isMultipleTextGeometry((element as unknown) as PlaitCommonGeometry)) {\n return `${element.id}-${text.key}`;\n } else {\n return text.key;\n }\n};\n\nexport const getGeometryAlign = (board: PlaitBoard, element: PlaitCommonGeometry | PlaitBaseTable) => {\n if (isMultipleTextGeometry(element as PlaitCommonGeometry)) {\n const drawShapeText = (element as PlaitMultipleTextGeometry).texts.find(item =>\n item.key.includes(MultipleTextGeometryCommonTextKeys.content)\n );\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","import { PlaitDrawElement, StrokeStyle } from '../../interfaces';\nimport { DefaultDrawStyle } from '../../constants';\nimport { PlaitBoard, PlaitElement } from '@plait/core';\nimport { getDrawDefaultStrokeColor, getFlowchartDefaultFill } from '../geometry';\nimport { getStrokeWidthByElement, isDrawElementClosed } from '../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) && isDrawElementClosed(element as PlaitDrawElement)\n ? getFlowchartDefaultFill(board.theme.themeColorMode)\n : DefaultDrawStyle.fill;\n const fill = element.fill || defaultFill;\n return fill;\n};\n\nexport const getLineDashByElement = (element: PlaitElement) => {\n switch (element.strokeStyle) {\n case StrokeStyle.dashed:\n return [8, 8 + getStrokeWidthByElement(element)];\n case StrokeStyle.dotted:\n return [2, 4 + getStrokeWidthByElement(element)];\n default:\n return undefined;\n }\n};\n\nexport const getStrokeStyleByElement = (element: PlaitElement) => {\n return element.strokeStyle || StrokeStyle.solid;\n};\n","import { ElbowLineRouteOptions, ResizeState, generateElbowLineRoute, removeDuplicatePoints, simplifyOrthogonalPoints } from '@plait/common';\nimport { PlaitBoard, Point, RectangleClient, createDebugGenerator } from '@plait/core';\nimport { LINE_ALIGN_TOLERANCE } from '../../constants/line';\nimport { getElbowLineRouteOptions, getArrowLineHandleRefPair } from './arrow-line-common';\nimport { PlaitArrowLine } from '../../interfaces';\n\nconst debugKey = 'debug:plait:line-mirror';\nconst debugGenerator = createDebugGenerator(debugKey);\n\nexport const alignPoints = (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 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 {\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} from '@plait/core';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { getPointOnPolyline, getPointByVectorComponent, removeDuplicatePoints, getExtendPoint } from '@plait/common';\nimport {\n ArrowLineHandle,\n ArrowLineMarkerType,\n ArrowLineShape,\n ArrowLineText,\n PlaitArrowLine,\n PlaitDrawElement,\n PlaitShapeElement,\n StrokeStyle\n} from '../../interfaces';\nimport { getLineDashByElement, getStrokeColorByElement } 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 { alignPoints } 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';\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 strokeLineDash = getLineDashByElement(element);\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 let rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n const ref = getSnappingRef(board, hitElement, point);\n const connectionPoint = ref.connectorPoint || ref.edgePoint;\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 return {\n x: point[0] - text.width! / 2,\n y: point[1] - text.height! / 2,\n width: text.width!,\n height: text.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\nexport const handleArrowLineCreating = (\n board: PlaitBoard,\n lineShape: ArrowLineShape,\n sourcePoint: Point,\n movingPoint: Point,\n sourceElement: PlaitShapeElement | null,\n lineShapeG: SVGGElement\n) => {\n const hitElement = getSnappingShape(board, movingPoint);\n const targetConnection = hitElement ? getHitConnection(board, movingPoint, 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, movingPoint],\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 }\n );\n const linePoints = getArrowLinePoints(board, temporaryLineElement);\n const otherPoint = linePoints[0];\n temporaryLineElement.points[1] = alignPoints(otherPoint, movingPoint);\n lineGenerator.processDrawing(temporaryLineElement, lineShapeG);\n PlaitBoard.getElementActiveHost(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, idCreator } from '@plait/core';\nimport { DefaultTextProperty, DefaultBasicShapeProperty } from '../constants';\nimport { GeometryShapes, UMLSymbols, PlaitCommonGeometry } from '../interfaces';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { GeometryStyleOptions, getDefaultGeometryProperty, getTextShapeProperty } from './geometry';\nimport { PlaitTableCell } from '../interfaces/table';\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 memorizedLatest = getMemorizedLatestByPointer(shape);\n const cellCount = rows.length * columns.length;\n const defaultTexts = (getDefaultGeometryProperty(shape) as any)?.texts || [];\n const testHeights = defaultTexts.map((textItem: { text: string }) => {\n return getTextShapeProperty(board, textItem.text || DefaultTextProperty.text, memorizedLatest.textProperties['font-size']).height;\n });\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 textHeight: testHeights[index],\n text: {\n children: [\n {\n text: defaultTexts[index].text\n }\n ],\n align: defaultTexts[index].align\n }\n };\n });\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, ThemeColorMode, getSelectedElements, idCreator } 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 { createArrowLineElement } from './arrow-line/arrow-line-basic';\nimport { ArrowLineMarkerType, ArrowLineShape, PlaitDrawElement, PlaitShapeElement } from '../interfaces';\nimport { DefaultLineStyle } from '../constants/line';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { PlaitDrawShapeText, 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; textHeight?: number };\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 let textHeight = DefaultTextProperty.height;\n if (shape === BasicShapes.text) {\n textOptions = { autoSize: true };\n alignment = undefined;\n }\n textProperties = { ...textProperties };\n textProperties?.align && (alignment = textProperties?.align);\n textProperties?.textHeight && (textHeight = textProperties?.textHeight);\n delete textProperties?.align;\n delete textProperties?.textHeight;\n\n return {\n id: idCreator(),\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n textHeight,\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 createDefaultFlowchart = (point: Point) => {\n const decisionProperty = getDefaultFlowchartProperty(FlowchartSymbols.decision);\n const processProperty = getDefaultFlowchartProperty(FlowchartSymbols.process);\n const terminalProperty = getDefaultFlowchartProperty(FlowchartSymbols.terminal);\n\n const options = {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n };\n\n const lineOptions = {\n strokeWidth: DefaultLineStyle.strokeWidth\n };\n const startElement = createGeometryElement(\n FlowchartSymbols.terminal,\n getDefaultGeometryPoints(FlowchartSymbols.terminal, point),\n '开始',\n options\n );\n\n const processPoint1: Point = [point[0], point[1] + terminalProperty.height / 2 + 55 + processProperty.height / 2];\n const processElement1 = createGeometryElement(\n FlowchartSymbols.process,\n getDefaultGeometryPoints(FlowchartSymbols.process, processPoint1),\n '过程',\n options\n );\n\n const decisionPoint: Point = [processPoint1[0], processPoint1[1] + processProperty.height / 2 + 55 + decisionProperty.height / 2];\n const decisionElement = createGeometryElement(\n FlowchartSymbols.decision,\n getDefaultGeometryPoints(FlowchartSymbols.decision, decisionPoint),\n '判断',\n options\n );\n\n const processPoint2: Point = [decisionPoint[0] + decisionProperty.width / 2 + 75 + processProperty.width / 2, decisionPoint[1]];\n const processElement2 = createGeometryElement(\n FlowchartSymbols.process,\n getDefaultGeometryPoints(FlowchartSymbols.process, processPoint2),\n '过程',\n options\n );\n\n const endPoint: Point = [decisionPoint[0], decisionPoint[1] + decisionProperty.height / 2 + 95 + terminalProperty.height / 2];\n const endElement = createGeometryElement(\n FlowchartSymbols.terminal,\n getDefaultGeometryPoints(FlowchartSymbols.terminal, endPoint),\n '结束',\n options\n );\n\n const line1 = createArrowLineElement(\n ArrowLineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: startElement.id },\n { marker: ArrowLineMarkerType.arrow, connection: [0.5, 0], boundId: processElement1.id },\n [],\n lineOptions\n );\n\n const line2 = createArrowLineElement(\n ArrowLineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: processElement1.id },\n { marker: ArrowLineMarkerType.arrow, connection: [0.5, 0], boundId: decisionElement.id },\n [],\n lineOptions\n );\n\n const line3 = createArrowLineElement(\n ArrowLineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: decisionElement.id },\n { marker: ArrowLineMarkerType.arrow, connection: [0.5, 0], boundId: endElement.id },\n [\n {\n text: buildText('是'),\n position: 0.5,\n width: 14,\n height: 20\n }\n ],\n lineOptions\n );\n\n const line4 = createArrowLineElement(\n ArrowLineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: ArrowLineMarkerType.none, connection: [1, 0.5], boundId: decisionElement.id },\n { marker: ArrowLineMarkerType.arrow, connection: [0, 0.5], boundId: processElement2.id },\n [\n {\n text: buildText('否'),\n position: 0.5,\n width: 14,\n height: 20\n }\n ],\n lineOptions\n );\n\n const line5 = createArrowLineElement(\n ArrowLineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: processElement2.id },\n { marker: ArrowLineMarkerType.arrow, connection: [1, 0.5], boundId: endElement.id },\n [],\n lineOptions\n );\n\n return [startElement, processElement1, decisionElement, processElement2, endElement, line1, line2, line3, line4, line5];\n};\n\nexport const getAutoCompletePoints = (element: PlaitShapeElement) => {\n const AutoCompleteMargin = (12 + RESIZE_HANDLE_DIAMETER / 2) * 2;\n let rectangle = RectangleClient.getRectangleByPoints(element.points);\n rectangle = RectangleClient.inflate(rectangle, AutoCompleteMargin);\n return RectangleClient.getEdgeCenterPoints(rectangle);\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 = DefaultTextProperty.text, fontSize?: number | string) => {\n fontSize = fontSize ? Number(fontSize) : DEFAULT_FONT_SIZE;\n const textSize = measureElement(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 = (\n board: PlaitBoard,\n points: [Point, Point],\n text: string | Element = DefaultTextProperty.text,\n textHeight?: number\n) => {\n const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n textHeight = textHeight ? textHeight : RectangleClient.getRectangleByPoints(points).height;\n return createGeometryElement(BasicShapes.text, points, text, memorizedLatest.geometryProperties as GeometryStyleOptions, {\n ...memorizedLatest.textProperties,\n textHeight\n });\n};\n\nexport const createDefaultGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n const textHeight = getTextShapeProperty(board, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']).height;\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, textHeight }\n );\n }\n};\n\nexport const editText = (board: PlaitBoard, element: PlaitGeometry, text?: PlaitDrawShapeText) => {\n const textManage = text ? getTextManage(board, `${element.id}-${text.key}`)! : getFirstTextManage(element);\n if (textManage) {\n textManage.edit(() => {\n // delay to avoid blinking\n setTimeout(() => {\n rerenderGeometryActive(board, element);\n }, 200);\n });\n }\n\n rerenderGeometryActive(board, element);\n};\n\nexport const rerenderGeometryActive = (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n const activeGenerator = elementRef.getGenerator(ActiveGenerator.key);\n const selected = getSelectedElements(board).includes(element);\n activeGenerator.processDrawing(element, PlaitBoard.getElementActiveHost(board), { selected });\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, PlaitDrawElement, PlaitGeometry, PlaitSwimlane, PlaitVectorLine } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\nimport { PlaitTable, PlaitTableElement } from '../interfaces/table';\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 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 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], textHeight: number, path: Path) => {\n const normalizePoints = normalizeShapePoints(points);\n const element = PlaitNode.get(board, path);\n const newProperties = { points: normalizePoints, textHeight };\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 { PlaitGeometry, PlaitText } 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, textHeight: number) => {\n let points = element.points;\n let autoSize = (element as PlaitText).autoSize;\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] + textHeight]\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] + textHeight]\n ];\n } else {\n points = [points[0], [points[0][0] + newWidth + defaultSpace * 2, points[0][1] + textHeight]];\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, textHeight: number) => {\n const newElement = {\n text,\n textHeight,\n ...normalizePoints(board, element, width, textHeight)\n };\n\n const path = board.children.findIndex(child => child === element);\n\n Transforms.setNode(board, newElement, [path]);\n};\n\nexport const setTextSize = (board: PlaitBoard, element: PlaitGeometry, textWidth: number, textHeight: number) => {\n if ((element as PlaitText).autoSize) {\n const newElement = {\n textHeight,\n ...normalizePoints(board, element, textWidth, textHeight)\n };\n const isPointsEqual =\n Point.isEquals(element.points[0], newElement.points[0]) && Point.isEquals(element.points[1], newElement.points[1]);\n const isTextHeightEqual = Math.round(textHeight) === Math.round(element.textHeight!);\n if (!isPointsEqual || !isTextHeightEqual) {\n const path = board.children.findIndex(child => child === element);\n Transforms.setNode(board, newElement, [path]);\n }\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","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, 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.textHeight && !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 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) => {\n return PlaitBoard.isInPointer(board, getSwimlanePointers());\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 textHeight: 20\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 { PlaitDrawShapeText } from '../generators/text.generator';\n\nexport const setDrawShapeText = (board: PlaitBoard, element: PlaitMultipleTextGeometry, text: PlaitDrawShapeText) => {\n const newTexts = element.texts?.map(item => {\n if (item.key === text.key) {\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, cell.textHeight || 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 textHeight: textHeight,\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 && cell.textHeight) {\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 { setDrawShapeText } 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 setDrawShapeText,\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 {\n Ancestor,\n PlaitBoard,\n Point,\n RectangleClient,\n depthFirstRecursion,\n getIsRecursionFunc,\n rotatePoints,\n rotateAntiPointsByElement,\n ResizeCursorClass\n} 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';\nimport { PlaitDrawElement, PlaitGeometry, PlaitShapeElement } from '../../interfaces';\nimport { isHitEdgeOfShape, isInsideOfShape } from '../hit';\nimport { LINE_HIT_GEOMETRY_BUFFER, LINE_SNAPPING_BUFFER } from '../../constants/geometry';\nimport { getNearestPoint } from '../geometry';\nimport { getHitConnectorPoint } from '../arrow-line/arrow-line-basic';\nimport { getHitShape } from '../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} 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 } 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 elements.length > 1 && elements.every(el => PlaitDrawElement.isDrawElement(el));\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 || isFromCorner;\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.getElementActiveHost(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 if (isGeometryIncludeText(target)) {\n const { height: textHeight } = getFirstTextManage(target).getSize();\n DrawTransforms.resizeGeometry(board, points as [Point, Point], textHeight, path);\n } else {\n points = normalizeShapePoints(points as [Point, Point]);\n Transforms.setNode(board, { points }, path);\n }\n } else if (PlaitDrawElement.isArrowLine(target)) {\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 if (canResize() && !isSelectionMoving(board)) {\n handleG = createG();\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = needCustomActiveRectangle\n ? RectangleClient.getRectangleByPoints(resizeActivePoints!)\n : getRectangleByElements(board, elements, false);\n let corners = RectangleClient.getCornerPoints(boundingRectangle);\n const angle = getSelectionAngle(elements);\n if (angle) {\n const centerPoint = RectangleClient.getCenterPoint(boundingRectangle);\n corners = rotatePoints(corners, centerPoint, angle) as [Point, Point, Point, Point];\n }\n corners.forEach(corner => {\n const g = drawHandle(board, corner);\n handleG && handleG.append(g);\n });\n PlaitBoard.getElementActiveHost(board).append(handleG);\n }\n };\n\n board.drawSelectionRectangle = () => {\n if (needCustomActiveRectangle) {\n const rectangle = RectangleClient.getRectangleByPoints(resizeActivePoints!);\n return drawRectangle(board, RectangleClient.inflate(rectangle, 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","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 { 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 | PlaitDrawElement[]>,\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, 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 { 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 getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } 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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height * heightRatio - height) / 2\n };\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?: (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 { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width / 2;\n rectangle.x += width / 4;\n return rectangle;\n }\n});\n","import { RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const DiamondEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: RectangleClient.getEdgeCenterPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n rectangle.width = rectangle.width / 2;\n rectangle.x += rectangle.width / 2;\n return rectangle;\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 { getTextRectangle } from '../../utils';\n\nexport interface CreateEllipseOptions {\n draw?: (board: PlaitBoard, rectangle: RectangleClient, options: Options) => SVGGElement;\n getTextRectangle?: (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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\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 { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width * (1 - 0.32);\n rectangle.x += width * 0.32;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width / 2;\n rectangle.x += width / 4;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getStrokeWidthByElement } 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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 3) / 5;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 5,\n y: elementRectangle.y + elementRectangle.height / 5 + ((elementRectangle.height * 4) / 5 - height) / 2\n };\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const rectangle = getTextRectangle(element);\n const wider = elementRectangle.width > elementRectangle.height / 2 + 20;\n rectangle.width = wider ? elementRectangle.width - elementRectangle.height / 2 : rectangle.width;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const rectangle = getTextRectangle(element);\n const wider = elementRectangle.width > elementRectangle.height + 20;\n rectangle.width = wider ? elementRectangle.width - elementRectangle.height : rectangle.width;\n rectangle.x = wider ? elementRectangle.x + elementRectangle.height / 2: rectangle.x;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n rectangle.width = rectangle.width * 0.68;\n return rectangle;\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 { ShapeDefaultSpace } from '../../constants';\nimport { getRoundRectangleRadius } from './round-rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } 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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height * heightRatio - height) / 2\n };\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 { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getStrokeWidthByElement } 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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 2) / 3;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + (elementRectangle.height * 3) / 5 + ((elementRectangle.height * 2) / 5 - height) / 2\n };\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 { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = originWidth / 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 4,\n y: elementRectangle.y + (elementRectangle.height * 1) / 6 + ((elementRectangle.height * 4) / 5 - height) / 2\n };\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 { Point, RectangleClient } from '@plait/core';\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n 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 - height) / 2\n };\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 2) / 3;\n rectangle.x += width / 6;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 2) / 3;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + ((elementRectangle.height * 2) / 3 - 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 /\n 4} ${rectangle.height / 2}, 0, 0, 1,${rectangle.x + (rectangle.width * 3) / 4} ${rectangle.y + rectangle.height} L${\n rectangle.x\n } ${rectangle.y + rectangle.height} 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 { 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 ${rectangle.width /\n 10} ${rectangle.height / 2}, 0, 0, 0,${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height} L${rectangle.x +\n rectangle.width / 10} ${rectangle.y + rectangle.height}A ${rectangle.width / 10} ${rectangle.height /\n 2}, 0, 0, 1,${rectangle.x + rectangle.width / 10} ${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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\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 { 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${\n rectangle.x\n } Z M${rectangle.x + rectangle.width * 0.06} ${rectangle.y} L${rectangle.x + rectangle.width * 0.06} ${rectangle.y +\n rectangle.height} M${rectangle.x + rectangle.width - rectangle.width * 0.06} ${rectangle.y} L${rectangle.x +\n rectangle.width -\n 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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.06 * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.06,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n }\n};\n","import { Point, RectangleClient } from '@plait/core';\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n width: width > 0 ? width : 0,\n height: height,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - elementRectangle.height / 2 - height) / 2\n };\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setPathStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const CloudEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\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 const svgElement = rs.path(\n `M ${rectangle.x + divisionWidth} ${rectangle.y + divisionHeight}\n A ${xRadius} ${yRadius * 1.2} 0 1 1 ${rectangle.x + divisionWidth * 2} ${rectangle.y + divisionHeight / 2}\n A ${xRadius} ${yRadius} 0 1 1 ${rectangle.x + divisionWidth * 4.2} ${rectangle.y + divisionHeight / 2.2}\n A ${xRadius} ${yRadius} 0 1 1 ${rectangle.x + divisionWidth * 5.8} ${rectangle.y + divisionHeight}\n A ${xRadius} ${yRadius * 1.3} 0 1 1 ${rectangle.x + divisionWidth * 6} ${rectangle.y + divisionHeight * 2.2}\n A ${xRadius} ${yRadius * 1.2} 0 1 1 ${rectangle.x + divisionWidth * 5} ${rectangle.y + divisionHeight * 2.8}\n A ${xRadius} ${yRadius / 1.2} 0 1 1 ${rectangle.x + divisionWidth * 2.8} ${rectangle.y + divisionHeight * 2.8}\n A ${xRadius} ${yRadius} 0 1 1 ${rectangle.x + divisionWidth} ${rectangle.y + divisionHeight * 2.2}\n A ${xRadius} ${yRadius * 1.42} 0 1 1 ${rectangle.x + divisionWidth} ${rectangle.y + divisionHeight}\n Z`,\n { ...options, fillStyle: 'solid' }\n );\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 return getNearestPointBetweenPointAndSegments(point, CloudEngine.getCornerPoints(rectangle));\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = originWidth / 1.5;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + elementRectangle.height / 6 + ((elementRectangle.height * 4) / 6 - 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 { getUnitVectorByPointAndPoint } from '@plait/common';\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';\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 +\n rectangle.width} V${rectangle.y + rectangle.height - rectangle.height / 9}\n Q${rectangle.x + rectangle.width - rectangle.width / 4} ${rectangle.y +\n rectangle.height -\n (rectangle.height / 9) * 3}, ${rectangle.x + rectangle.width / 2} ${rectangle.y +\n rectangle.height -\n rectangle.height / 9} T${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9} \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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.06 * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.06,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\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 { getDirectionByPointOfRectangle, getDirectionFactor, getUnitVectorByPointAndPoint } from '@plait/common';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement } 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 +\n 5} V${rectangle.y + 5} H${rectangle.x + 10} V${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y +\n rectangle.height -\n rectangle.height / 9 -\n 10 -\n 3} L${rectangle.x + rectangle.width - 5} ${rectangle.y +\n rectangle.height -\n rectangle.height / 9 -\n 10 -\n 3 -\n 4} V${rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3}\n L${rectangle.x + rectangle.width - 10} ${rectangle.y +\n rectangle.height -\n rectangle.height / 9 -\n 5 -\n 3 -\n 4} V${rectangle.y + rectangle.height - rectangle.height / 9}\n \n Q${rectangle.x + rectangle.width - 10 - (rectangle.width - 10) / 4} ${rectangle.y +\n rectangle.height -\n (rectangle.height / 9) * 3}, ${rectangle.x + (rectangle.width - 10) / 2} ${rectangle.y +\n rectangle.height -\n rectangle.height / 9} T${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9}\n \n M${rectangle.x + 5} ${rectangle.y + 10} H${rectangle.x + rectangle.width - 10} V${rectangle.y +\n rectangle.height -\n rectangle.height / 9} \n \n M${rectangle.x + 10} ${rectangle.y + 5} H${rectangle.x + rectangle.width - 5} V${rectangle.y +\n rectangle.height -\n rectangle.height / 9 -\n 10 -\n 3}\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.06 * 2;\n return {\n height,\n width: width > 0 ? width - 10 : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.06,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\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 { 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 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} ${rectangle.y +\n rectangle.height * 0.15} \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} ${rectangle.y +\n rectangle.height -\n rectangle.height * 0.15}\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + elementRectangle.height * 0.3 + (elementRectangle.height - elementRectangle.height * 0.45 - height) / 2\n };\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 { 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 +\n rectangle.width -\n rectangle.width * 0.15} ${rectangle.y + rectangle.height} \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} ${rectangle.y +\n rectangle.height}\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - elementRectangle.width * 0.45 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + elementRectangle.width * 0.15 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - 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 { 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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - elementRectangle.width * 0.1 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + elementRectangle.width * 0.1 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + elementRectangle.height * 0.1 + (elementRectangle.height - elementRectangle.height * 0.1 - 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 { 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 NoteCurlyLeftEngine: 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.y} \n C${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y}, \n ${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height / 2}, \n ${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y + rectangle.height / 2}\n C${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height / 2}, \n ${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y + rectangle.height}, \n ${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height}`,\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - elementRectangle.width * 0.09 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - 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 { 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 NoteCurlyRightEngine: 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 C${rectangle.x + rectangle.width * 0.09} ${rectangle.y},\n ${rectangle.x} ${rectangle.y + rectangle.height / 2},\n ${rectangle.x + rectangle.width * 0.09} ${rectangle.y + rectangle.height / 2}\n C${rectangle.x} ${rectangle.y + rectangle.height / 2},\n ${rectangle.x + rectangle.width * 0.09} ${rectangle.y + rectangle.height},\n ${rectangle.x} ${rectangle.y + rectangle.height}`,\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - elementRectangle.width * 0.09 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + elementRectangle.width * 0.09 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - 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 { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } 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${rectangle.x +\n rectangle.width * 0.075}\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\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 { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement } 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 +\n rectangle.width -\n rectangle.width * 0.1} ${rectangle.y + rectangle.height}\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - strokeWidth * 2 - elementRectangle.width * 0.25;\n return {\n width: width > 0 ? width : 0,\n height: height,\n x: elementRectangle.x + strokeWidth + elementRectangle.width * 0.15,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\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 { PlaitDrawShapeText } 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';\n\nexport const TableEngine: ShapeEngine<PlaitTable, PlaitTableDrawOptions, PlaitDrawShapeText> = {\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(element: PlaitTable, options?: PlaitDrawShapeText) {\n try {\n if (options && options.key) {\n const cell = getCellWithPoints(options?.board!, element, options!.key);\n if (cell) {\n if (PlaitTableElement.isVerticalText(cell)) {\n return getVerticalTextRectangle(cell);\n } else {\n return getHorizontalTextRectangle(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(cell: PlaitTableCellWithPoints) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const height = cell.textHeight || 0;\n const width = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n width: width > 0 ? width : 0,\n height,\n x: cellRectangle.x - width / 2 + cellRectangle.width / 2,\n y: cellRectangle.y + (cellRectangle.height - height) / 2\n };\n}\n\nexport function getHorizontalTextRectangle(cell: PlaitTableCellWithPoints) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const height = cell.textHeight || 0;\n const width = cellRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: cellRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: cellRectangle.y + (cellRectangle.height - height) / 2\n };\n}\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n W,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\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 { getUnitVectorByPointAndPoint, rotateVector } from '@plait/common';\n\nexport const ActorEngine: 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 / 2} ${rectangle.y + rectangle.height / 4} \n A${rectangle.width / 3 / 2} ${rectangle.height / 4 / 2}, 0, 0, 1, ${rectangle.x + rectangle.width / 2} ${rectangle.y} \n A${rectangle.width / 3 / 2} ${rectangle.height / 4 / 2}, 0, 0, 1, ${rectangle.x + rectangle.width / 2} ${rectangle.y +\n rectangle.height / 4}\n V${rectangle.y + (rectangle.height / 4) * 3}\n M${rectangle.x + rectangle.width / 2} ${rectangle.y + rectangle.height / 2} H${rectangle.x}\n M${rectangle.x + rectangle.width / 2} ${rectangle.y + rectangle.height / 2} H${rectangle.x + rectangle.width}\n M${rectangle.x + rectangle.width / 2} ${rectangle.y + (rectangle.height / 4) * 3}\n L${rectangle.x + rectangle.width / 12} ${rectangle.y + rectangle.height}\n M${rectangle.x + rectangle.width / 2} ${rectangle.y + (rectangle.height / 4) * 3}\n L${rectangle.x + (rectangle.width / 12) * 11} ${rectangle.y + 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 let nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n\n if (nearestPoint[1] >= rectangle.y && nearestPoint[1] <= rectangle.y + rectangle.height / 4) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4 / 2];\n nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 3 / 2, rectangle.height / 4 / 2);\n return nearestPoint;\n }\n if (nearestPoint[1] >= rectangle.y + rectangle.height / 4 && nearestPoint[1] < rectangle.y + (rectangle.height / 4) * 3) {\n if (nearestPoint[1] === rectangle.x + rectangle.width / 2) {\n nearestPoint = getNearestPointBetweenPointAndSegments(point, [\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height / 4) * 3]\n ]);\n } else {\n nearestPoint = getNearestPointBetweenPointAndSegments(point, [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ]);\n }\n return nearestPoint;\n }\n nearestPoint = getNearestPointBetweenPointAndSegments(point, [\n [rectangle.x + rectangle.width / 12, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height / 4) * 3],\n [rectangle.x + (rectangle.width / 12) * 11, rectangle.y + rectangle.height]\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 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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const height = element.textHeight!;\n const width = elementRectangle.width + 40;\n return {\n 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 { 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${\n rectangle.x\n } Z M${rectangle.x + 40} ${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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = 40 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\nimport { MultipleTextGeometryCommonTextKeys, PlaitMultipleTextGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { PlaitDrawShapeText } from '../../generators/text.generator';\n\nexport const PackageEngine: ShapeEngine<PlaitMultipleTextGeometry, {}, PlaitDrawShapeText> = {\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 * 0.7} \n L${rectangle.x + rectangle.width * 0.8} ${rectangle.y + 25} \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 * 0.8}`,\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 let nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[0] > rectangle.x + rectangle.width * 0.7 && nearestPoint[1] <= rectangle.y + 25) {\n nearestPoint = getNearestPointBetweenPointAndSegments(\n point,\n [\n [rectangle.x + rectangle.width * 0.7, rectangle.y],\n [rectangle.x + rectangle.width * 0.8, rectangle.y + 25],\n [rectangle.x + rectangle.width, rectangle.y + 25]\n ],\n false\n );\n }\n return nearestPoint;\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(element: PlaitMultipleTextGeometry, options?: PlaitDrawShapeText) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const textHeight = element.texts?.find(item => item.key === options?.key)?.textHeight!;\n if (options?.key === MultipleTextGeometryCommonTextKeys.name) {\n const width = elementRectangle.width * 0.7 - ShapeDefaultSpace.rectangleAndText - strokeWidth;\n return {\n height: textHeight,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (25 - textHeight) / 2\n };\n }\n if (options?.key === MultipleTextGeometryCommonTextKeys.content) {\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height: textHeight,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + 25 + (elementRectangle.height - 25 - textHeight) / 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 { MultipleTextGeometryCommonTextKeys, 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 { PlaitDrawShapeText } from '../../generators/text.generator';\n\nexport const CombinedFragmentEngine: ShapeEngine<PlaitMultipleTextGeometry, {}, PlaitDrawShapeText> = {\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(element: PlaitMultipleTextGeometry, options?: PlaitDrawShapeText) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const textHeight = element.texts?.find(item => item.key === options?.key)?.textHeight!;\n if (options?.key === MultipleTextGeometryCommonTextKeys.name) {\n const width = elementRectangle.width / 3 - 8 - ShapeDefaultSpace.rectangleAndText - strokeWidth;\n return {\n height: textHeight,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (25 - textHeight) / 2\n };\n }\n if (options?.key === MultipleTextGeometryCommonTextKeys.content) {\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height: textHeight,\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 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\nexport const DeletionEngine: 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} ${rectangle.y + rectangle.height} \n M${rectangle.x + rectangle.width} ${rectangle.y} L${rectangle.x} ${rectangle.y + rectangle.height} \n `,\n { ...options, fillStyle: 'solid', 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 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 getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\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${\n rectangle.x\n } Z M${rectangle.x + rectangle.width * 0.125} ${rectangle.y} L${rectangle.x + rectangle.width * 0.125} ${rectangle.y +\n rectangle.height} M${rectangle.x + rectangle.width - rectangle.width * 0.125} ${rectangle.y} L${rectangle.x +\n rectangle.width -\n 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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width =\n elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.125 * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.125,\n y: elementRectangle.y + (elementRectangle.height - 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 { 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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth - 15;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\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\nexport const AssemblyEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `\n M${rectangle.x} ${rectangle.y + rectangle.height / 2} \n H${rectangle.x + rectangle.width * 0.3}\n A${rectangle.width * 0.13} ${rectangle.height * 0.285}, 0, 1, 1 ${rectangle.x +\n rectangle.width * 0.3 +\n rectangle.width * 0.26} ${rectangle.y + rectangle.height / 2}\n A${rectangle.width * 0.13} ${rectangle.height * 0.285}, 0, 1, 1 ${rectangle.x + rectangle.width * 0.3} ${rectangle.y +\n rectangle.height / 2}\n M${rectangle.x + rectangle.width * 0.3 + rectangle.width * 0.13} ${rectangle.y}\n A${rectangle.width * 0.233} ${rectangle.height / 2}, 0, 0, 1 ${rectangle.x +\n rectangle.width * 0.3 +\n rectangle.width * 0.13} ${rectangle.y + rectangle.height}\n M${rectangle.x + rectangle.width * 0.3 + rectangle.width * 0.13 + rectangle.width * 0.233} ${rectangle.y +\n rectangle.height / 2} H${rectangle.x + rectangle.width}\n `,\n {\n ...options,\n fillStyle: 'solid'\n }\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 getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[0] === rectangle.x + rectangle.width / 2) {\n return getNearestPointBetweenPointAndEllipse(\n point,\n [rectangle.x + rectangle.width * 0.43, rectangle.y + rectangle.height / 2],\n rectangle.width * 0.223,\n rectangle.height / 2\n );\n }\n return nearestPoint;\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 setStrokeLinecap\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\nexport const RequiredInterfaceEngine: 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 A${rectangle.width * 0.39} ${rectangle.height / 2}, 0, 0, 1 ${rectangle.x} ${rectangle.y + rectangle.height}\n M${rectangle.x + rectangle.width * 0.41} ${rectangle.y + rectangle.height / 2} H${rectangle.x + rectangle.width}\n `,\n {\n ...options,\n fillStyle: 'solid',\n fill: 'transparent'\n }\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","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\n\nexport const ProvidedInterfaceEngine: 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 / 2} \n H${rectangle.x + rectangle.width * 0.54}\n A${(rectangle.width * 0.46) / 2} ${rectangle.height / 2}, 0, 1, 1 ${rectangle.x + rectangle.width} ${rectangle.y +\n rectangle.height / 2}\n A${(rectangle.width * 0.46) / 2} ${rectangle.height / 2}, 0, 1, 1 ${rectangle.x + rectangle.width * 0.54} ${rectangle.y +\n rectangle.height / 2}\n `,\n {\n ...options,\n fillStyle: 'solid'\n }\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 getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\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 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 getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\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';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\n\nexport const ComponentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const boxSize = {\n with: rectangle.width > 70 ? 24 : rectangle.width * 0.2,\n height: rectangle.height - 28 - rectangle.height * 0.35 > 1 ? 14 : rectangle.height * 0.175\n };\n const shape = rs.path(\n `M${rectangle.x + 12} ${rectangle.y} \n v${rectangle.height * 0.175} \n h${boxSize.with / 2} v${boxSize.height} h${-boxSize.with} v${-boxSize.height} h${boxSize.with / 2}\n\n M${rectangle.x + 12} ${rectangle.y + rectangle.height * 0.175 + boxSize.height} \n\n v${rectangle.height - rectangle.height * 0.35 - boxSize.height * 2}\n h${boxSize.with / 2} v${boxSize.height} h${-boxSize.with} v${-boxSize.height} h${boxSize.with / 2}\n M${rectangle.x + 12} ${rectangle.y + rectangle.height - rectangle.height * 0.175} \n V${rectangle.y + rectangle.height}\n H${rectangle.x + rectangle.width}\n v${-rectangle.height}\n h${-(rectangle.width - 12)}\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 let nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[1] === rectangle.y + rectangle.height / 2) {\n nearestPoint = getNearestPointBetweenPointAndSegments(\n point,\n [\n [rectangle.x + 12, rectangle.y + rectangle.height * 0.175 + 14],\n [rectangle.x + 12, rectangle.y + rectangle.height - rectangle.height * 0.175 - 14]\n ],\n false\n );\n }\n return nearestPoint;\n },\n\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getUnitVectorByPointAndPoint(\n [rectangle.x + 12, rectangle.y + rectangle.height - rectangle.height * 0.175 - 14],\n connectionPoint\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],\n [rectangle.x + 12, rectangle.y + rectangle.height / 2]\n ] as [Point, Point, Point, Point];\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - 24 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + 24 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - 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';\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\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 return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getNearestPointBetweenPointAndSegments\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';\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n }\n};\n","import {\n BasicShapes,\n DrawShapes,\n EngineExtraData,\n FlowchartSymbols,\n PlaitGeometry,\n ShapeEngine,\n SwimlaneSymbols,\n TableSymbols,\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 EngineExtraData = EngineExtraData,\n K extends EngineExtraData = EngineExtraData\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 { StrokeStyle } from './element';\nimport { getConnectionPoint } from '../utils/arrow-line/arrow-line-common';\nimport { PlaitShapeElement } from '.';\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 width: number;\n height: 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 StrokeStyle {\n solid = 'solid',\n dashed = 'dashed',\n dotted = 'dotted'\n}\n\nexport 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 { StrokeStyle } from './element';\nimport { ArrowLineShape } from './arrow-line';\n\nexport enum VectorPenPointerType {\n vectorPen = 'vectorPen'\n}\n\nexport enum VectorLineShape {\n straight = ArrowLineShape.straight,\n curve = ArrowLineShape.curve\n}\n\nexport interface VectorPenRef {\n start?: Point;\n element?: PlaitVectorLine;\n path?: Path;\n shape: VectorLineShape;\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, PlaitBaseGeometry, 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';\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';\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 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 { BasicShapes, PlaitGeometry } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { getFillByElement, getLineDashByElement, getStrokeColorByElement } 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 strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(this.board, element);\n const fill = getFillByElement(this.board, element);\n const strokeLineDash = getLineDashByElement(element);\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, 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);\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(element);\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 { PlaitDrawShapeText, 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(\n board: PlaitBoard,\n element: T,\n text: ParagraphElement,\n options: TextGeneratorOptions<T>\n ) {\n super(board, element, [{ key: element.id, text: text, textHeight: element.textHeight }], options);\n }\n\n update(\n element: T,\n previousDrawShapeTexts: PlaitDrawShapeText[],\n currentDrawShapeTexts: PlaitDrawShapeText[],\n elementG: SVGElement\n ): void;\n update(element: T, previousText: ParagraphElement, currentText: ParagraphElement, elementG: SVGElement): void;\n update(\n element: T,\n previousText: ParagraphElement | PlaitDrawShapeText[],\n currentText: ParagraphElement | PlaitDrawShapeText[],\n elementG: SVGElement\n ) {\n if (!isMultipleTextGeometry((element as unknown) as PlaitCommonGeometry)) {\n super.update(\n element,\n [{ text: previousText as ParagraphElement, key: element.id, textHeight: element.textHeight }],\n [{ text: currentText as ParagraphElement, key: element.id, textHeight: element.textHeight }],\n elementG\n );\n }\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, canResize } from '@plait/common';\nimport { ArrowLineAutoCompleteGenerator } from './generators/arrow-line-auto-complete.generator';\nimport { getTextRectangle, isGeometryIncludeText, isMultipleTextGeometry, memorizeLatestText } from './utils';\nimport { PlaitDrawShapeText, TextGenerator } from './generators/text.generator';\nimport { SingleTextGenerator } from './generators/single-text.generator';\nimport { PlaitText } from './interfaces';\nimport { GeometryThreshold } from './constants';\nimport { getEngine } from './engines';\n\nexport class GeometryComponent extends CommonElementFlavour<PlaitCommonGeometry, PlaitBoard>\n implements OnContextChanged<PlaitCommonGeometry, PlaitBoard> {\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 = new ActiveGenerator<PlaitCommonGeometry>(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 canResize(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 }\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.getElementActiveHost(this.board), {\n selected: this.selected\n });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getElementActiveHost(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 const isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n if (value.element !== previous.element || isChangeTheme) {\n this.shapeGenerator.processDrawing(this.element as PlaitGeometry, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getElementActiveHost(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 const hasSameHandleState = this.activeGenerator.options.hasResizeHandle() === this.activeGenerator.hasResizeHandle;\n if (!hasSameSelected || !hasSameHandleState) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getElementActiveHost(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: PlaitDrawShapeText) => {\n if (textManageChangeData.newText) {\n if (isMultipleTextGeometry(element)) {\n DrawTransforms.setDrawShapeText(this.board, element, {\n key: text.key,\n text: textManageChangeData.newText,\n textHeight: textManageChangeData.height\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.element).width;\n const getRectangle = getEngine(this.element.shape).getTextRectangle;\n if (getRectangle) {\n width = getRectangle(this.element as PlaitGeometry).width;\n }\n return (this.element as PlaitText)?.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, 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 { PlaitBoard, Point, SELECTION_RECTANGLE_CLASS_NAME, createG, drawRectangle, getSelectedElements } 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 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 updatePoints.forEach(point => {\n const updateHandle = drawPrimaryHandle(this.board, point);\n activeG.appendChild(updateHandle);\n });\n const middlePoints = getMiddlePoints(this.board, element);\n if (!PlaitBoard.hasBeenTextEditing(this.board)) {\n for (let i = 0; i < middlePoints.length; i++) {\n const point = middlePoints[i];\n if (element.shape === ArrowLineShape.elbow && elbowNextRenderPoints.length) {\n const handleIndex = getHitPointIndex(middlePoints, 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 activeRectangle = this.board.getRectangle(element);\n if (activeRectangle) {\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, 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 extends CommonElementFlavour<PlaitArrowLine, PlaitBoard>\n implements OnContextChanged<PlaitArrowLine, PlaitBoard> {\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.initializeTextManagesByElement();\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.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n super.initialize();\n this.boundedElements = this.getBoundedElements();\n this.drawText();\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 this.initializeWeakMap();\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 isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n const linePoints = getArrowLinePoints(this.board, this.element);\n if (value.element !== previous.element || isChangeTheme) {\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(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) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(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.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n this.updateTextRectangle();\n return;\n }\n }\n\n initializeTextManagesByElement() {\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.initializeTextManages(textManages);\n }\n }\n\n drawText() {\n if (this.element.texts?.length) {\n this.getTextManages().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 width: newWidth,\n height: textManageChangeData.height\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.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.destroyTextManages();\n this.initializeTextManagesByElement();\n this.drawText();\n }\n }\n\n updateTextRectangle() {\n const textManages = this.getTextManages();\n textManages.forEach(manage => {\n manage.updateRectangle();\n });\n }\n\n destroy(): void {\n super.destroy();\n this.activeGenerator.destroy();\n this.destroyTextManages();\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 extends CommonElementFlavour<PlaitVectorLine, PlaitBoard>\n implements OnContextChanged<PlaitVectorLine, PlaitBoard> {\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 }\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.getElementActiveHost(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 this.initializeWeakMap();\n const isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n const linePoints = getVectorLinePoints(this.board, this.element)!;\n if (value.element !== previous.element || isChangeTheme) {\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n } else {\n const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate();\n if (needUpdate) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(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 { MultipleTextGeometryCommonTextKeys, PlaitDrawElement } from '../interfaces';\nimport { editText } from '../utils/geometry';\nimport { getHitMultipleGeometryText, 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);\n if (hitElement && PlaitDrawElement.isGeometry(hitElement)) {\n if (isMultipleTextGeometry(hitElement)) {\n const hitText =\n getHitMultipleGeometryText(hitElement, point) ||\n hitElement.texts.find(item => item.key.includes(MultipleTextGeometryCommonTextKeys.content)) ||\n hitElement.texts[0];\n editText(board, hitElement, hitText);\n } else {\n editText(board, hitElement);\n }\n }\n }\n dblClick(event);\n };\n return board;\n};\n","import { TableSymbols } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { PlaitElement, RectangleClient } from '@plait/core';\nimport { PlaitBaseTable } from '../interfaces/table';\nimport { getEngine } from '../engines';\nimport { getDrawDefaultStrokeColor, getFillByElement, getLineDashByElement, getStrokeColorByElement, 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 strokeLineDash = getLineDashByElement(element);\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(this.board, element);\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, Point, RectangleClient, createG, preventTouchMove, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { BasicShapes, GeometryShapes, PlaitCommonGeometry, PlaitDrawElement, PlaitGeometry } from '../interfaces';\nimport { GeometryShapeGenerator } from '../generators/geometry-shape.generator';\nimport {\n createDefaultGeometry,\n createTextElement,\n getDefaultGeometryPoints,\n getTextShapeProperty,\n getMemorizedLatestByPointer,\n getTextRectangle,\n insertElement\n} from '../utils';\nimport { DefaultTextProperty, 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 { NgZone } from '@angular/core';\nimport { getSnapResizingRef } from '../utils/snap-resizing';\nimport { TableGenerator } from '../generators/table.generator';\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\nconst 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\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, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(movingPoint, property.width, property.height)\n );\n temporaryElement = createTextElement(board, points);\n if (!fakeCreateTextRef) {\n const textManage = new TextManage(board, {\n getRectangle: () => {\n return getTextRectangle(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.getElementActiveHost(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 preventTouchMove(board, event, false);\n globalPointerUp(event);\n };\n\n return board;\n};\n\nexport const withGeometryCreateByDrawing = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, pointerUp, keyDown, keyUp } = 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 preventTouchMove(board, event, true);\n if (pointer === BasicShapes.text) {\n const memorizedLatest = getMemorizedLatestByPointer(pointer);\n const property = getTextShapeProperty(board, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(point, property.width, property.height));\n const textElement = createTextElement(board, points);\n insertElement(board, textElement);\n start = null;\n }\n }\n pointerDown(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.getElementActiveHost(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.getElementActiveHost(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 preventTouchMove(board, event, false);\n return;\n }\n pointerUp(event);\n };\n return board;\n};\n","import { PlaitBoard, Point, Transforms, getElementById, idCreator } from '@plait/core';\nimport { PlaitArrowLine, PlaitDrawElement, PlaitGeometry, PlaitShapeElement } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\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 elements.map(element => {\n if (PlaitDrawElement.isShapeElement(element)) {\n const points = element.points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);\n return { ...element, points } as PlaitGeometry;\n }\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 element;\n });\n};\n\nexport const insertClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n const idsMap: Record<string, string> = {};\n elements.forEach(element => {\n idsMap[element.id] = idCreator();\n });\n elements.forEach(element => {\n element.id = idsMap[element.id];\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 element.points = element.points.map(point => [startPoint[0] + point[0], startPoint[1] + point[1]]) as [Point, Point];\n Transforms.insertNode(board, element, [board.children.length]);\n });\n Transforms.addSelectionWithTemporaryElements(board, elements);\n};\n","import {\n ClipboardData,\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n WritableClipboardContext,\n WritableClipboardOperationType,\n WritableClipboardType,\n addClipboardContext,\n createClipboardContext,\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 if (!clipboardContext) {\n clipboardContext = createClipboardContext(WritableClipboardType.elements, elements, text);\n } else {\n clipboardContext = addClipboardContext(clipboardContext, {\n text,\n type: WritableClipboardType.elements,\n elements\n });\n }\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(shape => PlaitArrowLine.isBoundElementOfSource(line, shape) || PlaitArrowLine.isBoundElementOfTarget(line, shape))\n );\n};\n","import {\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n Point,\n Transforms,\n addSelectedElement,\n clearSelectedElement,\n createG,\n preventTouchMove,\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 { getSnappingShape } from '../utils';\n\nexport const withArrowLineCreateByDraw = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp } = 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.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 }\n preventTouchMove(board, event, true);\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 preventTouchMove(board, event, false);\n globalPointerUp(event);\n };\n\n return board;\n};\n","import { Path, PlaitBoard, Point, RectangleClient, Transforms, getSelectedElements, rotateAntiPointsByElement } from '@plait/core';\nimport { PlaitGeometry } from '../interfaces/geometry';\nimport {\n ResizeRef,\n ResizeState,\n WithResizeOptions,\n canResize,\n getFirstTextManage,\n getIndexByResizeHandle,\n isCornerHandle,\n normalizeShapePoints,\n withResize\n} from '@plait/common';\nimport { getSelectedGeometryElements, getSelectedImageElements } from '../utils/selected';\nimport { DrawTransforms } from '../transforms';\nimport { GeometryComponent } from '../geometry.component';\nimport { PlaitImage } from '../interfaces/image';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getHitRectangleResizeHandleRef } from '../utils/position/geometry';\nimport { getResizeOriginPointAndHandlePoint } from './with-draw-resize';\nimport { getSnapResizingRefOptions, getSnapResizingRef } from '../utils/snap-resizing';\nimport { isGeometryIncludeText } from '../utils';\n\nexport const withGeometryResize = (board: PlaitBoard) => {\n let snapG: SVGGElement | null;\n const options: WithResizeOptions<PlaitGeometry | PlaitImage> = {\n key: 'draw-geometry',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n const selectedElements = [...getSelectedGeometryElements(board), ...getSelectedImageElements(board)];\n if (selectedElements.length !== 1 || getSelectedElements(board).length !== 1) {\n return null;\n }\n const target = selectedElements[0];\n if (canResize(board, target)) {\n const rectangle = board.getRectangle(target) as RectangleClient;\n const handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, target.angle);\n if (handleRef) {\n return {\n element: target,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass,\n rectangle\n };\n }\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<PlaitGeometry | PlaitImage>, resizeState: ResizeState) => {\n resizeState.startPoint = rotateAntiPointsByElement(resizeState.startPoint, resizeRef.element) || resizeState.startPoint;\n resizeState.endPoint = rotateAntiPointsByElement(resizeState.endPoint, resizeRef.element) || resizeState.endPoint;\n snapG?.remove();\n const isFromCorner = isCornerHandle(board, resizeRef.handle);\n const isAspectRatio = resizeState.isShift || PlaitDrawElement.isImage(resizeRef.element);\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.getElementActiveHost(board).append(snapG);\n let points = resizeSnapRef.activePoints as [Point, Point];\n if (PlaitDrawElement.isGeometry(resizeRef.element) && isGeometryIncludeText(resizeRef.element)) {\n const { height: textHeight } = getFirstTextManage(resizeRef.element).getSize();\n DrawTransforms.resizeGeometry(board, points, textHeight, resizeRef.path as Path);\n } else {\n points = normalizeShapePoints(points);\n Transforms.setNode(board, { points }, resizeRef.path as Path);\n }\n },\n afterResize: (resizeRef: ResizeRef<PlaitGeometry | PlaitImage>) => {\n snapG?.remove();\n snapG = null;\n }\n };\n\n withResize<PlaitGeometry | PlaitImage>(board, options);\n\n return board;\n};\n","import { 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\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\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 let points: Point[] = [...resizeRef.element.points];\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 object = resizeRef.handle === LineResizeHandle.source ? source : target;\n points[handleIndex] = resizeState.endPoint;\n if (hitElement) {\n object.connection = getHitConnection(board, resizeState.endPoint, hitElement);\n object.boundId = hitElement.id;\n } else {\n object.connection = undefined;\n object.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 }\n\n if (!hitElement) {\n handleIndex = resizeRef.handle === LineResizeHandle.addHandle ? handleIndex + 1 : handleIndex;\n const drawPoints = getArrowLinePoints(board, resizeRef.element);\n const newPoints = [...points];\n newPoints[0] = drawPoints[0];\n newPoints[newPoints.length - 1] = drawPoints[drawPoints.length - 1];\n if (\n resizeRef.element.shape !== ArrowLineShape.elbow ||\n (resizeRef.element.shape === ArrowLineShape.elbow && newPoints.length === 2)\n ) {\n newPoints.forEach((point, index) => {\n if (index === handleIndex) return;\n if (points[handleIndex]) {\n points[handleIndex] = alignPoints(point, points[handleIndex]);\n }\n });\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\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.getElementActiveHost(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 PlaitElement,\n PlaitNode,\n getHitElementByPoint,\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';\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 ratio = getRatioByPoint(points, point);\n const textMemory = getMemorizedLatest('line')?.text || {};\n texts.push({\n text: buildText(LINE_TEXT, undefined, textMemory),\n position: ratio,\n width: 28,\n height: 20\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 }\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 shouldRemove = !text || (isFirstEdit && text === LINE_TEXT);\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 }\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.getElementActiveHost(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.getElementActiveHost(this.board), {\n selected: this.selected\n });\n } else {\n const hasSameSelected = value.selected === previous.selected;\n const hasSameHandleState =\n this.imageGenerator.activeGenerator &&\n this.imageGenerator.activeGenerator.options.hasResizeHandle() === this.imageGenerator.activeGenerator.hasResizeHandle;\n if (!hasSameSelected || !hasSameHandleState) {\n this.imageGenerator.setFocus(this.element, this.selected);\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(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 CursorClass,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n RgbaToHEX,\n drawCircle,\n hasValidAngle,\n isSelectionMoving,\n rotateAntiPointsByElement,\n setAngleForG,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getAutoCompletePoints, getHitIndexOfAutoCompletePoint, getSelectedDrawElements } from '../utils';\nimport { PRIMARY_COLOR, PlaitCommonElementRef } from '@plait/common';\nimport { LINE_AUTO_COMPLETE_HOVERED_DIAMETER, LINE_AUTO_COMPLETE_HOVERED_OPACITY } from '../constants/line';\nimport { ArrowLineAutoCompleteGenerator } from '../generators/arrow-line-auto-complete.generator';\n\nexport const withArrowLineAutoCompleteReaction = (board: PlaitBoard) => {\n const { pointerMove } = board;\n let reactionG: SVGGElement | null = null;\n board.pointerMove = (event: PointerEvent) => {\n reactionG?.remove();\n PlaitBoard.getBoardContainer(board).classList.remove(CursorClass.crosshair);\n const selectedElements = getSelectedDrawElements(board);\n const targetElement = selectedElements.length === 1 && selectedElements[0];\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (!PlaitBoard.isReadonly(board) && !isSelectionMoving(board) && targetElement && PlaitDrawElement.isShapeElement(targetElement)) {\n const points = getAutoCompletePoints(targetElement);\n const hitIndex = getHitIndexOfAutoCompletePoint(rotateAntiPointsByElement(movingPoint, targetElement) || movingPoint, points);\n const hitPoint = points[hitIndex];\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(targetElement);\n const lineAutoCompleteGenerator = ref.getGenerator<ArrowLineAutoCompleteGenerator>(ArrowLineAutoCompleteGenerator.key);\n lineAutoCompleteGenerator.recoverAutoCompleteG();\n if (hitPoint) {\n lineAutoCompleteGenerator?.removeAutoCompleteG(hitIndex);\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.getElementActiveHost(board).append(reactionG);\n PlaitBoard.getBoardContainer(board).classList.add(CursorClass.crosshair);\n if (hasValidAngle(targetElement)) {\n setAngleForG(reactionG, RectangleClient.getCenterPoint(board.getRectangle(targetElement)!), targetElement.angle!);\n }\n }\n }\n pointerMove(event);\n };\n\n return board;\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 toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement, PlaitShapeElement } 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';\n\nexport const WithArrowLineAutoCompletePluginKey = 'plait-arrow-line-auto-complete-plugin-key';\n\nexport interface ArrowLineAutoCompleteOptions {\n afterComplete: (element: PlaitArrowLine) => {};\n}\n\nexport const withArrowLineAutoComplete = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp } = 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 clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (!PlaitBoard.isReadonly(board) && targetElement && PlaitDrawElement.isShapeElement(targetElement)) {\n const points = getAutoCompletePoints(targetElement);\n const index = getHitIndexOfAutoCompletePoint(rotateAntiPointsByElement(clickPoint, targetElement) || clickPoint, points);\n const hitPoint = points[index];\n if (hitPoint) {\n temporaryDisableSelection(board as PlaitOptionsBoard);\n autoCompletePoint = hitPoint;\n sourceElement = targetElement;\n BoardTransforms.updatePointerType(board, ArrowLineShape.elbow);\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 (autoCompletePoint && sourceElement) {\n const distance = distanceBetweenPointAndPoint(\n ...(rotateAntiPointsByElement(movingPoint, sourceElement) || movingPoint),\n ...autoCompletePoint\n );\n if (distance > PRESS_AND_MOVE_BUFFER) {\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 }\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 }\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 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(points, movingPoint);\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 createG,\n getRectangleByElements,\n getSelectedElements,\n getSelectionAngle,\n isMainPointer,\n isSelectionMoving,\n preventTouchMove,\n rotatePoints,\n throttleRAF,\n toHostPoint,\n toViewBoxPoint,\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} from '@plait/core';\nimport { addRotating, removeRotating, drawHandle, drawRotateHandle, isRotating, 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 elements.length > 0 && elements.every(el => PlaitDrawElement.isGeometry(el) || PlaitDrawElement.isImage(el));\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 point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n const handleRectangle = getRotateHandleRectangle(boundingRectangle);\n const angle = getSelectionAngle(elements);\n const rotatedPoint = angle ? rotatePoints(point, RectangleClient.getCenterPoint(boundingRectangle), -angle) : point;\n if (handleRectangle && RectangleClient.isHit(RectangleClient.getRectangleByPoints([rotatedPoint, rotatedPoint]), handleRectangle)) {\n rotateRef = {\n elements: [...elements],\n startPoint: point\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 = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const selectionRectangle = getRectangleByElements(board, rotateRef.elements, false);\n const selectionCenterPoint = RectangleClient.getCenterPoint(selectionRectangle);\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 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 preventTouchMove(board, event, 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 rotateHandleG = drawRotateHandle(board, boundingRectangle);\n rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);\n if (rotateRef.angle) {\n setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingRectangle), rotateRef.angle);\n }\n } else {\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n rotateHandleG = drawRotateHandle(board, boundingRectangle);\n rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);\n setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingRectangle), getSelectionAngle(elements));\n }\n PlaitBoard.getElementActiveHost(board).append(rotateHandleG);\n }\n };\n\n board.drawSelectionRectangle = () => {\n if (needCustomActiveRectangle && rotateRef) {\n const rectangle = getRectangleByElements(board, rotateRef.elements, false);\n const rectangleG = drawRectangle(board, RectangleClient.inflate(rectangle, 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(rectangle), 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, canResize } from '@plait/common';\nimport { PlaitTable, PlaitTableBoard, PlaitTableCell, PlaitTableElement } from './interfaces/table';\nimport { getTextManage, PlaitDrawShapeText, TextGenerator } from './generators/text.generator';\nimport { TableGenerator } from './generators/table.generator';\nimport { DrawTransforms } from './transforms';\nimport { getCellWithPoints, 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 { 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 = new ActiveGenerator<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 canResize(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 }\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.getElementActiveHost(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 = getTextManage(this.board, item.id);\n if (textManage) {\n const engine = getEngine<PlaitTable>(TableSymbols.table);\n const rectangle = engine.getTextRectangle!(this.element, { key: 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[]): PlaitDrawShapeText[] {\n return cells\n .filter(item => isCellIncludeText(item))\n .map(item => {\n return {\n key: item.id,\n text: item.text!,\n textHeight: item.textHeight!,\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: PlaitDrawShapeText) => {\n const path = PlaitBoard.findPath(this.board, value);\n if (data.newText) {\n DrawTransforms.setTableText(this.board, path, text.key, data.newText, data.height);\n }\n data.operations && memorizeLatestText(value, data.operations);\n },\n getRenderRectangle: (value: PlaitTable, text: PlaitDrawShapeText) => {\n const cell = getCellWithPoints(this.board, value, text.key);\n if (PlaitTableElement.isVerticalText(cell)) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const width = cell.textHeight || 0;\n const height = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n width,\n height: height > 0 ? height : 0,\n x: cellRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: cellRectangle.y + (cellRectangle.height - height) / 2\n };\n } else {\n return getHorizontalTextRectangle(cell);\n }\n }\n });\n this.textGenerator.initialize();\n }\n\n onContextChanged(value: PlaitPluginElementContext<T, PlaitBoard>, previous: PlaitPluginElementContext<T, PlaitBoard>) {\n const isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n if (value.element !== previous.element || isChangeTheme) {\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.getElementActiveHost(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 hasSameHandleState = this.activeGenerator.options.hasResizeHandle() === this.activeGenerator.hasResizeHandle;\n const currentSelectedCells = getSelectedCells(value.element);\n if (!hasSameSelected || !hasSameHandleState || currentSelectedCells?.length) {\n this.activeGenerator.processDrawing(value.element, PlaitBoard.getElementActiveHost(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.getElementActiveHost(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 { getHitElementByPoint, PlaitBoard, Point, RectangleClient, Transforms, isSelectedElement } 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 { isSingleSelectElementByTable } from '../utils';\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 return true;\n },\n hitTest: (point: Point) => {\n const hitElement = getHitElementByPoint(board, point);\n if (hitElement && PlaitDrawElement.isElementByTable(hitElement)) {\n let rectangle = board.getRectangle(hitElement) as RectangleClient;\n let handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, hitElement.angle);\n if (handleRef) {\n const selectElement = isSelectedElement(board, hitElement);\n if (\n (selectElement && isSingleSelectElementByTable(board)) ||\n (!selectElement && !isCornerHandle(board, handleRef.handle))\n ) {\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.getElementActiveHost(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 isPolylineHitRectangle,\n toViewBoxPoint,\n toHostPoint,\n getHitElementByPoint,\n getSelectedElements,\n PlaitPointerType,\n isDragging,\n isMainPointer\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, isSingleSelectTable, setSelectedCells } from '../utils';\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) => {\n if (PlaitDrawElement.isElementByTable(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n return RectangleClient.isPointInRectangle(client, point);\n }\n return isHit(element, point);\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 return isPolylineHitRectangle(element.points, 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 && item.textHeight);\n if (cells?.length) {\n cell = cells.find(item => item.text && item.textHeight);\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 && hitCell.textHeight) {\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 && hitCell.textHeight) {\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, preventTouchMove, 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';\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\n const tableGenerator = new TableGenerator(board);\n const dragMode = isSwimlaneDndMode(board);\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as SwimlaneDrawSymbols;\n\n if (dragMode) {\n const points = getDefaultSwimlanePoints(pointer, movingPoint);\n temporaryElement = createDefaultSwimlane(pointer, points);\n tableGenerator.processDrawing(temporaryElement, swimlaneG);\n PlaitBoard.getElementActiveHost(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 preventTouchMove(board, event, false);\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.getElementActiveHost(board).append(snapG);\n points = normalizeShapePoints(resizeSnapRef.activePoints as [Point, Point], isShift);\n temporaryElement = createDefaultSwimlane(pointer, points);\n tableGenerator.processDrawing(temporaryElement, swimlaneG);\n PlaitBoard.getElementActiveHost(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 preventTouchMove(board, event, false);\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 Transforms,\n addSelectedElement,\n clearSelectedElement,\n createG,\n distanceBetweenPointAndPoint,\n getElementById,\n preventTouchMove,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitVectorLine, VectorLineShape, VectorPenPointerType, VectorPenRef } from '../interfaces';\nimport { DrawPointerType, LINE_HIT_GEOMETRY_BUFFER, getVectorPenPointers } from '../constants';\nimport { isDrawingMode } from '@plait/common';\nimport { vectorLineCreating } from '../utils';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport const withVectorPenCreateByDraw = (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 vectorPenRef: VectorPenRef | null;\n\n const vectorLineComplete = () => {\n if (vectorPenRef) {\n clearSelectedElement(board);\n if (vectorPenRef?.element) {\n addSelectedElement(board, vectorPenRef?.element);\n }\n }\n PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);\n lineShapeG?.remove();\n lineShapeG = null;\n vectorPenRef = null;\n temporaryElement = null;\n };\n\n board.pointerDown = (event: PointerEvent) => {\n const penPointers = getVectorPenPointers();\n const isVectorPenPointer = PlaitBoard.isInPointer(board, penPointers);\n\n if (isVectorPenPointer && !vectorPenRef) {\n vectorPenRef = { shape: VectorLineShape.straight };\n }\n\n if (!PlaitBoard.isReadonly(board) && vectorPenRef && isDrawingMode(board)) {\n let point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (!temporaryElement) {\n vectorPenRef = {\n ...vectorPenRef,\n start: point\n };\n } else {\n if (!vectorPenRef.element) {\n vectorPenRef.element = temporaryElement;\n Transforms.insertNode(board, vectorPenRef.element, [board.children.length]);\n } else {\n let points = vectorPenRef.element.points;\n const isClosed = distanceBetweenPointAndPoint(...point, ...vectorPenRef.start!) <= LINE_HIT_GEOMETRY_BUFFER;\n if (isClosed) {\n point = vectorPenRef.start!;\n }\n if (vectorPenRef.path) {\n const lastPoint = points[points.length - 1];\n const distance = distanceBetweenPointAndPoint(...point, ...lastPoint);\n if (distance > 2) {\n Transforms.setNode(board, { points: [...points, point] }, vectorPenRef.path);\n }\n }\n vectorPenRef.element = getElementById(board, vectorPenRef.element.id);\n if (isClosed) {\n vectorLineComplete();\n }\n }\n preventTouchMove(board, event, true);\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 const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (pointer !== VectorPenPointerType.vectorPen) {\n vectorLineComplete();\n }\n if (vectorPenRef && vectorPenRef.start) {\n let drawPoints = [vectorPenRef.start];\n if (vectorPenRef.element) {\n drawPoints = [vectorPenRef.start, ...vectorPenRef.element.points];\n const path = PlaitBoard.findPath(board, vectorPenRef.element!);\n vectorPenRef.path = path;\n }\n const distance = distanceBetweenPointAndPoint(...movingPoint, ...vectorPenRef.start);\n if (distance <= LINE_HIT_GEOMETRY_BUFFER) {\n movingPoint = vectorPenRef.start;\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, vectorPenRef.shape, drawPoints, movingPoint, lineShapeG);\n }\n pointerMove(event);\n };\n\n board.dblClick = (event: MouseEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n if (vectorPenRef) {\n if (vectorPenRef.path) {\n Transforms.setNode(board, { points: vectorPenRef?.element?.points }, vectorPenRef.path);\n }\n vectorLineComplete();\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\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) && vectorPenRef) {\n if (vectorPenRef.path) {\n Transforms.setNode(board, { points: vectorPenRef.element?.points }, vectorPenRef.path);\n }\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 { isClosedVectorLine } from './../utils/vector-line';\nimport { 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';\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 (isClosedVectorLine(resizeRef.element)) {\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 './with-arrow-line-create';\nimport { withGeometryResize } from './with-geometry-resize';\nimport { withArrowLineResize } from './with-arrow-line-resize';\nimport { withArrowLineBoundReaction } from './with-arrow-line-bound-reaction';\nimport { withArrowLineText } from './with-arrow-line-text';\nimport { ImageComponent } from '../image.component';\nimport { withArrowLineAutoCompleteReaction } from './with-arrow-line-auto-complete-reaction';\nimport { withArrowLineAutoComplete } from './with-arrow-line-auto-complete';\nimport { withArrowLineTextMove } from './with-arrow-line-text-move';\nimport { withDrawResize } from './with-draw-resize';\nimport { getDrawHitElement, 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 { withVectorPenCreateByDraw } from './with-vector-pen-create';\nimport { getVectorLinePoints } from '../utils/vector-line';\nimport { withVectorLineResize } from './with-vector-line-resize';\n\nexport const withDraw = (board: PlaitBoard) => {\n const {\n drawElement,\n getRectangle,\n isRectangleHit,\n isHit,\n isInsidePoint,\n isMovable,\n isAlign,\n getRelatedFragment,\n getHitElement\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) => {\n const result = isHitDrawElement(board, element, point);\n if (result !== null) {\n return result;\n }\n return isHit(element, point);\n };\n\n board.getHitElement = elements => {\n const isDrawElements = elements.every(item => PlaitDrawElement.isDrawElement(item));\n if (isDrawElements) {\n return getDrawHitElement(board, elements as PlaitDrawElement[]);\n }\n return getHitElement(elements);\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 withVectorPenCreateByDraw(\n withArrowLineAutoCompleteReaction(\n withArrowLineBoundReaction(\n withVectorLineResize(\n withArrowLineResize(\n withArrowLineTextMove(\n withArrowLineText(\n withGeometryResize(\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["debugKey","debugGenerator","getCenterPointsOnPolygon","heightRatio","getNearestPointBetweenPointAndRoundRectangle"],"mappings":"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"}
|
|
1
|
+
{"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/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/utils/shape.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/position/arrow-line.ts","../../../packages/draw/src/utils/multi-text-geometry.ts","../../../packages/draw/src/constants/line.ts","../../../packages/draw/src/generators/vector-line-generator.ts","../../../packages/draw/src/utils/vector-line.ts","../../../packages/draw/src/utils/hit.ts","../../../packages/draw/src/utils/common.ts","../../../packages/draw/src/utils/style/stroke.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/arrow-line/arrow-line-basic.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/line.ts","../../../packages/draw/src/utils/polygon.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/basic-shapes/cloud.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/generators/geometry-shape.generator.ts","../../../packages/draw/src/generators/arrow-line-auto-complete.generator.ts","../../../packages/draw/src/generators/single-text.generator.ts","../../../packages/draw/src/geometry.component.ts","../../../packages/draw/src/utils/position/line.ts","../../../packages/draw/src/generators/line-active.generator.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/generators/table.generator.ts","../../../packages/draw/src/plugins/with-geometry-create.ts","../../../packages/draw/src/utils/clipboard.ts","../../../packages/draw/src/plugins/with-draw-fragment.ts","../../../packages/draw/src/plugins/with-arrow-line-create.ts","../../../packages/draw/src/plugins/with-geometry-resize.ts","../../../packages/draw/src/plugins/with-arrow-line-resize.ts","../../../packages/draw/src/plugins/with-arrow-line-bound-reaction.ts","../../../packages/draw/src/plugins/with-arrow-line-text.ts","../../../packages/draw/src/image.component.ts","../../../packages/draw/src/plugins/with-arrow-line-auto-complete-reaction.ts","../../../packages/draw/src/plugins/with-arrow-line-auto-complete.ts","../../../packages/draw/src/plugins/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-pen-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 { StrokeStyle } from './element';\nimport { PlaitDrawShapeText } from '../generators/text.generator';\nimport { ParagraphElement } 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 MultipleTextGeometryCommonTextKeys {\n name = 'name',\n content = 'content'\n}\n\nexport type GeometryShapes = BasicShapes | FlowchartSymbols | UMLSymbols;\n\nexport type SwimlaneDirection = 'horizontal' | 'vertical';\n\nexport interface PlaitBaseGeometry extends PlaitElement {\n type: 'geometry';\n points: [Point, Point];\n shape: GeometryShapes;\n}\n\nexport interface PlaitCommonGeometry extends PlaitBaseGeometry {\n // node style attributes\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n\n angle?: number;\n opacity?: number;\n}\n\nexport interface PlaitMultipleTextGeometry extends PlaitCommonGeometry {\n texts: PlaitDrawShapeText[];\n}\n\nexport interface PlaitGeometry extends PlaitCommonGeometry {\n text?: ParagraphElement;\n textHeight?: number;\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 { EngineExtraData } from './engine';\nimport { ParagraphElement } from '@plait/common';\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 textHeight?: number;\n fill?: string;\n}\n\nexport interface PlaitTableDrawOptions extends EngineExtraData {\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","import { ACTIVE_STROKE_WIDTH, DEFAULT_COLOR } from '@plait/core';\nimport { BasicShapes, FlowchartSymbols, GeometryShapes, MultipleTextGeometryCommonTextKeys, 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 key: MultipleTextGeometryCommonTextKeys.name,\n text: '包名',\n align: Alignment.left\n },\n {\n key: MultipleTextGeometryCommonTextKeys.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 key: MultipleTextGeometryCommonTextKeys.name,\n text: 'Opt | Alt | Loop',\n align: Alignment.left\n },\n {\n key: MultipleTextGeometryCommonTextKeys.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(MultipleTextGeometryCommonTextKeys),\n [UMLSymbols.combinedFragment]: Object.keys(MultipleTextGeometryCommonTextKeys)\n};\n\nexport const LINE_HIT_GEOMETRY_BUFFER = 10;\n\nexport const LINE_SNAPPING_BUFFER = 6;\n\nexport const LINE_SNAPPING_CONNECTOR_BUFFER = 8;\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 VectorPenPointerType\n} from '../interfaces';\n\nexport type DrawPointerType =\n | BasicShapes\n | ArrowLineShape\n | FlowchartSymbols\n | SwimlaneDrawSymbols\n | TableSymbols\n | UMLSymbols\n | VectorPenPointerType;\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 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 getVectorPenPointers = () => {\n return Object.keys(VectorPenPointerType);\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","import { BasicShapes, PlaitDrawElement, PlaitShapeElement, TableSymbols } from '../interfaces';\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","import {\n ELEMENT_TO_TEXT_MANAGES,\n ParagraphElement,\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, EngineExtraData, PlaitGeometry } from '../interfaces';\nimport { getTextKey, getTextRectangle } from '../utils';\n\nexport interface PlaitDrawShapeText extends EngineExtraData {\n key: string;\n text: ParagraphElement;\n textHeight: number;\n board?: PlaitBoard;\n}\n\nexport interface TextGeneratorOptions<T> {\n onChange: (element: T, textChangeRef: TextManageChangeData, text: PlaitDrawShapeText) => void;\n getRenderRectangle?: (element: T, text: PlaitDrawShapeText) => RectangleClient;\n getMaxWidth?: () => number;\n}\n\nexport const KEY_TO_TEXT_MANAGE: WeakMap<PlaitBoard, { [key: string]: TextManage }> = new WeakMap();\n\nexport const setTextManage = (board: PlaitBoard, key: string, textManage: TextManage) => {\n const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n return KEY_TO_TEXT_MANAGE.set(board, { ...textManages, [key]: textManage });\n};\n\nexport const getTextManage = (board: PlaitBoard, key: string): TextManage => {\n const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n return textManages[key];\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: PlaitDrawShapeText[];\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: PlaitDrawShapeText[], 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, getTextKey(this.element, text), textManage);\n return textManage;\n });\n ELEMENT_TO_TEXT_MANAGES.set(this.element, 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, getTextKey(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: PlaitDrawShapeText[], currentDrawShapeTexts: PlaitDrawShapeText[], elementG: SVGElement) {\n this.element = element;\n ELEMENT_TO_TEXT_MANAGES.set(this.element, this.textManages);\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.key === value.key);\n });\n if (removedTexts.length) {\n removedTexts.forEach(item => {\n const textManage = getTextManage(this.board, item.key);\n const index = this.textManages.findIndex(value => value === textManage);\n if (index > -1 && item.text && item.textHeight) {\n this.textManages.splice(index, 1);\n }\n textManage?.destroy();\n deleteTextManage(this.board, item.key);\n });\n }\n currentDrawShapeTexts.forEach(drawShapeText => {\n if (drawShapeText.text) {\n let textManage = getTextManage(this.board, getTextKey(this.element, drawShapeText));\n if (!textManage) {\n textManage = this.createTextManage(drawShapeText, textPlugins);\n setTextManage(this.board, drawShapeText.key, 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: PlaitDrawShapeText, 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: PlaitDrawShapeText) {\n const getRectangle = getEngine<T>(this.shape).getTextRectangle;\n if (getRectangle) {\n return getRectangle(this.element, text);\n }\n return getTextRectangle(this.element);\n }\n\n getMaxWidth(text: PlaitDrawShapeText) {\n return this.options.getMaxWidth ? this.options.getMaxWidth() : this.getRectangle(text).width;\n }\n\n destroy() {\n this.textManages.forEach(manage => {\n manage.destroy();\n });\n this.textManages = [];\n ELEMENT_TO_TEXT_MANAGES.delete(this.element);\n this.texts.forEach(item => {\n deleteTextManage(this.board, item.key);\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 isSingleSelectElementByTable = (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, isSingleSelectElementByTable } 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, cell.id);\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 && cell.textHeight;\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['textHeight'] = TEXT_DEFAULT_HEIGHT;\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 (isSingleSelectElementByTable(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 { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitArrowLine } from '../../interfaces';\nimport { getPointOnPolyline } from '@plait/common';\nimport { getArrowLinePoints } from '../arrow-line/arrow-line-basic';\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 rectangle = {\n x: center[0] - text.width! / 2,\n y: center[1] - text.height! / 2,\n width: text.width!,\n height: text.height!\n };\n return RectangleClient.isHit(rectangle, RectangleClient.getRectangleByPoints([point, point]));\n });\n};\n","import { Point, RectangleClient, idCreator } from '@plait/core';\nimport { GeometryShapes, UMLSymbols, PlaitMultipleTextGeometry, PlaitCommonGeometry } from '../interfaces/geometry';\nimport { DefaultTextProperty, GEOMETRY_WITH_MULTIPLE_TEXT, MultipleTextGeometryTextKeys } from '../constants';\nimport { getEngine } from '../engines';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { PlaitDrawShapeText } 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: PlaitCommonGeometry): 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: PlaitDrawShapeText[] = 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) => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n const textProperties = { ...memorizedLatest.textProperties };\n const alignment = textProperties?.align;\n const textHeight = textProperties?.textHeight || DefaultTextProperty.height;\n delete textProperties?.align;\n delete textProperties?.textHeight;\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 key: textKey,\n text: buildText(text?.text || '', alignment || text?.align || Alignment.center, textProperties),\n textHeight: textHeight\n };\n });\n};\n\nexport const getHitMultipleGeometryText = (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!(element, { key: text.key });\n return RectangleClient.isHit(rectangle, textRectangle);\n });\n }\n return hitText;\n};\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 = 0.6;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_OPACITY = 0.8;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_DIAMETER = 10;\n\nexport const LINE_ALIGN_TOLERANCE = 3;\n\nexport const LINE_TEXT = '文本';\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, StrokeStyle, VectorLineShape } from '../interfaces';\nimport { getLineMemorizedLatest } from './memorize';\nimport { DefaultLineStyle } from '../constants/line';\nimport { alignPoints } from './arrow-line';\nimport { getStrokeWidthByElement } from './common';\nimport { getFillByElement, getLineDashByElement, getStrokeColorByElement } from './style';\nimport { VectorLineShapeGenerator } from '../generators/vector-line-generator';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { removeDuplicatePoints } from '@plait/common';\n\nexport const isClosedVectorLine = (vectorLine: PlaitVectorLine) => {\n const points = vectorLine.points;\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 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] = alignPoints(otherPoint, movingPoint);\n lineGenerator.processDrawing(temporaryLineElement, lineShapeG);\n PlaitBoard.getElementActiveHost(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 strokeLineDash = getLineDashByElement(element);\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 {\n PlaitElement,\n RectangleClient,\n Selection,\n PlaitBoard,\n isPolylineHitRectangle,\n Point,\n distanceBetweenPointAndSegments,\n distanceBetweenPointAndPoint,\n HIT_DISTANCE_BUFFER,\n rotatePointsByElement,\n rotateAntiPointsByElement,\n isPointInPolygon\n} from '@plait/core';\nimport { PlaitArrowLine, PlaitCommonGeometry, PlaitDrawElement, PlaitGeometry, PlaitShapeElement, PlaitVectorLine } 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, isDrawElementClosed } from './common';\nimport { isMultipleTextGeometry } from './multi-text-geometry';\nimport { isFilled, sortElementsByArea } from '@plait/common';\nimport { getVectorLinePoints, isClosedVectorLine } from './vector-line';\n\nexport const isTextExceedingBounds = (geometry: PlaitGeometry) => {\n const client = RectangleClient.getRectangleByPoints(geometry.points);\n if (geometry.textHeight && geometry.textHeight > client.height) {\n return true;\n }\n return false;\n};\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(pathPoints, point);\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 (isClosedVectorLine(element)) {\n return isPointInPolygon(point, points) || isHitPolyLine(points, point);\n } else {\n return isHitPolyLine(points, point);\n }\n};\n\nexport const isRectangleHitElementText = (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!(element, { key: item.key });\n const rotatedCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(textClient), element) || RectangleClient.getCornerPoints(textClient);\n return isPolylineHitRectangle(rotatedCornerPoints, rectangle);\n });\n } else {\n const textClient = engine.getTextRectangle ? engine.getTextRectangle(element) : getTextRectangle(element);\n const rotatedCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(textClient), element) || RectangleClient.getCornerPoints(textClient);\n return isPolylineHitRectangle(rotatedCornerPoints, rectangle);\n }\n};\n\nexport const isHitElementText = (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!(element, { key: item.key });\n return RectangleClient.isPointInRectangle(textClient, point);\n });\n } else {\n const textClient = engine.getTextRectangle ? engine.getTextRectangle(element) : getTextRectangle(element);\n return RectangleClient.isPointInRectangle(textClient, point);\n }\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 client = RectangleClient.getRectangleByPoints(element.points);\n let rotatedCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(client), element) || RectangleClient.getCornerPoints(client);\n const isHitElement = isPolylineHitRectangle(rotatedCornerPoints, rangeRectangle);\n if (isHitElement) {\n return isHitElement;\n }\n return isRectangleHitElementText(element, rangeRectangle);\n }\n\n if (PlaitDrawElement.isImage(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n const rotatedCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(client), element) || RectangleClient.getCornerPoints(client);\n return isPolylineHitRectangle(rotatedCornerPoints, rangeRectangle);\n }\n\n if (PlaitDrawElement.isArrowLine(element)) {\n const points = getArrowLinePoints(board, element);\n return isPolylineHitRectangle(points, rangeRectangle);\n }\n\n if (PlaitDrawElement.isVectorLine(element)) {\n const points = getVectorLinePoints(board, element)!;\n return isPolylineHitRectangle(points, rangeRectangle, false);\n }\n\n return null;\n};\n\nexport const getDrawHitElement = (board: PlaitBoard, elements: PlaitDrawElement[]) => {\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 element = getFirstTextOrLineElement(newElements);\n if (element) {\n return element;\n }\n const sortElements = sortElementsByArea(board, newElements, 'asc');\n return sortElements[0];\n};\n\nexport const getFirstFilledDrawElement = (board: PlaitBoard, elements: PlaitDrawElement[]) => {\n let filledElement: PlaitGeometry | null = null;\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (isDrawElementClosed(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 getFirstTextOrLineElement = (elements: PlaitDrawElement[]) => {\n const texts = elements.filter(item => PlaitDrawElement.isText(item));\n if (texts.length) {\n return texts[0];\n }\n const lines = elements.filter(item => PlaitDrawElement.isArrowLine(item));\n if (lines.length) {\n return lines[0];\n }\n return null;\n};\n\nexport const isHitDrawElement = (board: PlaitBoard, element: PlaitElement, point: Point) => {\n const rectangle = board.getRectangle(element);\n point = rotateAntiPointsByElement(point, element) || point;\n if (PlaitDrawElement.isGeometry(element)) {\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(element);\n return RectangleClient.isPointInRectangle(textClient, point);\n }\n const isHitText = isHitElementText(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(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(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 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 { DefaultDrawStyle, LINE_HIT_GEOMETRY_BUFFER, LINE_SNAPPING_BUFFER, ShapeDefaultSpace } from '../constants';\nimport {\n DrawShapes,\n EngineExtraData,\n MultipleTextGeometryCommonTextKeys,\n PlaitBaseGeometry,\n PlaitCommonGeometry,\n PlaitDrawElement,\n PlaitGeometry,\n PlaitMultipleTextGeometry,\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 { PlaitDrawShapeText } from '../generators/text.generator';\nimport { isClosedVectorLine } from '.';\n\nexport const getTextRectangle = <T extends PlaitElement = PlaitGeometry>(element: T) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - 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 isDrawElementClosed = (element: PlaitDrawElement) => {\n if (PlaitDrawElement.isText(element) || PlaitDrawElement.isArrowLine(element) || PlaitDrawElement.isImage(element)) {\n return false;\n }\n\n if (PlaitDrawElement.isVectorLine(element)) {\n return isClosedVectorLine(element);\n }\n\n if (PlaitDrawElement.isGeometry(element)) {\n return isGeometryClosed(element);\n }\n\n return true;\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(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(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: EngineExtraData\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: EngineExtraData = {};\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: isDrawElementClosed(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 = <T extends PlaitElement = PlaitGeometry>(element: T, text: PlaitDrawShapeText) => {\n if (isMultipleTextGeometry((element as unknown) as PlaitCommonGeometry)) {\n return `${element.id}-${text.key}`;\n } else {\n return text.key;\n }\n};\n\nexport const getGeometryAlign = (board: PlaitBoard, element: PlaitCommonGeometry | PlaitBaseTable) => {\n if (isMultipleTextGeometry(element as PlaitCommonGeometry)) {\n const drawShapeText = (element as PlaitMultipleTextGeometry).texts.find(item =>\n item.key.includes(MultipleTextGeometryCommonTextKeys.content)\n );\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","import { PlaitDrawElement, StrokeStyle } from '../../interfaces';\nimport { DefaultDrawStyle } from '../../constants';\nimport { PlaitBoard, PlaitElement } from '@plait/core';\nimport { getDrawDefaultStrokeColor, getFlowchartDefaultFill } from '../geometry';\nimport { getStrokeWidthByElement, isDrawElementClosed } from '../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) && isDrawElementClosed(element as PlaitDrawElement)\n ? getFlowchartDefaultFill(board.theme.themeColorMode)\n : DefaultDrawStyle.fill;\n const fill = element.fill || defaultFill;\n return fill;\n};\n\nexport const getLineDashByElement = (element: PlaitElement) => {\n switch (element.strokeStyle) {\n case StrokeStyle.dashed:\n return [8, 8 + getStrokeWidthByElement(element)];\n case StrokeStyle.dotted:\n return [2, 4 + getStrokeWidthByElement(element)];\n default:\n return undefined;\n }\n};\n\nexport const getStrokeStyleByElement = (element: PlaitElement) => {\n return element.strokeStyle || StrokeStyle.solid;\n};\n","import { ElbowLineRouteOptions, ResizeState, generateElbowLineRoute, removeDuplicatePoints, simplifyOrthogonalPoints } from '@plait/common';\nimport { PlaitBoard, Point, RectangleClient, createDebugGenerator } from '@plait/core';\nimport { LINE_ALIGN_TOLERANCE } from '../../constants/line';\nimport { getElbowLineRouteOptions, getArrowLineHandleRefPair } from './arrow-line-common';\nimport { PlaitArrowLine } from '../../interfaces';\n\nconst debugKey = 'debug:plait:line-mirror';\nconst debugGenerator = createDebugGenerator(debugKey);\n\nexport const alignPoints = (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 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 {\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} from '@plait/core';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { getPointOnPolyline, getPointByVectorComponent, removeDuplicatePoints, getExtendPoint } from '@plait/common';\nimport {\n ArrowLineHandle,\n ArrowLineMarkerType,\n ArrowLineShape,\n ArrowLineText,\n PlaitArrowLine,\n PlaitDrawElement,\n PlaitShapeElement,\n StrokeStyle\n} from '../../interfaces';\nimport { getLineDashByElement, getStrokeColorByElement } 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 { alignPoints } 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';\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 strokeLineDash = getLineDashByElement(element);\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 let rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n const ref = getSnappingRef(board, hitElement, point);\n const connectionPoint = ref.connectorPoint || ref.edgePoint;\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 return {\n x: point[0] - text.width! / 2,\n y: point[1] - text.height! / 2,\n width: text.width!,\n height: text.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\nexport const handleArrowLineCreating = (\n board: PlaitBoard,\n lineShape: ArrowLineShape,\n sourcePoint: Point,\n movingPoint: Point,\n sourceElement: PlaitShapeElement | null,\n lineShapeG: SVGGElement\n) => {\n const hitElement = getSnappingShape(board, movingPoint);\n const targetConnection = hitElement ? getHitConnection(board, movingPoint, 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, movingPoint],\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 }\n );\n const linePoints = getArrowLinePoints(board, temporaryLineElement);\n const otherPoint = linePoints[0];\n temporaryLineElement.points[1] = alignPoints(otherPoint, movingPoint);\n lineGenerator.processDrawing(temporaryLineElement, lineShapeG);\n PlaitBoard.getElementActiveHost(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, idCreator } from '@plait/core';\nimport { DefaultTextProperty, DefaultBasicShapeProperty } from '../constants';\nimport { GeometryShapes, UMLSymbols, PlaitCommonGeometry } from '../interfaces';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { GeometryStyleOptions, getDefaultGeometryProperty, getTextShapeProperty } from './geometry';\nimport { PlaitTableCell } from '../interfaces/table';\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 memorizedLatest = getMemorizedLatestByPointer(shape);\n const cellCount = rows.length * columns.length;\n const defaultTexts = (getDefaultGeometryProperty(shape) as any)?.texts || [];\n const testHeights = defaultTexts.map((textItem: { text: string }) => {\n return getTextShapeProperty(board, textItem.text || DefaultTextProperty.text, memorizedLatest.textProperties['font-size']).height;\n });\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 textHeight: testHeights[index],\n text: {\n children: [\n {\n text: defaultTexts[index].text\n }\n ],\n align: defaultTexts[index].align\n }\n };\n });\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, ThemeColorMode, getSelectedElements, idCreator } 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 { createArrowLineElement } from './arrow-line/arrow-line-basic';\nimport { ArrowLineMarkerType, ArrowLineShape, PlaitDrawElement, PlaitShapeElement } from '../interfaces';\nimport { DefaultLineStyle } from '../constants/line';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { PlaitDrawShapeText, 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; textHeight?: number };\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 let textHeight = DefaultTextProperty.height;\n if (shape === BasicShapes.text) {\n textOptions = { autoSize: true };\n alignment = undefined;\n }\n textProperties = { ...textProperties };\n textProperties?.align && (alignment = textProperties?.align);\n textProperties?.textHeight && (textHeight = textProperties?.textHeight);\n delete textProperties?.align;\n delete textProperties?.textHeight;\n\n return {\n id: idCreator(),\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n textHeight,\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 createDefaultFlowchart = (point: Point) => {\n const decisionProperty = getDefaultFlowchartProperty(FlowchartSymbols.decision);\n const processProperty = getDefaultFlowchartProperty(FlowchartSymbols.process);\n const terminalProperty = getDefaultFlowchartProperty(FlowchartSymbols.terminal);\n\n const options = {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n };\n\n const lineOptions = {\n strokeWidth: DefaultLineStyle.strokeWidth\n };\n const startElement = createGeometryElement(\n FlowchartSymbols.terminal,\n getDefaultGeometryPoints(FlowchartSymbols.terminal, point),\n '开始',\n options\n );\n\n const processPoint1: Point = [point[0], point[1] + terminalProperty.height / 2 + 55 + processProperty.height / 2];\n const processElement1 = createGeometryElement(\n FlowchartSymbols.process,\n getDefaultGeometryPoints(FlowchartSymbols.process, processPoint1),\n '过程',\n options\n );\n\n const decisionPoint: Point = [processPoint1[0], processPoint1[1] + processProperty.height / 2 + 55 + decisionProperty.height / 2];\n const decisionElement = createGeometryElement(\n FlowchartSymbols.decision,\n getDefaultGeometryPoints(FlowchartSymbols.decision, decisionPoint),\n '判断',\n options\n );\n\n const processPoint2: Point = [decisionPoint[0] + decisionProperty.width / 2 + 75 + processProperty.width / 2, decisionPoint[1]];\n const processElement2 = createGeometryElement(\n FlowchartSymbols.process,\n getDefaultGeometryPoints(FlowchartSymbols.process, processPoint2),\n '过程',\n options\n );\n\n const endPoint: Point = [decisionPoint[0], decisionPoint[1] + decisionProperty.height / 2 + 95 + terminalProperty.height / 2];\n const endElement = createGeometryElement(\n FlowchartSymbols.terminal,\n getDefaultGeometryPoints(FlowchartSymbols.terminal, endPoint),\n '结束',\n options\n );\n\n const line1 = createArrowLineElement(\n ArrowLineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: startElement.id },\n { marker: ArrowLineMarkerType.arrow, connection: [0.5, 0], boundId: processElement1.id },\n [],\n lineOptions\n );\n\n const line2 = createArrowLineElement(\n ArrowLineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: processElement1.id },\n { marker: ArrowLineMarkerType.arrow, connection: [0.5, 0], boundId: decisionElement.id },\n [],\n lineOptions\n );\n\n const line3 = createArrowLineElement(\n ArrowLineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: decisionElement.id },\n { marker: ArrowLineMarkerType.arrow, connection: [0.5, 0], boundId: endElement.id },\n [\n {\n text: buildText('是'),\n position: 0.5,\n width: 14,\n height: 20\n }\n ],\n lineOptions\n );\n\n const line4 = createArrowLineElement(\n ArrowLineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: ArrowLineMarkerType.none, connection: [1, 0.5], boundId: decisionElement.id },\n { marker: ArrowLineMarkerType.arrow, connection: [0, 0.5], boundId: processElement2.id },\n [\n {\n text: buildText('否'),\n position: 0.5,\n width: 14,\n height: 20\n }\n ],\n lineOptions\n );\n\n const line5 = createArrowLineElement(\n ArrowLineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: processElement2.id },\n { marker: ArrowLineMarkerType.arrow, connection: [1, 0.5], boundId: endElement.id },\n [],\n lineOptions\n );\n\n return [startElement, processElement1, decisionElement, processElement2, endElement, line1, line2, line3, line4, line5];\n};\n\nexport const getAutoCompletePoints = (element: PlaitShapeElement) => {\n const AutoCompleteMargin = (12 + RESIZE_HANDLE_DIAMETER / 2) * 2;\n let rectangle = RectangleClient.getRectangleByPoints(element.points);\n rectangle = RectangleClient.inflate(rectangle, AutoCompleteMargin);\n return RectangleClient.getEdgeCenterPoints(rectangle);\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 = DefaultTextProperty.text, fontSize?: number | string) => {\n fontSize = fontSize ? Number(fontSize) : DEFAULT_FONT_SIZE;\n const textSize = measureElement(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 = (\n board: PlaitBoard,\n points: [Point, Point],\n text: string | Element = DefaultTextProperty.text,\n textHeight?: number\n) => {\n const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n textHeight = textHeight ? textHeight : RectangleClient.getRectangleByPoints(points).height;\n return createGeometryElement(BasicShapes.text, points, text, memorizedLatest.geometryProperties as GeometryStyleOptions, {\n ...memorizedLatest.textProperties,\n textHeight\n });\n};\n\nexport const createDefaultGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n const textHeight = getTextShapeProperty(board, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']).height;\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, textHeight }\n );\n }\n};\n\nexport const editText = (board: PlaitBoard, element: PlaitGeometry, text?: PlaitDrawShapeText) => {\n const textManage = text ? getTextManage(board, `${element.id}-${text.key}`)! : getFirstTextManage(element);\n if (textManage) {\n textManage.edit(() => {\n // delay to avoid blinking\n setTimeout(() => {\n rerenderGeometryActive(board, element);\n }, 200);\n });\n }\n\n rerenderGeometryActive(board, element);\n};\n\nexport const rerenderGeometryActive = (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n const activeGenerator = elementRef.getGenerator(ActiveGenerator.key);\n const selected = getSelectedElements(board).includes(element);\n activeGenerator.processDrawing(element, PlaitBoard.getElementActiveHost(board), { selected });\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, PlaitDrawElement, PlaitGeometry, PlaitSwimlane, PlaitVectorLine } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\nimport { PlaitTable, PlaitTableElement } from '../interfaces/table';\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 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 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], textHeight: number, path: Path) => {\n const normalizePoints = normalizeShapePoints(points);\n const element = PlaitNode.get(board, path);\n const newProperties = { points: normalizePoints, textHeight };\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 { PlaitGeometry, PlaitText } 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, textHeight: number) => {\n let points = element.points;\n let autoSize = (element as PlaitText).autoSize;\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] + textHeight]\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] + textHeight]\n ];\n } else {\n points = [points[0], [points[0][0] + newWidth + defaultSpace * 2, points[0][1] + textHeight]];\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, textHeight: number) => {\n const newElement = {\n text,\n textHeight,\n ...normalizePoints(board, element, width, textHeight)\n };\n\n const path = board.children.findIndex(child => child === element);\n\n Transforms.setNode(board, newElement, [path]);\n};\n\nexport const setTextSize = (board: PlaitBoard, element: PlaitGeometry, textWidth: number, textHeight: number) => {\n if ((element as PlaitText).autoSize) {\n const newElement = {\n textHeight,\n ...normalizePoints(board, element, textWidth, textHeight)\n };\n const isPointsEqual =\n Point.isEquals(element.points[0], newElement.points[0]) && Point.isEquals(element.points[1], newElement.points[1]);\n const isTextHeightEqual = Math.round(textHeight) === Math.round(element.textHeight!);\n if (!isPointsEqual || !isTextHeightEqual) {\n const path = board.children.findIndex(child => child === element);\n Transforms.setNode(board, newElement, [path]);\n }\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","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, 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.textHeight && !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 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) => {\n return PlaitBoard.isInPointer(board, getSwimlanePointers());\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 textHeight: 20\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 { PlaitDrawShapeText } from '../generators/text.generator';\n\nexport const setDrawShapeText = (board: PlaitBoard, element: PlaitMultipleTextGeometry, text: PlaitDrawShapeText) => {\n const newTexts = element.texts?.map(item => {\n if (item.key === text.key) {\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, cell.textHeight || 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 textHeight: textHeight,\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 && cell.textHeight) {\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 { setDrawShapeText } 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 setDrawShapeText,\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 {\n Ancestor,\n PlaitBoard,\n Point,\n RectangleClient,\n depthFirstRecursion,\n getIsRecursionFunc,\n rotatePoints,\n rotateAntiPointsByElement,\n ResizeCursorClass\n} 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';\nimport { PlaitDrawElement, PlaitGeometry, PlaitShapeElement } from '../../interfaces';\nimport { isHitEdgeOfShape, isInsideOfShape } from '../hit';\nimport { LINE_HIT_GEOMETRY_BUFFER, LINE_SNAPPING_BUFFER } from '../../constants/geometry';\nimport { getNearestPoint } from '../geometry';\nimport { getHitConnectorPoint } from '../arrow-line/arrow-line-basic';\nimport { getHitShape } from '../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} 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 } 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 elements.length > 1 && elements.every(el => PlaitDrawElement.isDrawElement(el));\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 || isFromCorner;\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.getElementActiveHost(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 if (isGeometryIncludeText(target)) {\n const { height: textHeight } = getFirstTextManage(target).getSize();\n DrawTransforms.resizeGeometry(board, points as [Point, Point], textHeight, path);\n } else {\n points = normalizeShapePoints(points as [Point, Point]);\n Transforms.setNode(board, { points }, path);\n }\n } else if (PlaitDrawElement.isArrowLine(target)) {\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 if (canResize() && !isSelectionMoving(board)) {\n handleG = createG();\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = needCustomActiveRectangle\n ? RectangleClient.getRectangleByPoints(resizeActivePoints!)\n : getRectangleByElements(board, elements, false);\n let corners = RectangleClient.getCornerPoints(boundingRectangle);\n const angle = getSelectionAngle(elements);\n if (angle) {\n const centerPoint = RectangleClient.getCenterPoint(boundingRectangle);\n corners = rotatePoints(corners, centerPoint, angle) as [Point, Point, Point, Point];\n }\n corners.forEach(corner => {\n const g = drawHandle(board, corner);\n handleG && handleG.append(g);\n });\n PlaitBoard.getElementActiveHost(board).append(handleG);\n }\n };\n\n board.drawSelectionRectangle = () => {\n if (needCustomActiveRectangle) {\n const rectangle = RectangleClient.getRectangleByPoints(resizeActivePoints!);\n return drawRectangle(board, RectangleClient.inflate(rectangle, 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","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 { 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 | PlaitDrawElement[]>,\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, 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 { 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 getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } 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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height * heightRatio - height) / 2\n };\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?: (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 { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width / 2;\n rectangle.x += width / 4;\n return rectangle;\n }\n});\n","import { RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const DiamondEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: RectangleClient.getEdgeCenterPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n rectangle.width = rectangle.width / 2;\n rectangle.x += rectangle.width / 2;\n return rectangle;\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 { getTextRectangle } from '../../utils';\n\nexport interface CreateEllipseOptions {\n draw?: (board: PlaitBoard, rectangle: RectangleClient, options: Options) => SVGGElement;\n getTextRectangle?: (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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\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 { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width * (1 - 0.32);\n rectangle.x += width * 0.32;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width / 2;\n rectangle.x += width / 4;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getStrokeWidthByElement } 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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 3) / 5;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 5,\n y: elementRectangle.y + elementRectangle.height / 5 + ((elementRectangle.height * 4) / 5 - height) / 2\n };\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const rectangle = getTextRectangle(element);\n const wider = elementRectangle.width > elementRectangle.height / 2 + 20;\n rectangle.width = wider ? elementRectangle.width - elementRectangle.height / 2 : rectangle.width;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const rectangle = getTextRectangle(element);\n const wider = elementRectangle.width > elementRectangle.height + 20;\n rectangle.width = wider ? elementRectangle.width - elementRectangle.height : rectangle.width;\n rectangle.x = wider ? elementRectangle.x + elementRectangle.height / 2: rectangle.x;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n rectangle.width = rectangle.width * 0.68;\n return rectangle;\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 { ShapeDefaultSpace } from '../../constants';\nimport { getRoundRectangleRadius } from './round-rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } 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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height * heightRatio - height) / 2\n };\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 { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getStrokeWidthByElement } 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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 2) / 3;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + (elementRectangle.height * 3) / 5 + ((elementRectangle.height * 2) / 5 - height) / 2\n };\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 { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = originWidth / 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 4,\n y: elementRectangle.y + (elementRectangle.height * 1) / 6 + ((elementRectangle.height * 4) / 5 - height) / 2\n };\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 { Point, RectangleClient } from '@plait/core';\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n 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 - height) / 2\n };\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getTextRectangle } 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 2) / 3;\n rectangle.x += width / 6;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { 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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 2) / 3;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + ((elementRectangle.height * 2) / 3 - 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 /\n 4} ${rectangle.height / 2}, 0, 0, 1,${rectangle.x + (rectangle.width * 3) / 4} ${rectangle.y + rectangle.height} L${\n rectangle.x\n } ${rectangle.y + rectangle.height} 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 { 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 ${rectangle.width /\n 10} ${rectangle.height / 2}, 0, 0, 0,${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height} L${rectangle.x +\n rectangle.width / 10} ${rectangle.y + rectangle.height}A ${rectangle.width / 10} ${rectangle.height /\n 2}, 0, 0, 1,${rectangle.x + rectangle.width / 10} ${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(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\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 { 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${\n rectangle.x\n } Z M${rectangle.x + rectangle.width * 0.06} ${rectangle.y} L${rectangle.x + rectangle.width * 0.06} ${rectangle.y +\n rectangle.height} M${rectangle.x + rectangle.width - rectangle.width * 0.06} ${rectangle.y} L${rectangle.x +\n rectangle.width -\n 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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.06 * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.06,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n }\n};\n","import { Point, RectangleClient } from '@plait/core';\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n width: width > 0 ? width : 0,\n height: height,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - elementRectangle.height / 2 - height) / 2\n };\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setPathStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const CloudEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\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 const svgElement = rs.path(\n `M ${rectangle.x + divisionWidth} ${rectangle.y + divisionHeight}\n A ${xRadius} ${yRadius * 1.2} 0 1 1 ${rectangle.x + divisionWidth * 2} ${rectangle.y + divisionHeight / 2}\n A ${xRadius} ${yRadius} 0 1 1 ${rectangle.x + divisionWidth * 4.2} ${rectangle.y + divisionHeight / 2.2}\n A ${xRadius} ${yRadius} 0 1 1 ${rectangle.x + divisionWidth * 5.8} ${rectangle.y + divisionHeight}\n A ${xRadius} ${yRadius * 1.3} 0 1 1 ${rectangle.x + divisionWidth * 6} ${rectangle.y + divisionHeight * 2.2}\n A ${xRadius} ${yRadius * 1.2} 0 1 1 ${rectangle.x + divisionWidth * 5} ${rectangle.y + divisionHeight * 2.8}\n A ${xRadius} ${yRadius / 1.2} 0 1 1 ${rectangle.x + divisionWidth * 2.8} ${rectangle.y + divisionHeight * 2.8}\n A ${xRadius} ${yRadius} 0 1 1 ${rectangle.x + divisionWidth} ${rectangle.y + divisionHeight * 2.2}\n A ${xRadius} ${yRadius * 1.42} 0 1 1 ${rectangle.x + divisionWidth} ${rectangle.y + divisionHeight}\n Z`,\n { ...options, fillStyle: 'solid' }\n );\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 return getNearestPointBetweenPointAndSegments(point, CloudEngine.getCornerPoints(rectangle));\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = originWidth / 1.5;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + elementRectangle.height / 6 + ((elementRectangle.height * 4) / 6 - 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 { getUnitVectorByPointAndPoint } from '@plait/common';\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';\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 +\n rectangle.width} V${rectangle.y + rectangle.height - rectangle.height / 9}\n Q${rectangle.x + rectangle.width - rectangle.width / 4} ${rectangle.y +\n rectangle.height -\n (rectangle.height / 9) * 3}, ${rectangle.x + rectangle.width / 2} ${rectangle.y +\n rectangle.height -\n rectangle.height / 9} T${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9} \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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.06 * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.06,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\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 { getDirectionByPointOfRectangle, getDirectionFactor, getUnitVectorByPointAndPoint } from '@plait/common';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement } 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 +\n 5} V${rectangle.y + 5} H${rectangle.x + 10} V${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y +\n rectangle.height -\n rectangle.height / 9 -\n 10 -\n 3} L${rectangle.x + rectangle.width - 5} ${rectangle.y +\n rectangle.height -\n rectangle.height / 9 -\n 10 -\n 3 -\n 4} V${rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3}\n L${rectangle.x + rectangle.width - 10} ${rectangle.y +\n rectangle.height -\n rectangle.height / 9 -\n 5 -\n 3 -\n 4} V${rectangle.y + rectangle.height - rectangle.height / 9}\n \n Q${rectangle.x + rectangle.width - 10 - (rectangle.width - 10) / 4} ${rectangle.y +\n rectangle.height -\n (rectangle.height / 9) * 3}, ${rectangle.x + (rectangle.width - 10) / 2} ${rectangle.y +\n rectangle.height -\n rectangle.height / 9} T${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9}\n \n M${rectangle.x + 5} ${rectangle.y + 10} H${rectangle.x + rectangle.width - 10} V${rectangle.y +\n rectangle.height -\n rectangle.height / 9} \n \n M${rectangle.x + 10} ${rectangle.y + 5} H${rectangle.x + rectangle.width - 5} V${rectangle.y +\n rectangle.height -\n rectangle.height / 9 -\n 10 -\n 3}\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.06 * 2;\n return {\n height,\n width: width > 0 ? width - 10 : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.06,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\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 { 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 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} ${rectangle.y +\n rectangle.height * 0.15} \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} ${rectangle.y +\n rectangle.height -\n rectangle.height * 0.15}\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + elementRectangle.height * 0.3 + (elementRectangle.height - elementRectangle.height * 0.45 - height) / 2\n };\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 { 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 +\n rectangle.width -\n rectangle.width * 0.15} ${rectangle.y + rectangle.height} \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} ${rectangle.y +\n rectangle.height}\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - elementRectangle.width * 0.45 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + elementRectangle.width * 0.15 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - 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 { 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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - elementRectangle.width * 0.1 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + elementRectangle.width * 0.1 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + elementRectangle.height * 0.1 + (elementRectangle.height - elementRectangle.height * 0.1 - 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 { 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 NoteCurlyLeftEngine: 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.y} \n C${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y}, \n ${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height / 2}, \n ${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y + rectangle.height / 2}\n C${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height / 2}, \n ${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y + rectangle.height}, \n ${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height}`,\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - elementRectangle.width * 0.09 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - 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 { 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 NoteCurlyRightEngine: 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 C${rectangle.x + rectangle.width * 0.09} ${rectangle.y},\n ${rectangle.x} ${rectangle.y + rectangle.height / 2},\n ${rectangle.x + rectangle.width * 0.09} ${rectangle.y + rectangle.height / 2}\n C${rectangle.x} ${rectangle.y + rectangle.height / 2},\n ${rectangle.x + rectangle.width * 0.09} ${rectangle.y + rectangle.height},\n ${rectangle.x} ${rectangle.y + rectangle.height}`,\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - elementRectangle.width * 0.09 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + elementRectangle.width * 0.09 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - 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 { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } 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${rectangle.x +\n rectangle.width * 0.075}\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\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 { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement } 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 +\n rectangle.width -\n rectangle.width * 0.1} ${rectangle.y + rectangle.height}\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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - strokeWidth * 2 - elementRectangle.width * 0.25;\n return {\n width: width > 0 ? width : 0,\n height: height,\n x: elementRectangle.x + strokeWidth + elementRectangle.width * 0.15,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\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 { PlaitDrawShapeText } 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';\n\nexport const TableEngine: ShapeEngine<PlaitTable, PlaitTableDrawOptions, PlaitDrawShapeText> = {\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(element: PlaitTable, options?: PlaitDrawShapeText) {\n try {\n if (options && options.key) {\n const cell = getCellWithPoints(options?.board!, element, options!.key);\n if (cell) {\n if (PlaitTableElement.isVerticalText(cell)) {\n return getVerticalTextRectangle(cell);\n } else {\n return getHorizontalTextRectangle(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(cell: PlaitTableCellWithPoints) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const height = cell.textHeight || 0;\n const width = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n width: width > 0 ? width : 0,\n height,\n x: cellRectangle.x - width / 2 + cellRectangle.width / 2,\n y: cellRectangle.y + (cellRectangle.height - height) / 2\n };\n}\n\nexport function getHorizontalTextRectangle(cell: PlaitTableCellWithPoints) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const height = cell.textHeight || 0;\n const width = cellRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: cellRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: cellRectangle.y + (cellRectangle.height - height) / 2\n };\n}\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n W,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\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 { getUnitVectorByPointAndPoint, rotateVector } from '@plait/common';\n\nexport const ActorEngine: 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 / 2} ${rectangle.y + rectangle.height / 4} \n A${rectangle.width / 3 / 2} ${rectangle.height / 4 / 2}, 0, 0, 1, ${rectangle.x + rectangle.width / 2} ${rectangle.y} \n A${rectangle.width / 3 / 2} ${rectangle.height / 4 / 2}, 0, 0, 1, ${rectangle.x + rectangle.width / 2} ${rectangle.y +\n rectangle.height / 4}\n V${rectangle.y + (rectangle.height / 4) * 3}\n M${rectangle.x + rectangle.width / 2} ${rectangle.y + rectangle.height / 2} H${rectangle.x}\n M${rectangle.x + rectangle.width / 2} ${rectangle.y + rectangle.height / 2} H${rectangle.x + rectangle.width}\n M${rectangle.x + rectangle.width / 2} ${rectangle.y + (rectangle.height / 4) * 3}\n L${rectangle.x + rectangle.width / 12} ${rectangle.y + rectangle.height}\n M${rectangle.x + rectangle.width / 2} ${rectangle.y + (rectangle.height / 4) * 3}\n L${rectangle.x + (rectangle.width / 12) * 11} ${rectangle.y + 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 let nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n\n if (nearestPoint[1] >= rectangle.y && nearestPoint[1] <= rectangle.y + rectangle.height / 4) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4 / 2];\n nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 3 / 2, rectangle.height / 4 / 2);\n return nearestPoint;\n }\n if (nearestPoint[1] >= rectangle.y + rectangle.height / 4 && nearestPoint[1] < rectangle.y + (rectangle.height / 4) * 3) {\n if (nearestPoint[1] === rectangle.x + rectangle.width / 2) {\n nearestPoint = getNearestPointBetweenPointAndSegments(point, [\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height / 4) * 3]\n ]);\n } else {\n nearestPoint = getNearestPointBetweenPointAndSegments(point, [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ]);\n }\n return nearestPoint;\n }\n nearestPoint = getNearestPointBetweenPointAndSegments(point, [\n [rectangle.x + rectangle.width / 12, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height / 4) * 3],\n [rectangle.x + (rectangle.width / 12) * 11, rectangle.y + rectangle.height]\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 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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const height = element.textHeight!;\n const width = elementRectangle.width + 40;\n return {\n 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 { 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${\n rectangle.x\n } Z M${rectangle.x + 40} ${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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = 40 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\nimport { MultipleTextGeometryCommonTextKeys, PlaitMultipleTextGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { PlaitDrawShapeText } from '../../generators/text.generator';\n\nexport const PackageEngine: ShapeEngine<PlaitMultipleTextGeometry, {}, PlaitDrawShapeText> = {\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 * 0.7} \n L${rectangle.x + rectangle.width * 0.8} ${rectangle.y + 25} \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 * 0.8}`,\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 let nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[0] > rectangle.x + rectangle.width * 0.7 && nearestPoint[1] <= rectangle.y + 25) {\n nearestPoint = getNearestPointBetweenPointAndSegments(\n point,\n [\n [rectangle.x + rectangle.width * 0.7, rectangle.y],\n [rectangle.x + rectangle.width * 0.8, rectangle.y + 25],\n [rectangle.x + rectangle.width, rectangle.y + 25]\n ],\n false\n );\n }\n return nearestPoint;\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(element: PlaitMultipleTextGeometry, options?: PlaitDrawShapeText) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const textHeight = element.texts?.find(item => item.key === options?.key)?.textHeight!;\n if (options?.key === MultipleTextGeometryCommonTextKeys.name) {\n const width = elementRectangle.width * 0.7 - ShapeDefaultSpace.rectangleAndText - strokeWidth;\n return {\n height: textHeight,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (25 - textHeight) / 2\n };\n }\n if (options?.key === MultipleTextGeometryCommonTextKeys.content) {\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height: textHeight,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + 25 + (elementRectangle.height - 25 - textHeight) / 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 { MultipleTextGeometryCommonTextKeys, 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 { PlaitDrawShapeText } from '../../generators/text.generator';\n\nexport const CombinedFragmentEngine: ShapeEngine<PlaitMultipleTextGeometry, {}, PlaitDrawShapeText> = {\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(element: PlaitMultipleTextGeometry, options?: PlaitDrawShapeText) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const textHeight = element.texts?.find(item => item.key === options?.key)?.textHeight!;\n if (options?.key === MultipleTextGeometryCommonTextKeys.name) {\n const width = elementRectangle.width / 3 - 8 - ShapeDefaultSpace.rectangleAndText - strokeWidth;\n return {\n height: textHeight,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (25 - textHeight) / 2\n };\n }\n if (options?.key === MultipleTextGeometryCommonTextKeys.content) {\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height: textHeight,\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 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\nexport const DeletionEngine: 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} ${rectangle.y + rectangle.height} \n M${rectangle.x + rectangle.width} ${rectangle.y} L${rectangle.x} ${rectangle.y + rectangle.height} \n `,\n { ...options, fillStyle: 'solid', 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 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 getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\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${\n rectangle.x\n } Z M${rectangle.x + rectangle.width * 0.125} ${rectangle.y} L${rectangle.x + rectangle.width * 0.125} ${rectangle.y +\n rectangle.height} M${rectangle.x + rectangle.width - rectangle.width * 0.125} ${rectangle.y} L${rectangle.x +\n rectangle.width -\n 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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width =\n elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.125 * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.125,\n y: elementRectangle.y + (elementRectangle.height - 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 { 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: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth - 15;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\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\nexport const AssemblyEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `\n M${rectangle.x} ${rectangle.y + rectangle.height / 2} \n H${rectangle.x + rectangle.width * 0.3}\n A${rectangle.width * 0.13} ${rectangle.height * 0.285}, 0, 1, 1 ${rectangle.x +\n rectangle.width * 0.3 +\n rectangle.width * 0.26} ${rectangle.y + rectangle.height / 2}\n A${rectangle.width * 0.13} ${rectangle.height * 0.285}, 0, 1, 1 ${rectangle.x + rectangle.width * 0.3} ${rectangle.y +\n rectangle.height / 2}\n M${rectangle.x + rectangle.width * 0.3 + rectangle.width * 0.13} ${rectangle.y}\n A${rectangle.width * 0.233} ${rectangle.height / 2}, 0, 0, 1 ${rectangle.x +\n rectangle.width * 0.3 +\n rectangle.width * 0.13} ${rectangle.y + rectangle.height}\n M${rectangle.x + rectangle.width * 0.3 + rectangle.width * 0.13 + rectangle.width * 0.233} ${rectangle.y +\n rectangle.height / 2} H${rectangle.x + rectangle.width}\n `,\n {\n ...options,\n fillStyle: 'solid'\n }\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 getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[0] === rectangle.x + rectangle.width / 2) {\n return getNearestPointBetweenPointAndEllipse(\n point,\n [rectangle.x + rectangle.width * 0.43, rectangle.y + rectangle.height / 2],\n rectangle.width * 0.223,\n rectangle.height / 2\n );\n }\n return nearestPoint;\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 setStrokeLinecap\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\nexport const RequiredInterfaceEngine: 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 A${rectangle.width * 0.39} ${rectangle.height / 2}, 0, 0, 1 ${rectangle.x} ${rectangle.y + rectangle.height}\n M${rectangle.x + rectangle.width * 0.41} ${rectangle.y + rectangle.height / 2} H${rectangle.x + rectangle.width}\n `,\n {\n ...options,\n fillStyle: 'solid',\n fill: 'transparent'\n }\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","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\n\nexport const ProvidedInterfaceEngine: 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 / 2} \n H${rectangle.x + rectangle.width * 0.54}\n A${(rectangle.width * 0.46) / 2} ${rectangle.height / 2}, 0, 1, 1 ${rectangle.x + rectangle.width} ${rectangle.y +\n rectangle.height / 2}\n A${(rectangle.width * 0.46) / 2} ${rectangle.height / 2}, 0, 1, 1 ${rectangle.x + rectangle.width * 0.54} ${rectangle.y +\n rectangle.height / 2}\n `,\n {\n ...options,\n fillStyle: 'solid'\n }\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 getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\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 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 getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\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';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\n\nexport const ComponentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const boxSize = {\n with: rectangle.width > 70 ? 24 : rectangle.width * 0.2,\n height: rectangle.height - 28 - rectangle.height * 0.35 > 1 ? 14 : rectangle.height * 0.175\n };\n const shape = rs.path(\n `M${rectangle.x + 12} ${rectangle.y} \n v${rectangle.height * 0.175} \n h${boxSize.with / 2} v${boxSize.height} h${-boxSize.with} v${-boxSize.height} h${boxSize.with / 2}\n\n M${rectangle.x + 12} ${rectangle.y + rectangle.height * 0.175 + boxSize.height} \n\n v${rectangle.height - rectangle.height * 0.35 - boxSize.height * 2}\n h${boxSize.with / 2} v${boxSize.height} h${-boxSize.with} v${-boxSize.height} h${boxSize.with / 2}\n M${rectangle.x + 12} ${rectangle.y + rectangle.height - rectangle.height * 0.175} \n V${rectangle.y + rectangle.height}\n H${rectangle.x + rectangle.width}\n v${-rectangle.height}\n h${-(rectangle.width - 12)}\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 let nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[1] === rectangle.y + rectangle.height / 2) {\n nearestPoint = getNearestPointBetweenPointAndSegments(\n point,\n [\n [rectangle.x + 12, rectangle.y + rectangle.height * 0.175 + 14],\n [rectangle.x + 12, rectangle.y + rectangle.height - rectangle.height * 0.175 - 14]\n ],\n false\n );\n }\n return nearestPoint;\n },\n\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getUnitVectorByPointAndPoint(\n [rectangle.x + 12, rectangle.y + rectangle.height - rectangle.height * 0.175 - 14],\n connectionPoint\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],\n [rectangle.x + 12, rectangle.y + rectangle.height / 2]\n ] as [Point, Point, Point, Point];\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - 24 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + 24 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - 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';\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\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 return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getNearestPointBetweenPointAndSegments\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';\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(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight!;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n }\n};\n","import {\n BasicShapes,\n DrawShapes,\n EngineExtraData,\n FlowchartSymbols,\n PlaitGeometry,\n ShapeEngine,\n SwimlaneSymbols,\n TableSymbols,\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 EngineExtraData = EngineExtraData,\n K extends EngineExtraData = EngineExtraData\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 { StrokeStyle } from './element';\nimport { getConnectionPoint } from '../utils/arrow-line/arrow-line-common';\nimport { PlaitShapeElement } from '.';\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 width: number;\n height: 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 StrokeStyle {\n solid = 'solid',\n dashed = 'dashed',\n dotted = 'dotted'\n}\n\nexport 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 { StrokeStyle } from './element';\nimport { ArrowLineShape } from './arrow-line';\n\nexport enum VectorPenPointerType {\n vectorPen = 'vectorPen'\n}\n\nexport enum VectorLineShape {\n straight = ArrowLineShape.straight,\n curve = ArrowLineShape.curve\n}\n\nexport interface VectorPenRef {\n start?: Point;\n element?: PlaitVectorLine;\n path?: Path;\n shape: VectorLineShape;\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, PlaitBaseGeometry, 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';\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';\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 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 { BasicShapes, PlaitGeometry } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { getFillByElement, getLineDashByElement, getStrokeColorByElement } 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 strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(this.board, element);\n const fill = getFillByElement(this.board, element);\n const strokeLineDash = getLineDashByElement(element);\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, 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);\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(element);\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 { PlaitDrawShapeText, 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(\n board: PlaitBoard,\n element: T,\n text: ParagraphElement,\n options: TextGeneratorOptions<T>\n ) {\n super(board, element, [{ key: element.id, text: text, textHeight: element.textHeight }], options);\n }\n\n update(\n element: T,\n previousDrawShapeTexts: PlaitDrawShapeText[],\n currentDrawShapeTexts: PlaitDrawShapeText[],\n elementG: SVGElement\n ): void;\n update(element: T, previousText: ParagraphElement, currentText: ParagraphElement, elementG: SVGElement): void;\n update(\n element: T,\n previousText: ParagraphElement | PlaitDrawShapeText[],\n currentText: ParagraphElement | PlaitDrawShapeText[],\n elementG: SVGElement\n ) {\n if (!isMultipleTextGeometry((element as unknown) as PlaitCommonGeometry)) {\n super.update(\n element,\n [{ text: previousText as ParagraphElement, key: element.id, textHeight: element.textHeight }],\n [{ text: currentText as ParagraphElement, key: element.id, textHeight: element.textHeight }],\n elementG\n );\n }\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, canResize } from '@plait/common';\nimport { ArrowLineAutoCompleteGenerator } from './generators/arrow-line-auto-complete.generator';\nimport { getTextRectangle, isGeometryIncludeText, isMultipleTextGeometry, memorizeLatestText } from './utils';\nimport { PlaitDrawShapeText, TextGenerator } from './generators/text.generator';\nimport { SingleTextGenerator } from './generators/single-text.generator';\nimport { PlaitText } from './interfaces';\nimport { GeometryThreshold } from './constants';\nimport { getEngine } from './engines';\n\nexport class GeometryComponent extends CommonElementFlavour<PlaitCommonGeometry, PlaitBoard>\n implements OnContextChanged<PlaitCommonGeometry, PlaitBoard> {\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 = new ActiveGenerator<PlaitCommonGeometry>(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 canResize(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 }\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.getElementActiveHost(this.board), {\n selected: this.selected\n });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getElementActiveHost(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 const isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n if (value.element !== previous.element || isChangeTheme) {\n this.shapeGenerator.processDrawing(this.element as PlaitGeometry, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getElementActiveHost(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 const hasSameHandleState = this.activeGenerator.options.hasResizeHandle() === this.activeGenerator.hasResizeHandle;\n if (!hasSameSelected || !hasSameHandleState) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getElementActiveHost(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: PlaitDrawShapeText) => {\n if (textManageChangeData.newText) {\n if (isMultipleTextGeometry(element)) {\n DrawTransforms.setDrawShapeText(this.board, element, {\n key: text.key,\n text: textManageChangeData.newText,\n textHeight: textManageChangeData.height\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.element).width;\n const getRectangle = getEngine(this.element.shape).getTextRectangle;\n if (getRectangle) {\n width = getRectangle(this.element as PlaitGeometry).width;\n }\n return (this.element as PlaitText)?.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, 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 { PlaitBoard, Point, SELECTION_RECTANGLE_CLASS_NAME, createG, drawRectangle, getSelectedElements } 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 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 updatePoints.forEach(point => {\n const updateHandle = drawPrimaryHandle(this.board, point);\n activeG.appendChild(updateHandle);\n });\n const middlePoints = getMiddlePoints(this.board, element);\n if (!PlaitBoard.hasBeenTextEditing(this.board)) {\n for (let i = 0; i < middlePoints.length; i++) {\n const point = middlePoints[i];\n if (element.shape === ArrowLineShape.elbow && elbowNextRenderPoints.length) {\n const handleIndex = getHitPointIndex(middlePoints, 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 activeRectangle = this.board.getRectangle(element);\n if (activeRectangle) {\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, 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 extends CommonElementFlavour<PlaitArrowLine, PlaitBoard>\n implements OnContextChanged<PlaitArrowLine, PlaitBoard> {\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.initializeTextManagesByElement();\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.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n super.initialize();\n this.boundedElements = this.getBoundedElements();\n this.drawText();\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 this.initializeWeakMap();\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 isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n const linePoints = getArrowLinePoints(this.board, this.element);\n if (value.element !== previous.element || isChangeTheme) {\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(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) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(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.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n this.updateTextRectangle();\n return;\n }\n }\n\n initializeTextManagesByElement() {\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.initializeTextManages(textManages);\n }\n }\n\n drawText() {\n if (this.element.texts?.length) {\n this.getTextManages().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 width: newWidth,\n height: textManageChangeData.height\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.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.destroyTextManages();\n this.initializeTextManagesByElement();\n this.drawText();\n }\n }\n\n updateTextRectangle() {\n const textManages = this.getTextManages();\n textManages.forEach(manage => {\n manage.updateRectangle();\n });\n }\n\n destroy(): void {\n super.destroy();\n this.activeGenerator.destroy();\n this.destroyTextManages();\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 extends CommonElementFlavour<PlaitVectorLine, PlaitBoard>\n implements OnContextChanged<PlaitVectorLine, PlaitBoard> {\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 }\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.getElementActiveHost(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 this.initializeWeakMap();\n const isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n const linePoints = getVectorLinePoints(this.board, this.element)!;\n if (value.element !== previous.element || isChangeTheme) {\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n } else {\n const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate();\n if (needUpdate) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(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 { MultipleTextGeometryCommonTextKeys, PlaitDrawElement } from '../interfaces';\nimport { editText } from '../utils/geometry';\nimport { getHitMultipleGeometryText, 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);\n if (hitElement && PlaitDrawElement.isGeometry(hitElement)) {\n if (isMultipleTextGeometry(hitElement)) {\n const hitText =\n getHitMultipleGeometryText(hitElement, point) ||\n hitElement.texts.find(item => item.key.includes(MultipleTextGeometryCommonTextKeys.content)) ||\n hitElement.texts[0];\n editText(board, hitElement, hitText);\n } else {\n editText(board, hitElement);\n }\n }\n }\n dblClick(event);\n };\n return board;\n};\n","import { TableSymbols } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { PlaitElement, RectangleClient } from '@plait/core';\nimport { PlaitBaseTable } from '../interfaces/table';\nimport { getEngine } from '../engines';\nimport { getDrawDefaultStrokeColor, getFillByElement, getLineDashByElement, getStrokeColorByElement, 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 strokeLineDash = getLineDashByElement(element);\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(this.board, element);\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, Point, RectangleClient, createG, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { BasicShapes, GeometryShapes, PlaitCommonGeometry, PlaitDrawElement, PlaitGeometry } from '../interfaces';\nimport { GeometryShapeGenerator } from '../generators/geometry-shape.generator';\nimport {\n createDefaultGeometry,\n createTextElement,\n getDefaultGeometryPoints,\n getTextShapeProperty,\n getMemorizedLatestByPointer,\n getTextRectangle,\n insertElement\n} from '../utils';\nimport { DefaultTextProperty, 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 { NgZone } from '@angular/core';\nimport { getSnapResizingRef } from '../utils/snap-resizing';\nimport { TableGenerator } from '../generators/table.generator';\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\nconst 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\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, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(movingPoint, property.width, property.height)\n );\n temporaryElement = createTextElement(board, points);\n if (!fakeCreateTextRef) {\n const textManage = new TextManage(board, {\n getRectangle: () => {\n return getTextRectangle(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.getElementActiveHost(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 } = 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, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(point, property.width, property.height));\n const textElement = createTextElement(board, points);\n insertElement(board, textElement);\n start = null;\n }\n }\n pointerDown(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.getElementActiveHost(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.getElementActiveHost(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 { PlaitBoard, Point, Transforms, getElementById, idCreator } from '@plait/core';\nimport { PlaitArrowLine, PlaitDrawElement, PlaitGeometry, PlaitShapeElement } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\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 elements.map(element => {\n if (PlaitDrawElement.isShapeElement(element)) {\n const points = element.points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);\n return { ...element, points } as PlaitGeometry;\n }\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 element;\n });\n};\n\nexport const insertClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n const idsMap: Record<string, string> = {};\n elements.forEach(element => {\n idsMap[element.id] = idCreator();\n });\n elements.forEach(element => {\n element.id = idsMap[element.id];\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 element.points = element.points.map(point => [startPoint[0] + point[0], startPoint[1] + point[1]]) as [Point, Point];\n Transforms.insertNode(board, element, [board.children.length]);\n });\n Transforms.addSelectionWithTemporaryElements(board, elements);\n};\n","import {\n ClipboardData,\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n WritableClipboardContext,\n WritableClipboardOperationType,\n WritableClipboardType,\n addClipboardContext,\n createClipboardContext,\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 if (!clipboardContext) {\n clipboardContext = createClipboardContext(WritableClipboardType.elements, elements, text);\n } else {\n clipboardContext = addClipboardContext(clipboardContext, {\n text,\n type: WritableClipboardType.elements,\n elements\n });\n }\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(shape => PlaitArrowLine.isBoundElementOfSource(line, shape) || PlaitArrowLine.isBoundElementOfTarget(line, shape))\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 { getSnappingShape } from '../utils';\n\nexport const withArrowLineCreateByDraw = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp } = 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.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 }\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 { Path, PlaitBoard, Point, RectangleClient, Transforms, getSelectedElements, rotateAntiPointsByElement } from '@plait/core';\nimport { PlaitGeometry } from '../interfaces/geometry';\nimport {\n ResizeRef,\n ResizeState,\n WithResizeOptions,\n canResize,\n getFirstTextManage,\n getIndexByResizeHandle,\n isCornerHandle,\n normalizeShapePoints,\n withResize\n} from '@plait/common';\nimport { getSelectedGeometryElements, getSelectedImageElements } from '../utils/selected';\nimport { DrawTransforms } from '../transforms';\nimport { GeometryComponent } from '../geometry.component';\nimport { PlaitImage } from '../interfaces/image';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getHitRectangleResizeHandleRef } from '../utils/position/geometry';\nimport { getResizeOriginPointAndHandlePoint } from './with-draw-resize';\nimport { getSnapResizingRefOptions, getSnapResizingRef } from '../utils/snap-resizing';\nimport { isGeometryIncludeText } from '../utils';\n\nexport const withGeometryResize = (board: PlaitBoard) => {\n let snapG: SVGGElement | null;\n const options: WithResizeOptions<PlaitGeometry | PlaitImage> = {\n key: 'draw-geometry',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n const selectedElements = [...getSelectedGeometryElements(board), ...getSelectedImageElements(board)];\n if (selectedElements.length !== 1 || getSelectedElements(board).length !== 1) {\n return null;\n }\n const target = selectedElements[0];\n if (canResize(board, target)) {\n const rectangle = board.getRectangle(target) as RectangleClient;\n const handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, target.angle);\n if (handleRef) {\n return {\n element: target,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass,\n rectangle\n };\n }\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<PlaitGeometry | PlaitImage>, resizeState: ResizeState) => {\n resizeState.startPoint = rotateAntiPointsByElement(resizeState.startPoint, resizeRef.element) || resizeState.startPoint;\n resizeState.endPoint = rotateAntiPointsByElement(resizeState.endPoint, resizeRef.element) || resizeState.endPoint;\n snapG?.remove();\n const isFromCorner = isCornerHandle(board, resizeRef.handle);\n const isAspectRatio = resizeState.isShift || PlaitDrawElement.isImage(resizeRef.element);\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.getElementActiveHost(board).append(snapG);\n let points = resizeSnapRef.activePoints as [Point, Point];\n if (PlaitDrawElement.isGeometry(resizeRef.element) && isGeometryIncludeText(resizeRef.element)) {\n const { height: textHeight } = getFirstTextManage(resizeRef.element).getSize();\n DrawTransforms.resizeGeometry(board, points, textHeight, resizeRef.path as Path);\n } else {\n points = normalizeShapePoints(points);\n Transforms.setNode(board, { points }, resizeRef.path as Path);\n }\n },\n afterResize: (resizeRef: ResizeRef<PlaitGeometry | PlaitImage>) => {\n snapG?.remove();\n snapG = null;\n }\n };\n\n withResize<PlaitGeometry | PlaitImage>(board, options);\n\n return board;\n};\n","import { 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\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\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 let points: Point[] = [...resizeRef.element.points];\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 object = resizeRef.handle === LineResizeHandle.source ? source : target;\n points[handleIndex] = resizeState.endPoint;\n if (hitElement) {\n object.connection = getHitConnection(board, resizeState.endPoint, hitElement);\n object.boundId = hitElement.id;\n } else {\n object.connection = undefined;\n object.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 }\n\n if (!hitElement) {\n handleIndex = resizeRef.handle === LineResizeHandle.addHandle ? handleIndex + 1 : handleIndex;\n const drawPoints = getArrowLinePoints(board, resizeRef.element);\n const newPoints = [...points];\n newPoints[0] = drawPoints[0];\n newPoints[newPoints.length - 1] = drawPoints[drawPoints.length - 1];\n if (\n resizeRef.element.shape !== ArrowLineShape.elbow ||\n (resizeRef.element.shape === ArrowLineShape.elbow && newPoints.length === 2)\n ) {\n newPoints.forEach((point, index) => {\n if (index === handleIndex) return;\n if (points[handleIndex]) {\n points[handleIndex] = alignPoints(point, points[handleIndex]);\n }\n });\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\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.getElementActiveHost(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 PlaitElement,\n PlaitNode,\n getHitElementByPoint,\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';\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 ratio = getRatioByPoint(points, point);\n const textMemory = getMemorizedLatest('line')?.text || {};\n texts.push({\n text: buildText(LINE_TEXT, undefined, textMemory),\n position: ratio,\n width: 28,\n height: 20\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 }\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 shouldRemove = !text || (isFirstEdit && text === LINE_TEXT);\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 }\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.getElementActiveHost(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.getElementActiveHost(this.board), {\n selected: this.selected\n });\n } else {\n const hasSameSelected = value.selected === previous.selected;\n const hasSameHandleState =\n this.imageGenerator.activeGenerator &&\n this.imageGenerator.activeGenerator.options.hasResizeHandle() === this.imageGenerator.activeGenerator.hasResizeHandle;\n if (!hasSameSelected || !hasSameHandleState) {\n this.imageGenerator.setFocus(this.element, this.selected);\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(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 CursorClass,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n RgbaToHEX,\n drawCircle,\n hasValidAngle,\n isSelectionMoving,\n rotateAntiPointsByElement,\n setAngleForG,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getAutoCompletePoints, getHitIndexOfAutoCompletePoint, getSelectedDrawElements } from '../utils';\nimport { PRIMARY_COLOR, PlaitCommonElementRef } from '@plait/common';\nimport { LINE_AUTO_COMPLETE_HOVERED_DIAMETER, LINE_AUTO_COMPLETE_HOVERED_OPACITY } from '../constants/line';\nimport { ArrowLineAutoCompleteGenerator } from '../generators/arrow-line-auto-complete.generator';\n\nexport const withArrowLineAutoCompleteReaction = (board: PlaitBoard) => {\n const { pointerMove } = board;\n let reactionG: SVGGElement | null = null;\n board.pointerMove = (event: PointerEvent) => {\n reactionG?.remove();\n PlaitBoard.getBoardContainer(board).classList.remove(CursorClass.crosshair);\n const selectedElements = getSelectedDrawElements(board);\n const targetElement = selectedElements.length === 1 && selectedElements[0];\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (!PlaitBoard.isReadonly(board) && !isSelectionMoving(board) && targetElement && PlaitDrawElement.isShapeElement(targetElement)) {\n const points = getAutoCompletePoints(targetElement);\n const hitIndex = getHitIndexOfAutoCompletePoint(rotateAntiPointsByElement(movingPoint, targetElement) || movingPoint, points);\n const hitPoint = points[hitIndex];\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(targetElement);\n const lineAutoCompleteGenerator = ref.getGenerator<ArrowLineAutoCompleteGenerator>(ArrowLineAutoCompleteGenerator.key);\n lineAutoCompleteGenerator.recoverAutoCompleteG();\n if (hitPoint) {\n lineAutoCompleteGenerator?.removeAutoCompleteG(hitIndex);\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.getElementActiveHost(board).append(reactionG);\n PlaitBoard.getBoardContainer(board).classList.add(CursorClass.crosshair);\n if (hasValidAngle(targetElement)) {\n setAngleForG(reactionG, RectangleClient.getCenterPoint(board.getRectangle(targetElement)!), targetElement.angle!);\n }\n }\n }\n pointerMove(event);\n };\n\n return board;\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 toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement, PlaitShapeElement } 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';\n\nexport const WithArrowLineAutoCompletePluginKey = 'plait-arrow-line-auto-complete-plugin-key';\n\nexport interface ArrowLineAutoCompleteOptions {\n afterComplete: (element: PlaitArrowLine) => {};\n}\n\nexport const withArrowLineAutoComplete = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp } = 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 clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (!PlaitBoard.isReadonly(board) && targetElement && PlaitDrawElement.isShapeElement(targetElement)) {\n const points = getAutoCompletePoints(targetElement);\n const index = getHitIndexOfAutoCompletePoint(rotateAntiPointsByElement(clickPoint, targetElement) || clickPoint, points);\n const hitPoint = points[index];\n if (hitPoint) {\n temporaryDisableSelection(board as PlaitOptionsBoard);\n autoCompletePoint = hitPoint;\n sourceElement = targetElement;\n BoardTransforms.updatePointerType(board, ArrowLineShape.elbow);\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 (autoCompletePoint && sourceElement) {\n const distance = distanceBetweenPointAndPoint(\n ...(rotateAntiPointsByElement(movingPoint, sourceElement) || movingPoint),\n ...autoCompletePoint\n );\n if (distance > PRESS_AND_MOVE_BUFFER) {\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 }\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 }\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 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(points, movingPoint);\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 toHostPoint,\n toViewBoxPoint,\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} from '@plait/core';\nimport { addRotating, removeRotating, drawHandle, drawRotateHandle, isRotating, 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 elements.length > 0 && elements.every(el => PlaitDrawElement.isGeometry(el) || PlaitDrawElement.isImage(el));\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 point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n const handleRectangle = getRotateHandleRectangle(boundingRectangle);\n const angle = getSelectionAngle(elements);\n const rotatedPoint = angle ? rotatePoints(point, RectangleClient.getCenterPoint(boundingRectangle), -angle) : point;\n if (handleRectangle && RectangleClient.isHit(RectangleClient.getRectangleByPoints([rotatedPoint, rotatedPoint]), handleRectangle)) {\n rotateRef = {\n elements: [...elements],\n startPoint: point\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 = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const selectionRectangle = getRectangleByElements(board, rotateRef.elements, false);\n const selectionCenterPoint = RectangleClient.getCenterPoint(selectionRectangle);\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 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 rotateHandleG = drawRotateHandle(board, boundingRectangle);\n rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);\n if (rotateRef.angle) {\n setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingRectangle), rotateRef.angle);\n }\n } else {\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n rotateHandleG = drawRotateHandle(board, boundingRectangle);\n rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);\n setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingRectangle), getSelectionAngle(elements));\n }\n PlaitBoard.getElementActiveHost(board).append(rotateHandleG);\n }\n };\n\n board.drawSelectionRectangle = () => {\n if (needCustomActiveRectangle && rotateRef) {\n const rectangle = getRectangleByElements(board, rotateRef.elements, false);\n const rectangleG = drawRectangle(board, RectangleClient.inflate(rectangle, 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(rectangle), 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, canResize } from '@plait/common';\nimport { PlaitTable, PlaitTableBoard, PlaitTableCell, PlaitTableElement } from './interfaces/table';\nimport { getTextManage, PlaitDrawShapeText, TextGenerator } from './generators/text.generator';\nimport { TableGenerator } from './generators/table.generator';\nimport { DrawTransforms } from './transforms';\nimport { getCellWithPoints, 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 { 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 = new ActiveGenerator<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 canResize(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 }\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.getElementActiveHost(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 = getTextManage(this.board, item.id);\n if (textManage) {\n const engine = getEngine<PlaitTable>(TableSymbols.table);\n const rectangle = engine.getTextRectangle!(this.element, { key: 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[]): PlaitDrawShapeText[] {\n return cells\n .filter(item => isCellIncludeText(item))\n .map(item => {\n return {\n key: item.id,\n text: item.text!,\n textHeight: item.textHeight!,\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: PlaitDrawShapeText) => {\n const path = PlaitBoard.findPath(this.board, value);\n if (data.newText) {\n DrawTransforms.setTableText(this.board, path, text.key, data.newText, data.height);\n }\n data.operations && memorizeLatestText(value, data.operations);\n },\n getRenderRectangle: (value: PlaitTable, text: PlaitDrawShapeText) => {\n const cell = getCellWithPoints(this.board, value, text.key);\n if (PlaitTableElement.isVerticalText(cell)) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const width = cell.textHeight || 0;\n const height = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n width,\n height: height > 0 ? height : 0,\n x: cellRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: cellRectangle.y + (cellRectangle.height - height) / 2\n };\n } else {\n return getHorizontalTextRectangle(cell);\n }\n }\n });\n this.textGenerator.initialize();\n }\n\n onContextChanged(value: PlaitPluginElementContext<T, PlaitBoard>, previous: PlaitPluginElementContext<T, PlaitBoard>) {\n const isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n if (value.element !== previous.element || isChangeTheme) {\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.getElementActiveHost(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 hasSameHandleState = this.activeGenerator.options.hasResizeHandle() === this.activeGenerator.hasResizeHandle;\n const currentSelectedCells = getSelectedCells(value.element);\n if (!hasSameSelected || !hasSameHandleState || currentSelectedCells?.length) {\n this.activeGenerator.processDrawing(value.element, PlaitBoard.getElementActiveHost(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.getElementActiveHost(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 { getHitElementByPoint, PlaitBoard, Point, RectangleClient, Transforms, isSelectedElement } 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 { isSingleSelectElementByTable } from '../utils';\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 return true;\n },\n hitTest: (point: Point) => {\n const hitElement = getHitElementByPoint(board, point);\n if (hitElement && PlaitDrawElement.isElementByTable(hitElement)) {\n let rectangle = board.getRectangle(hitElement) as RectangleClient;\n let handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, hitElement.angle);\n if (handleRef) {\n const selectElement = isSelectedElement(board, hitElement);\n if (\n (selectElement && isSingleSelectElementByTable(board)) ||\n (!selectElement && !isCornerHandle(board, handleRef.handle))\n ) {\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.getElementActiveHost(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 isPolylineHitRectangle,\n toViewBoxPoint,\n toHostPoint,\n getHitElementByPoint,\n getSelectedElements,\n PlaitPointerType,\n isDragging,\n isMainPointer\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, isSingleSelectTable, setSelectedCells } from '../utils';\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) => {\n if (PlaitDrawElement.isElementByTable(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n return RectangleClient.isPointInRectangle(client, point);\n }\n return isHit(element, point);\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 return isPolylineHitRectangle(element.points, 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 && item.textHeight);\n if (cells?.length) {\n cell = cells.find(item => item.text && item.textHeight);\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 && hitCell.textHeight) {\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 && hitCell.textHeight) {\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';\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\n const tableGenerator = new TableGenerator(board);\n const dragMode = isSwimlaneDndMode(board);\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as SwimlaneDrawSymbols;\n\n if (dragMode) {\n const points = getDefaultSwimlanePoints(pointer, movingPoint);\n temporaryElement = createDefaultSwimlane(pointer, points);\n tableGenerator.processDrawing(temporaryElement, swimlaneG);\n PlaitBoard.getElementActiveHost(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.getElementActiveHost(board).append(snapG);\n points = normalizeShapePoints(resizeSnapRef.activePoints as [Point, Point], isShift);\n temporaryElement = createDefaultSwimlane(pointer, points);\n tableGenerator.processDrawing(temporaryElement, swimlaneG);\n PlaitBoard.getElementActiveHost(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 Transforms,\n addSelectedElement,\n clearSelectedElement,\n createG,\n distanceBetweenPointAndPoint,\n getElementById,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitVectorLine, VectorLineShape, VectorPenPointerType, VectorPenRef } from '../interfaces';\nimport { DrawPointerType, LINE_HIT_GEOMETRY_BUFFER, getVectorPenPointers } from '../constants';\nimport { isDrawingMode } from '@plait/common';\nimport { vectorLineCreating } from '../utils';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport const withVectorPenCreateByDraw = (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 vectorPenRef: VectorPenRef | null;\n\n const vectorLineComplete = () => {\n if (vectorPenRef) {\n clearSelectedElement(board);\n if (vectorPenRef?.element) {\n addSelectedElement(board, vectorPenRef?.element);\n }\n }\n PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);\n lineShapeG?.remove();\n lineShapeG = null;\n vectorPenRef = null;\n temporaryElement = null;\n };\n\n board.pointerDown = (event: PointerEvent) => {\n const penPointers = getVectorPenPointers();\n const isVectorPenPointer = PlaitBoard.isInPointer(board, penPointers);\n\n if (isVectorPenPointer && !vectorPenRef) {\n vectorPenRef = { shape: VectorLineShape.straight };\n }\n\n if (!PlaitBoard.isReadonly(board) && vectorPenRef && isDrawingMode(board)) {\n let point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (!temporaryElement) {\n vectorPenRef = {\n ...vectorPenRef,\n start: point\n };\n } else {\n if (!vectorPenRef.element) {\n vectorPenRef.element = temporaryElement;\n Transforms.insertNode(board, vectorPenRef.element, [board.children.length]);\n } else {\n let points = vectorPenRef.element.points;\n const isClosed = distanceBetweenPointAndPoint(...point, ...vectorPenRef.start!) <= LINE_HIT_GEOMETRY_BUFFER;\n if (isClosed) {\n point = vectorPenRef.start!;\n }\n if (vectorPenRef.path) {\n const lastPoint = points[points.length - 1];\n const distance = distanceBetweenPointAndPoint(...point, ...lastPoint);\n if (distance > 2) {\n Transforms.setNode(board, { points: [...points, point] }, vectorPenRef.path);\n }\n }\n vectorPenRef.element = getElementById(board, vectorPenRef.element.id);\n if (isClosed) {\n vectorLineComplete();\n }\n }\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 const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (pointer !== VectorPenPointerType.vectorPen) {\n vectorLineComplete();\n }\n if (vectorPenRef && vectorPenRef.start) {\n let drawPoints = [vectorPenRef.start];\n if (vectorPenRef.element) {\n drawPoints = [vectorPenRef.start, ...vectorPenRef.element.points];\n const path = PlaitBoard.findPath(board, vectorPenRef.element!);\n vectorPenRef.path = path;\n }\n const distance = distanceBetweenPointAndPoint(...movingPoint, ...vectorPenRef.start);\n if (distance <= LINE_HIT_GEOMETRY_BUFFER) {\n movingPoint = vectorPenRef.start;\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, vectorPenRef.shape, drawPoints, movingPoint, lineShapeG);\n }\n pointerMove(event);\n };\n\n board.dblClick = (event: MouseEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n if (vectorPenRef) {\n if (vectorPenRef.path) {\n Transforms.setNode(board, { points: vectorPenRef?.element?.points }, vectorPenRef.path);\n }\n vectorLineComplete();\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\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) && vectorPenRef) {\n if (vectorPenRef.path) {\n Transforms.setNode(board, { points: vectorPenRef.element?.points }, vectorPenRef.path);\n }\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 { isClosedVectorLine } from './../utils/vector-line';\nimport { 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';\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 (isClosedVectorLine(resizeRef.element)) {\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 './with-arrow-line-create';\nimport { withGeometryResize } from './with-geometry-resize';\nimport { withArrowLineResize } from './with-arrow-line-resize';\nimport { withArrowLineBoundReaction } from './with-arrow-line-bound-reaction';\nimport { withArrowLineText } from './with-arrow-line-text';\nimport { ImageComponent } from '../image.component';\nimport { withArrowLineAutoCompleteReaction } from './with-arrow-line-auto-complete-reaction';\nimport { withArrowLineAutoComplete } from './with-arrow-line-auto-complete';\nimport { withArrowLineTextMove } from './with-arrow-line-text-move';\nimport { withDrawResize } from './with-draw-resize';\nimport { getDrawHitElement, 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 { withVectorPenCreateByDraw } from './with-vector-pen-create';\nimport { getVectorLinePoints } from '../utils/vector-line';\nimport { withVectorLineResize } from './with-vector-line-resize';\n\nexport const withDraw = (board: PlaitBoard) => {\n const {\n drawElement,\n getRectangle,\n isRectangleHit,\n isHit,\n isInsidePoint,\n isMovable,\n isAlign,\n getRelatedFragment,\n getHitElement\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) => {\n const result = isHitDrawElement(board, element, point);\n if (result !== null) {\n return result;\n }\n return isHit(element, point);\n };\n\n board.getHitElement = elements => {\n const isDrawElements = elements.every(item => PlaitDrawElement.isDrawElement(item));\n if (isDrawElements) {\n return getDrawHitElement(board, elements as PlaitDrawElement[]);\n }\n return getHitElement(elements);\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 withVectorPenCreateByDraw(\n withArrowLineAutoCompleteReaction(\n withArrowLineBoundReaction(\n withVectorLineResize(\n withArrowLineResize(\n withArrowLineTextMove(\n withArrowLineText(\n withGeometryResize(\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["debugKey","debugGenerator","getCenterPointsOnPolygon","heightRatio","getNearestPointBetweenPointAndRoundRectangle"],"mappings":"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"}
|