@plait/draw 0.92.1 → 0.92.2

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.
@@ -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/default.ts","../../../packages/draw/src/constants/geometry.ts","../../../packages/draw/src/constants/pointer.ts","../../../packages/draw/src/constants/image.ts","../../../packages/draw/src/constants/theme.ts","../../../packages/draw/src/constants/swimlane.ts","../../../packages/draw/src/constants/text.ts","../../../packages/draw/src/constants/line.ts","../../../packages/draw/src/generators/text.generator.ts","../../../packages/draw/src/utils/table-selected.ts","../../../packages/draw/src/utils/table.ts","../../../packages/draw/src/utils/memorize.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-resize.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-arrow.ts","../../../packages/draw/src/generators/arrow-line.generator.ts","../../../packages/draw/src/utils/text-size.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-basic.ts","../../../packages/draw/src/utils/position/arrow-line.ts","../../../packages/draw/src/utils/multi-text-geometry.ts","../../../packages/draw/src/generators/vector-line-generator.ts","../../../packages/draw/src/utils/vector-line.ts","../../../packages/draw/src/utils/polygon.ts","../../../packages/draw/src/engines/basic-shapes/cloud.ts","../../../packages/draw/src/utils/hit.ts","../../../packages/draw/src/utils/common.ts","../../../packages/draw/src/utils/style/stroke.ts","../../../packages/draw/src/generators/geometry-shape.generator.ts","../../../packages/draw/src/utils/line.ts","../../../packages/draw/src/utils/position/line.ts","../../../packages/draw/src/generators/line-active.generator.ts","../../../packages/draw/src/generators/arrow-line-auto-complete.generator.ts","../../../packages/draw/src/generators/single-text.generator.ts","../../../packages/draw/src/generators/table.generator.ts","../../../packages/draw/src/utils/shape.ts","../../../packages/draw/src/utils/uml.ts","../../../packages/draw/src/utils/geometry.ts","../../../packages/draw/src/utils/arrow-line/elbow.ts","../../../packages/draw/src/utils/selected.ts","../../../packages/draw/src/transforms/geometry.ts","../../../packages/draw/src/transforms/geometry-text.ts","../../../packages/draw/src/transforms/image.ts","../../../packages/draw/src/transforms/arrow-line.ts","../../../packages/draw/src/utils/swimlane.ts","../../../packages/draw/src/transforms/swimlane.ts","../../../packages/draw/src/transforms/multi-text-geometry-text.ts","../../../packages/draw/src/transforms/table-text.ts","../../../packages/draw/src/transforms/table.ts","../../../packages/draw/src/transforms/vector-line.ts","../../../packages/draw/src/transforms/common.ts","../../../packages/draw/src/transforms/index.ts","../../../packages/draw/src/utils/position/geometry.ts","../../../packages/draw/src/plugins/with-draw-resize.ts","../../../packages/draw/src/utils/snap-resizing.ts","../../../packages/draw/src/utils/clipboard.ts","../../../packages/draw/src/engines/basic-shapes/comment.ts","../../../packages/draw/src/engines/basic-shapes/polygon.ts","../../../packages/draw/src/engines/basic-shapes/cross.ts","../../../packages/draw/src/engines/basic-shapes/diamond.ts","../../../packages/draw/src/engines/basic-shapes/ellipse.ts","../../../packages/draw/src/engines/basic-shapes/hexagon.ts","../../../packages/draw/src/engines/basic-shapes/left-arrow.ts","../../../packages/draw/src/engines/basic-shapes/octagon.ts","../../../packages/draw/src/engines/basic-shapes/parallelogram.ts","../../../packages/draw/src/engines/basic-shapes/pentagon.ts","../../../packages/draw/src/engines/basic-shapes/pentagon-arrow.ts","../../../packages/draw/src/engines/basic-shapes/process-arrow.ts","../../../packages/draw/src/engines/basic-shapes/right-arrow.ts","../../../packages/draw/src/engines/basic-shapes/rectangle.ts","../../../packages/draw/src/engines/basic-shapes/round-rectangle.ts","../../../packages/draw/src/engines/basic-shapes/round-comment.ts","../../../packages/draw/src/engines/basic-shapes/trapezoid.ts","../../../packages/draw/src/engines/basic-shapes/triangle.ts","../../../packages/draw/src/engines/basic-shapes/two-way-arrow.ts","../../../packages/draw/src/engines/basic-shapes/star.ts","../../../packages/draw/src/engines/flowchart/terminal.ts","../../../packages/draw/src/engines/flowchart/manual-input.ts","../../../packages/draw/src/engines/flowchart/preparation.ts","../../../packages/draw/src/engines/flowchart/manual-loop.ts","../../../packages/draw/src/engines/flowchart/merge.ts","../../../packages/draw/src/engines/flowchart/delay.ts","../../../packages/draw/src/engines/flowchart/stored-data.ts","../../../packages/draw/src/engines/flowchart/predefined-process.ts","../../../packages/draw/src/engines/flowchart/off-page.ts","../../../packages/draw/src/engines/flowchart/or.ts","../../../packages/draw/src/engines/flowchart/summing-junction.ts","../../../packages/draw/src/engines/flowchart/document.ts","../../../packages/draw/src/engines/flowchart/multi-document.ts","../../../packages/draw/src/engines/flowchart/database.ts","../../../packages/draw/src/engines/flowchart/hard-disk.ts","../../../packages/draw/src/engines/flowchart/internal-storage.ts","../../../packages/draw/src/engines/flowchart/note-curly-left.ts","../../../packages/draw/src/engines/flowchart/note-curly-right.ts","../../../packages/draw/src/engines/flowchart/note-square.ts","../../../packages/draw/src/engines/flowchart/display.ts","../../../packages/draw/src/engines/table/table.ts","../../../packages/draw/src/engines/uml/actor.ts","../../../packages/draw/src/engines/uml/container.ts","../../../packages/draw/src/engines/uml/package.ts","../../../packages/draw/src/engines/uml/combined-fragment.ts","../../../packages/draw/src/engines/uml/deletion.ts","../../../packages/draw/src/engines/uml/activity-class.ts","../../../packages/draw/src/engines/uml/note.ts","../../../packages/draw/src/engines/uml/assembly.ts","../../../packages/draw/src/engines/uml/required-interface.ts","../../../packages/draw/src/engines/uml/provided-interface.ts","../../../packages/draw/src/engines/uml/component.ts","../../../packages/draw/src/engines/uml/component-box.ts","../../../packages/draw/src/engines/uml/template.ts","../../../packages/draw/src/engines/index.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-common.ts","../../../packages/draw/src/interfaces/arrow-line.ts","../../../packages/draw/src/interfaces/element.ts","../../../packages/draw/src/interfaces/vector-line.ts","../../../packages/draw/src/interfaces/index.ts","../../../packages/draw/src/geometry.component.ts","../../../packages/draw/src/arrow-line.component.ts","../../../packages/draw/src/vector-line.component.ts","../../../packages/draw/src/plugins/with-draw-hotkey.ts","../../../packages/draw/src/plugins/with-geometry-create.ts","../../../packages/draw/src/plugins/with-draw-fragment.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-create.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-resize.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-bound-reaction.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-text.ts","../../../packages/draw/src/image.component.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-auto-complete.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-auto-complete-reaction.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-text-move.ts","../../../packages/draw/src/plugins/with-draw-rotate.ts","../../../packages/draw/src/table.component.ts","../../../packages/draw/src/plugins/with-table-resize.ts","../../../packages/draw/src/plugins/with-table.ts","../../../packages/draw/src/plugins/with-swimlane-create.ts","../../../packages/draw/src/plugins/with-swimlane.ts","../../../packages/draw/src/plugins/with-vector-line-create.ts","../../../packages/draw/src/plugins/with-vector-line-resize.ts","../../../packages/draw/src/plugins/with-draw.ts","../../../packages/draw/src/plait-draw.ts"],"sourcesContent":["import { PlaitElement, Point } from '@plait/core';\nimport { DrawTextInfo } from '../generators/text.generator';\nimport { ParagraphElement, StrokeStyle } from '@plait/common';\n\nexport enum BasicShapes {\n rectangle = 'rectangle',\n ellipse = 'ellipse',\n diamond = 'diamond',\n roundRectangle = 'roundRectangle',\n parallelogram = 'parallelogram',\n text = 'text',\n triangle = 'triangle',\n leftArrow = 'leftArrow',\n trapezoid = 'trapezoid',\n rightArrow = 'rightArrow',\n cross = 'cross',\n star = 'star',\n pentagon = 'pentagon',\n hexagon = 'hexagon',\n octagon = 'octagon',\n pentagonArrow = 'pentagonArrow',\n processArrow = 'processArrow',\n twoWayArrow = 'twoWayArrow',\n comment = 'comment',\n roundComment = 'roundComment',\n cloud = 'cloud'\n}\n\nexport enum FlowchartSymbols {\n process = 'process',\n decision = 'decision',\n data = 'data',\n connector = 'connector',\n terminal = 'terminal',\n manualInput = 'manualInput',\n preparation = 'preparation',\n manualLoop = 'manualLoop',\n merge = 'merge',\n delay = 'delay',\n storedData = 'storedData',\n or = 'or',\n summingJunction = 'summingJunction',\n predefinedProcess = 'predefinedProcess',\n offPage = 'offPage',\n document = 'document',\n multiDocument = 'multiDocument',\n database = 'database',\n hardDisk = 'hardDisk',\n internalStorage = 'internalStorage',\n noteCurlyRight = 'noteCurlyRight',\n noteCurlyLeft = 'noteCurlyLeft',\n noteSquare = 'noteSquare',\n display = 'display'\n}\n\nexport enum UMLSymbols {\n actor = 'actor',\n useCase = 'useCase',\n container = 'container',\n note = 'note',\n simpleClass = 'simpleClass',\n activityClass = 'activityClass',\n branchMerge = 'branchMerge',\n port = 'port',\n package = 'package',\n combinedFragment = 'combinedFragment',\n class = 'class',\n interface = 'interface',\n object = 'object',\n component = 'component',\n componentBox = 'componentBox',\n template = 'template',\n activation = 'activation',\n deletion = 'deletion',\n assembly = 'assembly',\n providedInterface = 'providedInterface',\n requiredInterface = 'requiredInterface'\n}\n\nexport enum GeometryCommonTextKeys {\n name = 'name',\n content = 'content'\n}\n\nexport type GeometryShapes = BasicShapes | FlowchartSymbols | UMLSymbols;\n\nexport type SwimlaneDirection = 'horizontal' | 'vertical';\n\nexport interface PlaitBaseGeometry<T extends string = 'geometry', P extends Point[] = [Point, Point], S extends string = GeometryShapes>\n extends PlaitElement {\n type: T;\n points: P;\n shape: S;\n}\n\nexport interface PlaitCommonGeometry<T extends string = 'geometry', P extends Point[] = [Point, Point], S extends string = GeometryShapes>\n extends PlaitBaseGeometry<T, P, S> {\n // node style attributes\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n angle?: number;\n opacity?: number;\n}\n\nexport interface PlaitCustomGeometry<T extends string = string, P extends Point[] = Point[], S extends string = string>\n extends PlaitBaseGeometry<T, P, S> {}\n\nexport interface PlaitMultipleTextGeometry extends PlaitCommonGeometry {\n texts: DrawTextInfo[];\n}\n\nexport interface PlaitGeometry extends PlaitCommonGeometry {\n text?: ParagraphElement;\n}\n\nexport interface PlaitRectangle extends PlaitGeometry {\n shape: BasicShapes.rectangle;\n}\n\nexport interface PlaitEllipse extends PlaitGeometry {\n shape: BasicShapes.ellipse;\n}\n\nexport interface PlaitDiamond extends PlaitGeometry {\n shape: BasicShapes.diamond;\n}\n\nexport const PlaitGeometry = {};\n","import { PlaitBaseTable } from './table';\n\nexport enum SwimlaneSymbols {\n swimlaneVertical = 'swimlaneVertical',\n swimlaneHorizontal = 'swimlaneHorizontal'\n}\n\nexport enum SwimlaneDrawSymbols {\n swimlaneVertical = 'swimlaneVertical',\n swimlaneHorizontal = 'swimlaneHorizontal',\n swimlaneVerticalWithHeader = 'swimlaneVerticalWithHeader',\n swimlaneHorizontalWithHeader = 'swimlaneHorizontalWithHeader'\n}\n\nexport interface PlaitSwimlane extends PlaitBaseTable {\n type: 'swimlane';\n shape: SwimlaneSymbols;\n header?: boolean;\n}\n\nexport interface PlaitSwimlaneVertical extends PlaitSwimlane {\n shape: SwimlaneSymbols.swimlaneVertical;\n}\n\nexport interface PlaitSwimlaneHorizontal extends PlaitSwimlane {\n shape: SwimlaneSymbols.swimlaneHorizontal;\n}\n","import { PlaitBoard, PlaitElement, Point } from '@plait/core';\nimport { ParagraphElement } from '@plait/common';\nimport { DrawOptions } from './engine';\n\nexport enum TableSymbols {\n table = 'table'\n}\n\nexport interface PlaitTableBoard extends PlaitBoard {\n buildTable: (element: PlaitBaseTable) => PlaitBaseTable;\n}\n\nexport interface PlaitBaseTable extends PlaitElement {\n id: string;\n points: Point[];\n rows: {\n id: string;\n height?: number;\n }[];\n columns: {\n id: string;\n width?: number;\n }[];\n cells: PlaitTableCell[];\n groupId?: string;\n}\n\nexport interface PlaitTable extends PlaitBaseTable {\n type: 'table';\n}\n\nexport interface PlaitTableCell {\n id: string;\n rowId: string;\n columnId: string;\n colspan?: number;\n rowspan?: number;\n text?: PlaitTableCellParagraph;\n fill?: string;\n}\n\nexport interface PlaitTableDrawOptions extends DrawOptions {\n element: PlaitTable;\n}\n\nexport interface PlaitTableCellWithPoints extends PlaitTableCell {\n points: [Point, Point];\n}\n\nexport interface PlaitTableCellParagraph extends ParagraphElement {\n direction?: 'vertical' | 'horizontal';\n}\n\nexport const PlaitTableElement = {\n isTable: (value: any): value is PlaitTable => {\n return value.type === 'table';\n },\n isVerticalText: (value: PlaitTableCell): value is PlaitTableCell => {\n return value.text?.direction === 'vertical';\n }\n};\n","export const WithDrawPluginKey = 'plait-draw-plugin-key';\n\nexport enum DrawI18nKey {\n lineText = 'line-text',\n geometryText = 'geometry-text'\n}","import { ACTIVE_STROKE_WIDTH, DEFAULT_COLOR } from '@plait/core';\nimport { BasicShapes, FlowchartSymbols, GeometryShapes, GeometryCommonTextKeys, UMLSymbols } from '../interfaces';\nimport { Alignment, DEFAULT_FILL } from '@plait/common';\n\nexport const ShapeDefaultSpace = {\n rectangleAndText: 4\n};\n\nexport const DefaultDrawStyle = {\n strokeWidth: 2,\n defaultRadius: 4,\n strokeColor: '#000',\n fill: DEFAULT_FILL\n};\n\nexport const DefaultDrawActiveStyle = {\n strokeWidth: ACTIVE_STROKE_WIDTH,\n selectionStrokeWidth: ACTIVE_STROKE_WIDTH\n};\n\nexport const DefaultBasicShapeProperty = {\n width: 100,\n height: 100,\n strokeColor: DEFAULT_COLOR,\n strokeWidth: 2\n};\n\nexport const DefaultPentagonArrowProperty = {\n width: 120,\n height: 50\n};\n\nexport const DefaultTwoWayArrowProperty = {\n width: 138,\n height: 80\n};\n\nexport const DefaultArrowProperty = {\n width: 100,\n height: 80\n};\n\nexport const DefaultCloudProperty = {\n width: 120,\n height: 100\n};\n\nexport const DefaultTextProperty = {\n width: 36,\n height: 20,\n text: '文本'\n};\n\nexport const GeometryThreshold = {\n defaultTextMaxWidth: 34 * 14\n};\n\nexport const DefaultConnectorProperty = {\n width: 44,\n height: 44\n};\n\nexport const DefaultFlowchartProperty = {\n width: 120,\n height: 60\n};\n\nexport const DefaultDataBaseProperty = {\n width: 70,\n height: 80\n};\n\nexport const DefaultInternalStorageProperty = {\n width: 80,\n height: 80\n};\n\nexport const DefaultDecisionProperty = {\n width: 140,\n height: 70\n};\n\nexport const DefaultDataProperty = {\n width: 124,\n height: 60\n};\n\nexport const DefaultDocumentProperty = {\n width: 120,\n height: 70\n};\n\nexport const DefaultNoteProperty = {\n width: 160,\n height: 100\n};\n\nexport const DefaultMultiDocumentProperty = {\n width: 120,\n height: 80\n};\n\nexport const DefaultManualInputProperty = {\n width: 117,\n height: 59\n};\n\nexport const DefaultMergeProperty = {\n width: 47,\n height: 33\n};\n\nexport const DefaultActorProperty = {\n width: 68,\n height: 100\n};\n\nexport const DefaultContainerProperty = {\n width: 300,\n height: 240\n};\n\nexport const DefaultPackageProperty = {\n width: 210,\n height: 150,\n texts: [\n {\n id: GeometryCommonTextKeys.name,\n text: '包名',\n align: Alignment.left\n },\n {\n id: GeometryCommonTextKeys.content,\n text: '',\n align: Alignment.left\n }\n ]\n};\n\nexport const DefaultActivationProperty = {\n width: 18,\n height: 80\n};\n\nexport const DefaultObjectProperty = {\n width: 120,\n height: 60\n};\n\nexport const DefaultComponentBoxProperty = {\n width: 200,\n height: 150\n};\n\nexport const DefaultDeletionProperty = {\n width: 40,\n height: 40\n};\n\nexport const DefaultPortProperty = {\n width: 20,\n height: 20\n};\n\nexport const DefaultRequiredInterfaceProperty = {\n width: 70,\n height: 56\n};\n\nexport const DefaultAssemblyProperty = {\n width: 120,\n height: 56\n};\n\nexport const DefaultProvidedInterfaceProperty = {\n width: 70,\n height: 34\n};\n\nexport const DefaultCombinedFragmentProperty = {\n width: 400,\n height: 280,\n texts: [\n {\n id: GeometryCommonTextKeys.name,\n text: 'Opt | Alt | Loop',\n align: Alignment.left\n },\n {\n id: GeometryCommonTextKeys.content,\n text: '[Condition]',\n align: Alignment.left\n }\n ]\n};\n\nexport const DefaultClassProperty = {\n width: 230,\n height: 180,\n texts: [\n { text: 'Class', align: Alignment.center },\n {\n text: '+ attribute1:type defaultValue\\n+ attribute2:type\\n- attribute3:type',\n align: Alignment.left\n },\n {\n text: '+ operation1(params):returnType\\n- operation2(params)\\n- operation3()',\n align: Alignment.left\n }\n ]\n};\n\nexport const DefaultInterfaceProperty = {\n width: 230,\n height: 140,\n texts: [\n { text: '<<interface>>\\nInterface', align: Alignment.center },\n {\n text: '+ operation1(params):returnType\\n- operation2(params)\\n- operation3()',\n align: Alignment.left\n }\n ]\n};\n\nexport const DefaultBasicShapePropertyMap: Record<string, { width: number; height: number }> = {\n [BasicShapes.pentagonArrow]: DefaultPentagonArrowProperty,\n [BasicShapes.processArrow]: DefaultPentagonArrowProperty,\n [BasicShapes.cloud]: DefaultCloudProperty,\n [BasicShapes.twoWayArrow]: DefaultTwoWayArrowProperty,\n [BasicShapes.leftArrow]: DefaultArrowProperty,\n [BasicShapes.rightArrow]: DefaultArrowProperty\n};\n\nexport const DefaultFlowchartPropertyMap = {\n [FlowchartSymbols.connector]: DefaultConnectorProperty,\n [FlowchartSymbols.process]: DefaultFlowchartProperty,\n [FlowchartSymbols.decision]: DefaultDecisionProperty,\n [FlowchartSymbols.data]: DefaultDataProperty,\n [FlowchartSymbols.terminal]: DefaultFlowchartProperty,\n [FlowchartSymbols.manualInput]: DefaultManualInputProperty,\n [FlowchartSymbols.preparation]: DefaultFlowchartProperty,\n [FlowchartSymbols.manualLoop]: DefaultFlowchartProperty,\n [FlowchartSymbols.merge]: DefaultMergeProperty,\n [FlowchartSymbols.delay]: DefaultFlowchartProperty,\n [FlowchartSymbols.storedData]: DefaultFlowchartProperty,\n [FlowchartSymbols.or]: DefaultConnectorProperty,\n [FlowchartSymbols.summingJunction]: DefaultConnectorProperty,\n [FlowchartSymbols.predefinedProcess]: DefaultFlowchartProperty,\n [FlowchartSymbols.offPage]: DefaultFlowchartProperty,\n [FlowchartSymbols.document]: DefaultDocumentProperty,\n [FlowchartSymbols.multiDocument]: DefaultMultiDocumentProperty,\n [FlowchartSymbols.database]: DefaultDataBaseProperty,\n [FlowchartSymbols.hardDisk]: DefaultFlowchartProperty,\n [FlowchartSymbols.internalStorage]: DefaultInternalStorageProperty,\n [FlowchartSymbols.noteCurlyLeft]: DefaultNoteProperty,\n [FlowchartSymbols.noteCurlyRight]: DefaultNoteProperty,\n [FlowchartSymbols.noteSquare]: DefaultNoteProperty,\n [FlowchartSymbols.display]: DefaultFlowchartProperty\n};\n\nexport const DefaultUMLPropertyMap = {\n [UMLSymbols.actor]: DefaultActorProperty,\n [UMLSymbols.useCase]: DefaultDocumentProperty,\n [UMLSymbols.container]: DefaultContainerProperty,\n [UMLSymbols.note]: DefaultObjectProperty,\n [UMLSymbols.package]: DefaultPackageProperty,\n [UMLSymbols.combinedFragment]: DefaultCombinedFragmentProperty,\n [UMLSymbols.class]: DefaultClassProperty,\n [UMLSymbols.interface]: DefaultInterfaceProperty,\n [UMLSymbols.activation]: DefaultActivationProperty,\n [UMLSymbols.object]: DefaultObjectProperty,\n [UMLSymbols.deletion]: DefaultDeletionProperty,\n [UMLSymbols.activityClass]: DefaultObjectProperty,\n [UMLSymbols.simpleClass]: DefaultObjectProperty,\n [UMLSymbols.component]: DefaultMultiDocumentProperty,\n [UMLSymbols.template]: DefaultMultiDocumentProperty,\n [UMLSymbols.componentBox]: DefaultComponentBoxProperty,\n [UMLSymbols.port]: DefaultPortProperty,\n [UMLSymbols.branchMerge]: DefaultDeletionProperty,\n [UMLSymbols.assembly]: DefaultAssemblyProperty,\n [UMLSymbols.providedInterface]: DefaultProvidedInterfaceProperty,\n [UMLSymbols.requiredInterface]: DefaultRequiredInterfaceProperty\n};\n\nexport const MultipleTextGeometryTextKeys: { [key in GeometryShapes]?: string[] } = {\n [UMLSymbols.package]: Object.keys(GeometryCommonTextKeys),\n [UMLSymbols.combinedFragment]: Object.keys(GeometryCommonTextKeys)\n};\n\nexport const LINE_HIT_GEOMETRY_BUFFER = 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 VectorLinePointerType,\n SwimlaneSymbols\n} from '../interfaces';\n\nexport type DrawPointerType =\n | BasicShapes\n | ArrowLineShape\n | FlowchartSymbols\n | SwimlaneDrawSymbols\n | TableSymbols\n | UMLSymbols\n | VectorLinePointerType;\n\nexport const getGeometryPointers = () => {\n return [...Object.keys(BasicShapes), ...Object.keys(FlowchartSymbols), ...Object.keys(UMLSymbols)];\n};\n\nexport const getSwimlanePointers = () => {\n return Object.keys(SwimlaneDrawSymbols);\n};\n\nexport const getSwimlaneShapes = () => {\n return Object.keys(SwimlaneSymbols);\n};\n\nexport const getBasicPointers = () => {\n return Object.keys(BasicShapes);\n};\n\nexport const getFlowchartPointers = () => {\n return Object.keys(FlowchartSymbols);\n};\n\nexport const getUMLPointers = () => {\n return Object.keys(UMLSymbols);\n};\n\nexport const getArrowLinePointers = () => {\n return Object.keys(ArrowLineShape);\n};\n\nexport const getVectorLinePointers = () => {\n return Object.keys(VectorLinePointerType);\n};\n","export const DEFAULT_IMAGE_WIDTH = 1000;\n","import { DEFAULT_COLOR, ThemeColorMode } from '@plait/core';\n\nexport const DrawThemeColors = {\n [ThemeColorMode.default]: {\n strokeColor: DEFAULT_COLOR,\n fill: '#FFFFFF'\n },\n [ThemeColorMode.colorful]: {\n strokeColor: '#06ADBF',\n fill: '#CDEFF2'\n },\n [ThemeColorMode.soft]: {\n strokeColor: '#6D89C1',\n fill: '#DADFEB'\n },\n [ThemeColorMode.retro]: {\n strokeColor: '#E9C358',\n fill: '#F6EDCF'\n },\n [ThemeColorMode.dark]: {\n strokeColor: '#FFFFFF',\n fill: '#434343'\n },\n [ThemeColorMode.starry]: {\n strokeColor: '#42ABE5',\n fill: '#163F5A'\n }\n};\n","import { SwimlaneDrawSymbols } from '../interfaces/swimlane';\n\nexport const SWIMLANE_HEADER_SIZE = 42;\n\nexport const DefaultSwimlaneVerticalWithHeaderProperty = {\n width: 580,\n height: 524\n};\n\nexport const DefaultSwimlaneHorizontalWithHeaderProperty = {\n width: 524,\n height: 580\n};\n\nexport const DefaultSwimlaneVerticalProperty = {\n width: 580,\n height: 524\n};\n\nexport const DefaultSwimlaneHorizontalProperty = {\n width: 524,\n height: 580\n};\n\nexport const DefaultSwimlanePropertyMap: Record<string, { width: number; height: number }> = {\n [SwimlaneDrawSymbols.swimlaneHorizontal]: DefaultSwimlaneHorizontalProperty,\n [SwimlaneDrawSymbols.swimlaneVertical]: DefaultSwimlaneVerticalProperty,\n [SwimlaneDrawSymbols.swimlaneHorizontalWithHeader]: DefaultSwimlaneHorizontalWithHeaderProperty,\n [SwimlaneDrawSymbols.swimlaneVerticalWithHeader]: DefaultSwimlaneVerticalWithHeaderProperty\n};\n","export const MIN_TEXT_WIDTH = 5;\n","export const DefaultLineStyle = {\n strokeWidth: 2,\n strokeColor: '#000'\n};\n\nexport const LINE_TEXT_SPACE = 4;\n\nexport const LINE_AUTO_COMPLETE_DIAMETER = 6;\n\nexport const LINE_AUTO_COMPLETE_OPACITY = 1;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_OPACITY = 1;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_DIAMETER = 12;\n\nexport const LINE_ALIGN_TOLERANCE = 3;\n\nexport const LINE_TEXT = '文本';\n","import {\n ParagraphElement,\n PlaitCommonElementRef,\n TextManage,\n TextManageChangeData,\n TextPlugin,\n WithTextPluginKey,\n WithTextPluginOptions\n} from '@plait/common';\nimport { PlaitBoard, PlaitElement, PlaitOptionsBoard, RectangleClient } from '@plait/core';\nimport { getEngine } from '../engines';\nimport { DrawShapes, PlaitGeometry, TextRectangleOptions } from '../interfaces';\nimport { getTextKey, getTextRectangle } from '../utils';\n\nexport interface DrawTextInfo extends TextRectangleOptions {\n text: ParagraphElement;\n}\n\nexport interface TextGeneratorOptions<T> {\n onChange: (element: T, textChangeRef: TextManageChangeData, text: DrawTextInfo) => void;\n getRenderRectangle?: (element: T, text: DrawTextInfo) => RectangleClient;\n getMaxWidth?: () => number;\n}\n\n// TODO: 是否可以完全基于位置定位 TextManager,实现 line 和 多文本 geometry 统一\n// 一个元素有多个文本时,单纯通过位置无法获取 TextManage,因此这里单独通过 Map 保存关键字 key 和 TextManage 的对应关系\n// 1. 单文本元素 key 就是元素的 id\n// 2. 表格元素 key 是单元格的 id\n// 3. 符合 isMultipleTextGeometry 的元素,key 是元素 id + text.id (通常不是 id 而是文本位置的常量)\n// 4. arrow-line 和 vector-line 文本不依赖于 text.generator,基于 text 可以直接找到 TextManage\nexport const KEY_TO_TEXT_MANAGE: WeakMap<PlaitBoard, { [key: string]: TextManage }> = new WeakMap();\n\nexport const setTextManage = (board: PlaitBoard, element: PlaitElement, text: DrawTextInfo, textManage: TextManage) => {\n const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n return KEY_TO_TEXT_MANAGE.set(board, { ...textManages, [getTextKey(element, text)]: textManage });\n};\n\nexport const getTextManage = (board: PlaitBoard, element: PlaitElement | undefined, text: Pick<DrawTextInfo, 'id'>): TextManage => {\n const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n return textManages[getTextKey(element, text)];\n};\n\nexport const deleteTextManage = (board: PlaitBoard, key: string) => {\n const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n delete textManages[key];\n KEY_TO_TEXT_MANAGE.set(board, textManages);\n};\n\nexport class TextGenerator<T extends PlaitElement = PlaitGeometry> {\n protected board: PlaitBoard;\n\n protected element: T;\n\n protected texts: DrawTextInfo[];\n\n protected options: TextGeneratorOptions<T>;\n\n public textManages!: TextManage[];\n\n get shape(): DrawShapes {\n return this.element.shape || this.element.type;\n }\n\n constructor(board: PlaitBoard, element: T, texts: DrawTextInfo[], options: TextGeneratorOptions<T>) {\n this.board = board;\n this.texts = texts;\n this.element = element;\n this.options = options;\n }\n\n initialize() {\n const textPlugins = ((this.board as PlaitOptionsBoard).getPluginOptions<WithTextPluginOptions>(WithTextPluginKey) || {})\n .textPlugins;\n this.textManages = this.texts.map(text => {\n const textManage = this.createTextManage(text, textPlugins);\n setTextManage(this.board, this.element, text, textManage);\n return textManage;\n });\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(this.element);\n ref.initializeTextManage(this.textManages);\n }\n\n draw(elementG: SVGElement) {\n const centerPoint = RectangleClient.getCenterPoint(this.board.getRectangle(this.element)!);\n this.texts.forEach(drawShapeText => {\n const textManage = getTextManage(this.board, this.element, drawShapeText);\n if (drawShapeText.text && textManage) {\n textManage.draw(drawShapeText.text);\n elementG.append(textManage.g);\n (this.element.angle || this.element.angle === 0) && textManage.updateAngle(centerPoint, this.element.angle);\n }\n });\n }\n\n update(element: T, previousDrawShapeTexts: DrawTextInfo[], currentDrawShapeTexts: DrawTextInfo[], elementG: SVGElement) {\n this.element = element;\n\n const centerPoint = RectangleClient.getCenterPoint(this.board.getRectangle(this.element)!);\n const textPlugins = ((this.board as PlaitOptionsBoard).getPluginOptions<WithTextPluginOptions>(WithTextPluginKey) || {})\n .textPlugins;\n const removedTexts = previousDrawShapeTexts.filter(value => {\n return !currentDrawShapeTexts.find(item => item.id === value.id);\n });\n if (removedTexts.length) {\n removedTexts.forEach(item => {\n const textManage = getTextManage(this.board, element, item);\n const index = this.textManages.findIndex(value => value === textManage);\n if (index > -1 && item.text) {\n this.textManages.splice(index, 1);\n }\n textManage?.destroy();\n deleteTextManage(this.board, item.id);\n });\n }\n currentDrawShapeTexts.forEach(drawShapeText => {\n if (drawShapeText.text) {\n let textManage = getTextManage(this.board, this.element, drawShapeText);\n if (!textManage) {\n textManage = this.createTextManage(drawShapeText, textPlugins);\n setTextManage(this.board, element, drawShapeText, textManage);\n textManage.draw(drawShapeText.text);\n elementG.append(textManage.g);\n this.textManages.push(textManage);\n } else {\n textManage.updateText(drawShapeText.text);\n textManage.updateRectangle();\n }\n (this.element.angle || this.element.angle === 0) && textManage.updateAngle(centerPoint, this.element.angle);\n }\n });\n }\n\n private createTextManage(text: DrawTextInfo, textPlugins?: TextPlugin[]) {\n const textManage = new TextManage(this.board, {\n getRectangle: () => {\n return this.getRectangle(text);\n },\n onChange: (data: TextManageChangeData) => {\n return this.options.onChange(this.element, data, text);\n },\n getMaxWidth: () => {\n return this.getMaxWidth(text);\n },\n getRenderRectangle: () => {\n return this.options.getRenderRectangle ? this.options.getRenderRectangle(this.element, text) : this.getRectangle(text);\n },\n textPlugins\n });\n return textManage;\n }\n\n getRectangle(text: DrawTextInfo) {\n const getRectangle = getEngine<T>(this.shape).getTextRectangle;\n if (getRectangle) {\n return getRectangle(this.board, this.element, text);\n }\n return getTextRectangle(this.board, this.element);\n }\n\n getMaxWidth(text: DrawTextInfo) {\n return this.options.getMaxWidth ? this.options.getMaxWidth() : this.getRectangle(text).width;\n }\n\n destroy() {\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(this.element);\n ref.destroyTextManage();\n this.textManages = [];\n this.texts.forEach(item => {\n deleteTextManage(this.board, item.id);\n });\n }\n}\n","import { PlaitBoard, getSelectedElements, PlaitElement } from '@plait/core';\nimport { PlaitTableCell, PlaitBaseTable, PlaitTable } from '../interfaces/table';\nimport { PlaitDrawElement } from '../interfaces';\n\nexport const isSingleSelectTable = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board);\n return selectedElements && selectedElements.length === 1 && PlaitDrawElement.isElementByTable(selectedElements[0]);\n};\n\nexport const getSelectedTableElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n return selectedElements.filter(value => PlaitDrawElement.isElementByTable(value)) as PlaitTable[];\n};\n\nexport const SELECTED_CELLS = new WeakMap<PlaitBaseTable, PlaitTableCell[]>();\n\nexport function getSelectedCells(element: PlaitBaseTable) {\n return SELECTED_CELLS.get(element);\n}\n\nexport function setSelectedCells(element: PlaitBaseTable, cells: PlaitTableCell[]) {\n return SELECTED_CELLS.set(element, cells);\n}\n\nexport function clearSelectedCells(element: PlaitBaseTable) {\n return SELECTED_CELLS.delete(element);\n}\n","import { idCreator, PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitBaseTable, PlaitTable, PlaitTableBoard, PlaitTableCell, PlaitTableCellWithPoints } from '../interfaces/table';\nimport { getTextManage } from '../generators/text.generator';\nimport { Alignment } from '@plait/common';\nimport { TEXT_DEFAULT_HEIGHT } from '@plait/text-plugins';\nimport { getSelectedCells, getSelectedTableElements, isSingleSelectTable } from './table-selected';\nimport { BaseEditor } from 'slate';\n\nexport function getCellsWithPoints(board: PlaitBoard, element: PlaitBaseTable): PlaitTableCellWithPoints[] {\n const table = (board as PlaitTableBoard)?.buildTable(element);\n if (!table || !table.points || !table.columns || !table.rows) {\n throw new Error('can not get table cells points');\n }\n const rectangle = RectangleClient.getRectangleByPoints(table.points);\n const columnsCount = table.columns.length;\n const rowsCount = table.rows.length;\n const cellWidths = calculateCellsSize(table.columns, rectangle.width, columnsCount, true);\n const cellHeights = calculateCellsSize(table.rows, rectangle.height, rowsCount, false);\n const cells: PlaitTableCellWithPoints[] = table.cells.map(cell => {\n const rowIdx = table.rows.findIndex(row => row.id === cell.rowId);\n const columnIdx = table.columns.findIndex(column => column.id === cell.columnId);\n\n let cellTopLeftX = rectangle.x;\n for (let i = 0; i < columnIdx; i++) {\n cellTopLeftX += cellWidths[i];\n }\n\n let cellTopLeftY = rectangle.y;\n for (let i = 0; i < rowIdx; i++) {\n cellTopLeftY += cellHeights[i];\n }\n\n const cellWidth = calculateCellSize(cell, cellWidths, columnIdx, true);\n const cellBottomRightX = cellTopLeftX + cellWidth;\n\n const cellHeight = calculateCellSize(cell, cellHeights, rowIdx, false);\n const cellBottomRightY = cellTopLeftY + cellHeight;\n\n return {\n ...cell,\n points: [\n [cellTopLeftX, cellTopLeftY],\n [cellBottomRightX, cellBottomRightY]\n ]\n };\n });\n\n return cells;\n}\n\nexport function getCellWithPoints(board: PlaitBoard, table: PlaitBaseTable, cellId: string) {\n try {\n const cells = getCellsWithPoints(board as PlaitTableBoard, table);\n const cellIndex = cells && table.cells.findIndex(item => item.id === cellId);\n return cells[cellIndex];\n } catch (error) {\n throw new Error('can not get table cell points');\n }\n}\n\nfunction calculateCellsSize(items: { id: string; [key: string]: any }[], tableSize: number, count: number, isWidth: boolean) {\n const cellSizes: number[] = [];\n const sizeType = isWidth ? 'width' : 'height';\n\n // The remaining size of the table excluding cells with already set sizes.\n let totalSizeRemaining = tableSize;\n\n items.forEach((item, index) => {\n if (item[sizeType]) {\n cellSizes[index] = item[sizeType];\n totalSizeRemaining -= item[sizeType];\n }\n });\n\n // Divide the remaining size equally.\n const remainingItemCount = count - cellSizes.filter(item => !!item).length;\n const remainingCellSize = remainingItemCount > 0 ? totalSizeRemaining / remainingItemCount : 0;\n for (let i = 0; i < count; i++) {\n if (!cellSizes[i]) {\n cellSizes[i] = remainingCellSize;\n }\n }\n return cellSizes;\n}\n\nfunction calculateCellSize(cell: PlaitTableCell, sizes: number[], index: number, isWidth: boolean) {\n const span = isWidth ? cell.colspan || 1 : cell.rowspan || 1;\n let size = 0;\n for (let i = 0; i < span; i++) {\n const cellIndex = index + i;\n size += sizes[cellIndex];\n }\n return size;\n}\n\nexport function getHitCell(board: PlaitTableBoard, element: PlaitBaseTable, point: Point) {\n const table = board.buildTable(element);\n const cells = getCellsWithPoints(board, table);\n const rectangle = RectangleClient.getRectangleByPoints([point, point]);\n const cell = cells.find(item => {\n const cellRectangle = RectangleClient.getRectangleByPoints(item.points);\n return RectangleClient.isHit(rectangle, cellRectangle);\n });\n if (cell) {\n return table.cells.find(item => item.id === cell.id);\n }\n return null;\n}\n\nexport function editCell(board: PlaitBoard, cell: PlaitTableCell) {\n const textManage = getTextManageByCell(board, cell);\n textManage && textManage.edit();\n}\n\nexport function getTextManageByCell(board: PlaitBoard, cell: PlaitTableCell) {\n return getTextManage(board, undefined, cell);\n}\n\nexport const updateColumns = (table: PlaitBaseTable, columnId: string, width: number, offset: number) => {\n const columns = table.columns.map(item => (item.id === columnId ? { ...item, width } : item));\n const points = [table.points[0], [table.points[1][0] + offset, table.points[1][1]]] as Point[];\n return { columns, points };\n};\n\nexport const updateRows = (table: PlaitBaseTable, rowId: string, height: number, offset: number) => {\n const rows = table.rows.map(item => (item.id === rowId ? { ...item, height } : item));\n const points = [table.points[0], [table.points[1][0], table.points[1][1] + offset]] as Point[];\n return { rows, points };\n};\n\nexport function updateCellIdsByRowOrColumn(cells: PlaitTableCell[], oldId: string, newId: string, type: 'row' | 'column') {\n const id: 'rowId' | 'columnId' = `${type}Id`;\n cells.forEach(item => {\n if (item[id] === oldId) {\n item[id] = newId;\n }\n });\n}\n\nexport function updateRowOrColumnIds(element: PlaitTable, type: 'row' | 'column') {\n element[`${type}s`].forEach(item => {\n const newId = idCreator();\n updateCellIdsByRowOrColumn(element.cells, item.id, newId, type);\n item.id = newId;\n });\n}\n\nexport function updateCellIds(cells: PlaitTableCell[]) {\n cells.forEach(item => {\n const newId = idCreator();\n item.id = newId;\n });\n}\n\nexport function isCellIncludeText(cell: PlaitTableCell) {\n return cell.text;\n}\n\nexport function getCellsRectangle(board: PlaitTableBoard, element: PlaitTable, cells: PlaitTableCell[]) {\n const cellsWithPoints = getCellsWithPoints(board as PlaitTableBoard, element);\n const points = cells.map(cell => {\n const cellWithPoints = cellsWithPoints.find(item => item.id === cell.id);\n return cellWithPoints!.points;\n });\n return RectangleClient.getRectangleByPoints(points);\n}\n\nexport const createCell = (rowId: string, columnId: string, text: string | null = null) => {\n const cell: PlaitTableCell = {\n id: idCreator(),\n rowId,\n columnId\n };\n if (text !== null) {\n cell['text'] = {\n children: [{ text }],\n align: Alignment.center\n };\n }\n return cell;\n};\n\nexport const getSelectedTableCellsEditor = (board: PlaitBoard): BaseEditor[] | undefined => {\n if (isSingleSelectTable(board)) {\n const elements = getSelectedTableElements(board);\n const selectedCells = getSelectedCells(elements[0]);\n const selectedCellsEditor = selectedCells?.map(cell => {\n const textManage = getTextManageByCell(board, cell);\n return textManage?.editor;\n });\n if (selectedCellsEditor?.length) {\n return selectedCellsEditor as BaseEditor[];\n }\n }\n return undefined;\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { BasicShapes, GeometryShapes, MemorizeKey, PlaitDrawElement } from '../interfaces';\nimport { getMemorizedLatest, memorizeLatest } from '@plait/common';\nimport { DrawPointerType } from '../constants';\nimport { BaseOperation, BaseSetNodeOperation, Node } from 'slate';\n\nconst SHAPE_MAX_LENGTH = 6;\nconst memorizedShape: WeakMap<PlaitBoard, GeometryShapes[]> = new WeakMap();\n\nexport const getMemorizeKey = (element: PlaitElement) => {\n let key = '';\n switch (true) {\n case PlaitDrawElement.isText(element): {\n key = MemorizeKey.text;\n break;\n }\n case PlaitDrawElement.isBasicShape(element): {\n key = MemorizeKey.basicShape;\n break;\n }\n case PlaitDrawElement.isFlowchart(element): {\n key = MemorizeKey.flowchart;\n break;\n }\n case PlaitDrawElement.isArrowLine(element): {\n key = MemorizeKey.arrowLine;\n break;\n }\n case PlaitDrawElement.isUML(element): {\n key = MemorizeKey.UML;\n }\n }\n return key;\n};\n\nexport const getLineMemorizedLatest = () => {\n const properties = getMemorizedLatest(MemorizeKey.arrowLine);\n return { ...properties };\n};\n\nexport const getMemorizedLatestByPointer = (pointer: DrawPointerType) => {\n let memorizeKey = '';\n if (PlaitDrawElement.isBasicShape({ shape: pointer })) {\n memorizeKey = pointer === BasicShapes.text ? MemorizeKey.text : MemorizeKey.basicShape;\n } else if (PlaitDrawElement.isUML({ shape: pointer })) {\n memorizeKey = MemorizeKey.UML;\n } else {\n memorizeKey = MemorizeKey.flowchart;\n }\n const properties = { ...getMemorizedLatest(memorizeKey) };\n const textProperties = { ...properties.text };\n delete properties.text;\n return { textProperties, geometryProperties: properties };\n};\n\nexport const memorizeLatestText = <T extends PlaitElement = PlaitDrawElement>(element: T, operations: BaseOperation[]) => {\n const memorizeKey = getMemorizeKey(element);\n let textMemory = getMemorizedLatest(memorizeKey)?.text || {};\n const setNodeOperation = operations.find((operation) => operation.type === 'set_node');\n if (setNodeOperation) {\n const { properties, newProperties } = setNodeOperation as BaseSetNodeOperation;\n for (const key in newProperties) {\n const value = newProperties[key as keyof Partial<Node>];\n if (value == null) {\n delete textMemory[key];\n } else {\n textMemory[key] = value;\n }\n }\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete textMemory[key];\n }\n }\n memorizeLatest(memorizeKey, 'text', textMemory);\n }\n};\n\nexport const memorizeLatestShape = (board: PlaitBoard, shape: GeometryShapes) => {\n const shapes = memorizedShape.has(board) ? memorizedShape.get(board)! : [];\n const shapeIndex = shapes.indexOf(shape);\n if (shape === BasicShapes.text || shapeIndex === 0) {\n return;\n }\n if (shapeIndex !== -1) {\n shapes.splice(shapeIndex, 1);\n } else {\n if (shapes.length === SHAPE_MAX_LENGTH) {\n shapes.pop();\n }\n }\n shapes.unshift(shape);\n memorizedShape.set(board, shapes);\n};\n\nexport const getMemorizedLatestShape = (board: PlaitBoard) => {\n return memorizedShape.get(board);\n};\n","import { ElbowLineRouteOptions, ResizeState, generateElbowLineRoute, removeDuplicatePoints, simplifyOrthogonalPoints } from '@plait/common';\nimport { PlaitBoard, Point, RectangleClient, createDebugGenerator } from '@plait/core';\nimport { 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 { DEFAULT_FONT_FAMILY, ElementSize, getElementSize, ParagraphElement } from '@plait/common';\nimport { PlaitBoard } from '@plait/core';\nimport { DEFAULT_FONT_SIZE } from '@plait/text-plugins';\nimport { MIN_TEXT_WIDTH } from '../constants';\n\nexport const getTextSize = (board: PlaitBoard, text: ParagraphElement, maxWidth?: number): ElementSize => {\n const textSize = getElementSize(board, text, { fontSize: DEFAULT_FONT_SIZE, fontFamily: DEFAULT_FONT_FAMILY }, maxWidth);\n const normalizedTextSize = normalizeWidthAndHeight(textSize);\n return normalizedTextSize;\n};\n\nexport const normalizeWidthAndHeight = (textSize: ElementSize) => {\n return { ...textSize, width: textSize.width < MIN_TEXT_WIDTH ? MIN_TEXT_WIDTH : textSize.width };\n};\n","import {\n Point,\n idCreator,\n PlaitBoard,\n createG,\n RectangleClient,\n findElements,\n PlaitElement,\n drawLinearPath,\n createMask,\n createRect,\n distanceBetweenPointAndPoint,\n catmullRomFitting,\n setStrokeLinecap\n} from '@plait/core';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport {\n getPointOnPolyline,\n getPointByVectorComponent,\n removeDuplicatePoints,\n getExtendPoint,\n getStrokeLineDash,\n StrokeStyle\n} from '@plait/common';\nimport {\n ArrowLineHandle,\n ArrowLineMarkerType,\n ArrowLineShape,\n ArrowLineText,\n PlaitArrowLine,\n PlaitDrawElement,\n PlaitShapeElement\n} from '../../interfaces';\nimport { getStrokeColorByElement, getStrokeStyleByElement } from '../style/stroke';\nimport { getEngine } from '../../engines';\nimport { getElementShape } from '../shape';\nimport { DefaultLineStyle, LINE_TEXT_SPACE } from '../../constants/line';\nimport { LINE_SNAPPING_CONNECTOR_BUFFER } from '../../constants';\nimport { getLineMemorizedLatest } from '../memorize';\nimport { 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';\nimport { getTextSize } from '../text-size';\n\nexport const createArrowLineElement = (\n shape: ArrowLineShape,\n points: [Point, Point],\n source: ArrowLineHandle,\n target: ArrowLineHandle,\n texts?: ArrowLineText[],\n options?: Pick<PlaitArrowLine, 'strokeColor' | 'strokeWidth'>\n): PlaitArrowLine => {\n return {\n id: idCreator(),\n type: 'arrow-line',\n shape,\n source,\n texts: texts ? texts : [],\n target,\n opacity: 1,\n points,\n ...options\n };\n};\n\nexport const getArrowLinePoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n switch (element.shape) {\n case ArrowLineShape.elbow: {\n return getElbowPoints(board, element);\n }\n case ArrowLineShape.curve: {\n return getCurvePoints(board, element);\n }\n default: {\n const points = PlaitArrowLine.getPoints(board, element);\n const handleRefPair = getArrowLineHandleRefPair(board, element);\n points[0] = handleRefPair.source.point;\n points[points.length - 1] = handleRefPair.target.point;\n return points;\n }\n }\n};\n\nexport const getCurvePoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n if (element.points.length === 2) {\n const handleRefPair = getArrowLineHandleRefPair(board, element);\n const { source, target } = handleRefPair;\n const sourceBoundElement = handleRefPair.source.boundElement;\n const targetBoundElement = handleRefPair.target.boundElement;\n let curvePoints: Point[] = [source.point];\n const sumDistance = distanceBetweenPointAndPoint(...source.point, ...target.point);\n const offset = 12 + sumDistance / 3;\n if (sourceBoundElement) {\n curvePoints.push(getPointByVectorComponent(source.point, source.vector, offset));\n }\n if (targetBoundElement) {\n curvePoints.push(getPointByVectorComponent(target.point, target.vector, offset));\n }\n const isSingleBound = (sourceBoundElement && !targetBoundElement) || (!sourceBoundElement && targetBoundElement);\n if (isSingleBound) {\n curvePoints.push(target.point);\n const points = Q2C(curvePoints);\n return pointsOnBezierCurves(points) as Point[];\n }\n if (!sourceBoundElement && !targetBoundElement) {\n curvePoints.push(getPointByVectorComponent(source.point, source.vector, offset));\n curvePoints.push(getPointByVectorComponent(target.point, target.vector, offset));\n }\n curvePoints.push(target.point);\n return pointsOnBezierCurves(curvePoints) as Point[];\n } else {\n let dataPoints = PlaitArrowLine.getPoints(board, element);\n dataPoints = removeDuplicatePoints(dataPoints);\n const points = catmullRomFitting(dataPoints);\n return pointsOnBezierCurves(points) as Point[];\n }\n};\n\nexport const drawArrowLine = (board: PlaitBoard, element: PlaitArrowLine) => {\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(board, element);\n const strokeStyle = getStrokeStyleByElement(board, element);\n const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n const options = { stroke: strokeColor, strokeWidth, strokeLineDash };\n const lineG = createG();\n let points = getArrowLinePoints(board, element);\n let line;\n if (element.shape === ArrowLineShape.curve) {\n line = PlaitBoard.getRoughSVG(board).curve(points, options);\n } else {\n line = drawLinearPath(points, options);\n }\n const id = idCreator();\n line.setAttribute('mask', `url(#${id})`);\n if (element.strokeStyle === StrokeStyle.dotted) {\n setStrokeLinecap(line, 'round');\n }\n lineG.appendChild(line);\n\n const { mask, maskTargetFillRect } = drawArrowLineMask(board, element as PlaitArrowLine, id);\n lineG.appendChild(mask);\n line.appendChild(maskTargetFillRect);\n const arrow = drawArrowLineArrow(element as PlaitArrowLine, points, { stroke: strokeColor, strokeWidth });\n arrow && lineG.appendChild(arrow);\n return lineG;\n};\n\nexport const getHitConnection = (board: PlaitBoard, point: Point, hitElement: PlaitShapeElement): Point => {\n const ref = getSnappingRef(board, hitElement, point);\n const connectionPoint = ref.connectorPoint || ref.edgePoint;\n return getHitConnectionFromConnectionPoint(connectionPoint, hitElement);\n};\n\nexport const getHitConnectionFromConnectionPoint = (connectionPoint: Point, hitElement: PlaitShapeElement): Point => {\n let rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n return [(connectionPoint[0] - rectangle.x) / rectangle.width, (connectionPoint[1] - rectangle.y) / rectangle.height];\n};\n\nexport const getHitConnectorPoint = (point: Point, hitElement: PlaitShapeElement) => {\n const rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n const shape = getElementShape(hitElement);\n const connectorPoints = getEngine(shape).getConnectorPoints(rectangle);\n return connectorPoints.find((connectorPoint) => {\n return distanceBetweenPointAndPoint(...connectorPoint, ...point) <= LINE_SNAPPING_CONNECTOR_BUFFER;\n });\n};\n\nexport const getArrowLineTextRectangle = (board: PlaitBoard, element: PlaitArrowLine, index: number): RectangleClient => {\n const text = element.texts[index];\n const elbowPoints = getArrowLinePoints(board, element);\n const point = getPointOnPolyline(elbowPoints, text.position);\n const textSize = getTextSize(board, text.text);\n return {\n x: point[0] - textSize.width / 2,\n y: point[1] - textSize.height / 2,\n width: textSize.width,\n height: textSize.height\n };\n};\n\nexport const getArrowLines = (board: PlaitBoard) => {\n return findElements(board, {\n match: (element: PlaitElement) => PlaitDrawElement.isArrowLine(element),\n recursion: (element: PlaitElement) => PlaitDrawElement.isDrawElement(element)\n }) as PlaitArrowLine[];\n};\n\n// quadratic Bezier to cubic Bezier\nexport const Q2C = (points: Point[]) => {\n const result = [];\n const numSegments = points.length / 3;\n for (let i = 0; i < numSegments; i++) {\n const start = points[i];\n const qControl = points[i + 1];\n const end = points[i + 2];\n const startDistance = distanceBetweenPointAndPoint(...start, ...qControl);\n const endDistance = distanceBetweenPointAndPoint(...end, ...qControl);\n const cControl1 = getExtendPoint(start, qControl, (startDistance * 2) / 3);\n const cControl2 = getExtendPoint(end, qControl, (endDistance * 2) / 3);\n result.push(start, cControl1, cControl2, end);\n }\n return result;\n};\n\nexport const handleArrowLineCreating = (\n board: PlaitBoard,\n lineShape: ArrowLineShape,\n sourcePoint: Point,\n movingPoint: Point,\n sourceElement: PlaitShapeElement | null,\n lineShapeG: SVGGElement,\n options?: Pick<PlaitArrowLine, 'strokeColor' | 'strokeWidth'>\n) => {\n 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 ...options\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.getElementTopHost(board).append(lineShapeG);\n return temporaryLineElement;\n};\n\nfunction drawArrowLineMask(board: PlaitBoard, element: PlaitArrowLine, id: string) {\n const mask = createMask();\n mask.setAttribute('id', id);\n const points = getArrowLinePoints(board, element);\n let rectangle = RectangleClient.getRectangleByPoints(points);\n rectangle = RectangleClient.getOutlineRectangle(rectangle, -30);\n const maskFillRect = createRect(rectangle, {\n fill: 'white'\n });\n mask.appendChild(maskFillRect);\n\n const texts = element.texts;\n texts.forEach((text, index) => {\n let textRectangle = getArrowLineTextRectangle(board, element, index);\n textRectangle = RectangleClient.inflate(textRectangle, LINE_TEXT_SPACE * 2);\n const rect = createRect(textRectangle, {\n fill: 'black'\n });\n mask.appendChild(rect);\n });\n // open line\n const maskTargetFillRect = createRect(rectangle);\n maskTargetFillRect.setAttribute('opacity', '0');\n maskTargetFillRect.setAttribute('fill', 'none');\n return { mask, maskTargetFillRect };\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitArrowLine } from '../../interfaces';\nimport { getPointOnPolyline } from '@plait/common';\nimport { getArrowLinePoints } from '../arrow-line/arrow-line-basic';\nimport { getTextSize } from '../text-size';\n\nexport const getHitArrowLineTextIndex = (board: PlaitBoard, element: PlaitArrowLine, point: Point) => {\n const texts = element.texts;\n if (!texts.length) return -1;\n\n const points = getArrowLinePoints(board, element);\n return texts.findIndex((text) => {\n const center = getPointOnPolyline(points, text.position);\n const textSize = getTextSize(board, text.text);\n const rectangle = {\n x: center[0] - textSize.width / 2,\n y: center[1] - textSize.height / 2,\n width: textSize.width,\n height: textSize.height\n };\n return RectangleClient.isHit(rectangle, RectangleClient.getRectangleByPoints([point, point]));\n });\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, idCreator } from '@plait/core';\nimport { GeometryShapes, UMLSymbols, PlaitMultipleTextGeometry } from '../interfaces/geometry';\nimport { DefaultTextProperty, GEOMETRY_WITH_MULTIPLE_TEXT, MultipleTextGeometryTextKeys } from '../constants';\nimport { getEngine } from '../engines';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { DrawTextInfo } from '../generators/text.generator';\nimport { GeometryStyleOptions, getDefaultGeometryProperty } from './geometry';\nimport { PlaitDrawElement } from '../interfaces';\nimport { Alignment, buildText } from '@plait/common';\n\nexport const isMultipleTextShape = (shape: GeometryShapes) => {\n return GEOMETRY_WITH_MULTIPLE_TEXT.includes(shape as UMLSymbols);\n};\n\nexport const isMultipleTextGeometry = (geometry: PlaitElement): geometry is PlaitMultipleTextGeometry => {\n return PlaitDrawElement.isGeometry(geometry) && isMultipleTextShape(geometry.shape);\n};\n\nexport const getMultipleTextGeometryTextKeys = (shape: GeometryShapes) => {\n return MultipleTextGeometryTextKeys[shape];\n};\n\nexport const createMultipleTextGeometryElement = (\n shape: GeometryShapes,\n points: [Point, Point],\n options: GeometryStyleOptions = {}\n): PlaitMultipleTextGeometry => {\n const id = idCreator();\n const drawShapeTexts: DrawTextInfo[] = buildDefaultTextsByShape(shape);\n return {\n id,\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n texts: drawShapeTexts,\n points,\n ...options\n };\n};\n\nexport const buildDefaultTextsByShape = (shape: GeometryShapes): DrawTextInfo[] => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n const textProperties = { ...memorizedLatest.textProperties };\n const alignment = textProperties?.align;\n delete textProperties?.align;\n const defaultTexts = (getDefaultGeometryProperty(shape) as any)?.texts || [];\n const textKeys = getMultipleTextGeometryTextKeys(shape);\n return (textKeys || []).map((textKey: string) => {\n const text = defaultTexts?.find((item: { key: string }) => item?.key === textKey);\n return {\n id: textKey,\n text: buildText(text?.text || '', alignment || text?.align || Alignment.center, textProperties)\n };\n });\n};\n\nexport const getHitMultipleGeometryText = (board: PlaitBoard, element: PlaitMultipleTextGeometry, point: Point) => {\n const engine = getEngine<PlaitMultipleTextGeometry>(element.shape);\n const rectangle = RectangleClient.getRectangleByPoints([point, point]);\n let hitText;\n if (engine.getTextRectangle) {\n hitText = element.texts.find((text) => {\n const textRectangle = engine.getTextRectangle!(board, element, { id: text.id });\n return RectangleClient.isHit(rectangle, textRectangle);\n });\n }\n return hitText;\n};\n","import { PlaitVectorLine } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { drawVectorLine } from '../utils';\n\nexport class VectorLineShapeGenerator extends Generator<PlaitVectorLine> {\n canDraw(element: PlaitVectorLine): boolean {\n return true;\n }\n\n draw(element: PlaitVectorLine) {\n let lineG: SVGGElement | undefined;\n lineG = drawVectorLine(this.board, element);\n return lineG;\n }\n}\n","import { PlaitBoard, Point, catmullRomFitting, createG, drawLinearPath, idCreator, setStrokeLinecap } from '@plait/core';\nimport { PlaitVectorLine, VectorLineShape } from '../interfaces';\nimport { getLineMemorizedLatest } from './memorize';\nimport { DefaultLineStyle } from '../constants/line';\nimport { alignPoints } from './arrow-line';\nimport { getStrokeWidthByElement } from './common';\nimport { getFillByElement, getStrokeColorByElement, getStrokeStyleByElement } from './style';\nimport { VectorLineShapeGenerator } from '../generators/vector-line-generator';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { getStrokeLineDash, StrokeStyle } from '@plait/common';\n\nexport const getVectorLinePoints = (board: PlaitBoard, element: PlaitVectorLine) => {\n switch (element.shape) {\n case VectorLineShape.straight: {\n return element.points;\n }\n case VectorLineShape.curve: {\n if (element.points.length === 2) {\n return pointsOnBezierCurves(element.points) as Point[];\n } else {\n let dataPoints = element.points;\n const points = catmullRomFitting(dataPoints);\n return pointsOnBezierCurves(points) as Point[];\n }\n }\n default:\n return null;\n }\n};\n\nexport const createVectorLineElement = (\n shape: VectorLineShape,\n points: Point[],\n options?: Pick<PlaitVectorLine, 'strokeColor' | 'strokeWidth' | 'fill'>\n): PlaitVectorLine => {\n return {\n id: idCreator(),\n type: 'vector-line',\n shape,\n opacity: 1,\n points,\n ...options\n };\n};\n\nexport const vectorLineCreating = (\n board: PlaitBoard,\n lineShape: VectorLineShape,\n points: Point[],\n movingPoint: Point,\n lineShapeG: SVGGElement\n) => {\n const lineGenerator = new VectorLineShapeGenerator(board);\n const memorizedLatest = getLineMemorizedLatest();\n\n const temporaryLineElement = createVectorLineElement(lineShape, [...points, movingPoint], {\n strokeWidth: DefaultLineStyle.strokeWidth,\n ...memorizedLatest\n });\n const otherPoint = points[points.length - 1];\n temporaryLineElement.points[temporaryLineElement.points.length - 1] = alignPoints(otherPoint, movingPoint);\n lineGenerator.processDrawing(temporaryLineElement, lineShapeG);\n PlaitBoard.getElementTopHost(board).append(lineShapeG);\n return temporaryLineElement;\n};\n\nexport const drawVectorLine = (board: PlaitBoard, element: PlaitVectorLine) => {\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(board, element);\n const strokeStyle = getStrokeStyleByElement(board, element);\n const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n const fill = getFillByElement(board, element);\n const options = { stroke: strokeColor, strokeWidth, strokeLineDash, fill };\n const lineG = createG();\n let points = getVectorLinePoints(board, element)!;\n const line = drawLinearPath(points, options);\n const id = idCreator();\n line.setAttribute('mask', `url(#${id})`);\n if (element.strokeStyle === StrokeStyle.dotted) {\n setStrokeLinecap(line, 'round');\n }\n lineG.appendChild(line);\n return lineG;\n};\n","import { getCrossingPointsBetweenPointAndSegment, isPointOnSegment } from '@plait/common';\nimport { Point } from '@plait/core';\n\nexport const getCenterPointsOnPolygon = (points: Point[]) => {\n const centerPoints: Point[] = [];\n for (let i = 0; i < points.length; i++) {\n let j = i == points.length - 1 ? 0 : i + 1;\n centerPoints.push([(points[i][0] + points[j][0]) / 2, (points[i][1] + points[j][1]) / 2]);\n }\n return centerPoints;\n};\n\nexport const getCrossingPointBetweenPointAndPolygon = (corners: Point[], point: Point) => {\n const result: Point[] = [];\n for (let index = 1; index <= corners.length; index++) {\n let start = corners[index - 1];\n let end = index === corners.length ? corners[0] : corners[index];\n const crossingPoint = getCrossingPointsBetweenPointAndSegment(point, start, end);\n result.push(...crossingPoint);\n }\n return result;\n};\n\nexport const getPolygonEdgeByConnectionPoint = (corners: Point[], point: Point) => {\n for (let index = 1; index <= corners.length; index++) {\n let start = corners[index - 1];\n let end = index === corners.length ? corners[0] : corners[index];\n if (isPointOnSegment(point, start, end)) {\n return [start, end] as [Point, Point];\n }\n }\n return null;\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n SVGArcCommand,\n distanceBetweenPointAndPoint,\n setPathStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { getNearestPointBetweenPointAndArc } from '@plait/core';\n\nexport function generateCloudPath(rectangle: RectangleClient): { startPoint: Point; arcCommands: SVGArcCommand[] } {\n const divisionWidth = rectangle.width / 7;\n const divisionHeight = rectangle.height / 3.2;\n const xRadius = divisionWidth / 8.5;\n const yRadius = divisionHeight / 20;\n\n const startPoint = [rectangle.x + divisionWidth, rectangle.y + divisionHeight] as Point;\n\n const arcCommands: SVGArcCommand[] = [\n {\n rx: xRadius,\n ry: yRadius * 1.2,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 2,\n endY: rectangle.y + divisionHeight / 2\n },\n {\n rx: xRadius,\n ry: yRadius,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 4.2,\n endY: rectangle.y + divisionHeight / 2.2\n },\n {\n rx: xRadius,\n ry: yRadius,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 5.8,\n endY: rectangle.y + divisionHeight\n },\n {\n rx: xRadius,\n ry: yRadius * 1.3,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 6,\n endY: rectangle.y + divisionHeight * 2.2\n },\n {\n rx: xRadius,\n ry: yRadius * 1.2,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 5,\n endY: rectangle.y + divisionHeight * 2.8\n },\n {\n rx: xRadius,\n ry: yRadius / 1.2,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 2.8,\n endY: rectangle.y + divisionHeight * 2.8\n },\n {\n rx: xRadius,\n ry: yRadius,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth,\n endY: rectangle.y + divisionHeight * 2.2\n },\n {\n rx: xRadius,\n ry: yRadius * 1.42,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth,\n endY: rectangle.y + divisionHeight\n }\n ];\n\n return { startPoint, arcCommands };\n}\n\nexport const CloudEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, arcCommands } = generateCloudPath(rectangle);\n\n const pathData =\n `M ${startPoint[0]} ${startPoint[1]} ` +\n arcCommands\n .map(\n (command) =>\n `A ${command.rx} ${command.ry} ${command.xAxisRotation} ${command.largeArcFlag} ${command.sweepFlag} ${command.endX} ${command.endY}`\n )\n .join('\\n') +\n ' Z';\n\n const svgElement = rs.path(pathData, { ...options, fillStyle: 'solid' });\n setPathStrokeLinecap(svgElement, 'round');\n return svgElement;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { startPoint, arcCommands } = generateCloudPath(rectangle);\n let minDistance = Infinity;\n let nearestPoint = point;\n\n let currentStart = startPoint;\n for (const arcCommand of arcCommands) {\n const arcNearestPoint = getNearestPointBetweenPointAndArc(point, currentStart, arcCommand);\n const distance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);\n\n if (distance < minDistance) {\n minDistance = distance;\n nearestPoint = arcNearestPoint;\n }\n\n currentStart = [arcCommand.endX, arcCommand.endY];\n }\n\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = CloudEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const widthRatio = 1 / 1.5;\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const textRectangle = getCustomTextRectangle(board, element, widthRatio);\n return textRectangle;\n }\n};\n","import {\n PlaitElement,\n RectangleClient,\n Selection,\n PlaitBoard,\n isLineHitRectangle,\n Point,\n distanceBetweenPointAndSegments,\n distanceBetweenPointAndPoint,\n HIT_DISTANCE_BUFFER,\n rotateAntiPointsByElement,\n isPointInPolygon,\n rotatePointsByAngle,\n createDebugGenerator,\n getNearestPointBetweenPointAndArc,\n getEllipseArcCenter\n} from '@plait/core';\nimport {\n BasicShapes,\n GeometryShapes,\n PlaitArrowLine,\n PlaitCommonGeometry,\n PlaitCustomGeometry,\n PlaitDrawElement,\n PlaitGeometry,\n PlaitShapeElement,\n PlaitVectorLine\n} from '../interfaces';\nimport { getNearestPoint } from './geometry';\nimport { getArrowLinePoints } from './arrow-line/arrow-line-basic';\nimport { getFillByElement } from './style/stroke';\nimport { getEngine } from '../engines';\nimport { getElementShape } from './shape';\nimport { getHitArrowLineTextIndex } from './position/arrow-line';\nimport { getTextRectangle, isClosedCustomGeometry, isClosedDrawElement, isClosedPoints, isDrawElementIncludeText } from './common';\nimport { isMultipleTextGeometry } from './multi-text-geometry';\nimport { getFirstTextEditor, isFilled, sortElementsByArea } from '@plait/common';\nimport { getVectorLinePoints } from './vector-line';\nimport { Editor, Element } from 'slate';\nimport { generateCloudPath } from '../engines/basic-shapes/cloud';\n\nexport const isHitArrowLineText = (board: PlaitBoard, element: PlaitArrowLine, point: Point) => {\n return getHitArrowLineTextIndex(board, element, point) !== -1;\n};\n\nexport const isHitPolyLine = (pathPoints: Point[], point: Point) => {\n const distance = distanceBetweenPointAndSegments(point, pathPoints);\n return distance <= HIT_DISTANCE_BUFFER;\n};\n\nexport const isHitArrowLine = (board: PlaitBoard, element: PlaitArrowLine, point: Point) => {\n const points = getArrowLinePoints(board, element);\n const isHitText = isHitArrowLineText(board, element as PlaitArrowLine, point);\n return isHitText || isHitPolyLine(points, point);\n};\n\nexport const isHitVectorLine = (board: PlaitBoard, element: PlaitVectorLine, point: Point) => {\n const points = getVectorLinePoints(board, element)!;\n if (isClosedPoints(element.points)) {\n return isPointInPolygon(point, points) || isHitPolyLine(points, point);\n } else {\n return isHitPolyLine(points, point);\n }\n};\n\nexport const isRectangleHitElementText = (board: PlaitBoard, element: PlaitCommonGeometry, rectangle: RectangleClient) => {\n const engine = getEngine<PlaitCommonGeometry>(element.shape);\n if (isMultipleTextGeometry(element)) {\n const texts = element.texts;\n return texts.some((item) => {\n const textClient = engine.getTextRectangle!(board, element, { id: item.id });\n return isRectangleHitRotatedPoints(rectangle, RectangleClient.getCornerPoints(textClient), element.angle);\n });\n } else {\n const textClient = engine.getTextRectangle ? engine.getTextRectangle(board, element) : getTextRectangle(board, element);\n return isRectangleHitRotatedPoints(rectangle, RectangleClient.getCornerPoints(textClient), element.angle);\n }\n};\n\nexport const isHitElementText = (board: PlaitBoard, element: PlaitCommonGeometry, point: Point) => {\n const engine = getEngine<PlaitCommonGeometry>(element.shape);\n if (isMultipleTextGeometry(element)) {\n const texts = element.texts;\n return texts.some((item) => {\n const textClient = engine.getTextRectangle!(board, element, { id: item.id });\n return RectangleClient.isPointInRectangle(textClient, point);\n });\n } else {\n const textClient = engine.getTextRectangle ? engine.getTextRectangle(board, element) : getTextRectangle(board, element);\n return RectangleClient.isPointInRectangle(textClient, point);\n }\n};\n\nexport const isEmptyTextElement = (element: PlaitCommonGeometry) => {\n if (!isDrawElementIncludeText(element)) {\n return true;\n }\n const editor = getFirstTextEditor(element);\n return Editor.isEmpty(editor, editor.children[0] as Element);\n};\n\nexport const isRectangleHitDrawElement = (board: PlaitBoard, element: PlaitElement, selection: Selection) => {\n const rangeRectangle = RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]);\n if (PlaitDrawElement.isGeometry(element)) {\n const isHitElement = isRectangleHitRotatedElement(board, rangeRectangle, element);\n if (isHitElement) {\n return isHitElement;\n }\n return !isEmptyTextElement(element) && isRectangleHitElementText(board, element, rangeRectangle);\n }\n\n if (PlaitDrawElement.isImage(element)) {\n return isRectangleHitRotatedElement(board, rangeRectangle, element);\n }\n\n if (PlaitDrawElement.isArrowLine(element)) {\n const points = getArrowLinePoints(board, element);\n return isLineHitRectangle(points, rangeRectangle);\n }\n\n if (PlaitDrawElement.isVectorLine(element)) {\n const points = getVectorLinePoints(board, element)!;\n return isLineHitRectangle(points, rangeRectangle);\n }\n\n return null;\n};\n\nexport const isRectangleHitRotatedElement = (\n board: PlaitBoard,\n rectangle: RectangleClient,\n element: PlaitElement & { points: Point[] }\n) => {\n const client = RectangleClient.getRectangleByPoints(element.points);\n return isRectangleHitRotatedPoints(rectangle, RectangleClient.getCornerPoints(client), element.angle);\n};\n\nexport const isRectangleHitRotatedPoints = (rectangle: RectangleClient, points: Point[], angle: number | undefined) => {\n let rotatedPoints = rotatePointsByAngle(points, angle) || points;\n return isLineHitRectangle(rotatedPoints, rectangle);\n};\n\nexport const getHitDrawElement = (board: PlaitBoard, elements: (PlaitDrawElement | PlaitCustomGeometry)[]) => {\n let firstFilledElement = getFirstFilledDrawElement(board, elements);\n let endIndex = elements.length;\n if (firstFilledElement) {\n endIndex = elements.indexOf(firstFilledElement) + 1;\n }\n const newElements = elements.slice(0, endIndex);\n const solidElements = getSolidElements(newElements);\n if (solidElements) {\n return solidElements[0];\n }\n const sortElements = sortElementsByArea(board, newElements, 'asc');\n return sortElements[0];\n};\n\nexport const getFirstFilledDrawElement = (board: PlaitBoard, elements: (PlaitDrawElement | PlaitCustomGeometry)[]) => {\n let filledElement: PlaitGeometry | PlaitCustomGeometry | null = null;\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (isClosedCustomGeometry(board, element) || isClosedDrawElement(element)) {\n const fill = getFillByElement(board, element);\n if (isFilled(fill)) {\n filledElement = element as PlaitGeometry;\n break;\n }\n }\n }\n return filledElement;\n};\n\nexport const isFilledDrawElement = (board: PlaitBoard, element: PlaitDrawElement | PlaitCustomGeometry) => {\n return getFirstFilledDrawElement(board, [element]) !== null;\n};\n\nexport const getSolidElements = (elements: PlaitElement[]) => {\n const solidElements = elements.filter(\n (item) => PlaitDrawElement.isText(item) || PlaitDrawElement.isLine(item) || PlaitDrawElement.isImage(item)\n );\n if (solidElements.length) {\n return solidElements;\n }\n return null;\n};\n\nconst debugKey = 'debug:plait:hit:shape:edge:sample-points';\nconst debugGenerator = createDebugGenerator(debugKey);\nconst shapes: GeometryShapes[] = [BasicShapes.cloud];\n\nexport const isHitDrawElement = (board: PlaitBoard, element: PlaitElement, point: Point, isStrict: boolean = true) => {\n const rectangle = board.getRectangle(element);\n point = rotateAntiPointsByElement(board, point, element) || point;\n if (PlaitDrawElement.isGeometry(element) && rectangle) {\n if (debugGenerator.isDebug() && shapes.includes(element.shape)) {\n debugGenerator.clear();\n const { startPoint, arcCommands } = generateCloudPath(rectangle);\n const points = [startPoint, ...arcCommands.map((arc) => [arc.endX, arc.endY])] as Point[];\n debugGenerator.drawCircles(board, points, 5, false);\n let minDistance = Infinity;\n let nearestPoint = point;\n let currentStart = startPoint;\n for (const arc of arcCommands) {\n const arcNearestPoint = getNearestPointBetweenPointAndArc(point, currentStart, arc);\n const distance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);\n const { center } = getEllipseArcCenter(currentStart, arc);\n debugGenerator.drawCircles(board, [center], 8, false, { fill: 'yellow' });\n if (distance < minDistance) {\n minDistance = distance;\n nearestPoint = arcNearestPoint;\n }\n currentStart = [arc.endX, arc.endY];\n }\n debugGenerator.drawCircles(board, [point], 12, false, { fill: 'black', stroke: 'black' });\n debugGenerator.drawCircles(board, [nearestPoint], 12, false, { fill: 'green', stroke: 'green' });\n }\n if (isHitEdgeOfShape(board, element, point, HIT_DISTANCE_BUFFER)) {\n return true;\n }\n const engine = getEngine(getElementShape(element));\n if (PlaitDrawElement.isText(element)) {\n const textClient = getTextRectangle(board, element);\n return RectangleClient.isPointInRectangle(textClient, point);\n }\n if (!!isStrict && isEmptyTextElement(element) && !isFilledDrawElement(board, element)) {\n return false;\n }\n const isHitText = isHitElementText(board, element, point);\n return isHitText || engine.isInsidePoint(rectangle!, point);\n }\n if (PlaitDrawElement.isImage(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n return RectangleClient.isPointInRectangle(client, point);\n }\n if (PlaitDrawElement.isArrowLine(element)) {\n return isHitArrowLine(board, element, point);\n }\n\n if (PlaitDrawElement.isVectorLine(element)) {\n return isHitVectorLine(board, element, point);\n }\n return null;\n};\n\nexport const isHitEdgeOfShape = (board: PlaitBoard, element: PlaitShapeElement, point: Point, hitDistanceBuffer: number) => {\n const nearestPoint = getNearestPoint(element, point);\n const distance = distanceBetweenPointAndPoint(nearestPoint[0], nearestPoint[1], point[0], point[1]);\n return distance <= hitDistanceBuffer;\n};\n\nexport const isInsideOfShape = (board: PlaitBoard, element: PlaitShapeElement, point: Point, hitDistanceBuffer: number) => {\n const client = RectangleClient.inflate(RectangleClient.getRectangleByPoints(element.points), hitDistanceBuffer);\n return getEngine(getElementShape(element)).isInsidePoint(client, point);\n};\n\nexport const isHitElementInside = (board: PlaitBoard, element: PlaitElement, point: Point) => {\n const rectangle = board.getRectangle(element);\n point = rotateAntiPointsByElement(board, point, element) || point;\n if (PlaitDrawElement.isGeometry(element) && !PlaitDrawElement.isGeometryByTable(element)) {\n const engine = getEngine(getElementShape(element));\n const isHitInside = engine.isInsidePoint(rectangle!, point);\n if (isHitInside) {\n return isHitInside;\n }\n if (engine.getTextRectangle) {\n const isHitText = isHitElementText(board, element, point);\n if (isHitText) {\n return isHitText;\n }\n }\n }\n if (PlaitDrawElement.isImage(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n return RectangleClient.isPointInRectangle(client, point);\n }\n\n if (PlaitDrawElement.isArrowLine(element)) {\n return isHitArrowLine(board, element, point);\n }\n\n if (PlaitDrawElement.isVectorLine(element)) {\n return isHitVectorLine(board, element, point);\n }\n\n return null;\n};\n","import {\n ACTIVE_STROKE_WIDTH,\n addSelectedElement,\n Ancestor,\n BoardTransforms,\n clearSelectedElement,\n createG,\n depthFirstRecursion,\n drawCircle,\n getI18nValue,\n getIsRecursionFunc,\n PlaitBoard,\n PlaitElement,\n PlaitPointerType,\n Point,\n RectangleClient,\n rotateAntiPointsByElement,\n SELECTION_BORDER_COLOR,\n SELECTION_FILL_COLOR,\n SNAPPING_STROKE_WIDTH,\n Transforms\n} from '@plait/core';\nimport {\n DefaultDrawStyle,\n DefaultTextProperty,\n DrawI18nKey,\n GeometryThreshold,\n LINE_HIT_GEOMETRY_BUFFER,\n LINE_SNAPPING_BUFFER,\n ShapeDefaultSpace\n} from '../constants';\nimport {\n DrawOptions,\n DrawShapes,\n GeometryCommonTextKeys,\n PlaitBaseGeometry,\n PlaitCommonGeometry,\n PlaitCustomGeometry,\n PlaitDrawElement,\n PlaitGeometry,\n PlaitShapeElement\n} from '../interfaces';\nimport { Alignment, getTextEditorsByElement } from '@plait/common';\nimport { isCellIncludeText } from './table';\nimport { getEngine } from '../engines';\nimport { getElementShape } from './shape';\nimport { Options } from 'roughjs/bin/core';\nimport { PlaitBaseTable } from '../interfaces/table';\nimport { memorizeLatestShape } from './memorize';\nimport { isHitEdgeOfShape, isInsideOfShape } from './hit';\nimport { getHitConnectorPoint } from './arrow-line';\nimport { getNearestPoint, isGeometryClosed, isGeometryIncludeText, isSingleTextGeometry } from './geometry';\nimport { isMultipleTextGeometry } from './multi-text-geometry';\nimport { DrawTextInfo } from '../generators/text.generator';\nimport { getTextSize } from './text-size';\n\nexport const getTextRectangle = <T extends PlaitElement = PlaitGeometry>(board: PlaitBoard, element: T) => {\n const isAutoSize = PlaitDrawElement.isText(element) ? element.autoSize : false;\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const textSize = getTextSize(board, element.text, isAutoSize ? GeometryThreshold.defaultTextMaxWidth : width);\n if (isAutoSize) {\n return {\n height: textSize.height,\n width: textSize.width,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n};\n\nexport const getCustomTextRectangle = <T extends PlaitElement = PlaitGeometry>(board: PlaitBoard, element: T, widthRatio: number) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const width = widthRatio * elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - getStrokeWidthByElement(element) * 2;\n const textSize = getTextSize(board, element.text!, width);\n return {\n height: textSize.height,\n width: width,\n x: elementRectangle.x + (elementRectangle.width - width) / 2,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n};\n\nexport const getStrokeWidthByElement = (element: PlaitElement) => {\n if (PlaitDrawElement.isText(element)) {\n return 0;\n }\n const strokeWidth = element.strokeWidth || DefaultDrawStyle.strokeWidth;\n return strokeWidth;\n};\n\nexport const insertElement = (board: PlaitBoard, element: PlaitBaseGeometry | PlaitBaseTable) => {\n memorizeLatestShape(board, element.shape);\n Transforms.insertNode(board, element, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(board, element);\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n};\n\nexport const isDrawElementIncludeText = (element: PlaitDrawElement) => {\n if (PlaitDrawElement.isText(element)) {\n return true;\n }\n if (PlaitDrawElement.isImage(element)) {\n return false;\n }\n if (PlaitDrawElement.isGeometry(element)) {\n return isGeometryIncludeText(element);\n }\n if (PlaitDrawElement.isArrowLine(element)) {\n const editors = getTextEditorsByElement(element);\n return editors.length > 0;\n }\n if (PlaitDrawElement.isElementByTable(element)) {\n return element.cells.some((cell) => isCellIncludeText(cell));\n }\n return true;\n};\n\nexport const isDrawElementsIncludeText = (elements: PlaitDrawElement[]) => {\n return elements.some((item) => {\n return isDrawElementIncludeText(item);\n });\n};\n\nexport const isClosedDrawElement = (element: PlaitElement) => {\n if (PlaitDrawElement.isDrawElement(element)) {\n if (PlaitDrawElement.isText(element) || PlaitDrawElement.isArrowLine(element) || PlaitDrawElement.isImage(element)) {\n return false;\n }\n if (PlaitDrawElement.isVectorLine(element)) {\n return isClosedPoints(element.points);\n }\n if (PlaitDrawElement.isGeometry(element)) {\n return isGeometryClosed(element);\n }\n return true;\n }\n return false;\n};\n\nexport const isClosedCustomGeometry = (board: PlaitBoard, value: PlaitElement): value is PlaitCustomGeometry => {\n return PlaitDrawElement.isCustomGeometryElement(board, value) && isClosedPoints(value.points);\n};\n\nexport const getSnappingShape = (board: PlaitBoard, point: Point): PlaitShapeElement | null => {\n let hitElement: PlaitShapeElement | null = getHitShape(board, point);\n if (hitElement) {\n const ref = getSnappingRef(board, hitElement, point);\n if (ref.isHitConnector || ref.isHitEdge) {\n return hitElement;\n }\n }\n return null;\n};\n\nexport const getSnappingRef = (board: PlaitBoard, hitElement: PlaitShapeElement, point: Point) => {\n const rotatedPoint = rotateAntiPointsByElement(board, point, hitElement) || point;\n const connectorPoint = getHitConnectorPoint(rotatedPoint, hitElement);\n const edgePoint = getNearestPoint(hitElement, rotatedPoint);\n const isHitEdge = isHitEdgeOfShape(board, hitElement, rotatedPoint, LINE_SNAPPING_BUFFER);\n return { isHitEdge, isHitConnector: !!connectorPoint, connectorPoint, edgePoint };\n};\n\nexport const getHitShape = (board: PlaitBoard, point: Point, offset = LINE_HIT_GEOMETRY_BUFFER): PlaitShapeElement | null => {\n let hitShape: PlaitShapeElement | null = null;\n traverseDrawShapes(board, (element: PlaitShapeElement) => {\n if (hitShape === null && isInsideOfShape(board, element, rotateAntiPointsByElement(board, point, element) || point, offset * 2)) {\n hitShape = element;\n }\n });\n return hitShape;\n};\n\nexport const traverseDrawShapes = (board: PlaitBoard, callback: (element: PlaitShapeElement) => void) => {\n depthFirstRecursion<Ancestor>(\n board,\n (node) => {\n if (!PlaitBoard.isBoard(node) && PlaitDrawElement.isShapeElement(node)) {\n callback(node);\n }\n },\n getIsRecursionFunc(board),\n true\n );\n};\n\nexport const drawShape = (\n board: PlaitBoard,\n outerRectangle: RectangleClient,\n shape: DrawShapes,\n roughOptions: Options,\n drawOptions?: DrawOptions\n) => {\n return getEngine(shape).draw(board, outerRectangle, roughOptions, drawOptions);\n};\n\nexport const drawBoundReaction = (\n board: PlaitBoard,\n element: PlaitShapeElement,\n roughOptions: { hasMask: boolean; hasConnector: boolean } = { hasMask: true, hasConnector: true }\n) => {\n const g = createG();\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const activeRectangle = RectangleClient.inflate(rectangle, SNAPPING_STROKE_WIDTH);\n const shape = getElementShape(element);\n let drawOptions: DrawOptions | undefined;\n if (PlaitDrawElement.isElementByTable(element)) {\n drawOptions = { element };\n }\n const strokeG = drawShape(\n board,\n activeRectangle,\n shape,\n {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: SNAPPING_STROKE_WIDTH\n },\n drawOptions\n );\n g.appendChild(strokeG);\n\n if (roughOptions.hasMask) {\n const maskG = drawShape(\n board,\n activeRectangle,\n shape,\n {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 0,\n fill: isClosedDrawElement(element) ? SELECTION_FILL_COLOR : DefaultDrawStyle.fill,\n fillStyle: 'solid'\n },\n drawOptions\n );\n g.appendChild(maskG);\n }\n if (roughOptions.hasConnector) {\n const connectorPoints = getEngine(shape).getConnectorPoints(rectangle);\n connectorPoints.forEach((point) => {\n const circleG = drawCircle(PlaitBoard.getRoughSVG(board), point, 8, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n fill: '#FFF',\n fillStyle: 'solid'\n });\n g.appendChild(circleG);\n });\n }\n return g;\n};\n\nexport const getTextKey = (element: PlaitElement | undefined, text: Pick<DrawTextInfo, 'id'>) => {\n if (element && isMultipleTextGeometry(element)) {\n return `${element.id}-${text.id}`;\n } else {\n return text.id;\n }\n};\n\nexport const getGeometryAlign = (board: PlaitBoard, element: PlaitCommonGeometry | PlaitBaseTable) => {\n if (isMultipleTextGeometry(element)) {\n const drawShapeText = element.texts.find((item) => item.id.includes(GeometryCommonTextKeys.content));\n return drawShapeText?.text.align || Alignment.center;\n }\n if (isSingleTextGeometry(element as PlaitCommonGeometry)) {\n return (element as PlaitGeometry).text?.align || Alignment.center;\n }\n\n if (PlaitDrawElement.isElementByTable(element)) {\n const firstTextCell = element.cells.find((item) => item.text);\n return firstTextCell?.text?.align || Alignment.center;\n }\n return Alignment.center;\n};\n\nexport const isClosedPoints = (points: Point[]) => {\n const startPoint = points[0];\n const endPoint = points[points.length - 1];\n return startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1];\n};\n\nexport const getDefaultGeometryText = (board: PlaitBoard) => {\n return getI18nValue(board, DrawI18nKey.geometryText, DefaultTextProperty.text);\n};\n","import { PlaitDrawElement } from '../../interfaces';\nimport { DefaultDrawStyle } from '../../constants';\nimport { PlaitBoard, PlaitElement } from '@plait/core';\nimport { getDrawDefaultStrokeColor, getFlowchartDefaultFill } from '../geometry';\nimport { isClosedDrawElement } from '../common';\nimport { StrokeStyle } from '@plait/common';\n\nexport const getStrokeColorByElement = (board: PlaitBoard, element: PlaitElement) => {\n const defaultColor = getDrawDefaultStrokeColor(board.theme.themeColorMode);\n const strokeColor = element.strokeColor || defaultColor;\n return strokeColor;\n};\n\nexport const getFillByElement = (board: PlaitBoard, element: PlaitElement) => {\n const defaultFill =\n PlaitDrawElement.isFlowchart(element) && isClosedDrawElement(element as PlaitDrawElement)\n ? getFlowchartDefaultFill(board.theme.themeColorMode)\n : DefaultDrawStyle.fill;\n const fill = element.fill || defaultFill;\n return fill;\n};\n\nexport const getStrokeStyleByElement = (board: PlaitBoard, element: PlaitElement) => {\n return element.strokeStyle || StrokeStyle.solid;\n};\n","import { BasicShapes, PlaitGeometry } from '../interfaces';\nimport { Generator, getStrokeLineDash } from '@plait/common';\nimport { getFillByElement, getStrokeColorByElement, getStrokeStyleByElement } from '../utils/style/stroke';\nimport { drawGeometry, getStrokeWidthByElement } from '../utils';\nimport { RectangleClient } from '@plait/core';\n\nexport interface ShapeData {}\n\nexport class GeometryShapeGenerator extends Generator<PlaitGeometry, ShapeData> {\n canDraw(element: PlaitGeometry, data: ShapeData): boolean {\n return true;\n }\n\n draw(element: PlaitGeometry, data: ShapeData) {\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const shape = element.shape;\n if (shape === BasicShapes.text) {\n return;\n }\n const fill = getFillByElement(this.board, element);\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(this.board, element);\n const strokeStyle = getStrokeStyleByElement(this.board, element);\n const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n return drawGeometry(this.board, RectangleClient.inflate(rectangle, -strokeWidth), shape, {\n stroke: strokeColor,\n strokeWidth,\n fill,\n strokeLineDash\n });\n }\n}\n","import { PlaitBoard, Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { PlaitLine } from '../interfaces/line';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement, PlaitVectorLine } from '../interfaces';\nimport {\n getCurvePoints,\n getElbowLineRouteOptions,\n getElbowPoints,\n getNextSourceAndTargetPoints,\n isUseDefaultOrthogonalRoute\n} from './arrow-line';\nimport { getVectorLinePoints } from './vector-line';\n\nexport function getMiddlePoints(board: PlaitBoard, element: PlaitLine) {\n const result: Point[] = [];\n const shape = element.shape;\n const hideBuffer = 10;\n if (shape === ArrowLineShape.straight) {\n const points = PlaitDrawElement.isArrowLine(element)\n ? PlaitArrowLine.getPoints(board, element)\n : (element as PlaitVectorLine).points;\n for (let i = 0; i < points.length - 1; i++) {\n const distance = distanceBetweenPointAndPoint(...points[i], ...points[i + 1]);\n if (distance < hideBuffer) continue;\n result.push([(points[i][0] + points[i + 1][0]) / 2, (points[i][1] + points[i + 1][1]) / 2]);\n }\n }\n if (shape === ArrowLineShape.curve) {\n const points = PlaitDrawElement.isArrowLine(element)\n ? PlaitArrowLine.getPoints(board, element)\n : (element as PlaitVectorLine).points;\n const pointsOnBezier = PlaitDrawElement.isArrowLine(element)\n ? getCurvePoints(board, element)\n : getVectorLinePoints(board, element)!;\n if (points.length === 2) {\n const start = 0;\n const endIndex = pointsOnBezier.length - 1;\n const middleIndex = Math.round((start + endIndex) / 2);\n result.push(pointsOnBezier[middleIndex]);\n } else {\n for (let i = 0; i < points.length - 1; i++) {\n const startIndex = pointsOnBezier.findIndex(point => point[0] === points[i][0] && point[1] === points[i][1]);\n const endIndex = pointsOnBezier.findIndex(point => point[0] === points[i + 1][0] && point[1] === points[i + 1][1]);\n const middleIndex = Math.round((startIndex + endIndex) / 2);\n const distance = distanceBetweenPointAndPoint(...points[i], ...points[i + 1]);\n if (distance < hideBuffer) continue;\n result.push(pointsOnBezier[middleIndex]);\n }\n }\n }\n if (shape === ArrowLineShape.elbow) {\n const renderPoints = getElbowPoints(board, element);\n const options = getElbowLineRouteOptions(board, element);\n if (!isUseDefaultOrthogonalRoute(element, options)) {\n const [nextSourcePoint, nextTargetPoint] = getNextSourceAndTargetPoints(board, element);\n for (let i = 0; i < renderPoints.length - 1; i++) {\n if (\n (i == 0 && Point.isEquals(renderPoints[i + 1], nextSourcePoint)) ||\n (i === renderPoints.length - 2 && Point.isEquals(renderPoints[renderPoints.length - 2], nextTargetPoint))\n ) {\n continue;\n }\n const [currentX, currentY] = renderPoints[i];\n const [nextX, nextY] = renderPoints[i + 1];\n const middlePoint = [(currentX + nextX) / 2, (currentY + nextY) / 2] as Point;\n result.push(middlePoint);\n }\n }\n }\n return result;\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement } from '../../interfaces';\nimport { RESIZE_HANDLE_DIAMETER } from '@plait/common';\nimport { PlaitLine } from '../../interfaces/line';\nimport { getMiddlePoints } from '../line';\n\nexport enum LineResizeHandle {\n 'source' = 'source',\n 'target' = 'target',\n 'addHandle' = 'addHandle'\n}\n\nexport const getHitLineResizeHandleRef = (board: PlaitBoard, element: PlaitLine, point: Point) => {\n let dataPoints = PlaitDrawElement.isArrowLine(element) ? PlaitArrowLine.getPoints(board, element) : element.points;\n const index = getHitPointIndex(dataPoints, point);\n if (index !== -1) {\n const handleIndex = index;\n if (index === 0) {\n return { handle: LineResizeHandle.source, handleIndex };\n }\n if (index === dataPoints.length - 1) {\n return { handle: LineResizeHandle.target, handleIndex };\n }\n // elbow line, data points only verify source connection point and target connection point\n if (element.shape !== ArrowLineShape.elbow) {\n return { handleIndex };\n }\n }\n const middlePoints = getMiddlePoints(board, element);\n const indexOfMiddlePoints = getHitPointIndex(middlePoints, point);\n if (indexOfMiddlePoints !== -1) {\n return {\n handle: LineResizeHandle.addHandle,\n handleIndex: indexOfMiddlePoints\n };\n }\n return undefined;\n};\n\nexport function getHitPointIndex(points: Point[], movingPoint: Point) {\n const rectangles = points.map(point => {\n return {\n x: point[0] - RESIZE_HANDLE_DIAMETER / 2,\n y: point[1] - RESIZE_HANDLE_DIAMETER / 2,\n width: RESIZE_HANDLE_DIAMETER,\n height: RESIZE_HANDLE_DIAMETER\n };\n });\n const rectangle = rectangles.find(rectangle => {\n return RectangleClient.isHit(RectangleClient.getRectangleByPoints([movingPoint, movingPoint]), rectangle);\n });\n return rectangle ? rectangles.indexOf(rectangle) : -1;\n}\n","import {\n PlaitBoard,\n Point,\n SELECTION_RECTANGLE_CLASS_NAME,\n createG,\n drawRectangle,\n getSelectedElements,\n toActivePointFromViewBoxPoint,\n toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement } from '../interfaces';\nimport { Generator, PRIMARY_COLOR, drawFillPrimaryHandle, drawPrimaryHandle } from '@plait/common';\nimport { getMiddlePoints } from '../utils/line';\nimport { getNextRenderPoints } from '../utils/arrow-line/elbow';\nimport { isUpdatedHandleIndex } from '../utils/arrow-line';\nimport { getHitPointIndex } from '../utils/position/line';\nimport { DefaultDrawActiveStyle } from '../constants';\nimport { PlaitLine } from '../interfaces/line';\n\nexport interface ActiveData {\n selected: boolean;\n linePoints: Point[];\n}\n\nexport class LineActiveGenerator extends Generator<PlaitLine, ActiveData> {\n onlySelectedCurrentLine = false;\n\n constructor(protected board: PlaitBoard, options: { active: boolean } = { active: true }) {\n super(board, options);\n }\n\n canDraw(element: PlaitLine, data: ActiveData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: PlaitLine, data: ActiveData): SVGGElement {\n const activeG = createG();\n const selectedElements = getSelectedElements(this.board);\n this.onlySelectedCurrentLine = selectedElements.length === 1;\n if (this.onlySelectedCurrentLine) {\n activeG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n const points = PlaitDrawElement.isArrowLine(element) ? PlaitArrowLine.getPoints(this.board, element) : element.points;\n let updatePoints = [...points];\n let elbowNextRenderPoints: Point[] = [];\n if (element.shape === ArrowLineShape.elbow) {\n updatePoints = points.slice(0, 1).concat(points.slice(-1));\n elbowNextRenderPoints = getNextRenderPoints(this.board, element, data.linePoints);\n }\n const activePoints = updatePoints.map((point) => toActivePointFromViewBoxPoint(this.board, point));\n activePoints.forEach((point) => {\n const updateHandle = drawPrimaryHandle(this.board, point);\n activeG.appendChild(updateHandle);\n });\n const middlePoints = getMiddlePoints(this.board, element);\n const activeMiddlePoints = middlePoints.map((point) => toActivePointFromViewBoxPoint(this.board, point));\n if (!PlaitBoard.hasBeenTextEditing(this.board)) {\n for (let i = 0; i < activeMiddlePoints.length; i++) {\n const point = activeMiddlePoints[i];\n if (element.shape === ArrowLineShape.elbow && elbowNextRenderPoints.length) {\n const handleIndex = getHitPointIndex(activeMiddlePoints, point);\n const isUpdateHandleIndex = isUpdatedHandleIndex(\n this.board,\n element,\n [...points],\n elbowNextRenderPoints,\n handleIndex\n );\n if (isUpdateHandleIndex) {\n const updateHandle = drawPrimaryHandle(this.board, point);\n activeG.appendChild(updateHandle);\n continue;\n }\n }\n const circle = drawFillPrimaryHandle(this.board, point);\n activeG.appendChild(circle);\n }\n }\n } else {\n const rectangle = this.board.getRectangle(element);\n if (rectangle) {\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(this.board, rectangle);\n let opacity = '0.5';\n if (activeRectangle.height === 0 || activeRectangle.width === 0) {\n opacity = '0.8';\n }\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: DefaultDrawActiveStyle.selectionStrokeWidth\n });\n strokeG.style.opacity = opacity;\n activeG.appendChild(strokeG);\n }\n }\n return activeG;\n }\n\n needUpdate() {\n const selectedElements = getSelectedElements(this.board);\n const onlySelectedCurrentLine = selectedElements.length === 1;\n return onlySelectedCurrentLine !== this.onlySelectedCurrentLine;\n }\n}\n","import { PlaitBoard, rgbaToHEX, createG, drawCircle, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { PlaitGeometry, PlaitShapeElement } from '../interfaces';\nimport { ActiveGeneratorExtraData, Generator, PRIMARY_COLOR } from '@plait/common';\nimport { getAutoCompletePoints } from '../utils';\nimport { LINE_AUTO_COMPLETE_DIAMETER, LINE_AUTO_COMPLETE_OPACITY } from '../constants/line';\n\nexport class ArrowLineAutoCompleteGenerator<T extends PlaitShapeElement = PlaitGeometry> extends Generator<T, ActiveGeneratorExtraData> {\n static key = 'line-auto-complete-generator';\n\n autoCompleteG!: SVGGElement;\n hoverElement: SVGGElement | null = null;\n\n constructor(public board: PlaitBoard) {\n super(board, { active: true });\n }\n\n canDraw(element: PlaitShapeElement, data: ActiveGeneratorExtraData): boolean {\n const selectedElements = getSelectedElements(this.board);\n if (data.selected && selectedElements.length === 1 && !isSelectionMoving(this.board)) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n this.autoCompleteG = createG();\n const middlePoints = getAutoCompletePoints(this.board, element, true);\n middlePoints.forEach((point, index) => {\n const circle = drawCircle(PlaitBoard.getRoughSVG(this.board), point, LINE_AUTO_COMPLETE_DIAMETER, {\n stroke: 'none',\n fill: rgbaToHEX(PRIMARY_COLOR, LINE_AUTO_COMPLETE_OPACITY),\n fillStyle: 'solid'\n });\n circle.classList.add(`line-auto-complete-${index}`);\n this.autoCompleteG.appendChild(circle);\n });\n return this.autoCompleteG;\n }\n\n removeAutoCompleteG(index: number) {\n this.hoverElement = this.autoCompleteG.querySelector(`.line-auto-complete-${index}`);\n this.hoverElement!.style.visibility = 'hidden';\n }\n\n recoverAutoCompleteG() {\n if (this.hoverElement) {\n this.hoverElement.style.visibility = 'visible';\n this.hoverElement = null;\n }\n }\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { PlaitCommonGeometry, PlaitGeometry } from '../interfaces';\nimport { DrawTextInfo, TextGenerator, TextGeneratorOptions } from './text.generator';\nimport { isMultipleTextGeometry } from '../utils';\nimport { ParagraphElement } from '@plait/common';\n\nexport class SingleTextGenerator<T extends PlaitElement = PlaitGeometry> extends TextGenerator<T> {\n get textManage() {\n return this.textManages[0];\n }\n\n constructor(board: PlaitBoard, element: T, text: ParagraphElement, options: TextGeneratorOptions<T>) {\n super(board, element, [{ id: element.id, text: text }], options);\n }\n\n update(element: T, previousDrawShapeTexts: DrawTextInfo[], currentDrawShapeTexts: DrawTextInfo[], elementG: SVGElement): void;\n update(element: T, previousText: ParagraphElement, currentText: ParagraphElement, elementG: SVGElement): void;\n update(\n element: T,\n previousText: ParagraphElement | DrawTextInfo[],\n currentText: ParagraphElement | DrawTextInfo[],\n elementG: SVGElement\n ) {\n if (!isMultipleTextGeometry((element as unknown) as PlaitCommonGeometry)) {\n super.update(\n element,\n [{ text: previousText as ParagraphElement, id: element.id }],\n [{ text: currentText as ParagraphElement, id: element.id }],\n elementG\n );\n }\n }\n}\n","import { TableSymbols } from '../interfaces';\nimport { Generator, getStrokeLineDash } from '@plait/common';\nimport { PlaitElement, RectangleClient } from '@plait/core';\nimport { PlaitBaseTable } from '../interfaces/table';\nimport { getEngine } from '../engines';\nimport { getStrokeColorByElement, getStrokeStyleByElement, getStrokeWidthByElement } from '../utils';\n\nexport interface TableData {}\n\nexport class TableGenerator<T extends PlaitElement = PlaitBaseTable> extends Generator<T, TableData> {\n canDraw(element: T, data: TableData): boolean {\n return true;\n }\n\n draw(element: T, data: TableData) {\n const rectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(this.board, element);\n const strokeStyle = getStrokeStyleByElement(this.board, element);\n const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n return getEngine(TableSymbols.table).draw(\n this.board,\n rectangle,\n {\n strokeWidth,\n stroke: strokeColor,\n strokeLineDash\n },\n {\n element: element\n }\n );\n }\n}\n","import { PlaitBoard } from '@plait/core';\nimport { BasicShapes, PlaitDrawElement, PlaitGeometry, PlaitShapeElement, TableSymbols } from '../interfaces';\nimport { DrawPointerType } from '../constants/pointer';\nimport { GeometryShapeGenerator, TableGenerator } from '../generators';\n\nexport const getElementShape = (value: PlaitShapeElement) => {\n if (PlaitDrawElement.isImage(value)) {\n return BasicShapes.rectangle;\n }\n if (PlaitDrawElement.isTable(value)) {\n return TableSymbols.table;\n }\n return value.shape;\n};\n\nexport const getGeometryGeneratorByShape = (board: PlaitBoard, shape: DrawPointerType) => {\n if (PlaitDrawElement.isUMLClassOrInterface({ shape: shape })) {\n return new TableGenerator<PlaitGeometry>(board);\n } else {\n return new GeometryShapeGenerator(board);\n }\n};\n","import { PlaitBoard, Point, idCreator } from '@plait/core';\nimport { DefaultBasicShapeProperty } from '../constants';\nimport { GeometryShapes, UMLSymbols, PlaitCommonGeometry } from '../interfaces';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { GeometryStyleOptions, getDefaultGeometryProperty, getTextShapeProperty } from './geometry';\nimport { PlaitTableCell } from '../interfaces/table';\nimport { getDefaultGeometryText } from './common';\n\nexport const createUMLClassOrInterfaceGeometryElement = (board: PlaitBoard, shape: GeometryShapes, points: [Point, Point]) => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n const element = {\n id: idCreator(),\n type: 'geometry',\n angle: 0,\n opacity: 1,\n points,\n strokeWidth: DefaultBasicShapeProperty.strokeWidth,\n ...(memorizedLatest.geometryProperties as GeometryStyleOptions)\n };\n let rows: { id: string; height?: number }[];\n let columns: { id: string; height?: number }[];\n if (shape === UMLSymbols.class) {\n rows = [\n {\n id: idCreator(),\n height: 30\n },\n {\n id: idCreator()\n },\n {\n id: idCreator()\n }\n ];\n columns = [\n {\n id: idCreator()\n }\n ];\n } else {\n rows = [\n {\n id: idCreator(),\n height: 50\n },\n {\n id: idCreator()\n }\n ];\n columns = [\n {\n id: idCreator()\n }\n ];\n }\n return {\n ...element,\n shape,\n rows,\n columns,\n cells: buildTableCellsForGeometry(board, rows, columns, shape)\n } as unknown as PlaitCommonGeometry;\n};\n\nconst buildTableCellsForGeometry = (\n board: PlaitBoard,\n rows: {\n id: string;\n height?: number;\n }[],\n columns: {\n id: string;\n height?: number;\n }[],\n shape: GeometryShapes\n): PlaitTableCell[] => {\n const cellCount = rows.length * columns.length;\n const defaultTexts = (getDefaultGeometryProperty(shape) as any)?.texts || [];\n return new Array(cellCount).fill('').map((item, index) => {\n const rowIndex = Math.floor(index / columns.length);\n const columnIndex = index % columns.length;\n return {\n id: idCreator(),\n rowId: rows[rowIndex].id,\n columnId: columns[columnIndex].id,\n text: {\n children: [\n {\n text: defaultTexts[index].text\n }\n ],\n align: defaultTexts[index].align\n }\n };\n });\n};\n","import {\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n ThemeColorMode,\n getSelectedElements,\n idCreator,\n toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\nimport { GeometryShapes, BasicShapes, PlaitGeometry, FlowchartSymbols, UMLSymbols } from '../interfaces/geometry';\nimport { Element } from 'slate';\nimport {\n DefaultBasicShapeProperty,\n DefaultBasicShapePropertyMap,\n DefaultFlowchartPropertyMap,\n DefaultTextProperty,\n DefaultUMLPropertyMap,\n DrawPointerType,\n DrawThemeColors,\n GEOMETRY_NOT_CLOSED,\n GEOMETRY_WITHOUT_TEXT,\n ShapeDefaultSpace,\n getFlowchartPointers,\n getUMLPointers\n} from '../constants';\nimport {\n ActiveGenerator,\n Alignment,\n CustomText,\n DEFAULT_FONT_FAMILY,\n PlaitCommonElementRef,\n RESIZE_HANDLE_DIAMETER,\n buildText,\n getFirstTextManage,\n measureElement\n} from '@plait/common';\nimport { Options } from 'roughjs/bin/core';\nimport { getEngine } from '../engines';\nimport { getElementShape } from './shape';\nimport { PlaitDrawElement, PlaitShapeElement } from '../interfaces';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { DrawTextInfo, getTextManage } from '../generators/text.generator';\nimport { createUMLClassOrInterfaceGeometryElement } from './uml';\nimport { createMultipleTextGeometryElement, isMultipleTextGeometry, isMultipleTextShape } from './multi-text-geometry';\nimport { DEFAULT_FONT_SIZE } from '@plait/text-plugins';\n\nexport type GeometryStyleOptions = Pick<PlaitGeometry, 'fill' | 'strokeColor' | 'strokeWidth'>;\n\nexport type TextProperties = Partial<CustomText> & { align?: Alignment };\n\nexport const createGeometryElement = (\n shape: GeometryShapes,\n points: [Point, Point],\n text: string | Element,\n options: GeometryStyleOptions = {},\n textProperties: TextProperties = {}\n): PlaitGeometry => {\n if (GEOMETRY_WITHOUT_TEXT.includes(shape)) {\n return createGeometryElementWithoutText(shape, points, options);\n } else {\n return createGeometryElementWithText(shape, points, text, options, textProperties);\n }\n};\n\nexport const createGeometryElementWithText = (\n shape: GeometryShapes,\n points: [Point, Point],\n text: string | Element,\n options: GeometryStyleOptions = {},\n textProperties: TextProperties = {}\n): PlaitGeometry => {\n let textOptions = {};\n let alignment: undefined | Alignment = Alignment.center;\n if (shape === BasicShapes.text) {\n textOptions = { autoSize: true };\n alignment = undefined;\n }\n textProperties = { ...textProperties };\n textProperties?.align && (alignment = textProperties?.align);\n delete textProperties?.align;\n\n return {\n id: idCreator(),\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n text: buildText(text, alignment, textProperties),\n points,\n ...textOptions,\n ...options\n };\n};\n\nexport const createGeometryElementWithoutText = (\n shape: GeometryShapes,\n points: [Point, Point],\n options: GeometryStyleOptions = {}\n): PlaitGeometry => {\n return {\n id: idCreator(),\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n points,\n ...options\n };\n};\n\nexport const drawGeometry = (board: PlaitBoard, outerRectangle: RectangleClient, shape: GeometryShapes, roughOptions: Options) => {\n return getEngine(shape).draw(board, outerRectangle, roughOptions);\n};\n\nexport const getNearestPoint = (element: PlaitShapeElement, point: Point) => {\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const shape = getElementShape(element);\n return getEngine(shape).getNearestPoint(rectangle, point);\n};\n\nexport const getCenterPointsOnPolygon = (points: Point[]) => {\n const centerPoint: Point[] = [];\n for (let i = 0; i < points.length; i++) {\n let j = i == points.length - 1 ? 0 : i + 1;\n centerPoint.push([(points[i][0] + points[j][0]) / 2, (points[i][1] + points[j][1]) / 2]);\n }\n return centerPoint;\n};\n\nexport const getDefaultFlowchartProperty = (symbol: FlowchartSymbols) => {\n return DefaultFlowchartPropertyMap[symbol];\n};\n\nexport const getDefaultBasicShapeProperty = (shape: BasicShapes) => {\n return DefaultBasicShapePropertyMap[shape] || DefaultBasicShapeProperty;\n};\n\nexport const getDefaultUMLProperty = (shape: UMLSymbols) => {\n return DefaultUMLPropertyMap[shape];\n};\n\nexport const getAutoCompletePoints = (board: PlaitBoard, element: PlaitShapeElement, isToActive = false) => {\n const AutoCompleteMargin = (12 + RESIZE_HANDLE_DIAMETER / 2) * 2;\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n const targetRectangle = isToActive ? activeRectangle : rectangle;\n return RectangleClient.getEdgeCenterPoints(RectangleClient.inflate(targetRectangle, AutoCompleteMargin));\n};\n\nexport const getHitIndexOfAutoCompletePoint = (movingPoint: Point, points: Point[]) => {\n return points.findIndex((point) => {\n const movingRectangle = RectangleClient.getRectangleByPoints([movingPoint]);\n let rectangle = RectangleClient.getRectangleByPoints([point]);\n rectangle = RectangleClient.inflate(rectangle, RESIZE_HANDLE_DIAMETER);\n return RectangleClient.isHit(movingRectangle, rectangle);\n });\n};\n\nexport const getDrawDefaultStrokeColor = (theme: ThemeColorMode) => {\n return DrawThemeColors[theme].strokeColor;\n};\n\nexport const getFlowchartDefaultFill = (theme: ThemeColorMode) => {\n return DrawThemeColors[theme].fill;\n};\n\nexport const getTextShapeProperty = (board: PlaitBoard, text: string | Element, fontSize?: number | string) => {\n fontSize = fontSize ? Number(fontSize) : DEFAULT_FONT_SIZE;\n const textSize = measureElement(board, buildText(text), { fontSize, fontFamily: DEFAULT_FONT_FAMILY });\n return {\n width: textSize.width + ShapeDefaultSpace.rectangleAndText * 2,\n height: textSize.height\n };\n};\n\nexport const getDefaultGeometryPoints = (pointer: DrawPointerType, centerPoint: Point) => {\n const property = getDefaultGeometryProperty(pointer);\n return RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height));\n};\n\nexport const getDefaultGeometryProperty = (pointer: DrawPointerType) => {\n const isFlowChart = getFlowchartPointers().includes(pointer);\n const isUML = getUMLPointers().includes(pointer);\n if (isFlowChart) {\n return getDefaultFlowchartProperty(pointer as FlowchartSymbols);\n } else if (isUML) {\n return getDefaultUMLProperty(pointer as UMLSymbols);\n } else {\n return getDefaultBasicShapeProperty(pointer as BasicShapes);\n }\n};\n\nexport const getDefaultTextPoints = (board: PlaitBoard, centerPoint: Point, fontSize?: number | string) => {\n const property = getTextShapeProperty(board, DefaultTextProperty.text, fontSize);\n return RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height));\n};\n\nexport const createTextElement = (board: PlaitBoard, points: [Point, Point], text: string | Element) => {\n const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n return createGeometryElement(BasicShapes.text, points, text, memorizedLatest.geometryProperties as GeometryStyleOptions, {\n ...memorizedLatest.textProperties\n });\n};\n\nexport const createDefaultGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n if (PlaitDrawElement.isUMLClassOrInterface({ shape })) {\n return createUMLClassOrInterfaceGeometryElement(board, shape, points);\n }\n if (isMultipleTextShape(shape)) {\n return createMultipleTextGeometryElement(shape, points, {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth,\n ...(memorizedLatest.geometryProperties as GeometryStyleOptions)\n });\n } else {\n return createGeometryElement(\n shape,\n points,\n '',\n {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth,\n ...(memorizedLatest.geometryProperties as GeometryStyleOptions)\n },\n { ...memorizedLatest.textProperties }\n );\n }\n};\n\nexport const editText = (board: PlaitBoard, element: PlaitGeometry, text?: DrawTextInfo) => {\n const textManage = text ? getTextManage(board, element, text) : getFirstTextManage(element);\n if (textManage) {\n textManage.edit(() => {});\n }\n};\n\nexport const isGeometryIncludeText = (element: PlaitGeometry) => {\n return isSingleTextGeometry(element) || isMultipleTextGeometry(element);\n};\n\nexport const isSingleTextShape = (shape: GeometryShapes) => {\n return !GEOMETRY_WITHOUT_TEXT.includes(shape) && !isMultipleTextShape(shape);\n};\n\nexport const isSingleTextGeometry = (element: PlaitGeometry) => {\n return PlaitDrawElement.isGeometry(element) && isSingleTextShape(element.shape);\n};\n\nexport const isGeometryClosed = (element: PlaitGeometry) => {\n return !GEOMETRY_NOT_CLOSED.includes(element.shape);\n};\n","import { Point, PlaitBoard, getElementById, RectangleClient, Vector, rotatePoints, rotatePointsByElement } from '@plait/core';\nimport {\n getPoints,\n getPointByVectorComponent,\n removeDuplicatePoints,\n generateElbowLineRoute,\n simplifyOrthogonalPoints,\n isSourceAndTargetIntersect,\n DEFAULT_ROUTE_MARGIN,\n ElbowLineRouteOptions\n} from '@plait/common';\nimport { BasicShapes, ArrowLineHandleRefPair, PlaitGeometry, PlaitArrowLine } from '../../interfaces';\nimport { createGeometryElement } from '../geometry';\nimport { getElbowLineRouteOptions, getArrowLineHandleRefPair } from './arrow-line-common';\nimport { getMidKeyPoints, getMirrorDataPoints, hasIllegalElbowPoint } from './arrow-line-resize';\nimport { getStrokeWidthByElement } from '../common';\n\nexport const isSelfLoop = (element: PlaitArrowLine) => {\n return element.source.boundId && element.source.boundId === element.target.boundId;\n};\n\nexport const isUseDefaultOrthogonalRoute = (element: PlaitArrowLine, options: ElbowLineRouteOptions) => {\n return isSourceAndTargetIntersect(options) && !isSelfLoop(element);\n};\n\nexport const getElbowPoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n const handleRefPair = getArrowLineHandleRefPair(board, element);\n const params = getElbowLineRouteOptions(board, element, handleRefPair);\n // console.log(params, 'params');\n if (isUseDefaultOrthogonalRoute(element, params)) {\n return simplifyOrthogonalPoints(\n getPoints(\n handleRefPair.source.point,\n handleRefPair.source.direction,\n handleRefPair.target.point,\n handleRefPair.target.direction,\n DEFAULT_ROUTE_MARGIN\n )\n );\n }\n const keyPoints = removeDuplicatePoints(generateElbowLineRoute(params, board));\n const nextKeyPoints = keyPoints.slice(1, keyPoints.length - 1);\n if (element.points.length === 2) {\n return simplifyOrthogonalPoints(keyPoints);\n } else {\n const simplifiedNextKeyPoints = simplifyOrthogonalPoints(nextKeyPoints);\n const dataPoints = removeDuplicatePoints(PlaitArrowLine.getPoints(board, element));\n const midDataPoints = dataPoints.slice(1, -1);\n if (hasIllegalElbowPoint(midDataPoints)) {\n return simplifyOrthogonalPoints(keyPoints);\n }\n const nextDataPoints = [simplifiedNextKeyPoints[0], ...midDataPoints, simplifiedNextKeyPoints[simplifiedNextKeyPoints.length - 1]];\n const mirrorDataPoints = getMirrorDataPoints(board, nextDataPoints, simplifiedNextKeyPoints, params);\n // console.log(mirrorDataPoints, 'mirrorDataPoints');\n const renderPoints: Point[] = [keyPoints[0]];\n for (let index = 0; index < mirrorDataPoints.length - 1; index++) {\n let currentPoint = mirrorDataPoints[index];\n let nextPoint = mirrorDataPoints[index + 1];\n const isStraight = Point.isAlign([currentPoint, nextPoint]);\n if (!isStraight) {\n const midKeyPoints = getMidKeyPoints(simplifiedNextKeyPoints, currentPoint, nextPoint);\n if (midKeyPoints.length) {\n renderPoints.push(currentPoint);\n renderPoints.push(...midKeyPoints);\n } else {\n renderPoints.push(currentPoint);\n console.log('unknown data points');\n }\n } else {\n renderPoints.push(currentPoint);\n }\n }\n renderPoints.push(keyPoints[keyPoints.length - 2], keyPoints[keyPoints.length - 1]);\n // Remove the middle point to avoid the situation where the starting and ending positions are drawn back, such as when sourcePoint is between nextSourcePoint and the first key point.\n // Issue\n // keyPoint2\n // |\n // |\n // nextPoint---sourcePoint---keyPoint1\n // The correct rendering should be (nextPoint should be filtered out):\n // keyPoint2\n // |\n // |\n // sourcePoint---keyPoint1\n const ret = simplifyOrthogonalPoints(renderPoints);\n return ret;\n }\n};\n\nexport const getNextSourceAndTargetPoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n const options = getElbowLineRouteOptions(board, element);\n return [options.nextSourcePoint, options.nextTargetPoint];\n};\n\nexport const getSourceAndTargetRectangle = (board: PlaitBoard, element: PlaitArrowLine, handleRefPair: ArrowLineHandleRefPair) => {\n let sourceElement = element.source.boundId ? getElementById<PlaitGeometry>(board, element.source.boundId) : undefined;\n let targetElement = element.target.boundId ? getElementById<PlaitGeometry>(board, element.target.boundId) : undefined;\n if (!sourceElement) {\n const source = handleRefPair.source;\n sourceElement = createFakeElement(source.point, source.vector);\n }\n if (!targetElement) {\n const target = handleRefPair.target;\n targetElement = createFakeElement(target.point, target.vector);\n }\n\n let sourceRectangle = RectangleClient.getRectangleByPoints(sourceElement.points);\n const rotatedSourceCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(sourceRectangle), sourceElement) ||\n RectangleClient.getCornerPoints(sourceRectangle);\n sourceRectangle = RectangleClient.getRectangleByPoints(rotatedSourceCornerPoints);\n sourceRectangle = RectangleClient.inflate(sourceRectangle, getStrokeWidthByElement(sourceElement) * 2);\n\n let targetRectangle = RectangleClient.getRectangleByPoints(targetElement.points);\n const rotatedTargetCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(targetRectangle), targetElement) ||\n RectangleClient.getCornerPoints(targetRectangle);\n targetRectangle = RectangleClient.getRectangleByPoints(rotatedTargetCornerPoints);\n targetRectangle = RectangleClient.inflate(targetRectangle, getStrokeWidthByElement(targetElement) * 2);\n\n return {\n sourceRectangle,\n targetRectangle\n };\n};\n\nconst createFakeElement = (startPoint: Point, vector: Vector) => {\n const point = getPointByVectorComponent(startPoint, vector, -25);\n const points = RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(point, 50, 50));\n return createGeometryElement(BasicShapes.rectangle, points, '');\n};\n\nexport function getNextRenderPoints(board: PlaitBoard, element: PlaitArrowLine, renderPoints?: Point[]) {\n let newRenderKeyPoints = renderPoints ?? getElbowPoints(board, element);\n const [nextSourcePoint, nextTargetPoint] = getNextSourceAndTargetPoints(board, element);\n newRenderKeyPoints.splice(0, 1, nextSourcePoint);\n newRenderKeyPoints.splice(-1, 1, nextTargetPoint);\n return removeDuplicatePoints(newRenderKeyPoints);\n}\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { PlaitArrowLine, PlaitCustomGeometry, PlaitDrawElement, PlaitGeometry, PlaitSwimlane, PlaitVectorLine } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\n\nexport const getSelectedDrawElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n return selectedElements.filter(value => PlaitDrawElement.isDrawElement(value)) as PlaitDrawElement[];\n};\n\nexport const getSelectedGeometryElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isGeometry(value)) as PlaitGeometry[];\n return selectedElements;\n};\n\nexport const getSelectedCustomGeometryElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value =>\n PlaitDrawElement.isCustomGeometryElement(board, value)\n ) as PlaitCustomGeometry[];\n return selectedElements;\n};\n\nexport const getSelectedArrowLineElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isArrowLine(value)) as PlaitArrowLine[];\n return selectedElements;\n};\n\nexport const getSelectedVectorLineElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isVectorLine(value)) as PlaitVectorLine[];\n return selectedElements;\n};\n\nexport const getSelectedImageElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isImage(value)) as PlaitImage[];\n return selectedElements;\n};\n\nexport const isSingleSelectSwimlane = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board);\n return selectedElements && selectedElements.length === 1 && PlaitDrawElement.isSwimlane(selectedElements[0]);\n};\n\nexport const isSingleSelectLine = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board);\n return selectedElements && selectedElements.length === 1 && PlaitDrawElement.isLine(selectedElements[0]);\n};\n\nexport const getSelectedSwimlane = (board: PlaitBoard): PlaitSwimlane => {\n const selectedElements = getSelectedElements(board);\n return selectedElements.find(item => PlaitDrawElement.isSwimlane(item)) as PlaitSwimlane;\n};\n","import { PlaitBoard, Transforms, Point, Path, PlaitNode, getSelectedElements } from '@plait/core';\nimport { PlaitDrawElement, GeometryShapes, PlaitText, BasicShapes, PlaitArrowLine } from '../interfaces';\nimport {\n collectArrowLineUpdatedRefsByGeometry,\n createDefaultGeometry,\n createTextElement,\n getMemorizedLatestByPointer,\n getTextShapeProperty,\n insertElement\n} from '../utils';\nimport { Element } from 'slate';\nimport { normalizeShapePoints } from '@plait/common';\nimport { DrawTransforms } from '.';\n\nexport const insertGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n const newElement = createDefaultGeometry(board, points, shape);\n insertElement(board, newElement);\n return newElement;\n};\n\nexport const insertText = (board: PlaitBoard, point: Point, text: string | Element) => {\n const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n const property = getTextShapeProperty(board, text, memorizedLatest.textProperties['font-size']);\n const points: [Point, Point] = [point, [point[0] + property.width, point[1] + property.height]];\n const newElement = createTextElement(board, points, text);\n insertElement(board, newElement);\n};\n\nexport const resizeGeometry = (board: PlaitBoard, points: [Point, Point], path: Path) => {\n const normalizePoints = normalizeShapePoints(points);\n const element = PlaitNode.get(board, path);\n const newProperties = { points: normalizePoints, text: { ...element.text } };\n if (PlaitDrawElement.isText(element) && element.autoSize) {\n (newProperties as Partial<PlaitText>).autoSize = false;\n }\n Transforms.setNode(board, newProperties, path);\n};\n\nexport const switchGeometryShape = (board: PlaitBoard, shape: GeometryShapes) => {\n const selectedElements = getSelectedElements(board);\n const refs: { property: Partial<PlaitArrowLine>; path: Path }[] = [];\n selectedElements.forEach((item) => {\n if (PlaitDrawElement.isGeometry(item) && !PlaitDrawElement.isText(item)) {\n const path = PlaitBoard.findPath(board, item);\n Transforms.setNode(board, { shape }, path);\n collectArrowLineUpdatedRefsByGeometry(board, { ...item, shape }, refs);\n }\n });\n if (refs.length) {\n refs.forEach((ref) => {\n DrawTransforms.resizeArrowLine(board, ref.property, ref.path);\n });\n }\n};\n","import { PlaitBoard, Point, Transforms, hasValidAngle, RectangleClient } from '@plait/core';\nimport { Element } from 'slate';\nimport { PlaitDrawElement, PlaitGeometry } from '../interfaces';\nimport { ShapeDefaultSpace } from '../constants';\nimport { Alignment, getFirstTextEditor, resetPointsAfterResize } from '@plait/common';\nimport { AlignEditor } from '@plait/text-plugins';\nimport { MIN_TEXT_WIDTH } from '../constants/text';\n\nconst normalizePoints = (board: PlaitBoard, element: PlaitGeometry, width: number, height: number) => {\n let points = element.points;\n let autoSize = PlaitDrawElement.isText(element) ? element.autoSize : false;\n const defaultSpace = ShapeDefaultSpace.rectangleAndText;\n\n if (autoSize) {\n const newWidth = width < MIN_TEXT_WIDTH ? MIN_TEXT_WIDTH : width;\n const editor = getFirstTextEditor(element);\n if (AlignEditor.isActive(editor, Alignment.right)) {\n points = [\n [points[1][0] - (newWidth + defaultSpace * 2), points[0][1]],\n [points[1][0], points[0][1] + height]\n ];\n } else if (AlignEditor.isActive(editor, Alignment.center)) {\n const oldWidth = Math.abs(points[0][0] - points[1][0]);\n const offset = (newWidth - oldWidth) / 2;\n points = [\n [points[0][0] - offset - defaultSpace, points[0][1]],\n [points[1][0] + offset + defaultSpace, points[0][1] + height]\n ];\n } else {\n points = [points[0], [points[0][0] + newWidth + defaultSpace * 2, points[0][1] + height]];\n }\n if (hasValidAngle(element)) {\n points = resetPointsAfterResize(\n RectangleClient.getRectangleByPoints(element.points),\n RectangleClient.getRectangleByPoints(points),\n RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(element.points)),\n RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(points)),\n element.angle!\n );\n }\n }\n\n return { points };\n};\n\nexport const setText = (board: PlaitBoard, element: PlaitGeometry, text: Element, width: number, height: number) => {\n const newElement = {\n text,\n ...normalizePoints(board, element, width, height)\n };\n const path = board.children.findIndex((child) => child === element);\n Transforms.setNode(board, newElement, [path]);\n};\n\nexport const setTextSize = (board: PlaitBoard, element: PlaitGeometry, width: number, height: number) => {\n const isAutoSize = PlaitDrawElement.isText(element) ? element.autoSize : false;\n if (isAutoSize) {\n const newElement = {\n ...normalizePoints(board, element, width, height)\n };\n const path = board.children.findIndex((child) => child === element);\n Transforms.setNode(board, newElement, [path]);\n }\n};\n","import { CommonImageItem } from '@plait/common';\nimport { PlaitBoard, Point, Transforms, idCreator, toHostPoint, toViewBoxPoint } from '@plait/core';\n\nexport const insertImage = (board: PlaitBoard, imageItem: CommonImageItem, startPoint?: Point) => {\n const { width, height, url } = imageItem;\n const viewportWidth = PlaitBoard.getBoardContainer(board).clientWidth;\n const viewportHeight = PlaitBoard.getBoardContainer(board).clientHeight;\n const point = toViewBoxPoint(board, toHostPoint(board, viewportWidth / 2, viewportHeight / 2));\n const points: Point[] = startPoint\n ? [startPoint, [startPoint[0] + width, startPoint[1] + height]]\n : [\n [point[0] - width / 2, point[1] - height / 2],\n [point[0] + width / 2, point[1] + height / 2]\n ];\n const imageElement = {\n id: idCreator(),\n type: 'image',\n points,\n url\n };\n Transforms.insertNode(board, imageElement, [board.children.length]);\n Transforms.addSelectionWithTemporaryElements(board, [imageElement]);\n};\n\nexport const createImage = (startPoint: Point, imageItem: CommonImageItem) => {\n const { width, height, url } = imageItem;\n const points: Point[] = [startPoint, [startPoint[0] + width, startPoint[1] + height]];\n const imageElement = {\n id: idCreator(),\n type: 'image',\n points,\n url\n };\n return imageElement;\n};\n","import { Path, PlaitBoard, PlaitElement, PointOfRectangle, Transforms, findElements } from '@plait/core';\nimport {\n ArrowLineHandle,\n ArrowLineHandleKey,\n ArrowLineMarkerType,\n ArrowLineText,\n MemorizeKey,\n PlaitArrowLine,\n PlaitShapeElement\n} from '../interfaces';\nimport { memorizeLatest } from '@plait/common';\nimport { getSelectedArrowLineElements } from '../utils/selected';\nimport { getHitConnection } from '../utils/arrow-line/arrow-line-basic';\n\nexport const resizeArrowLine = (board: PlaitBoard, options: Partial<PlaitArrowLine>, path: Path) => {\n Transforms.setNode(board, options, path);\n};\n\nexport const setArrowLineTexts = (board: PlaitBoard, element: PlaitArrowLine, texts: ArrowLineText[]) => {\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, { texts }, path);\n};\n\nexport const removeArrowLineText = (board: PlaitBoard, element: PlaitArrowLine, index: number) => {\n const path = PlaitBoard.findPath(board, element);\n const texts = element.texts?.length ? [...element.texts] : [];\n const newTexts = [...texts];\n newTexts.splice(index, 1);\n Transforms.setNode(board, { texts: newTexts }, path);\n};\n\nexport const setArrowLineMark = (board: PlaitBoard, handleKey: ArrowLineHandleKey, marker: ArrowLineMarkerType) => {\n memorizeLatest(MemorizeKey.arrowLine, handleKey, marker);\n const selectedElements = getSelectedArrowLineElements(board);\n selectedElements.forEach((element: PlaitArrowLine) => {\n const path = PlaitBoard.findPath(board, element);\n let handle = handleKey === ArrowLineHandleKey.source ? element.source : element.target;\n handle = { ...handle, marker };\n Transforms.setNode(board, { [handleKey]: handle }, path);\n });\n};\n\nexport const setArrowLineShape = (board: PlaitBoard, newProperties: Partial<PlaitArrowLine>) => {\n const elements = getSelectedArrowLineElements(board);\n elements.map(element => {\n const _properties = { ...newProperties };\n if (element.shape === newProperties.shape) {\n return;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, _properties, path);\n });\n};\n\nexport const connectArrowLineToDraw = (\n board: PlaitBoard,\n lineElement: PlaitArrowLine,\n handle: ArrowLineHandleKey,\n geometryElement: PlaitShapeElement\n) => {\n const linePoints = PlaitArrowLine.getPoints(board, lineElement);\n const point = handle === ArrowLineHandleKey.source ? linePoints[0] : linePoints[linePoints.length - 1];\n const connection: PointOfRectangle = getHitConnection(board, point, geometryElement);\n if (connection) {\n let source: ArrowLineHandle = lineElement.source;\n let target: ArrowLineHandle = lineElement.target;\n if (handle === ArrowLineHandleKey.source) {\n source = {\n ...source,\n boundId: geometryElement.id,\n connection\n };\n } else {\n target = {\n ...target,\n boundId: geometryElement.id,\n connection\n };\n }\n const path = PlaitBoard.findPath(board, lineElement);\n resizeArrowLine(board, { source, target }, path);\n }\n};\n","import { idCreator, PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { DefaultSwimlanePropertyMap, getSwimlanePointers, getSwimlaneShapes, SWIMLANE_HEADER_SIZE } from '../constants';\nimport { PlaitDrawElement, PlaitSwimlane, PlaitTableCell, SwimlaneDrawSymbols, SwimlaneSymbols } from '../interfaces';\nimport { createCell } from './table';\n\nexport function buildSwimlaneTable(element: PlaitSwimlane) {\n const swimlaneElement = { ...element };\n if (PlaitDrawElement.isHorizontalSwimlane(element)) {\n swimlaneElement.cells = element.cells.map((item, index) => {\n if (index === 0 && element.header) {\n item = {\n ...element.cells[0],\n rowspan: element.rows.length\n };\n }\n if (item.text && !item.text.direction) {\n item = {\n ...item,\n text: {\n ...item.text,\n direction: 'vertical'\n }\n };\n }\n return item;\n });\n\n return swimlaneElement;\n }\n if (element.header) {\n swimlaneElement.cells = [\n {\n ...element.cells[0],\n colspan: element.columns.length\n },\n ...element.cells.slice(1, element.cells.length)\n ];\n }\n return swimlaneElement;\n}\n\nexport const getDefaultSwimlanePoints = (pointer: SwimlaneDrawSymbols, centerPoint: Point) => {\n const property = DefaultSwimlanePropertyMap[pointer];\n return RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height));\n};\n\nexport const createDefaultSwimlane = (shape: SwimlaneDrawSymbols, points: [Point, Point]) => {\n const header = isSwimlaneWithHeader(shape);\n const dataShape = adjustSwimlaneShape(shape);\n const width = points[1][0] - points[0][0];\n const height = points[1][1] - points[0][1];\n const rows = createDefaultRowsOrColumns(dataShape, 'row', header, height);\n const columns = createDefaultRowsOrColumns(dataShape, 'column', header, width);\n const swimlane = {\n id: idCreator(),\n type: 'swimlane',\n shape: dataShape,\n points,\n rows,\n columns,\n header,\n cells: createDefaultCells(dataShape, rows, columns, header)\n } as PlaitSwimlane;\n return swimlane;\n};\n\nexport const createDefaultRowsOrColumns = (shape: SwimlaneSymbols, type: 'row' | 'column', header: boolean, size: number) => {\n const createItems = (count: number) => new Array(count).fill('').map(() => ({ id: idCreator() }));\n let data = createItems(3);\n if (\n (type === 'row' && shape === SwimlaneSymbols.swimlaneVertical) ||\n (type === 'column' && shape === SwimlaneSymbols.swimlaneHorizontal)\n ) {\n data = header ? data : createItems(2);\n const dimension = type === 'row' ? 'height' : 'width';\n let defaultSize = SWIMLANE_HEADER_SIZE;\n if (size < SWIMLANE_HEADER_SIZE * data.length) {\n defaultSize = Math.min((size / data.length / SWIMLANE_HEADER_SIZE) * SWIMLANE_HEADER_SIZE, SWIMLANE_HEADER_SIZE);\n }\n data = data.map((item, index) => {\n if (index === 0 || (index === 1 && header)) {\n return {\n ...item,\n [dimension]: defaultSize\n };\n }\n return item;\n });\n }\n\n return data;\n};\n\nexport const createDefaultCells = (\n shape: SwimlaneSymbols,\n rows: { id: string; height?: number }[],\n columns: { id: string; width?: number }[],\n header: boolean\n) => {\n let headerCell: PlaitTableCell[] = [];\n let startIndex = 0;\n if (header) {\n headerCell = [createCell(rows[0].id, columns[0].id, 'New Swimlane')];\n startIndex = 1;\n }\n const cells = new Array(6).fill('').map((_, index) => {\n if (index < 3) {\n const rowId = shape === SwimlaneSymbols.swimlaneVertical ? rows[startIndex].id : rows[index].id;\n const columnId = shape === SwimlaneSymbols.swimlaneVertical ? columns[index].id : columns[startIndex].id;\n return createCell(rowId, columnId, header ? 'Lane' : 'New Swimlane');\n }\n const rowId = shape === SwimlaneSymbols.swimlaneVertical ? rows[startIndex + 1].id : rows[index - 3].id;\n const columnId = shape === SwimlaneSymbols.swimlaneVertical ? columns[index - 3].id : columns[startIndex + 1].id;\n return createCell(rowId, columnId);\n });\n return [...headerCell, ...cells];\n};\n\nexport const getSwimlaneCount = (swimlane: PlaitSwimlane) => {\n if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n return swimlane.rows.length;\n }\n if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n return swimlane.columns.length;\n }\n return 0;\n};\n\nexport const isSwimlaneWithHeader = (shape: SwimlaneDrawSymbols) => {\n return [SwimlaneDrawSymbols.swimlaneHorizontalWithHeader, SwimlaneDrawSymbols.swimlaneVerticalWithHeader].includes(shape);\n};\n\nexport const isSwimlaneShape = (shape: SwimlaneSymbols) => {\n return getSwimlaneShapes().includes(shape);\n};\n\nexport const adjustSwimlaneShape = (shape: SwimlaneDrawSymbols): SwimlaneSymbols => {\n return [SwimlaneDrawSymbols.swimlaneHorizontalWithHeader, SwimlaneDrawSymbols.swimlaneHorizontal].includes(shape)\n ? SwimlaneSymbols.swimlaneHorizontal\n : SwimlaneSymbols.swimlaneVertical;\n};\n\nexport const isSwimlanePointers = (board: PlaitBoard, pointer: string = board.pointer) => {\n return getSwimlanePointers().includes(pointer);\n};\n","import { idCreator, Path, PlaitBoard, Point, RectangleClient, Transforms } from '@plait/core';\nimport { PlaitDrawElement, PlaitSwimlane } from '../interfaces';\nimport { PlaitBaseTable, PlaitTableCell } from '../interfaces/table';\nimport { getCellWithPoints } from '../utils/table';\nimport { getSwimlaneCount } from '../utils/swimlane';\nimport { Alignment } from '@plait/common';\n\nexport const updateSwimlaneCount = (board: PlaitBoard, swimlane: PlaitSwimlane, count: number) => {\n if (count > 0 && PlaitDrawElement.isSwimlane(swimlane)) {\n const currentCount = getSwimlaneCount(swimlane);\n if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n if (count > currentCount) {\n addSwimlaneRow(board, swimlane, swimlane.rows.length, count - currentCount);\n } else {\n const deleteIndex = swimlane.rows.length - (currentCount - count);\n removeSwimlaneRow(board, swimlane, deleteIndex, currentCount - count);\n }\n }\n if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n if (count > currentCount) {\n addSwimlaneColumn(board, swimlane, swimlane.columns.length, count - currentCount);\n } else {\n const deleteIndex = swimlane.columns.length - (currentCount - count);\n removeSwimlaneColumn(board, swimlane, deleteIndex, currentCount - count);\n }\n }\n }\n};\n\nexport const addSwimlaneRow = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n const newRows = [...swimlane.rows];\n const addRows: { id: string }[] = [];\n for (let i = 0; i < count; i++) {\n addRows.push({ id: idCreator() });\n }\n newRows.splice(index, 0, ...addRows);\n const newCells = [...swimlane.cells];\n addRows.forEach(item => {\n newCells.push(...createNewSwimlaneCells(swimlane, item.id, 'column'));\n });\n const lastCellPoints = getCellWithPoints(board, swimlane, swimlane.cells[swimlane.cells.length - 1].id).points;\n const lastRowHeight = RectangleClient.getRectangleByPoints(lastCellPoints).height;\n const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0], swimlane.points[1][1] + lastRowHeight * count]];\n updateSwimlane(board, swimlane, swimlane.columns, newRows, newCells, newPoints);\n }\n};\n\nexport const addSwimlaneColumn = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n const newColumns = [...swimlane.columns];\n const addColumns: { id: string }[] = [];\n for (let i = 0; i < count; i++) {\n addColumns.push({ id: idCreator() });\n }\n newColumns.splice(index, 0, ...addColumns);\n const newCells = [...swimlane.cells];\n addColumns.forEach(item => {\n newCells.push(...createNewSwimlaneCells(swimlane, item.id, 'row'));\n });\n const lastCellPoints = getCellWithPoints(board, swimlane, swimlane.cells[swimlane.cells.length - 1].id).points;\n const lastColumnWidth = RectangleClient.getRectangleByPoints(lastCellPoints).width;\n const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0] + lastColumnWidth * count, swimlane.points[1][1]]];\n updateSwimlane(board, swimlane, newColumns, swimlane.rows, newCells, newPoints);\n }\n};\n\nexport const removeSwimlaneRow = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n if (count > swimlane.rows.length) {\n return;\n }\n const newRows = [...swimlane.rows];\n newRows.splice(index, count);\n if (newRows.length === 0) {\n const path = PlaitBoard.findPath(board, swimlane);\n Transforms.removeNode(board, path);\n } else {\n let newCells = [...swimlane.cells];\n const removeRows = [];\n for (let i = index; i < count + index; i++) {\n const removeRow = swimlane.rows[i];\n removeRows.push(removeRow);\n newCells = newCells.filter(item => item.rowId !== removeRow.id);\n }\n let removeRowHeight = 0;\n removeRows.forEach(row => {\n if (!row.height) {\n const rowCell = swimlane.cells.find(item => item.rowId === row.id)!;\n const cellPoints = getCellWithPoints(board, swimlane, rowCell.id).points;\n removeRowHeight += RectangleClient.getRectangleByPoints(cellPoints).height;\n } else {\n removeRowHeight += row.height;\n }\n });\n\n const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0], swimlane.points[1][1] - removeRowHeight]];\n updateSwimlane(board, swimlane, swimlane.columns, newRows, newCells, newPoints);\n }\n }\n};\n\nexport const removeSwimlaneColumn = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n if (count > swimlane.columns.length) {\n return;\n }\n const newColumns = [...swimlane.columns];\n newColumns.splice(index, count);\n if (newColumns.length === 0) {\n const path = PlaitBoard.findPath(board, swimlane);\n Transforms.removeNode(board, path);\n } else {\n let newCells = [...swimlane.cells];\n const removeColumns = [];\n for (let i = index; i < count + index; i++) {\n const removeColumn = swimlane.columns[i];\n removeColumns.push(removeColumn);\n newCells = newCells.filter(item => item.columnId !== removeColumn.id);\n }\n let removeColumnWidth = 0;\n removeColumns.forEach(column => {\n if (!column.width) {\n const rowCell = swimlane.cells.find(item => item.columnId === column.id)!;\n const cellPoints = getCellWithPoints(board, swimlane, rowCell.id).points;\n removeColumnWidth += RectangleClient.getRectangleByPoints(cellPoints).width;\n } else {\n removeColumnWidth += column.width;\n }\n });\n const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0] - removeColumnWidth, swimlane.points[1][1]]];\n updateSwimlane(board, swimlane, newColumns, swimlane.rows, newCells, newPoints);\n }\n }\n};\n\nconst createNewSwimlaneCells = (swimlane: PlaitSwimlane, newId: string, type: 'row' | 'column'): PlaitTableCell[] => {\n const cells: PlaitTableCell[] = swimlane[`${type}s`].map(item => ({\n id: idCreator(),\n rowId: type === 'row' ? item.id : newId,\n columnId: type === 'row' ? newId : item.id\n }));\n if (swimlane.header) {\n cells.shift();\n }\n cells[0] = {\n ...cells[0],\n text: {\n children: [{ text: swimlane.header ? 'Lane' : 'New Swimlane' }],\n align: Alignment.center,\n direction: type === 'row' ? undefined : 'vertical'\n }\n };\n return cells;\n};\n\nconst updateSwimlane = (\n board: PlaitBoard,\n swimlane: PlaitSwimlane,\n newColumns: { id: string; width?: number }[],\n newRows: { id: string; height?: number }[],\n newCells: PlaitTableCell[],\n newPoints: Point[]\n) => {\n const path = PlaitBoard.findPath(board, swimlane);\n Transforms.setNode(\n board,\n {\n columns: newColumns,\n rows: newRows,\n cells: newCells,\n points: newPoints\n },\n path\n );\n};\n","import { PlaitBoard, Transforms } from '@plait/core';\nimport { PlaitMultipleTextGeometry } from '../interfaces';\nimport { DrawTextInfo } from '../generators/text.generator';\n\nexport const setDrawTexts = (board: PlaitBoard, element: PlaitMultipleTextGeometry, text: DrawTextInfo) => {\n const newTexts = element.texts?.map(item => {\n if (item.id === text.id) {\n return { ...item, ...text };\n }\n return item;\n });\n const newElement = {\n texts: newTexts\n };\n const path = board.children.findIndex(child => child === element);\n Transforms.setNode(board, newElement, [path]);\n};\n","import { Path, PlaitBoard, PlaitNode, RectangleClient, Transforms } from '@plait/core';\nimport { ShapeDefaultSpace } from '../constants';\nimport { Element } from 'slate';\nimport { PlaitBaseTable, PlaitTableCell, PlaitTableElement } from '../interfaces/table';\nimport { getCellWithPoints, updateColumns, updateRows } from '../utils/table';\n\nexport const setTableText = (board: PlaitBoard, path: Path, cellId: string, text: Element, textHeight: number) => {\n const table = PlaitNode.get(board, path) as PlaitBaseTable;\n const cell = getCellWithPoints(board, table, cellId);\n const cellIndex = table.cells.findIndex((item) => item.id === cell.id);\n let rows = [...table.rows];\n let columns = [...table.columns];\n let cells = [...table.cells];\n let points = [...table.points];\n const { width: cellWidth, height: cellHeight } = RectangleClient.getRectangleByPoints(cell.points);\n const defaultSpace = ShapeDefaultSpace.rectangleAndText;\n if (PlaitTableElement.isVerticalText(cell as PlaitTableCell)) {\n const columnIdx = table.columns.findIndex((column) => column.id === cell.columnId);\n if (textHeight > cellWidth) {\n const newColumnWidth = textHeight + defaultSpace * 2;\n const offset = newColumnWidth - cellWidth;\n const result = updateColumns(table, table.columns[columnIdx].id, newColumnWidth, offset);\n points = result.points;\n columns = result.columns;\n }\n } else {\n const rowIdx = table.rows.findIndex((row) => row.id === cell.rowId);\n const tableRow = table.rows[rowIdx];\n const compareHeight = tableRow.height ?? Math.max(cellHeight, 0);\n if (textHeight > compareHeight) {\n const newRowHeight = textHeight + defaultSpace * 2;\n const offset = newRowHeight - compareHeight;\n const result = updateRows(table, table.rows[rowIdx].id, newRowHeight, offset);\n points = result.points;\n rows = result.rows;\n }\n }\n cells[cellIndex] = {\n ...cells[cellIndex],\n text\n };\n\n Transforms.setNode(board, { rows, columns, cells, points }, path);\n};\n","import { Path, PlaitBoard, Transforms } from '@plait/core';\nimport { PlaitBaseTable, PlaitTableCell } from '../interfaces';\nimport { getSelectedCells } from '../utils';\n\nexport const setTableFill = (board: PlaitBoard, element: PlaitBaseTable, fill: string | null, path: Path) => {\n const selectedCells = getSelectedCells(element);\n let newCells = element.cells;\n if (selectedCells?.length) {\n newCells = element.cells.map(cell => {\n if (selectedCells.map(item => item.id).includes(cell.id)) {\n return getNewCell(cell, fill);\n }\n return cell;\n });\n } else {\n newCells = element.cells.map(cell => {\n if (cell.text) {\n return getNewCell(cell, fill);\n }\n return cell;\n });\n }\n Transforms.setNode(board, { cells: newCells }, path);\n};\n\nconst getNewCell = (cell: PlaitTableCell, fill: string | null) => {\n const newCell = {\n ...cell\n };\n if (fill) {\n newCell.fill = fill;\n } else {\n delete newCell.fill;\n }\n return newCell;\n};\n","import { PlaitBoard, Transforms } from '@plait/core';\nimport { PlaitVectorLine } from '../interfaces';\nimport { getSelectedVectorLineElements } from '../utils';\n\nexport const setVectorLineShape = (board: PlaitBoard, newProperties: Partial<PlaitVectorLine>) => {\n const elements = getSelectedVectorLineElements(board);\n elements.map(element => {\n if (element.shape === newProperties.shape) {\n return;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, { ...newProperties }, path);\n });\n};\n","import { getDirectionByVector, getPointByVectorComponent } from '@plait/common';\nimport { PlaitBoard, Vector, Direction, RectangleClient, Point } from '@plait/core';\nimport { createDefaultSwimlane, insertElement } from '../utils';\nimport { insertGeometry } from './geometry';\nimport { BasicShapes, FlowchartSymbols, GeometryShapes, SwimlaneDrawSymbols, UMLSymbols } from '../interfaces';\nimport {\n DefaultBasicShapeProperty,\n DefaultBasicShapePropertyMap,\n DefaultFlowchartPropertyMap,\n DefaultSwimlanePropertyMap,\n DefaultUMLPropertyMap,\n getSwimlanePointers\n} from '../constants';\n\nexport const insertDrawByVector = (board: PlaitBoard, point: Point, shape: GeometryShapes | SwimlaneDrawSymbols, vector: Vector) => {\n const swimlanePointers = getSwimlanePointers();\n const isSwimlanePointer = swimlanePointers.includes(shape);\n let shapeProperty =\n DefaultFlowchartPropertyMap[shape as FlowchartSymbols] ||\n DefaultBasicShapePropertyMap[shape as BasicShapes] ||\n DefaultUMLPropertyMap[shape as UMLSymbols] ||\n DefaultBasicShapeProperty;\n if (isSwimlanePointer) {\n shapeProperty = DefaultSwimlanePropertyMap[shape];\n }\n const direction = getDirectionByVector(vector);\n if (direction) {\n let offset = 0;\n if ([Direction.left, Direction.right].includes(direction)) {\n offset = -shapeProperty.width / 2;\n } else {\n offset = -shapeProperty.height / 2;\n }\n const vectorPoint = getPointByVectorComponent(point, vector, offset);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(vectorPoint, shapeProperty.width, shapeProperty.height)\n );\n if (isSwimlanePointer) {\n const swimlane = createDefaultSwimlane(shape as SwimlaneDrawSymbols, points);\n insertElement(board, swimlane);\n return swimlane;\n }\n return insertGeometry(board, points, shape as GeometryShapes);\n }\n return null;\n};\n","import { insertText, insertGeometry, resizeGeometry, switchGeometryShape } from './geometry';\nimport { setText, setTextSize } from './geometry-text';\nimport { insertImage } from './image';\nimport {\n connectArrowLineToDraw,\n removeArrowLineText,\n resizeArrowLine,\n setArrowLineMark,\n setArrowLineShape,\n setArrowLineTexts\n} from './arrow-line';\nimport { addSwimlaneColumn, addSwimlaneRow, removeSwimlaneColumn, removeSwimlaneRow, updateSwimlaneCount } from './swimlane';\nimport { setDrawTexts } from './multi-text-geometry-text';\nimport { setTableText } from './table-text';\nimport { setTableFill } from './table';\nimport { setVectorLineShape } from './vector-line';\nimport { insertDrawByVector } from './common';\n\nexport const DrawTransforms = {\n setText,\n setDrawTexts,\n insertGeometry,\n resizeGeometry,\n insertText,\n setTextSize,\n resizeArrowLine,\n setArrowLineTexts,\n removeArrowLineText,\n setArrowLineMark,\n setArrowLineShape,\n setVectorLineShape,\n insertImage,\n connectArrowLineToDraw,\n switchGeometryShape,\n setTableText,\n addSwimlaneRow,\n addSwimlaneColumn,\n removeSwimlaneRow,\n removeSwimlaneColumn,\n updateSwimlaneCount,\n setTableFill,\n insertDrawByVector\n};\n","import {\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 toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\nimport { PlaitDrawElement } from '../interfaces';\nimport { DrawTransforms } from '../transforms';\nimport { getHitRectangleResizeHandleRef } from '../utils/position/geometry';\nimport { getSnapResizingRefOptions, getSnapResizingRef } from '../utils/snap-resizing';\nimport { isGeometryIncludeText, isSingleSelectLine, isSingleSelectSwimlane } from '../utils';\n\nconst debugKey = 'debug:plait:resize-for-rotation';\nconst debugGenerator = createDebugGenerator(debugKey);\n\nexport interface BulkRotationRef {\n angle: number;\n offsetX: number;\n offsetY: number;\n newCenterPoint: Point;\n}\n\nexport function withDrawResize(board: PlaitBoard) {\n const { afterChange, drawSelectionRectangle } = board;\n let snapG: SVGGElement | null;\n let handleG: SVGGElement | null;\n let needCustomActiveRectangle = false;\n let resizeActivePoints: Point[] | null = null;\n\n const canResize = () => {\n const elements = getSelectedElements(board);\n return (\n elements.length >= 1 &&\n elements.every(\n (el) =>\n (PlaitDrawElement.isDrawElement(el) || (PlaitDrawElement.isCustomGeometryElement(board, el) && el.points.length > 1)) &&\n !isSingleSelectLine(board) &&\n !isSingleSelectSwimlane(board)\n )\n );\n };\n\n const options: WithResizeOptions<PlaitDrawElement[]> = {\n key: 'draw-elements',\n canResize,\n hitTest: (point: Point) => {\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n const angle = getSelectionAngle(elements);\n const handleRef = getHitRectangleResizeHandleRef(board, boundingRectangle, point, angle);\n if (handleRef) {\n return {\n element: [...elements],\n rectangle: boundingRectangle,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass\n };\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<PlaitDrawElement[]>, resizeState: ResizeState) => {\n snapG?.remove();\n debugGenerator.isDebug() && debugGenerator.clear();\n const isFromCorner = isCornerHandle(board, resizeRef.handle);\n const isAspectRatio = resizeState.isShift || (resizeRef.element.length === 1 && PlaitDrawElement.isImage(resizeRef.element[0]));\n const centerPoint = RectangleClient.getCenterPoint(resizeRef.rectangle!);\n const handleIndex = getIndexByResizeHandle(resizeRef.handle);\n const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle!);\n const angle = getSelectionAngle(resizeRef.element);\n let bulkRotationRef: BulkRotationRef | undefined;\n if (angle) {\n bulkRotationRef = {\n angle: angle,\n offsetX: 0,\n offsetY: 0,\n newCenterPoint: [0, 0]\n };\n const [rotatedStartPoint, rotateEndPoint] = rotatePoints(\n [resizeState.startPoint, resizeState.endPoint],\n centerPoint,\n -bulkRotationRef.angle\n );\n resizeState.startPoint = rotatedStartPoint;\n resizeState.endPoint = rotateEndPoint;\n }\n const resizeSnapRefOptions = getSnapResizingRefOptions(\n board,\n resizeRef,\n resizeState,\n {\n originPoint,\n handlePoint\n },\n isAspectRatio,\n isFromCorner\n );\n const resizeSnapRef = getSnapResizingRef(board, resizeRef.element, resizeSnapRefOptions);\n resizeActivePoints = resizeSnapRef.activePoints;\n snapG = resizeSnapRef.snapG;\n PlaitBoard.getElementTopHost(board).append(snapG);\n\n if (bulkRotationRef) {\n const boundingBoxCornerPoints = RectangleClient.getPoints(resizeRef.rectangle!);\n const resizedBoundingBoxCornerPoints = boundingBoxCornerPoints.map((p) => {\n return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);\n });\n const newBoundingBox = RectangleClient.getRectangleByPoints(resizedBoundingBoxCornerPoints);\n\n debugGenerator.isDebug() && debugGenerator.drawRectangle(board, newBoundingBox, { stroke: 'blue' });\n\n const newBoundingBoxCenter = RectangleClient.getCenterPoint(newBoundingBox);\n const adjustedNewBoundingBoxPoints = resetPointsAfterResize(\n RectangleClient.getRectangleByPoints(boundingBoxCornerPoints),\n RectangleClient.getRectangleByPoints(resizedBoundingBoxCornerPoints),\n centerPoint,\n newBoundingBoxCenter,\n bulkRotationRef.angle\n );\n const newCenter = RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(adjustedNewBoundingBoxPoints));\n bulkRotationRef = Object.assign(bulkRotationRef, {\n offsetX: newCenter[0] - newBoundingBoxCenter[0],\n offsetY: newCenter[1] - newBoundingBoxCenter[1],\n newCenterPoint: newCenter\n });\n\n debugGenerator.isDebug() && debugGenerator.drawRectangle(board, adjustedNewBoundingBoxPoints);\n }\n\n resizeRef.element.forEach((target) => {\n const path = PlaitBoard.findPath(board, target);\n let points;\n if (bulkRotationRef) {\n const reversedPoints = rotatedDataPoints(target.points, centerPoint, -bulkRotationRef.angle);\n points = reversedPoints.map((p: Point) => {\n return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);\n }) as [Point, Point];\n const adjustTargetPoints = points.map((p) => [\n p[0] + bulkRotationRef!.offsetX,\n p[1] + bulkRotationRef!.offsetY\n ]) as Point[];\n points = rotatedDataPoints(adjustTargetPoints, bulkRotationRef.newCenterPoint, bulkRotationRef.angle) as [Point, Point];\n } else {\n if (hasValidAngle(target)) {\n needCustomActiveRectangle = true;\n }\n if (hasValidAngle(target) && isAxisChangedByAngle(target.angle!)) {\n points = getResizePointsByOtherwiseAxis(\n board,\n target.points,\n originPoint,\n resizeSnapRef.xZoom,\n resizeSnapRef.yZoom\n );\n } else {\n points = target.points.map((p) => {\n return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);\n });\n }\n }\n\n if (PlaitDrawElement.isGeometry(target)) {\n DrawTransforms.resizeGeometry(board, points as [Point, Point], path);\n } else if (\n PlaitDrawElement.isLine(target) ||\n PlaitDrawElement.isCustomGeometryElement(board, target) ||\n PlaitDrawElement.isVectorLine(target)\n ) {\n Transforms.setNode(board, { points }, path);\n } else if (PlaitDrawElement.isImage(target)) {\n if (isAspectRatio) {\n Transforms.setNode(board, { points }, path);\n } else {\n // The image element does not follow the resize, but moves based on the center point.\n const targetRectangle = RectangleClient.getRectangleByPoints(target.points);\n const centerPoint = RectangleClient.getCenterPoint(targetRectangle);\n const newCenterPoint = movePointByZoomAndOriginPoint(\n centerPoint,\n originPoint,\n resizeSnapRef.xZoom,\n resizeSnapRef.yZoom\n );\n const newTargetRectangle = RectangleClient.getRectangleByCenterPoint(\n newCenterPoint,\n targetRectangle.width,\n targetRectangle.height\n );\n Transforms.setNode(board, { points: RectangleClient.getPoints(newTargetRectangle) }, path);\n }\n }\n });\n },\n afterResize: (resizeRef: ResizeRef<PlaitDrawElement[]>) => {\n snapG?.remove();\n snapG = null;\n if (needCustomActiveRectangle) {\n needCustomActiveRectangle = false;\n resizeActivePoints = null;\n const selectedElements = getSelectedElements(board);\n Transforms.addSelectionWithTemporaryElements(board, selectedElements);\n }\n }\n };\n\n withResize<PlaitDrawElement[]>(board, options);\n\n board.afterChange = () => {\n afterChange();\n if (handleG) {\n handleG.remove();\n handleG = null;\n }\n const selectedElements = getSelectedElements(board);\n if (canResize() && !isSelectionMoving(board) && selectedElements.length > 1) {\n handleG = generatorResizeHandles(board, resizeActivePoints!, needCustomActiveRectangle);\n PlaitBoard.getActiveHost(board).append(handleG);\n }\n };\n\n board.drawSelectionRectangle = () => {\n if (needCustomActiveRectangle) {\n const rectangle = RectangleClient.getRectangleByPoints(resizeActivePoints!);\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n return drawRectangle(board, RectangleClient.inflate(activeRectangle, ACTIVE_STROKE_WIDTH), {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH\n });\n }\n return drawSelectionRectangle();\n };\n\n return board;\n}\n\nexport const getResizeOriginPointAndHandlePoint = (board: PlaitBoard, handleIndex: number, rectangle: RectangleClient) => {\n const symmetricHandleIndex = getSymmetricHandleIndex(board, handleIndex);\n const originPoint = getResizeHandlePointByIndex(rectangle as RectangleClient, symmetricHandleIndex);\n const handlePoint = getResizeHandlePointByIndex(rectangle as RectangleClient, handleIndex);\n return {\n originPoint,\n handlePoint\n };\n};\n\nexport const getResizeZoom = (\n resizeStartAndEnd: [Point, Point],\n resizeOriginPoint: Point,\n resizeHandlePoint: Point,\n isFromCorner: boolean,\n isAspectRatio: boolean\n) => {\n const [startPoint, endPoint] = resizeStartAndEnd;\n let xZoom = 0;\n let yZoom = 0;\n if (isFromCorner) {\n if (isAspectRatio) {\n let normalizedOffsetX = Point.getOffsetX(startPoint, endPoint);\n xZoom = normalizedOffsetX / (resizeHandlePoint[0] - resizeOriginPoint[0]);\n yZoom = xZoom;\n } else {\n let normalizedOffsetX = Point.getOffsetX(startPoint, endPoint);\n let normalizedOffsetY = Point.getOffsetY(startPoint, endPoint);\n xZoom = normalizedOffsetX / (resizeHandlePoint[0] - resizeOriginPoint[0]);\n yZoom = normalizedOffsetY / (resizeHandlePoint[1] - resizeOriginPoint[1]);\n }\n } else {\n const isHorizontal = Point.isHorizontal(resizeOriginPoint, resizeHandlePoint, 0.1) || false;\n let normalizedOffset = isHorizontal ? Point.getOffsetX(startPoint, endPoint) : Point.getOffsetY(startPoint, endPoint);\n let benchmarkOffset = isHorizontal ? resizeHandlePoint[0] - resizeOriginPoint[0] : resizeHandlePoint[1] - resizeOriginPoint[1];\n const zoom = normalizedOffset / benchmarkOffset;\n if (isAspectRatio) {\n xZoom = zoom;\n yZoom = zoom;\n } else {\n if (isHorizontal) {\n xZoom = zoom;\n } else {\n yZoom = zoom;\n }\n }\n }\n return { xZoom, yZoom };\n};\n\nexport const movePointByZoomAndOriginPoint = (p: Point, resizeOriginPoint: Point, xZoom: number, yZoom: number) => {\n const offsetX = (p[0] - resizeOriginPoint[0]) * xZoom;\n const offsetY = (p[1] - resizeOriginPoint[1]) * yZoom;\n return [p[0] + offsetX, p[1] + offsetY] as Point;\n};\n\n/**\n * 1. Rotate 90°\n * 2. Scale based on the rotated points\n * 3. Reverse rotate the scaled points by 90°\n */\nexport const getResizePointsByOtherwiseAxis = (\n board: PlaitBoard,\n points: Point[],\n resizeOriginPoint: Point,\n xZoom: number,\n yZoom: number\n) => {\n const currentRectangle = RectangleClient.getRectangleByPoints(points);\n debugGenerator.isDebug() && debugGenerator.drawRectangle(board, currentRectangle, { stroke: 'black' });\n let resultPoints = points;\n resultPoints = rotatePoints(resultPoints, RectangleClient.getCenterPoint(currentRectangle), (1 / 2) * Math.PI);\n debugGenerator.isDebug() && debugGenerator.drawRectangle(board, resultPoints, { stroke: 'blue' });\n resultPoints = resultPoints.map((p) => {\n return movePointByZoomAndOriginPoint(p, resizeOriginPoint, xZoom, yZoom);\n });\n debugGenerator.isDebug() && debugGenerator.drawRectangle(board, resultPoints);\n const newRectangle = RectangleClient.getRectangleByPoints(resultPoints);\n return rotatePoints(resultPoints, RectangleClient.getCenterPoint(newRectangle), -(1 / 2) * Math.PI);\n};\n\nexport const generatorResizeHandles = (board: PlaitBoard, resizeActivePoints?: Point[], needCustomActiveRectangle?: boolean) => {\n const handleG = createG();\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = needCustomActiveRectangle\n ? RectangleClient.getRectangleByPoints(resizeActivePoints!)\n : getRectangleByElements(board, elements, false);\n const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);\n let corners = RectangleClient.getCornerPoints(boundingActiveRectangle);\n const angle = getSelectionAngle(elements);\n if (angle) {\n const centerPoint = RectangleClient.getCenterPoint(boundingActiveRectangle);\n corners = rotatePoints(corners, centerPoint, angle) as [Point, Point, Point, Point];\n }\n corners.forEach((corner) => {\n const g = drawHandle(board, corner);\n handleG.append(g);\n });\n return handleG;\n};\n","import {\n ResizeRef,\n ResizeState,\n getDirectionFactorByDirectionComponent,\n getUnitVectorByPointAndPoint,\n resetPointsAfterResize\n} from '@plait/common';\nimport {\n DirectionFactors,\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n createDebugGenerator,\n createG,\n getSelectionAngle,\n getRectangleByAngle,\n getRectangleByElements,\n SnapDelta,\n SnapRef,\n getSnapRectangles,\n SNAP_TOLERANCE,\n drawSolidLines,\n drawPointSnapLines,\n getTripleAxis,\n getMinPointDelta\n} from '@plait/core';\nimport { getResizeZoom, movePointByZoomAndOriginPoint } from '../plugins/with-draw-resize';\nimport { PlaitCustomGeometry, PlaitDrawElement } from '../interfaces';\n\nconst debugKey = 'debug:plait:point-for-geometry';\nexport const debugGenerator = createDebugGenerator(debugKey);\n\nexport interface ResizeSnapRef extends SnapRef {\n xZoom: number;\n yZoom: number;\n activePoints: Point[];\n}\n\nexport interface ResizeSnapOptions {\n resizePoints: Point[];\n activeRectangle: RectangleClient;\n directionFactors: DirectionFactors;\n isFromCorner: boolean;\n isAspectRatio: boolean;\n resizeOriginPoint?: Point[];\n originPoint?: Point;\n handlePoint?: Point;\n isCreate?: boolean;\n}\n\nconst EQUAL_SPACING = 10;\n\nexport function getSnapResizingRefOptions(\n board: PlaitBoard,\n resizeRef: ResizeRef<PlaitDrawElement | PlaitCustomGeometry | (PlaitDrawElement | PlaitCustomGeometry)[]>,\n resizeState: ResizeState,\n resizeOriginPointAndHandlePoint: {\n originPoint: Point;\n handlePoint: Point;\n },\n isAspectRatio: boolean,\n isFromCorner: boolean\n): ResizeSnapOptions {\n const { originPoint, handlePoint } = resizeOriginPointAndHandlePoint;\n const resizePoints: [Point, Point] = [resizeState.startPoint, resizeState.endPoint];\n const { xZoom, yZoom } = getResizeZoom(resizePoints, originPoint, handlePoint, isFromCorner, isAspectRatio);\n\n let activeElements: PlaitElement[];\n let resizeOriginPoint: Point[] = [];\n if (Array.isArray(resizeRef.element)) {\n activeElements = resizeRef.element;\n const rectangle = getRectangleByElements(board, resizeRef.element, false);\n resizeOriginPoint = RectangleClient.getPoints(rectangle);\n } else {\n activeElements = [resizeRef.element];\n resizeOriginPoint = resizeRef.element.points;\n }\n\n const points = resizeOriginPoint.map(p => {\n return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);\n }) as [Point, Point];\n const rectangle = RectangleClient.getRectangleByPoints(points);\n const activeRectangle = getRectangleByAngle(rectangle, getSelectionAngle(activeElements));\n const resizeHandlePoint = movePointByZoomAndOriginPoint(handlePoint, originPoint, xZoom, yZoom);\n const [x, y] = getUnitVectorByPointAndPoint(originPoint, resizeHandlePoint);\n return {\n resizePoints,\n resizeOriginPoint,\n activeRectangle,\n originPoint,\n handlePoint,\n directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],\n isAspectRatio,\n isFromCorner\n };\n}\n\nexport function getSnapResizingRef(board: PlaitBoard, activeElements: PlaitElement[], resizeSnapOptions: ResizeSnapOptions): ResizeSnapRef {\n const snapG = createG();\n const snapRectangles = getSnapRectangles(board, activeElements);\n let snapLineDelta = getIsometricLineDelta(snapRectangles, resizeSnapOptions);\n if (snapLineDelta.deltaX === 0 && snapLineDelta.deltaY === 0) {\n snapLineDelta = getSnapPointDelta(snapRectangles, resizeSnapOptions);\n }\n const angle = getSelectionAngle(activeElements);\n const activePointAndZoom = getActivePointAndZoom(snapLineDelta, resizeSnapOptions, angle);\n const isometricLinesG = drawIsometricSnapLines(board, activePointAndZoom.activePoints, snapRectangles, resizeSnapOptions, angle);\n const pointLinesG = drawResizingPointSnapLines(board, activePointAndZoom.activePoints, snapRectangles, resizeSnapOptions, angle);\n snapG.append(isometricLinesG, pointLinesG);\n return { ...activePointAndZoom, ...snapLineDelta, snapG };\n}\n\nfunction getSnapPointDelta(snapRectangles: RectangleClient[], resizeSnapOptions: ResizeSnapOptions) {\n let pointLineDelta: SnapDelta = {\n deltaX: 0,\n deltaY: 0\n };\n const { isAspectRatio, activeRectangle, directionFactors } = resizeSnapOptions;\n const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;\n const drawVertical = directionFactors[1] !== 0 || isAspectRatio;\n\n if (drawHorizontal) {\n const xSnapAxis = getTripleAxis(activeRectangle, true);\n const pointX = directionFactors[0] === -1 ? xSnapAxis[0] : xSnapAxis[2];\n const deltaX = getMinPointDelta(snapRectangles, pointX, true);\n if (Math.abs(deltaX) < SNAP_TOLERANCE) {\n pointLineDelta.deltaX = deltaX;\n if (pointLineDelta.deltaX !== 0 && isAspectRatio) {\n pointLineDelta.deltaY = pointLineDelta.deltaX / (activeRectangle.width / activeRectangle.height);\n return pointLineDelta;\n }\n }\n }\n\n if (drawVertical) {\n const ySnapAxis = getTripleAxis(activeRectangle, false);\n const pointY = directionFactors[1] === -1 ? ySnapAxis[0] : ySnapAxis[2];\n const deltaY = getMinPointDelta(snapRectangles, pointY, false);\n if (Math.abs(deltaY) < SNAP_TOLERANCE) {\n pointLineDelta.deltaY = deltaY;\n if (pointLineDelta.deltaY !== 0 && isAspectRatio) {\n pointLineDelta.deltaX = pointLineDelta.deltaY * (activeRectangle.width / activeRectangle.height);\n return pointLineDelta;\n }\n }\n }\n\n return pointLineDelta;\n}\n\nfunction getActivePointAndZoom(resizeSnapDelta: SnapDelta, resizeSnapOptions: ResizeSnapOptions, angle: number) {\n const { deltaX, deltaY } = resizeSnapDelta;\n const { resizePoints, isCreate } = resizeSnapOptions;\n const newResizePoints: [Point, Point] = [resizePoints[0], [resizePoints[1][0] + deltaX, resizePoints[1][1] + deltaY]];\n let activePoints = newResizePoints;\n let xZoom = 0;\n let yZoom = 0;\n if (!isCreate) {\n const { originPoint, handlePoint, isFromCorner, isAspectRatio, resizeOriginPoint } = resizeSnapOptions;\n const resizeZoom = getResizeZoom(newResizePoints, originPoint!, handlePoint!, isFromCorner, isAspectRatio);\n xZoom = resizeZoom.xZoom;\n yZoom = resizeZoom.yZoom;\n activePoints = resizeOriginPoint!.map(p => {\n return movePointByZoomAndOriginPoint(p, originPoint!, xZoom, yZoom);\n }) as [Point, Point];\n if (angle) {\n activePoints = resetPointsAfterResize(\n RectangleClient.getRectangleByPoints(resizeOriginPoint!),\n RectangleClient.getRectangleByPoints(activePoints),\n RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(resizeOriginPoint!)),\n RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(activePoints)),\n angle\n );\n }\n }\n\n return {\n xZoom,\n yZoom,\n activePoints\n };\n}\n\nfunction getIsometricLineDelta(snapRectangles: RectangleClient[], resizeSnapOptions: ResizeSnapOptions) {\n let isometricLineDelta: SnapDelta = {\n deltaX: 0,\n deltaY: 0\n };\n const { isAspectRatio, activeRectangle } = resizeSnapOptions;\n const widthSnapRectangle = snapRectangles.find(item => Math.abs(item.width - activeRectangle.width) < SNAP_TOLERANCE);\n if (widthSnapRectangle) {\n const deltaWidth = widthSnapRectangle.width - activeRectangle.width;\n isometricLineDelta.deltaX = deltaWidth * resizeSnapOptions.directionFactors[0];\n if (isAspectRatio) {\n const deltaHeight = deltaWidth / (activeRectangle.width / activeRectangle.height);\n isometricLineDelta.deltaY = deltaHeight * resizeSnapOptions.directionFactors[1];\n return isometricLineDelta;\n }\n }\n const heightSnapRectangle = snapRectangles.find(item => Math.abs(item.height - activeRectangle.height) < SNAP_TOLERANCE);\n if (heightSnapRectangle) {\n const deltaHeight = heightSnapRectangle.height - activeRectangle.height;\n isometricLineDelta.deltaY = deltaHeight * resizeSnapOptions.directionFactors[1];\n if (isAspectRatio) {\n const deltaWidth = deltaHeight * (activeRectangle.width / activeRectangle.height);\n isometricLineDelta.deltaX = deltaWidth * resizeSnapOptions.directionFactors[0];\n return isometricLineDelta;\n }\n }\n return isometricLineDelta;\n}\n\nfunction getIsometricLinePoints(rectangle: RectangleClient, isHorizontal: boolean): Point[] {\n return isHorizontal\n ? [\n [rectangle.x, rectangle.y - EQUAL_SPACING],\n [rectangle.x + rectangle.width, rectangle.y - EQUAL_SPACING]\n ]\n : [\n [rectangle.x - EQUAL_SPACING, rectangle.y],\n [rectangle.x - EQUAL_SPACING, rectangle.y + rectangle.height]\n ];\n}\n\nfunction drawResizingPointSnapLines(\n board: PlaitBoard,\n activePoints: Point[],\n snapRectangles: RectangleClient[],\n resizeSnapOptions: ResizeSnapOptions,\n angle: number\n) {\n debugGenerator.isDebug() && debugGenerator.clear();\n const rectangle = RectangleClient.getRectangleByPoints(activePoints);\n const activeRectangle = getRectangleByAngle(rectangle, angle);\n const { isAspectRatio, directionFactors } = resizeSnapOptions;\n const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;\n const drawVertical = directionFactors[1] !== 0 || isAspectRatio;\n return drawPointSnapLines(board, activeRectangle, snapRectangles, drawHorizontal, drawVertical);\n}\n\nfunction drawIsometricSnapLines(\n board: PlaitBoard,\n activePoints: Point[],\n snapRectangles: RectangleClient[],\n resizeSnapOptions: ResizeSnapOptions,\n angle: number\n) {\n let widthIsometricPoints = [];\n let heightIsometricPoints = [];\n\n const drawHorizontalLine = resizeSnapOptions.directionFactors[0] !== 0 || resizeSnapOptions.isAspectRatio;\n const drawVerticalLine = resizeSnapOptions.directionFactors[1] !== 0 || resizeSnapOptions.isAspectRatio;\n const rectangle = RectangleClient.getRectangleByPoints(activePoints);\n const activeRectangle = getRectangleByAngle(rectangle, angle);\n for (let snapRectangle of snapRectangles) {\n if (activeRectangle.width === snapRectangle.width && drawHorizontalLine) {\n widthIsometricPoints.push(getIsometricLinePoints(snapRectangle, true));\n }\n if (activeRectangle.height === snapRectangle.height && drawVerticalLine) {\n heightIsometricPoints.push(getIsometricLinePoints(snapRectangle, false));\n }\n }\n if (widthIsometricPoints.length && drawHorizontalLine) {\n widthIsometricPoints.push(getIsometricLinePoints(activeRectangle, true));\n }\n if (heightIsometricPoints.length && drawVerticalLine) {\n heightIsometricPoints.push(getIsometricLinePoints(activeRectangle, false));\n }\n\n const isometricLines = [...widthIsometricPoints, ...heightIsometricPoints];\n return drawSolidLines(board, isometricLines);\n}\n","import { PlaitBoard, PlaitElement, Point, Transforms, getElementById, idCreator } from '@plait/core';\nimport { buildClipboardData as basicBuildClipboard, insertClipboardData as basicInsertClipboard } from '@plait/common';\nimport { PlaitArrowLine, PlaitDrawElement, PlaitGeometry } from '../interfaces';\nimport { getConnectionPoint } from './arrow-line/arrow-line-common';\nimport { PlaitTable } from '../interfaces/table';\nimport { updateCellIds, updateRowOrColumnIds } from './table';\n\nexport const buildClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n return basicBuildClipboard(board, elements, startPoint, (element: PlaitElement) => {\n if (PlaitDrawElement.isArrowLine(element)) {\n let source = { ...element.source };\n let target = { ...element.target };\n let points = [...element.points];\n if (element.source.boundId) {\n points[0] = getConnectionPoint(getElementById<PlaitGeometry>(board, element.source.boundId)!, element.source.connection!);\n if (!getElementById(board, element.source.boundId, elements)) {\n delete source.boundId;\n delete source.connection;\n }\n }\n if (element.target.boundId) {\n points[points.length - 1] = getConnectionPoint(\n getElementById<PlaitGeometry>(board, element.target.boundId)!,\n element.target.connection!\n );\n if (!getElementById(board, element.target.boundId, elements)) {\n delete target.boundId;\n delete target.connection;\n }\n }\n points = points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);\n return { ...element, points, source, target } as PlaitArrowLine;\n }\n return undefined;\n });\n};\n\nexport const insertClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n basicInsertClipboard(board, elements, startPoint, (element: PlaitElement, idsMap: Record<string, string>) => {\n if (PlaitDrawElement.isArrowLine(element)) {\n if (element.source.boundId) {\n const boundElement = elements.find(item => [element.source.boundId, idsMap[element.source.boundId!]].includes(item.id));\n if (boundElement) {\n element.source.boundId = idsMap[element.source.boundId];\n }\n }\n if (element.target.boundId) {\n const boundElement = elements.find(item => [element.target.boundId, idsMap[element.target.boundId!]].includes(item.id));\n if (boundElement) {\n element.target.boundId = idsMap[element.target.boundId];\n }\n }\n }\n if (PlaitDrawElement.isElementByTable(element)) {\n updateRowOrColumnIds(element as PlaitTable, 'row');\n updateRowOrColumnIds(element as PlaitTable, 'column');\n updateCellIds(element.cells);\n }\n });\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getTextRectangle } from '../../utils';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nconst heightRatio = 3 / 4;\n\nexport const CommentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const points = getCommentPoints(rectangle);\n const rs = PlaitBoard.getRoughSVG(board);\n const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(polygon, 'round');\n return polygon;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const parallelogramPoints = getCommentPoints(rectangle);\n return isPointInPolygon(point, parallelogramPoints);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getCommentPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getCommentPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getCommentPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const textRectangle = getTextRectangle(board, element);\n textRectangle.y = elementRectangle.y + (elementRectangle.height * heightRatio - textRectangle.height) / 2;\n return textRectangle;\n }\n};\n\nexport const getCommentPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + (rectangle.width * 3) / 5, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 2) / 5, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height * heightRatio]\n ];\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n distanceBetweenPointAndPoint,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getCrossingPointBetweenPointAndPolygon, getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport interface CreateOptions {\n getPolygonPoints: (rectangle: RectangleClient) => Point[];\n getConnectorPoints?: (rectangle: RectangleClient) => Point[];\n getTextRectangle?: (board: PlaitBoard, element: PlaitGeometry) => RectangleClient;\n}\n\nexport function createPolygonEngine(options: CreateOptions): ShapeEngine {\n const getPoints = options.getPolygonPoints;\n const engine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const points = getPoints(rectangle);\n const rs = PlaitBoard.getRoughSVG(board);\n const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(polygon, 'round');\n return polygon;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const points = getPoints(rectangle);\n return isPointInPolygon(point, points);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getPoints(rectangle));\n },\n getNearestCrossingPoint(rectangle: RectangleClient, point: Point) {\n const corners = getPoints(rectangle);\n const crossingPoints = getCrossingPointBetweenPointAndPolygon(corners, point);\n let nearestPoint = crossingPoints[0];\n let nearestDistance = distanceBetweenPointAndPoint(point[0], point[1], nearestPoint[0], nearestPoint[1]);\n crossingPoints\n .filter((v, index) => index > 0)\n .forEach(crossingPoint => {\n let distance = distanceBetweenPointAndPoint(point[0], point[1], crossingPoint[0], crossingPoint[1]);\n if (distance < nearestDistance) {\n nearestDistance = distance;\n nearestPoint = crossingPoint;\n }\n });\n\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n if (options.getConnectorPoints) {\n return options.getConnectorPoints(rectangle);\n }\n return getPoints(rectangle);\n }\n };\n if (options.getTextRectangle) {\n engine.getTextRectangle = options.getTextRectangle;\n }\n return engine;\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\nexport const getCrossPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height / 4]\n ];\n};\n\nexport const CrossEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getCrossPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const widthRatio = 1 / 2;\n return getCustomTextRectangle(board, element, widthRatio);\n }\n});\n","import { PlaitBoard, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle, getStrokeWidthByElement, getTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants/geometry';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const DiamondEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: RectangleClient.getEdgeCenterPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 1 / 2);\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n getNearestPointBetweenPointAndEllipse,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\n\nexport interface CreateEllipseOptions {\n draw?: (board: PlaitBoard, rectangle: RectangleClient, options: Options) => SVGGElement;\n getTextRectangle?: (board: PlaitBoard, element: PlaitGeometry) => RectangleClient;\n}\n\nexport function createEllipseEngine(createOptions?: CreateEllipseOptions): ShapeEngine {\n const engine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.ellipse(centerPoint[0], centerPoint[1], rectangle.width, rectangle.height, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n return isPointInEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n return getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const a = rectangle.width / 2;\n const b = rectangle.height / 2;\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return vector;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 3 / 4);\n }\n };\n\n if (createOptions?.draw) {\n engine.draw = createOptions.draw;\n }\n if (createOptions?.getTextRectangle) {\n engine.getTextRectangle = createOptions.getTextRectangle;\n }\n\n return engine;\n}\n\nexport const EllipseEngine: ShapeEngine = createEllipseEngine();\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getHexagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n};\n\nexport const HexagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getHexagonPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 3 / 4);\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getLeftArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width * 0.32, rectangle.y],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.8],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.8],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height]\n ];\n};\n\nexport const LeftArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getLeftArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const customTextRectangle = getCustomTextRectangle(board, element, 1 - 0.32);\n customTextRectangle.x = elementRectangle.x + elementRectangle.width * 0.32 + ShapeDefaultSpace.rectangleAndText;\n return customTextRectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getOctagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + (rectangle.width * 3) / 10, rectangle.y],\n [rectangle.x + (rectangle.width * 7) / 10, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 3) / 10],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 7) / 10],\n [rectangle.x + (rectangle.width * 7) / 10, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 3) / 10, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + (rectangle.height * 7) / 10],\n [rectangle.x, rectangle.y + (rectangle.height * 3) / 10]\n ];\n};\n\nexport const OctagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getOctagonPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 3 / 4);\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getParallelogramPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\nexport const ParallelogramEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getParallelogramPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getParallelogramPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 1 / 2);\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getPentagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 2) / 5],\n [rectangle.x + (rectangle.width * 4) / 5, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 5, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + (rectangle.height * 2) / 5]\n ];\n};\n\nexport const PentagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPentagonPoints,\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const customTextRectangle = getCustomTextRectangle(board, element, 3 / 5);\n const startY = elementRectangle.y + elementRectangle.height / 5;\n const endY = elementRectangle.y + elementRectangle.height;\n customTextRectangle.y = startY + (endY - startY - customTextRectangle.height) / 2;\n return customTextRectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getPentagonArrowPoints = (rectangle: RectangleClient): Point[] => {\n const wider = rectangle.width > rectangle.height / 2;\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const PentagonArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPentagonArrowPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const customTextRectangle = getCustomTextRectangle(board, element, 3 / 4);\n customTextRectangle.x = elementRectangle.x + ShapeDefaultSpace.rectangleAndText;\n return customTextRectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getProcessArrowPoints = (rectangle: RectangleClient): Point[] => {\n const wider = rectangle.width > rectangle.height / 2;\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height],\n [rectangle.x + (wider ? rectangle.height / 2 : rectangle.width), rectangle.y + rectangle.height / 2]\n ];\n};\n\nexport const ProcessArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getProcessArrowPoints,\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const wider = elementRectangle.width > elementRectangle.height + 20;\n const widthRatio = wider ? (elementRectangle.width - elementRectangle.height) / elementRectangle.width : 3 / 4;\n const customTextRectangle = getCustomTextRectangle(board, element, widthRatio);\n return customTextRectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getRightArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height * 0.8],\n [rectangle.x, rectangle.y + rectangle.height * 0.8]\n ];\n};\n\nexport const RightArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getRightArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const customTextRectangle = getCustomTextRectangle(board, element, 1 - 0.32);\n customTextRectangle.x = elementRectangle.x + ShapeDefaultSpace.rectangleAndText;\n return customTextRectangle;\n }\n});\n","import { PlaitBoard, Point, PointOfRectangle, RectangleClient, drawRectangle, getNearestPointBetweenPointAndSegments } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport const RectangleEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRectangle(board, rectangle, { ...options, fillStyle: 'solid' });\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getNearestPointBetweenPointAndSegments,\n isPointInRoundRectangle,\n getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from './rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport const RoundRectangleEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n rectangle.x,\n rectangle.y,\n rectangle.x + rectangle.width,\n rectangle.y + rectangle.height,\n { ...options, fillStyle: 'solid' },\n false,\n getRoundRectangleRadius(rectangle)\n );\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n return isPointInRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n\nexport const getRoundRectangleRadius = (rectangle: RectangleClient) => {\n return Math.min(rectangle.width * 0.1, rectangle.height * 0.1);\n};\n\nexport function getNearestPointBetweenPointAndRoundRectangle(point: Point, rectangle: RectangleClient, radius: number) {\n const { x: rectX, y: rectY, width, height } = rectangle;\n const cornerPoints = RectangleClient.getCornerPoints(rectangle);\n let result = getNearestPointBetweenPointAndSegments(point, cornerPoints);\n let circleCenter: Point | null = null;\n\n const inLeftTop = point[0] >= rectX && point[0] <= rectX + radius && point[1] >= rectY && point[1] <= rectY + radius;\n if (inLeftTop) {\n circleCenter = [rectX + radius, rectY + radius];\n }\n const inLeftBottom =\n point[0] >= rectX && point[0] <= rectX + radius && point[1] >= rectY + height && point[1] <= rectY + height - radius;\n if (inLeftBottom) {\n circleCenter = [rectX + radius, rectY + height - radius];\n }\n const inRightTop = point[0] >= rectX + width - radius && point[0] <= rectX + width && point[1] >= rectY && point[1] <= rectY + radius;\n if (inRightTop) {\n circleCenter = [rectX + width - radius, rectY + radius];\n }\n const inRightBottom =\n point[0] >= rectX + width - radius &&\n point[0] <= rectX + width &&\n point[1] >= rectY + height - radius &&\n point[1] <= rectY + height;\n if (inRightBottom) {\n circleCenter = [rectX + width - radius, rectY + height - radius];\n }\n if (circleCenter) {\n result = getNearestPointBetweenPointAndEllipse(point, circleCenter, radius, radius);\n }\n return result;\n}\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n isPointInRoundRectangle,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getRoundRectangleRadius } from './round-rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getTextRectangle } from '../../utils/common';\n\nconst heightRatio = 3 / 4;\n\nexport const RoundCommentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const x1 = rectangle.x;\n const y1 = rectangle.y;\n const x2 = rectangle.x + rectangle.width;\n const y2 = rectangle.y + rectangle.height * heightRatio;\n const radius = getRoundRectangleRadius(rectangle);\n\n const point1 = [x1 + radius, y1];\n const point2 = [x2 - radius, y1];\n const point3 = [x2, y1 + radius];\n const point4 = [x2, y2 - radius];\n const point5 = [x2 - radius, y2];\n const point6 = [x1 + radius, y2];\n const point7 = [x1, y2 - radius];\n const point8 = [x1, y1 + radius];\n\n const point9 = [x1 + rectangle.width / 4, y2];\n const point10 = [x1 + rectangle.width / 4, rectangle.y + rectangle.height];\n const point11 = [x1 + rectangle.width / 2, y2];\n\n const shape = rs.path(\n `M${point2[0]} ${point2[1]} A ${radius} ${radius}, 0, 0, 1, ${point3[0]} ${point3[1]} L ${point4[0]} ${point4[1]} A ${radius} ${radius}, 0, 0, 1, ${point5[0]} ${point5[1]} L ${point11[0]} ${point11[1]} ${point10[0]} ${point10[1]} ${point9[0]} ${point9[1]} ${point6[0]} ${point6[1]} A ${radius} ${radius}, 0, 0, 1, ${point7[0]} ${point7[1]} L ${point8[0]} ${point8[1]} A ${radius} ${radius}, 0, 0, 1, ${point1[0]} ${point1[1]} Z`,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const points: Point[] = [\n [rectangle.x + rectangle.width / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height * 3) / 4]\n ];\n rectangle.height = (rectangle.height * 3) / 4;\n return isPointInPolygon(point, points) || isPointInRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getRoundCommentPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getRoundCommentPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getRoundCommentPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const textRectangle = getTextRectangle(board, element);\n textRectangle.y = elementRectangle.y + (elementRectangle.height * heightRatio - textRectangle.height) / 2;\n return textRectangle;\n }\n};\n\nexport const getRoundCommentPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height * heightRatio]\n ];\n};\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getTrapezoidPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width * 0.15, rectangle.y],\n [rectangle.x + rectangle.width * 0.85, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TrapezoidEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTrapezoidPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n const points = getTrapezoidPoints(rectangle);\n return getCenterPointsOnPolygon(points);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n return getCustomTextRectangle(board, element, 3 / 4);\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getTrianglePoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TriangleEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTrianglePoints,\n getConnectorPoints(rectangle: RectangleClient) {\n const cornerPoints = getTrianglePoints(rectangle);\n const lineCenterPoints = getCenterPointsOnPolygon(cornerPoints);\n return [...lineCenterPoints, ...cornerPoints];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const customTextRectangle = getCustomTextRectangle(board, element, 1 / 2);\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n customTextRectangle.y =\n elementRectangle.y +\n (elementRectangle.height * 2.5) / 5 +\n (elementRectangle.height - (elementRectangle.height * 2.5) / 5 - customTextRectangle.height) / 2;\n return customTextRectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\n\nexport const getTwoWayArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + rectangle.height / 5],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + rectangle.height / 5],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + (rectangle.height * 4) / 5],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + (rectangle.height * 4) / 5],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TwoWayArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTwoWayArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getStarPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height * 75) / 91],\n [rectangle.x + (rectangle.width * 18.61) / 96, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 24.2235871) / 96, rectangle.y + (rectangle.height * 57.7254249) / 91],\n [rectangle.x, rectangle.y + (rectangle.height * 34.5491503) / 91],\n [rectangle.x + (rectangle.width * 33.3053687) / 96, rectangle.y + (rectangle.height * 29.7745751) / 91],\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + (rectangle.width * 62.6946313) / 96, rectangle.y + (rectangle.height * 29.7745751) / 91],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 34.5491503) / 91],\n [rectangle.x + (rectangle.width * 71.7764129) / 96, rectangle.y + (rectangle.height * 57.7254249) / 91],\n [rectangle.x + (rectangle.width * 77.3892626) / 96, rectangle.y + rectangle.height]\n ];\n};\n\nexport const StarEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getStarPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const points = getStarPoints(rectangle);\n return [points[1], points[3], points[5], points[7], points[9]];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const customTextRectangle = getCustomTextRectangle(board, element, 1 / 2);\n customTextRectangle.y =\n elementRectangle.y +\n elementRectangle.height / 5 +\n (elementRectangle.height - elementRectangle.height / 5 - customTextRectangle.height) / 2;\n return customTextRectangle;\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInRoundRectangle,\n getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\n\nexport const TerminalEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n rectangle.x,\n rectangle.y,\n rectangle.x + rectangle.width,\n rectangle.y + rectangle.height,\n { ...options, fillStyle: 'solid' },\n false,\n getStartEndRadius(rectangle)\n );\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n return isPointInRoundRectangle(point, rectangle, getStartEndRadius(rectangle));\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndRoundRectangle(point, rectangle, getStartEndRadius(rectangle));\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const radius = getStartEndRadius(rectangle);\n const center = getBoundCenterOfRoundRectangle(rectangle, radius, connectionPoint);\n if (center) {\n const point = [connectionPoint[0] - center[0], -(connectionPoint[1] - center[1])];\n const a = radius;\n const b = radius;\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n return getVectorFromPointAndSlope(point[0], point[1], slope);\n }\n return null;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n\nexport const getStartEndRadius = (rectangle: RectangleClient) => {\n return Math.min(rectangle.width / 2, rectangle.height / 2);\n};\n\nexport function getNearestPointBetweenPointAndRoundRectangle(point: Point, rectangle: RectangleClient, radius: number) {\n let result: Point | null = null;\n let boundCenter: Point | null = getBoundCenterOfRoundRectangle(rectangle, radius, point);\n if (boundCenter) {\n result = getNearestPointBetweenPointAndEllipse(point, boundCenter, radius, radius);\n } else {\n const cornerPoints = RectangleClient.getCornerPoints(rectangle);\n result = getNearestPointBetweenPointAndSegments(point, cornerPoints);\n }\n return result;\n}\n\nexport function getBoundCenterOfRoundRectangle(rectangle: RectangleClient, radius: number, point: Point) {\n const { x, y, width, height } = rectangle;\n let center: Point | null = null;\n const inLeftTop = point[0] >= x && point[0] <= x + radius && point[1] >= y && point[1] <= y + radius;\n if (inLeftTop) {\n center = [x + radius, y + radius];\n }\n const inLeftBottom = point[0] >= x && point[0] <= x + radius && point[1] >= y + height - radius && point[1] <= y + height;\n if (inLeftBottom) {\n center = [x + radius, y + height - radius];\n }\n const inRightTop = point[0] >= x + width - radius && point[0] <= x + width && point[1] >= y && point[1] <= y + radius;\n if (inRightTop) {\n center = [x + width - radius, y + radius];\n }\n const inRightBottom =\n point[0] >= x + width - radius && point[0] <= x + width && point[1] >= y + height - radius && point[1] <= y + height;\n if (inRightBottom) {\n center = [x + width - radius, y + height - radius];\n }\n return center;\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const getManualInputPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const ManualInputEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getManualInputPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getManualInputPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + elementRectangle.height / 4 + ((elementRectangle.height * 3) / 4 - textSize.height) / 2\n };\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getPreparationPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 6, rectangle.y],\n [rectangle.x + (rectangle.width * 5) / 6, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 5) / 6, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 6, rectangle.y + rectangle.height]\n ];\n};\n\nexport const PreparationEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPreparationPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n const rectangle = getCustomTextRectangle(board, element, 2 / 3);\n return rectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\n\nexport const getManualLoopPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + (rectangle.width * 7) / 8, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 8, rectangle.y + rectangle.height]\n ];\n};\nexport const ManualLoopEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getManualLoopPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getManualLoopPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const rectangle = getCustomTextRectangle(board, element, 3 / 4);\n return rectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\n\nexport const getMergePoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height]\n ];\n};\n\nexport const MergeEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getMergePoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getMergePoints(rectangle);\n const lineCenterPoints = getCenterPointsOnPolygon(cornerPoints);\n return [...lineCenterPoints, ...cornerPoints];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 2) / 3;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + ((elementRectangle.height * 2) / 3 - textSize.height) / 2\n };\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n setStrokeLinecap,\n getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\n\nexport const DelayEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} L${rectangle.x + (rectangle.width * 3) / 4} ${rectangle.y} A ${rectangle.width /\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 { getCustomTextRectangle, getTextRectangle } from '../../utils';\n\nexport const StoredDataEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x + rectangle.width / 10} ${rectangle.y} L${rectangle.x + rectangle.width} ${rectangle.y} A ${\n rectangle.width / 10\n } ${rectangle.height / 2}, 0, 0, 0,${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height} L${\n rectangle.x + rectangle.width / 10\n } ${rectangle.y + rectangle.height}A ${rectangle.width / 10} ${rectangle.height / 2}, 0, 0, 1,${\n rectangle.x + rectangle.width / 10\n } ${rectangle.y}`,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n //split shape to rectangle and a half ellipse\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n const isInRectangle = RectangleClient.isHit(\n {\n ...rectangle,\n x: rectangle.x + rectangle.width / 10,\n width: (rectangle.width * 9) / 10\n },\n rangeRectangle\n );\n\n const isInFrontEllipse = isPointInEllipse(\n point,\n [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\n\n const notInBackEllipse = !isPointInEllipse(\n point,\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\n return (isInRectangle && notInBackEllipse) || isInFrontEllipse;\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[0] < rectangle.x + rectangle.width / 10) {\n const centerPoint = [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 10, rectangle.height / 2);\n if (nearestPoint[0] > centerPoint[0]) {\n nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n }\n return nearestPoint;\n }\n if (nearestPoint[0] > rectangle.x + (rectangle.width * 9) / 10) {\n const centerPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 10, rectangle.height / 2);\n if (nearestPoint[0] > centerPoint[0]) {\n nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n }\n return nearestPoint;\n }\n return nearestPoint;\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n let centerPoint = [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2];\n let a = rectangle.width / 10;\n let b = rectangle.height / 2;\n const isBackEllipse = connectionPoint[0] > rectangle.x + (rectangle.width * 9) / 10 && connectionPoint[1] > rectangle.y;\n if (isBackEllipse) {\n centerPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2];\n }\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return isBackEllipse ? (vector.map((num) => -num) as Vector) : vector;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + (rectangle.width * 9) / 10, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n const widthRatio = 3 / 4;\n return getCustomTextRectangle(board, element, widthRatio);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const PredefinedProcessEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y + rectangle.height} H${\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: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.06 * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.06,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const getOffPagePoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n};\n\nexport const OffPageEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getOffPagePoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n width: width > 0 ? width : 0,\n height: textSize.height,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - elementRectangle.height / 2 - textSize.height) / 2\n };\n }\n});\n","import { PlaitBoard, RectangleClient, setStrokeLinecap } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { createEllipseEngine } from '../basic-shapes/ellipse';\n\nexport const OrEngine: ShapeEngine = createEllipseEngine({\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const rx = rectangle.width / 2;\n const ry = rectangle.height / 2;\n const startPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2];\n const shape = rs.path(\n `M${startPoint[0]} ${startPoint[1]}\n A${rx},${ry} 0 1,1 ${startPoint[0]} ${startPoint[1] - 0.01}\n M${rectangle.x} ${rectangle.y + rectangle.height / 2}\n L${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height / 2}\n M${rectangle.x + rectangle.width / 2} ${rectangle.y}\n L${rectangle.x + rectangle.width / 2} ${rectangle.y + rectangle.height}\n `,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n }\n});\n","import { PlaitBoard, RectangleClient, getCrossingPointsBetweenEllipseAndSegment, setStrokeLinecap } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { createEllipseEngine } from '../basic-shapes/ellipse';\n\nexport const SummingJunctionEngine: ShapeEngine = createEllipseEngine({\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const rx = rectangle.width / 2;\n const ry = rectangle.height / 2;\n const startPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2];\n const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n const line1Points = getCrossingPointsBetweenEllipseAndSegment(\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n centerPoint[0],\n centerPoint[1],\n rx,\n ry\n );\n const line2Points = getCrossingPointsBetweenEllipseAndSegment(\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x, rectangle.y + rectangle.height],\n centerPoint[0],\n centerPoint[1],\n rx,\n ry\n );\n\n const shape = rs.path(\n `M${startPoint[0]} ${startPoint[1]}\n A${rx},${ry} 0 1,1 ${startPoint[0]} ${startPoint[1] - 0.01}\n M${line1Points[0][0]} ${line1Points[0][1]}\n L${line1Points[1][0]} ${line1Points[1][1]}\n M${line2Points[0][0]} ${line2Points[0][1]}\n L${line2Points[1][0]} ${line2Points[1][1]}\n `,\n { ...options, fillStyle: 'solid' }\n );\n\n setStrokeLinecap(shape, 'round');\n return shape;\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n catmullRomFitting,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { pointsOnBezierCurves } from 'points-on-curve';\n\nexport const DocumentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9} V${rectangle.y} H${rectangle.x +\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: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 0.88);\n }\n};\n","import {\n Direction,\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n catmullRomFitting,\n distanceBetweenPointAndPoint,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { getDirectionByPointOfRectangle, getDirectionFactor, getUnitVectorByPointAndPoint } from '@plait/common';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { getCrossingPointBetweenPointAndPolygon } from '../../utils/polygon';\n\nexport const getMultiDocumentPoints = (rectangle: RectangleClient): Point[] => {\n const linePoints: Point[] = [\n [rectangle.x, rectangle.y + 10],\n [rectangle.x + 5, rectangle.y + 10],\n [rectangle.x + 5, rectangle.y + 5],\n [rectangle.x + 10, rectangle.y + 5],\n [rectangle.x + 10, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3],\n [rectangle.x + rectangle.width - 5, rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3 - 4],\n [rectangle.x + rectangle.width - 5, rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3],\n [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3 - 4],\n [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9]\n ];\n\n let curvePoints = catmullRomFitting([\n [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9],\n [rectangle.x + rectangle.width - 10 - (rectangle.width - 10) / 4, rectangle.y + rectangle.height - (rectangle.height / 9) * 2],\n [rectangle.x + (rectangle.width - 10) / 2, rectangle.y + rectangle.height - rectangle.height / 9],\n [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height - rectangle.height / 9]\n ]);\n\n curvePoints = pointsOnBezierCurves(curvePoints) as Point[];\n return [...linePoints, ...curvePoints];\n};\n\nexport const MultiDocumentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9} V${rectangle.y + 10} H${rectangle.x + 5} V${\n rectangle.y + 5\n } H${rectangle.x + 10} V${rectangle.y} H${rectangle.x + rectangle.width} V${\n rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3\n } L${rectangle.x + rectangle.width - 5} ${rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3 - 4} V${\n rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3\n }\n L${rectangle.x + rectangle.width - 10} ${rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3 - 4} V${\n rectangle.y + rectangle.height - rectangle.height / 9\n }\n \n Q${rectangle.x + rectangle.width - 10 - (rectangle.width - 10) / 4} ${\n rectangle.y + rectangle.height - (rectangle.height / 9) * 3\n }, ${rectangle.x + (rectangle.width - 10) / 2} ${rectangle.y + rectangle.height - rectangle.height / 9} T${rectangle.x} ${\n rectangle.y + rectangle.height - rectangle.height / 9\n }\n \n M${rectangle.x + 5} ${rectangle.y + 10} H${rectangle.x + rectangle.width - 10} V${\n rectangle.y + rectangle.height - rectangle.height / 9\n } \n \n M${rectangle.x + 10} ${rectangle.y + 5} H${rectangle.x + rectangle.width - 5} V${\n rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3\n }\n `,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getMultiDocumentPoints(rectangle), false);\n },\n\n getConnectorPoints(rectangle: RectangleClient) {\n let curvePoints = catmullRomFitting([\n [rectangle.x, rectangle.y + rectangle.height - rectangle.height / 9],\n [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width - 10) / 2, rectangle.y + rectangle.height - rectangle.height / 9],\n [rectangle.x + ((rectangle.width - 10) / 4) * 3, rectangle.y + rectangle.height - (rectangle.height / 9) * 2],\n [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9]\n ]);\n curvePoints = pointsOnBezierCurves(curvePoints) as Point[];\n const crossingPoint = getNearestPointBetweenPointAndSegments(\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n curvePoints\n );\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [crossingPoint[0], crossingPoint[1]],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n },\n\n getNearestCrossingPoint(rectangle: RectangleClient, point: Point) {\n const crossingPoints = getCrossingPointBetweenPointAndPolygon(getMultiDocumentPoints(rectangle), point);\n let nearestPoint = crossingPoints[0];\n let nearestDistance = distanceBetweenPointAndPoint(point[0], point[1], nearestPoint[0], nearestPoint[1]);\n crossingPoints\n .filter((v, index) => index > 0)\n .forEach((crossingPoint) => {\n let distance = distanceBetweenPointAndPoint(point[0], point[1], crossingPoint[0], crossingPoint[1]);\n if (distance < nearestDistance) {\n nearestDistance = distance;\n nearestPoint = crossingPoint;\n }\n });\n\n return nearestPoint;\n },\n\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n if (connectionPoint[0] > rectangle.x && connectionPoint[0] < rectangle.x + (rectangle.width - 10) / 4) {\n return getUnitVectorByPointAndPoint(\n [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height],\n connectionPoint\n );\n }\n if (\n connectionPoint[0] > rectangle.x + (rectangle.width - 10) / 4 &&\n connectionPoint[0] < rectangle.x + ((rectangle.width - 10) / 4) * 3\n ) {\n return getUnitVectorByPointAndPoint(\n [rectangle.x + ((rectangle.width - 10) / 4) * 3, rectangle.y + rectangle.height - rectangle.height / 9],\n [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height]\n );\n }\n\n if (\n connectionPoint[0] > rectangle.x + ((rectangle.width - 10) / 4) * 3 &&\n connectionPoint[0] < rectangle.x + rectangle.width - 10\n ) {\n return getUnitVectorByPointAndPoint(\n [rectangle.x + (rectangle.width - 10), rectangle.y + rectangle.height - rectangle.height / 9],\n connectionPoint\n );\n }\n const direction = getDirectionByPointOfRectangle(pointOfRectangle) || Direction.bottom;\n const factor = getDirectionFactor(direction!);\n return [factor.x, factor.y];\n },\n\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 0.88);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\n\nexport const DatabaseEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y + rectangle.height * 0.15} \n A${rectangle.width / 2} ${rectangle.height * 0.15}, 0, 0, 0,${rectangle.x + rectangle.width} ${\n rectangle.y + rectangle.height * 0.15\n } \n A${rectangle.width / 2} ${rectangle.height * 0.15}, 0, 0, 0,${rectangle.x} ${rectangle.y + rectangle.height * 0.15} \n V${rectangle.y + rectangle.height - rectangle.height * 0.15}\n A${rectangle.width / 2} ${rectangle.height * 0.15}, 0, 0, 0, ${rectangle.x + rectangle.width} ${\n rectangle.y + rectangle.height - rectangle.height * 0.15\n }\n V${rectangle.y + rectangle.height * 0.15}`,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n const isInRectangle = RectangleClient.isHit(\n {\n ...rectangle,\n y: rectangle.y + rectangle.height * 0.15,\n height: rectangle.height - rectangle.height * 0.3\n },\n rangeRectangle\n );\n\n const isInTopEllipse = isPointInEllipse(\n point,\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * 0.15],\n rectangle.width / 2,\n rectangle.height * 0.15\n );\n\n const isInBottomEllipse = isPointInEllipse(\n point,\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height * 0.15],\n rectangle.width / 2,\n rectangle.height * 0.15\n );\n return isInRectangle || isInTopEllipse || isInBottomEllipse;\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[1] < rectangle.y + rectangle.height * 0.15) {\n const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * 0.15] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height * 0.15);\n if (nearestPoint[1] > centerPoint[1]) {\n nearestPoint[1] = centerPoint[1] * 2 - nearestPoint[1];\n }\n return nearestPoint;\n }\n if (nearestPoint[1] > rectangle.y + rectangle.height - rectangle.height * 0.15) {\n const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height * 0.15] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height * 0.15);\n if (nearestPoint[1] < centerPoint[1]) {\n nearestPoint[1] = centerPoint[0] * 2 - nearestPoint[1];\n }\n return nearestPoint;\n }\n return nearestPoint;\n },\n\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n let centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height * 0.15];\n let a = rectangle.width / 2;\n let b = rectangle.height * 0.15;\n const isInTopEllipse = connectionPoint[1] < rectangle.y + rectangle.height * 0.15 && connectionPoint[0] > rectangle.x;\n if (isInTopEllipse) {\n centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * 0.15];\n }\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return vector;\n },\n\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const textRectangle = getCustomTextRectangle(board, element, 1);\n textRectangle.y += getStrokeWidthByElement(element);\n const startY = elementRectangle.y + elementRectangle.height * 0.45;\n const endY = elementRectangle.y + elementRectangle.height - elementRectangle.height * 0.3;\n textRectangle.y = startY + (endY - startY - textRectangle.height) / 2;\n return textRectangle;\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const HardDiskEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x + rectangle.width - rectangle.width * 0.15} ${rectangle.y} \n A${rectangle.width * 0.15} ${rectangle.height / 2}, 0, 0, 0,${rectangle.x +\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: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - elementRectangle.width * 0.45 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + elementRectangle.width * 0.15 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const InternalStorageEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} h${rectangle.width} v${rectangle.height} h${-rectangle.width} v${-rectangle.height}\n M${rectangle.x} ${rectangle.y + rectangle.height / 10} h${rectangle.width}\n M${rectangle.x + rectangle.width / 10} ${rectangle.y} v${rectangle.height}\n `,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - elementRectangle.width * 0.1 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + elementRectangle.width * 0.1 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + elementRectangle.height * 0.1 + (elementRectangle.height - elementRectangle.height * 0.1 - textSize.height) / 2\n };\n }\n};\n","import { PlaitBoard, Point, PointOfRectangle, RectangleClient, distanceBetweenPointAndPoint, setStrokeLinecap } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { pointsOnBezierCurves } from 'points-on-curve';\n\ninterface NoteCurlyLeftPathData {\n startPoint: Point;\n upperCurve: {\n controlPoint1: Point;\n controlPoint2: Point;\n endPoint: Point;\n };\n lowerCurve: {\n controlPoint1: Point;\n controlPoint2: Point;\n endPoint: Point;\n };\n}\n\nfunction generateNoteCurlyLeftPath(rectangle: RectangleClient): NoteCurlyLeftPathData {\n const curlyWidth = rectangle.width * 0.09;\n const rightX = rectangle.x + rectangle.width;\n const centerY = rectangle.y + rectangle.height / 2;\n\n return {\n startPoint: [rightX, rectangle.y],\n upperCurve: {\n controlPoint1: [rightX - curlyWidth, rectangle.y],\n controlPoint2: [rightX, centerY],\n endPoint: [rightX - curlyWidth, centerY]\n },\n lowerCurve: {\n controlPoint1: [rightX, centerY],\n controlPoint2: [rightX - curlyWidth, rectangle.y + rectangle.height],\n endPoint: [rightX, rectangle.y + rectangle.height]\n }\n };\n}\n\nexport const NoteCurlyLeftEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyLeftPath(rectangle);\n\n const pathData = [\n `M${startPoint[0]} ${startPoint[1]}`,\n `C${upperCurve.controlPoint1[0]} ${upperCurve.controlPoint1[1]},\n ${upperCurve.controlPoint2[0]} ${upperCurve.controlPoint2[1]},\n ${upperCurve.endPoint[0]} ${upperCurve.endPoint[1]}`,\n `C${lowerCurve.controlPoint1[0]} ${lowerCurve.controlPoint1[1]},\n ${lowerCurve.controlPoint2[0]} ${lowerCurve.controlPoint2[1]},\n ${lowerCurve.endPoint[0]} ${lowerCurve.endPoint[1]}`\n ].join(' ');\n\n const shape = rs.path(pathData, { ...options, fillStyle: 'solid', fill: 'transparent' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyLeftPath(rectangle);\n\n const upperBezierPoints = pointsOnBezierCurves(\n [startPoint, upperCurve.controlPoint1, upperCurve.controlPoint2, upperCurve.endPoint],\n 0.001\n );\n\n const lowerBezierPoints = pointsOnBezierCurves(\n [upperCurve.endPoint, lowerCurve.controlPoint1, lowerCurve.controlPoint2, lowerCurve.endPoint],\n 0.001\n );\n\n const allPoints = [...upperBezierPoints, ...lowerBezierPoints];\n\n let minDistance = Infinity;\n let nearestPoint = point;\n\n for (const curvePoint of allPoints) {\n const distance = distanceBetweenPointAndPoint(point[0], point[1], curvePoint[0], curvePoint[1]);\n if (distance < minDistance) {\n minDistance = distance;\n nearestPoint = [...curvePoint];\n }\n }\n\n return nearestPoint;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const textRectangle = getCustomTextRectangle(board, element, 0.9);\n textRectangle.x = elementRectangle.x + getStrokeWidthByElement(element) + ShapeDefaultSpace.rectangleAndText;\n return textRectangle;\n }\n};\n","import { PlaitBoard, Point, PointOfRectangle, RectangleClient, distanceBetweenPointAndPoint, setStrokeLinecap } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { pointsOnBezierCurves } from 'points-on-curve';\n\ninterface NoteCurlyRightPathData {\n startPoint: Point;\n upperCurve: {\n controlPoint1: Point;\n controlPoint2: Point;\n endPoint: Point;\n };\n lowerCurve: {\n controlPoint1: Point;\n controlPoint2: Point;\n endPoint: Point;\n };\n}\n\nfunction generateNoteCurlyRightPath(rectangle: RectangleClient): NoteCurlyRightPathData {\n const curlyWidth = rectangle.width * 0.09;\n const centerY = rectangle.y + rectangle.height / 2;\n\n return {\n startPoint: [rectangle.x, rectangle.y],\n upperCurve: {\n controlPoint1: [rectangle.x + curlyWidth, rectangle.y],\n controlPoint2: [rectangle.x, centerY],\n endPoint: [rectangle.x + curlyWidth, centerY]\n },\n lowerCurve: {\n controlPoint1: [rectangle.x, centerY],\n controlPoint2: [rectangle.x + curlyWidth, rectangle.y + rectangle.height],\n endPoint: [rectangle.x, rectangle.y + rectangle.height]\n }\n };\n}\n\nexport const NoteCurlyRightEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyRightPath(rectangle);\n\n const pathData = [\n `M${startPoint[0]} ${startPoint[1]}`,\n `C${upperCurve.controlPoint1[0]} ${upperCurve.controlPoint1[1]},\n ${upperCurve.controlPoint2[0]} ${upperCurve.controlPoint2[1]},\n ${upperCurve.endPoint[0]} ${upperCurve.endPoint[1]}`,\n `C${lowerCurve.controlPoint1[0]} ${lowerCurve.controlPoint1[1]},\n ${lowerCurve.controlPoint2[0]} ${lowerCurve.controlPoint2[1]},\n ${lowerCurve.endPoint[0]} ${lowerCurve.endPoint[1]}`\n ].join(' ');\n\n const shape = rs.path(pathData, { ...options, fillStyle: 'solid', fill: 'transparent' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyRightPath(rectangle);\n\n // 生成上部贝塞尔曲线的点\n const upperBezierPoints = pointsOnBezierCurves(\n [startPoint, upperCurve.controlPoint1, upperCurve.controlPoint2, upperCurve.endPoint],\n 0.001\n );\n\n // 生成下部贝塞尔曲线的点\n const lowerBezierPoints = pointsOnBezierCurves(\n [upperCurve.endPoint, lowerCurve.controlPoint1, lowerCurve.controlPoint2, lowerCurve.endPoint],\n 0.001\n );\n\n // 合并所有点\n const allPoints = [...upperBezierPoints, ...lowerBezierPoints];\n\n // 找到最近的点\n let minDistance = Infinity;\n let nearestPoint = [...point] as Point;\n\n for (const curvePoint of allPoints) {\n const distance = distanceBetweenPointAndPoint(point[0], point[1], curvePoint[0], curvePoint[1]);\n if (distance < minDistance) {\n minDistance = distance;\n nearestPoint = [...curvePoint];\n }\n }\n\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const textRectangle = getCustomTextRectangle(board, element, 0.9);\n textRectangle.x =\n elementRectangle.x + getStrokeWidthByElement(element) + ShapeDefaultSpace.rectangleAndText + elementRectangle.width * 0.1;\n return textRectangle;\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const NoteSquareEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x + rectangle.width * 0.075} ${rectangle.y + rectangle.height} H${rectangle.x} V${rectangle.y} H${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: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 0.88);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\n\nexport const getDisplayPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width * 0.15, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width * 0.15, rectangle.y + rectangle.height]\n ];\n};\n\nexport const DisplayEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x + rectangle.width * 0.15} ${rectangle.y} \n H${rectangle.x + rectangle.width - rectangle.width * 0.1} \n A ${rectangle.width * 0.1} ${rectangle.height / 2}, 0, 0, 1,${rectangle.x +\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: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 0.75);\n }\n};\n","import { PlaitBoard, RectangleClient, Point, createG, drawLine, setStrokeLinecap, drawRectangle, ACTIVE_STROKE_WIDTH } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { getCellsWithPoints, getCellWithPoints } from '../../utils/table';\nimport { ShapeEngine } from '../../interfaces';\nimport { DrawTextInfo } from '../../generators/text.generator';\nimport { PlaitTable, PlaitTableCellWithPoints, PlaitTableDrawOptions, PlaitTableElement } from '../../interfaces/table';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getNearestPointBetweenPointAndRoundRectangle, getRoundRectangleRadius } from '../basic-shapes/round-rectangle';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const TableEngine: ShapeEngine<PlaitTable, PlaitTableDrawOptions, DrawTextInfo> = {\n draw(board: PlaitBoard, rectangle: RectangleClient, roughOptions: Options, options?: PlaitTableDrawOptions) {\n const g = createG();\n try {\n const pointCells = getCellsWithPoints(board, { ...options?.element } as PlaitTable);\n if (pointCells) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { x, y, width, height } = rectangle;\n const tableTopBorder = drawLine(rs, [x, y], [x + width, y], roughOptions);\n const tableLeftBorder = drawLine(rs, [x, y], [x, y + height], roughOptions);\n g.append(tableTopBorder, tableLeftBorder);\n pointCells.forEach((cell) => {\n const rectangle = RectangleClient.getRectangleByPoints(cell.points!);\n const { x, y, width, height } = rectangle;\n const cellRectangle = drawRectangle(\n board,\n {\n x: x + ACTIVE_STROKE_WIDTH,\n y: y + ACTIVE_STROKE_WIDTH,\n width: width - ACTIVE_STROKE_WIDTH * 2,\n height: height - ACTIVE_STROKE_WIDTH * 2\n },\n { fill: cell.fill, fillStyle: 'solid', strokeWidth: 0 }\n );\n const cellRightBorder = drawLine(rs, [x + width, y], [x + width, y + height], roughOptions);\n const cellBottomBorder = drawLine(rs, [x, y + height], [x + width, y + height], roughOptions);\n g.append(cellRectangle, cellRightBorder, cellBottomBorder);\n });\n setStrokeLinecap(g, 'round');\n }\n } catch (error) {\n console.error(error);\n }\n return g;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitTable, options?: DrawTextInfo) {\n try {\n if (options && options.id) {\n const cell = getCellWithPoints(board, element, options!.id);\n if (cell) {\n if (PlaitTableElement.isVerticalText(cell)) {\n return getVerticalTextRectangle(board, cell);\n } else {\n return getHorizontalTextRectangle(board, cell);\n }\n }\n }\n } catch (error) {\n console.error(error);\n }\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n};\n\nexport function getVerticalTextRectangle(board: PlaitBoard, cell: PlaitTableCellWithPoints) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const width = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return getTextRectangle(board, cell, width, cellRectangle);\n}\n\nexport function getHorizontalTextRectangle(board: PlaitBoard, cell: PlaitTableCellWithPoints) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const width = cellRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return getTextRectangle(board, cell, width, cellRectangle);\n}\n\nexport function getTextRectangle(board: PlaitBoard, cell: PlaitTableCellWithPoints, width: number, cellRectangle: RectangleClient) {\n const text = cell.text;\n if (text) {\n const textSize = getTextSize(board, text, width);\n return {\n width: width > 0 ? width : 0,\n height: textSize.height,\n x: cellRectangle.x - width / 2 + cellRectangle.width / 2,\n y: cellRectangle.y + (cellRectangle.height - textSize.height) / 2\n };\n } else {\n return {\n width: 0,\n height: 0,\n x: cellRectangle.x,\n y: cellRectangle.y\n };\n }\n}\n\nexport const getCellTextHeight = (board: PlaitBoard, cell: PlaitTableCellWithPoints, isVertical: boolean = false) => {\n if (cell.text) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n let width = cellRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n if (isVertical) {\n width = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n }\n return getTextSize(board, cell.text, width).height;\n }\n return 0;\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n SVGArcCommand,\n distanceBetweenPointAndPoint,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndDiscreteSegments,\n getNearestPointBetweenPointAndEllipse,\n getVectorFromPointAndSlope,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getUnitVectorByPointAndPoint, rotateVector } from '@plait/common';\n\ninterface ActorPathData {\n headArcCommand: SVGArcCommand;\n bodyLine: [Point, Point];\n armsLine: [Point, Point];\n leftLegLine: [Point, Point];\n rightLegLine: [Point, Point];\n}\n\nfunction generateActorPath(rectangle: RectangleClient): ActorPathData {\n const centerX = rectangle.x + rectangle.width / 2;\n const headRadius = { width: rectangle.width / 3 / 2, height: rectangle.height / 4 / 2 };\n const centerY = rectangle.y + rectangle.height / 4 / 2;\n\n return {\n headArcCommand: {\n rx: headRadius.width,\n ry: headRadius.height,\n xAxisRotation: 0,\n largeArcFlag: 0,\n sweepFlag: 1,\n endX: centerX,\n endY: rectangle.y\n },\n bodyLine: [\n [centerX, rectangle.y + rectangle.height / 4],\n [centerX, rectangle.y + (rectangle.height / 4) * 3]\n ],\n armsLine: [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ],\n leftLegLine: [\n [centerX, rectangle.y + (rectangle.height / 4) * 3],\n [rectangle.x + rectangle.width / 12, rectangle.y + rectangle.height]\n ],\n rightLegLine: [\n [centerX, rectangle.y + (rectangle.height / 4) * 3],\n [rectangle.x + (rectangle.width / 12) * 11, rectangle.y + rectangle.height]\n ]\n };\n}\n\nexport const ActorEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { headArcCommand, bodyLine, armsLine, leftLegLine, rightLegLine } = generateActorPath(rectangle);\n\n const pathData = [\n // 头部(从中间开始画)\n `M${bodyLine[0][0]} ${bodyLine[0][1]}`,\n `A${headArcCommand.rx} ${headArcCommand.ry} ${headArcCommand.xAxisRotation} ${headArcCommand.largeArcFlag} ${headArcCommand.sweepFlag} ${headArcCommand.endX} ${headArcCommand.endY}`,\n `A${headArcCommand.rx} ${headArcCommand.ry} ${headArcCommand.xAxisRotation} ${headArcCommand.largeArcFlag} ${headArcCommand.sweepFlag} ${bodyLine[0][0]} ${bodyLine[0][1]}`,\n // 身体\n `V${bodyLine[1][1]}`,\n // 手臂\n `M${armsLine[0][0]} ${armsLine[0][1]} H${armsLine[1][0]}`,\n // 腿\n `M${leftLegLine[0][0]} ${leftLegLine[0][1]} L${leftLegLine[1][0]} ${leftLegLine[1][1]}`,\n `M${rightLegLine[0][0]} ${rightLegLine[0][1]} L${rightLegLine[1][0]} ${rightLegLine[1][1]}`\n ].join(' ');\n\n const shape = rs.path(pathData, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { headArcCommand, bodyLine, armsLine, leftLegLine, rightLegLine } = generateActorPath(rectangle);\n\n // 检查头部椭圆\n const headCenter: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4 / 2];\n const nearestPointForHead = getNearestPointBetweenPointAndEllipse(point, headCenter, headArcCommand.rx, headArcCommand.ry);\n const distanceForHead = distanceBetweenPointAndPoint(...point, ...nearestPointForHead);\n\n // 检查所有线段\n const allSegments = [bodyLine, armsLine, leftLegLine, rightLegLine];\n const nearestPointForLines = getNearestPointBetweenPointAndDiscreteSegments(point, allSegments);\n const distanceForLines = distanceBetweenPointAndPoint(...point, ...nearestPointForLines);\n\n return distanceForHead < distanceForLines ? nearestPointForHead : nearestPointForLines;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n if (connectionPoint[1] >= rectangle.y && connectionPoint[1] <= rectangle.y + rectangle.height / 4) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4 / 2];\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const a = rectangle.width / 2;\n const b = rectangle.height / 2;\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return vector;\n }\n\n if (connectionPoint[1] >= rectangle.y + rectangle.height / 4 && connectionPoint[1] < rectangle.y + (rectangle.height / 4) * 3) {\n if (connectionPoint[0] < rectangle.x + rectangle.width / 2) {\n return rotateVector(\n getUnitVectorByPointAndPoint([rectangle.x, rectangle.y + rectangle.height / 2], connectionPoint),\n -(Math.PI / 2)\n );\n } else {\n return rotateVector(\n getUnitVectorByPointAndPoint([rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2], connectionPoint),\n -(Math.PI / 2)\n );\n }\n }\n\n if (connectionPoint[1] >= rectangle.y + (rectangle.height / 4) * 3) {\n if (connectionPoint[0] < rectangle.x + rectangle.width / 2) {\n return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x + rectangle.width / 12, rectangle.y + rectangle.height]);\n } else {\n return getUnitVectorByPointAndPoint(\n [rectangle.x + (rectangle.width / 12) * 11, rectangle.y + rectangle.height],\n connectionPoint\n );\n }\n }\n\n return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height]);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const width = elementRectangle.width + 40;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x - 20,\n y: elementRectangle.y + elementRectangle.height + 4\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const ContainerEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y + rectangle.height} H${\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(board: PlaitBoard, element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = 40 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndDiscreteSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\nimport { DrawOptions, GeometryCommonTextKeys, PlaitMultipleTextGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { DrawTextInfo } from '../../generators/text.generator';\nimport { getTextSize } from '../../utils/text-size';\n\ninterface PackagePathData {\n headerHeight: number;\n points: {\n leftTop: Point;\n topStart: Point;\n topEnd: Point;\n cornerPoint: Point;\n rightTop: Point;\n rightBottom: Point;\n leftBottom: Point;\n leftMiddle: Point;\n middlePoint: Point;\n };\n}\n\nfunction generatePackagePath(rectangle: RectangleClient): PackagePathData {\n const headerHeight = 25;\n const topWidth = rectangle.width * 0.7;\n const cornerX = rectangle.x + rectangle.width * 0.8;\n\n return {\n headerHeight,\n points: {\n leftTop: [rectangle.x, rectangle.y + headerHeight],\n topStart: [rectangle.x, rectangle.y],\n topEnd: [rectangle.x + topWidth, rectangle.y],\n cornerPoint: [cornerX, rectangle.y + headerHeight],\n rightTop: [rectangle.x + rectangle.width, rectangle.y + headerHeight],\n rightBottom: [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n leftBottom: [rectangle.x, rectangle.y + rectangle.height],\n leftMiddle: [rectangle.x, rectangle.y + headerHeight],\n middlePoint: [cornerX, rectangle.y + headerHeight]\n }\n };\n}\n\nexport const PackageEngine: ShapeEngine<PlaitMultipleTextGeometry, DrawOptions, DrawTextInfo> = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { points } = generatePackagePath(rectangle);\n\n const pathData = [\n `M${points.leftTop[0]} ${points.leftTop[1]}`,\n `V${points.topStart[1]}`,\n `H${points.topEnd[0]}`,\n `L${points.cornerPoint[0]} ${points.cornerPoint[1]}`,\n `H${points.rightTop[0]}`,\n `V${points.rightBottom[1]}`,\n `H${points.leftBottom[0]}`,\n `V${points.leftMiddle[1]}`,\n `H${points.middlePoint[0]}`\n ].join(' ');\n\n const shape = rs.path(pathData, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { points } = generatePackagePath(rectangle);\n\n const segments: [Point, Point][] = [\n // 左边竖线\n [points.topStart, points.leftTop],\n [points.leftTop, points.leftBottom],\n // 底边\n [points.leftBottom, points.rightBottom],\n // 右边竖线\n [points.rightBottom, points.rightTop],\n // 顶部折线\n [points.topStart, points.topEnd],\n [points.topEnd, points.cornerPoint],\n [points.cornerPoint, points.rightTop],\n // 中间横线\n [points.leftMiddle, points.middlePoint]\n ];\n\n return getNearestPointBetweenPointAndDiscreteSegments(point, segments);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n if (connectionPoint[0] > rectangle.x + rectangle.width * 0.7 && connectionPoint[1] < rectangle.y + 25) {\n return getUnitVectorByPointAndPoint([rectangle.x + rectangle.width * 0.7, rectangle.y], connectionPoint);\n }\n return getUnitVectorByPointAndPoint([rectangle.x + rectangle.width * 0.8, rectangle.y + 25], connectionPoint);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitMultipleTextGeometry, options?: DrawTextInfo) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const textInfo = element.texts?.find((item) => item.id === options?.id);\n if (options?.id === GeometryCommonTextKeys.name && textInfo) {\n const width = elementRectangle.width * 0.7 - ShapeDefaultSpace.rectangleAndText - strokeWidth;\n const textSize = getTextSize(board, textInfo!.text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (25 - textSize.height) / 2\n };\n }\n if (options?.id === GeometryCommonTextKeys.content && textInfo) {\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const textSize = getTextSize(board, textInfo!.text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + 25 + (elementRectangle.height - 25 - textSize.height) / 2\n };\n }\n return elementRectangle;\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { DrawOptions, GeometryCommonTextKeys, PlaitMultipleTextGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { DrawTextInfo } from '../../generators/text.generator';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const CombinedFragmentEngine: ShapeEngine<PlaitMultipleTextGeometry, DrawOptions, DrawTextInfo> = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y + 25} \n V${rectangle.y}\n H${rectangle.x + rectangle.width} \n V${rectangle.y + rectangle.height}\n H${rectangle.x}\n V${rectangle.y + 25}\n H${rectangle.x + rectangle.width / 3 - 8}\n L${rectangle.x + rectangle.width / 3} ${rectangle.y + 16}\n V${rectangle.y}\n `,\n\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitMultipleTextGeometry, options?: DrawTextInfo) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const textInfo = element.texts?.find((item) => item.id === options?.id);\n if (options?.id === GeometryCommonTextKeys.name && textInfo) {\n const width = elementRectangle.width / 3 - 8 - ShapeDefaultSpace.rectangleAndText - strokeWidth;\n const textSize = getTextSize(board, textInfo!.text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (25 - textSize.height) / 2\n };\n }\n if (options?.id === GeometryCommonTextKeys.content && textInfo) {\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const textSize = getTextSize(board, textInfo!.text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + 25 + ShapeDefaultSpace.rectangleAndText + strokeWidth\n };\n }\n return elementRectangle;\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n distanceBetweenPointAndPoint,\n getNearestPointBetweenPointAndSegment,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\n\nfunction getDeletionLines(rectangle: RectangleClient): Array<[Point, Point]> {\n return [\n [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height]\n ],\n [\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x, rectangle.y + rectangle.height]\n ]\n ];\n}\n\nexport const DeletionEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const lines = getDeletionLines(rectangle);\n const shape = rs.path(\n lines.map(([from, to]) => `M${from[0]} ${from[1]} L${to[0]} ${to[1]}`).join(' '),\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 const lines = getDeletionLines(rectangle);\n let minDistance = Infinity;\n let nearestPoint = point;\n lines.forEach(line => {\n const currentPoint = getNearestPointBetweenPointAndSegment(point, line);\n const distance = distanceBetweenPointAndPoint(point[0], point[1], currentPoint[0], currentPoint[1]);\n if (distance < minDistance) {\n minDistance = distance;\n nearestPoint = currentPoint;\n }\n });\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const ActiveClassEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y + rectangle.height} H${\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: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width =\n elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.125 * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.125,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n setStrokeLinecap,\n getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const NoteEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} \n h${rectangle.width - 16}\n v16\n h16\n v${rectangle.height - 16}\n h${-rectangle.width}\n Z\n M${rectangle.x + rectangle.width - 16} ${rectangle.y} \n A16 16, 0,0,1, ${rectangle.x + rectangle.width} ${rectangle.y + 16}\n `,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[0] > rectangle.x + rectangle.width - 16 && nearestPoint[1] < rectangle.y + 16) {\n return getNearestPointBetweenPointAndEllipse(point, [rectangle.x + rectangle.width - 16, rectangle.y + 16], 16, 16);\n }\n return nearestPoint;\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const centerPoint: Point = [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 2];\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const slope = getEllipseTangentSlope(point[0], point[1], 16, 16) as any;\n return getVectorFromPointAndSlope(point[0], point[1], slope);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth - 15;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n SVGArcCommand,\n distanceBetweenPointAndPoint,\n getNearestPointBetweenPointAndArc,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getUnitVectorByPointAndPoint, rotateVector } from '@plait/common';\n\ninterface AssemblyPathData {\n startPoint: Point;\n line1: [Point, Point];\n circleArcCommand: SVGArcCommand;\n verticalArcCommand: SVGArcCommand;\n line2: [Point, Point];\n}\n\nfunction generateAssemblyPath(rectangle: RectangleClient): AssemblyPathData {\n const centerY = rectangle.y + rectangle.height / 2;\n const firstLineEndX = rectangle.x + rectangle.width * 0.3;\n const circleWidth = rectangle.width * 0.13;\n const circleHeight = rectangle.height * 0.285;\n const verticalX = firstLineEndX + circleWidth;\n const verticalRadius = rectangle.width * 0.233;\n\n return {\n startPoint: [rectangle.x, centerY],\n line1: [\n [rectangle.x, centerY],\n [firstLineEndX, centerY]\n ],\n circleArcCommand: {\n rx: circleWidth,\n ry: circleHeight,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: firstLineEndX,\n endY: centerY\n },\n verticalArcCommand: {\n rx: verticalRadius,\n ry: rectangle.height / 2,\n xAxisRotation: 0,\n largeArcFlag: 0,\n sweepFlag: 1,\n endX: verticalX,\n endY: rectangle.y + rectangle.height\n },\n line2: [\n [verticalX + verticalRadius, centerY],\n [rectangle.x + rectangle.width, centerY]\n ]\n };\n}\n\nexport const AssemblyEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, line1, circleArcCommand, verticalArcCommand, line2 } = generateAssemblyPath(rectangle);\n\n const pathData = [\n `M${startPoint[0]} ${startPoint[1]}`,\n `H${line1[1][0]}`,\n // 画完整的圆形:先画一个半圆,再画另一个半圆\n `A${circleArcCommand.rx} ${circleArcCommand.ry} ${circleArcCommand.xAxisRotation} ${circleArcCommand.largeArcFlag} ${circleArcCommand.sweepFlag} ${line1[1][0] + circleArcCommand.rx * 2} ${circleArcCommand.endY}`,\n `A${circleArcCommand.rx} ${circleArcCommand.ry} ${circleArcCommand.xAxisRotation} ${circleArcCommand.largeArcFlag} ${circleArcCommand.sweepFlag} ${circleArcCommand.endX} ${circleArcCommand.endY}`,\n // 垂直椭圆\n `M${verticalArcCommand.endX} ${rectangle.y}`,\n `A${verticalArcCommand.rx} ${verticalArcCommand.ry} ${verticalArcCommand.xAxisRotation} ${verticalArcCommand.largeArcFlag} ${verticalArcCommand.sweepFlag} ${verticalArcCommand.endX} ${verticalArcCommand.endY}`,\n // 最后一条线\n `M${line2[0][0]} ${line2[0][1]} H${line2[1][0]}`\n ].join(' ');\n\n const shape = rs.path(pathData, {\n ...options,\n fillStyle: 'solid'\n });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { line1, line2, circleArcCommand, verticalArcCommand } = generateAssemblyPath(rectangle);\n\n // 检查直线段\n const nearestPointForLines = getNearestPointBetweenPointAndSegments(point, [...line1, ...line2]);\n const distanceForLines = distanceBetweenPointAndPoint(...point, ...nearestPointForLines);\n\n // 检查中间圆形\n const circleCenter = [line1[1][0] + circleArcCommand.rx, line1[1][1]] as Point;\n const nearestPointForCircle = getNearestPointBetweenPointAndEllipse(\n point,\n circleCenter,\n circleArcCommand.rx,\n circleArcCommand.ry\n );\n const distanceForCircle = distanceBetweenPointAndPoint(...point, ...nearestPointForCircle);\n\n // 检查垂直椭圆(使用 getNearestPointBetweenPointAndArc 处理半圆弧)\n const arcStartPoint: Point = [verticalArcCommand.endX, rectangle.y];\n const nearestPointForEllipse = getNearestPointBetweenPointAndArc(\n point,\n arcStartPoint,\n verticalArcCommand\n );\n const distanceForEllipse = distanceBetweenPointAndPoint(...point, ...nearestPointForEllipse);\n\n // 返回最近的点\n const minDistance = Math.min(distanceForLines, distanceForCircle, distanceForEllipse);\n if (minDistance === distanceForLines) return nearestPointForLines;\n if (minDistance === distanceForCircle) return nearestPointForCircle;\n return nearestPointForEllipse;\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n if (connectionPoint[0] > rectangle.x + rectangle.width * 0.43 && connectionPoint[1] < rectangle.y + rectangle.height / 2) {\n return rotateVector(getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]), -Math.PI);\n }\n if (connectionPoint[0] > rectangle.x + rectangle.width * 0.43 && connectionPoint[1] > rectangle.y + rectangle.height / 2) {\n return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]);\n }\n return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n getNearestPointBetweenPointAndArc,\n distanceBetweenPointAndPoint,\n setStrokeLinecap,\n getNearestPointBetweenPointAndSegment,\n SVGArcCommand\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\ninterface RequiredInterfacePathData {\n startPoint: Point;\n leftArcCommand: SVGArcCommand;\n line: {\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n };\n}\n\nfunction generateRequiredInterfacePath(rectangle: RectangleClient): RequiredInterfacePathData {\n const arcWidth = rectangle.width * 0.39;\n const arcHeight = rectangle.height / 2;\n\n return {\n startPoint: [rectangle.x, rectangle.y],\n leftArcCommand: {\n rx: arcWidth,\n ry: arcHeight,\n xAxisRotation: 0,\n largeArcFlag: 0,\n sweepFlag: 1,\n endX: rectangle.x,\n endY: rectangle.y + rectangle.height\n },\n line: {\n startX: rectangle.x + rectangle.width * 0.41,\n startY: rectangle.y + rectangle.height / 2,\n endX: rectangle.x + rectangle.width,\n endY: rectangle.y + rectangle.height / 2\n }\n };\n}\n\nexport const RequiredInterfaceEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, leftArcCommand, line } = generateRequiredInterfacePath(rectangle);\n\n const pathData = [\n `M${startPoint[0]} ${startPoint[1]}`,\n `A${leftArcCommand.rx} ${leftArcCommand.ry} ${leftArcCommand.xAxisRotation} ${leftArcCommand.largeArcFlag} ${leftArcCommand.sweepFlag} ${leftArcCommand.endX} ${leftArcCommand.endY}`,\n `M${line.startX} ${line.startY} H${line.endX}`\n ].join(' ');\n\n const shape = rs.path(pathData, {\n ...options,\n fillStyle: 'solid',\n fill: 'transparent'\n });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { startPoint, leftArcCommand, line } = generateRequiredInterfacePath(rectangle);\n let minDistance = Infinity;\n let nearestPoint = point;\n\n // 检查圆弧段\n const arcNearestPoint = getNearestPointBetweenPointAndArc(point, startPoint, leftArcCommand);\n const arcDistance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);\n if (arcDistance < minDistance) {\n minDistance = arcDistance;\n nearestPoint = arcNearestPoint;\n }\n\n // 检查直线段\n const lineStart: Point = [line.startX, line.startY];\n const lineEnd: Point = [line.endX, line.endY];\n const lineNearestPoint = getNearestPointBetweenPointAndSegment(point, [lineStart, lineEnd]);\n const lineDistance = distanceBetweenPointAndPoint(point[0], point[1], lineNearestPoint[0], lineNearestPoint[1]);\n if (lineDistance < minDistance) {\n minDistance = lineDistance;\n nearestPoint = lineNearestPoint;\n }\n\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n SVGArcCommand,\n distanceBetweenPointAndPoint,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\n\nconst percentage = 0.54;\n\ninterface ProvidedInterfacePathData {\n startPoint: Point;\n line: {\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n };\n arcCommands: SVGArcCommand[];\n}\n\nfunction generateProvidedInterfacePath(rectangle: RectangleClient): ProvidedInterfacePathData {\n const centerY = rectangle.y + rectangle.height / 2;\n const rx = (rectangle.width * (1 - percentage)) / 2;\n const ry = rectangle.height / 2;\n\n const startPoint: Point = [rectangle.x, centerY];\n const lineEndX = rectangle.x + rectangle.width * percentage;\n\n return {\n startPoint,\n line: {\n startX: startPoint[0],\n startY: centerY,\n endX: lineEndX,\n endY: centerY\n },\n arcCommands: [\n {\n rx,\n ry,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + rectangle.width,\n endY: centerY\n },\n {\n rx,\n ry,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: lineEndX,\n endY: centerY\n }\n ]\n };\n}\n\nexport const ProvidedInterfaceEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, line, arcCommands } = generateProvidedInterfacePath(rectangle);\n\n const pathData = [\n `M${startPoint[0]} ${startPoint[1]}`,\n `H${line.endX}`,\n ...arcCommands.map(\n (command) =>\n `A${command.rx} ${command.ry} ${command.xAxisRotation} ${command.largeArcFlag} ${command.sweepFlag} ${command.endX} ${command.endY}`\n )\n ].join(' ');\n\n const shape = rs.path(pathData, {\n ...options,\n fillStyle: 'solid'\n });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { startPoint, line, arcCommands } = generateProvidedInterfacePath(rectangle);\n\n // 检查直线段\n const lineStart: Point = [line.startX, line.startY];\n const lineEnd: Point = [line.endX, line.endY];\n const nearestPointForLine = getNearestPointBetweenPointAndSegments(point, [lineStart, lineEnd]);\n const distanceForLine = distanceBetweenPointAndPoint(...point, ...nearestPointForLine);\n\n // 检查圆弧段\n const arcCenter = [rectangle.x + (3 * rectangle.width) / 4, line.startY] as Point;\n const nearestPointForEllipse = getNearestPointBetweenPointAndEllipse(point, arcCenter, arcCommands[0].rx, arcCommands[0].ry);\n const distanceForEllipse = distanceBetweenPointAndPoint(...point, ...nearestPointForEllipse);\n\n return distanceForLine < distanceForEllipse ? nearestPointForLine : nearestPointForEllipse;\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const centerPoint: Point = [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 2];\n if (connectionPoint[0] > rectangle.x + rectangle.width * 0.54) {\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const rx = (rectangle.width * 0.46) / 2;\n const ry = rectangle.height / 2;\n const slope = getEllipseTangentSlope(point[0], point[1], rx, ry) as any;\n return getVectorFromPointAndSlope(point[0], point[1], slope);\n }\n return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndDiscreteSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\n\ninterface ComponentPathData {\n boxSize: {\n width: number;\n height: number;\n };\n points: {\n mainStart: Point;\n topBoxStart: Point;\n topBoxEnd: Point;\n bottomBoxStart: Point;\n bottomBoxEnd: Point;\n mainEnd: Point;\n rightTop: Point;\n rightBottom: Point;\n };\n}\n\nfunction generateComponentPath(rectangle: RectangleClient): ComponentPathData {\n const mainLineX = rectangle.x + 12;\n const boxWidth = rectangle.width > 70 ? 24 : rectangle.width * 0.2;\n const boxHeight = rectangle.height - 28 - rectangle.height * 0.35 > 1 ? 14 : rectangle.height * 0.175;\n const topBoxY = rectangle.y + rectangle.height * 0.175;\n const bottomBoxY = rectangle.y + rectangle.height - rectangle.height * 0.175 - boxHeight;\n \n return {\n boxSize: {\n width: boxWidth,\n height: boxHeight\n },\n points: {\n mainStart: [mainLineX, rectangle.y],\n topBoxStart: [mainLineX, topBoxY],\n topBoxEnd: [mainLineX, topBoxY + boxHeight],\n bottomBoxStart: [mainLineX, bottomBoxY],\n bottomBoxEnd: [mainLineX, bottomBoxY + boxHeight],\n mainEnd: [mainLineX, rectangle.y + rectangle.height],\n rightTop: [rectangle.x + rectangle.width, rectangle.y],\n rightBottom: [rectangle.x + rectangle.width, rectangle.y + rectangle.height]\n }\n };\n}\n\nexport const ComponentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { boxSize, points } = generateComponentPath(rectangle);\n \n const pathData = [\n // 主矩形轮廓\n `M${points.mainStart[0]} ${points.mainStart[1]}`,\n `H${points.rightTop[0]}`,\n `V${points.rightBottom[1]}`,\n `H${points.mainEnd[0]}`,\n\n // 上方小矩形\n `M${points.topBoxStart[0]} ${points.topBoxStart[1]}`,\n `h${boxSize.width / 2} v${boxSize.height} h${-boxSize.width} v${-boxSize.height} h${boxSize.width / 2}`,\n\n // 下方小矩形\n `M${points.bottomBoxStart[0]} ${points.bottomBoxStart[1]}`,\n `h${boxSize.width / 2} v${boxSize.height} h${-boxSize.width} v${-boxSize.height} h${boxSize.width / 2}`,\n\n // 连接线\n `M${points.mainStart[0]} ${points.mainStart[1]}`,\n `V${points.topBoxStart[1]}`,\n `M${points.topBoxEnd[0]} ${points.topBoxEnd[1]}`,\n `V${points.bottomBoxStart[1]}`,\n `M${points.bottomBoxEnd[0]} ${points.bottomBoxEnd[1]}`,\n `V${points.mainEnd[1]}`\n ].join(' ');\n\n const shape = rs.path(pathData, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { boxSize, points } = generateComponentPath(rectangle);\n \n const segments: [Point, Point][] = [\n // 主矩形轮廓\n [points.mainStart, [points.rightTop[0], points.mainStart[1]]],\n [[points.rightTop[0], points.mainStart[1]], points.rightBottom],\n [points.rightBottom, [points.mainEnd[0], points.rightBottom[1]]],\n [[points.mainEnd[0], points.rightBottom[1]], points.mainStart],\n\n // 上方小矩形\n [points.topBoxStart, [points.topBoxStart[0] + boxSize.width/2, points.topBoxStart[1]]],\n [[points.topBoxStart[0] + boxSize.width/2, points.topBoxStart[1]], [points.topBoxStart[0] + boxSize.width/2, points.topBoxEnd[1]]],\n [[points.topBoxStart[0] + boxSize.width/2, points.topBoxEnd[1]], [points.topBoxStart[0] - boxSize.width/2, points.topBoxEnd[1]]],\n [[points.topBoxStart[0] - boxSize.width/2, points.topBoxEnd[1]], [points.topBoxStart[0] - boxSize.width/2, points.topBoxStart[1]]],\n [[points.topBoxStart[0] - boxSize.width/2, points.topBoxStart[1]], points.topBoxStart],\n\n // 下方小矩形\n [points.bottomBoxStart, [points.bottomBoxStart[0] + boxSize.width/2, points.bottomBoxStart[1]]],\n [[points.bottomBoxStart[0] + boxSize.width/2, points.bottomBoxStart[1]], [points.bottomBoxStart[0] + boxSize.width/2, points.bottomBoxEnd[1]]],\n [[points.bottomBoxStart[0] + boxSize.width/2, points.bottomBoxEnd[1]], [points.bottomBoxStart[0] - boxSize.width/2, points.bottomBoxEnd[1]]],\n [[points.bottomBoxStart[0] - boxSize.width/2, points.bottomBoxEnd[1]], [points.bottomBoxStart[0] - boxSize.width/2, points.bottomBoxStart[1]]],\n [[points.bottomBoxStart[0] - boxSize.width/2, points.bottomBoxStart[1]], points.bottomBoxStart],\n\n // 连接线\n [points.mainStart, points.topBoxStart],\n [points.topBoxEnd, points.bottomBoxStart],\n [points.bottomBoxEnd, points.mainEnd]\n ];\n\n return getNearestPointBetweenPointAndDiscreteSegments(point, segments);\n },\n\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const { points } = generateComponentPath(rectangle);\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getUnitVectorByPointAndPoint(points.mainStart, connectionPoint);\n },\n\n getConnectorPoints(rectangle: RectangleClient) {\n const { points } = generateComponentPath(rectangle);\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [points.mainStart[0], rectangle.y + rectangle.height / 2]\n ] as [Point, Point, Point, Point];\n },\n\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - 24 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + 24 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { ComponentEngine } from './component';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const ComponentBoxEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const componentWidth = rectangle.width - 45 * 2 - 18 > 1 ? 45 : rectangle.width * 0.25;\n const componentHeight = rectangle.height - 30 - 8 * 2 > 1 ? 30 : rectangle.height * 0.2;\n\n const componentRectangle = {\n x: rectangle.x + rectangle.width - 18 - componentWidth,\n y: rectangle.y + 8,\n width: componentWidth,\n height: componentHeight\n };\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} \n H${rectangle.x + rectangle.width} \n V${rectangle.y + rectangle.height} \n H${rectangle.x} Z\n\n `,\n { ...options, fillStyle: 'solid' }\n );\n\n const componentShape = ComponentEngine.draw(board, componentRectangle, options);\n shape.append(componentShape);\n setStrokeLinecap(shape, 'round');\n\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const componentWidth = elementRectangle.width - 45 * 2 - 18 > 1 ? 45 : elementRectangle.width * 0.25;\n const width = elementRectangle.width - 18 - componentWidth - ShapeDefaultSpace.rectangleAndText - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getNearestPointBetweenPointAndSegments\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const TemplateEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n\n return drawRoundRectangle(\n rs,\n rectangle.x,\n rectangle.y,\n rectangle.x + rectangle.width,\n rectangle.y + rectangle.height,\n {\n ...options,\n fillStyle: 'solid',\n dashGap: 10,\n strokeLineDash: [10, 10]\n },\n false,\n 4\n );\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n BasicShapes,\n DrawOptions,\n DrawShapes,\n FlowchartSymbols,\n PlaitGeometry,\n ShapeEngine,\n SwimlaneSymbols,\n TableSymbols,\n TextRectangleOptions,\n UMLSymbols\n} from '../interfaces';\nimport { CommentEngine } from './basic-shapes/comment';\nimport { CrossEngine } from './basic-shapes/cross';\nimport { DiamondEngine } from './basic-shapes/diamond';\nimport { EllipseEngine } from './basic-shapes/ellipse';\nimport { HexagonEngine } from './basic-shapes/hexagon';\nimport { LeftArrowEngine } from './basic-shapes/left-arrow';\nimport { OctagonEngine } from './basic-shapes/octagon';\nimport { ParallelogramEngine } from './basic-shapes/parallelogram';\nimport { PentagonEngine } from './basic-shapes/pentagon';\nimport { PentagonArrowEngine } from './basic-shapes/pentagon-arrow';\nimport { ProcessArrowEngine } from './basic-shapes/process-arrow';\nimport { RightArrowEngine } from './basic-shapes/right-arrow';\nimport { RoundCommentEngine } from './basic-shapes/round-comment';\nimport { RoundRectangleEngine } from './basic-shapes/round-rectangle';\nimport { TrapezoidEngine } from './basic-shapes/trapezoid';\nimport { TriangleEngine } from './basic-shapes/triangle';\nimport { TwoWayArrowEngine } from './basic-shapes/two-way-arrow';\nimport { StarEngine } from './basic-shapes/star';\nimport { TerminalEngine } from './flowchart/terminal';\nimport { ManualInputEngine } from './flowchart/manual-input';\nimport { PreparationEngine } from './flowchart/preparation';\nimport { ManualLoopEngine } from './flowchart/manual-loop';\nimport { MergeEngine } from './flowchart/merge';\nimport { DelayEngine } from './flowchart/delay';\nimport { StoredDataEngine } from './flowchart/stored-data';\nimport { PredefinedProcessEngine } from './flowchart/predefined-process';\nimport { OffPageEngine } from './flowchart/off-page';\nimport { CloudEngine } from './basic-shapes/cloud';\nimport { OrEngine } from './flowchart/or';\nimport { SummingJunctionEngine } from './flowchart/summing-junction';\nimport { DocumentEngine } from './flowchart/document';\nimport { MultiDocumentEngine } from './flowchart/multi-document';\nimport { DatabaseEngine } from './flowchart/database';\nimport { HardDiskEngine } from './flowchart/hard-disk';\nimport { InternalStorageEngine } from './flowchart/internal-storage';\nimport { NoteCurlyLeftEngine } from './flowchart/note-curly-left';\nimport { NoteCurlyRightEngine } from './flowchart/note-curly-right';\nimport { NoteSquareEngine } from './flowchart/note-square';\nimport { DisplayEngine } from './flowchart/display';\nimport { TableEngine } from './table/table';\nimport { RectangleEngine } from './basic-shapes/rectangle';\nimport { PlaitElement } from '@plait/core';\nimport { ActorEngine } from './uml/actor';\nimport { ContainerEngine } from './uml/container';\nimport { PackageEngine } from './uml/package';\nimport { CombinedFragmentEngine } from './uml/combined-fragment';\nimport { DeletionEngine } from './uml/deletion';\nimport { ActiveClassEngine } from './uml/activity-class';\nimport { NoteEngine } from './uml/note';\nimport { AssemblyEngine } from './uml/assembly';\nimport { RequiredInterfaceEngine } from './uml/required-interface';\nimport { ProvidedInterfaceEngine } from './uml/provided-interface';\nimport { ComponentEngine } from './uml/component';\nimport { ComponentBoxEngine } from './uml/component-box';\nimport { TemplateEngine } from './uml/template';\n\nconst ShapeEngineMap: Record<DrawShapes, ShapeEngine<any, any, any>> = {\n [BasicShapes.rectangle]: RectangleEngine,\n [BasicShapes.diamond]: DiamondEngine,\n [BasicShapes.ellipse]: EllipseEngine,\n [BasicShapes.parallelogram]: ParallelogramEngine,\n [BasicShapes.roundRectangle]: RoundRectangleEngine,\n [BasicShapes.text]: RectangleEngine,\n [BasicShapes.triangle]: TriangleEngine,\n [BasicShapes.leftArrow]: LeftArrowEngine,\n [BasicShapes.trapezoid]: TrapezoidEngine,\n [BasicShapes.rightArrow]: RightArrowEngine,\n [BasicShapes.cross]: CrossEngine,\n [BasicShapes.star]: StarEngine,\n [BasicShapes.pentagon]: PentagonEngine,\n [BasicShapes.hexagon]: HexagonEngine,\n [BasicShapes.octagon]: OctagonEngine,\n [BasicShapes.pentagonArrow]: PentagonArrowEngine,\n [BasicShapes.processArrow]: ProcessArrowEngine,\n [BasicShapes.twoWayArrow]: TwoWayArrowEngine,\n [BasicShapes.comment]: CommentEngine,\n [BasicShapes.roundComment]: RoundCommentEngine,\n [BasicShapes.cloud]: CloudEngine,\n [FlowchartSymbols.process]: RectangleEngine,\n [FlowchartSymbols.decision]: DiamondEngine,\n [FlowchartSymbols.connector]: EllipseEngine,\n [FlowchartSymbols.data]: ParallelogramEngine,\n [FlowchartSymbols.terminal]: TerminalEngine,\n [FlowchartSymbols.database]: DatabaseEngine,\n [FlowchartSymbols.hardDisk]: HardDiskEngine,\n [FlowchartSymbols.internalStorage]: InternalStorageEngine,\n [FlowchartSymbols.manualInput]: ManualInputEngine,\n [FlowchartSymbols.preparation]: PreparationEngine,\n [FlowchartSymbols.manualLoop]: ManualLoopEngine,\n [FlowchartSymbols.merge]: MergeEngine,\n [FlowchartSymbols.delay]: DelayEngine,\n [FlowchartSymbols.storedData]: StoredDataEngine,\n [FlowchartSymbols.or]: OrEngine,\n [FlowchartSymbols.summingJunction]: SummingJunctionEngine,\n [FlowchartSymbols.predefinedProcess]: PredefinedProcessEngine,\n [FlowchartSymbols.offPage]: OffPageEngine,\n [FlowchartSymbols.document]: DocumentEngine,\n [FlowchartSymbols.multiDocument]: MultiDocumentEngine,\n [FlowchartSymbols.noteCurlyLeft]: NoteCurlyLeftEngine,\n [FlowchartSymbols.noteCurlyRight]: NoteCurlyRightEngine,\n [FlowchartSymbols.noteSquare]: NoteSquareEngine,\n [FlowchartSymbols.display]: DisplayEngine,\n [SwimlaneSymbols.swimlaneHorizontal]: TableEngine,\n [SwimlaneSymbols.swimlaneVertical]: TableEngine,\n [TableSymbols.table]: TableEngine,\n [UMLSymbols.actor]: ActorEngine,\n [UMLSymbols.useCase]: EllipseEngine,\n [UMLSymbols.container]: ContainerEngine,\n [UMLSymbols.note]: NoteEngine,\n [UMLSymbols.package]: PackageEngine,\n [UMLSymbols.combinedFragment]: CombinedFragmentEngine,\n [UMLSymbols.class]: TableEngine,\n [UMLSymbols.interface]: TableEngine,\n [UMLSymbols.activation]: RectangleEngine,\n [UMLSymbols.object]: RectangleEngine,\n [UMLSymbols.deletion]: DeletionEngine,\n [UMLSymbols.activityClass]: ActiveClassEngine,\n [UMLSymbols.simpleClass]: RectangleEngine,\n [UMLSymbols.component]: ComponentEngine,\n [UMLSymbols.componentBox]: ComponentBoxEngine,\n [UMLSymbols.template]: TemplateEngine,\n [UMLSymbols.port]: RectangleEngine,\n [UMLSymbols.branchMerge]: DiamondEngine,\n [UMLSymbols.assembly]: AssemblyEngine,\n [UMLSymbols.requiredInterface]: RequiredInterfaceEngine,\n [UMLSymbols.providedInterface]: ProvidedInterfaceEngine\n};\n\nexport const getEngine = <\n T extends PlaitElement = PlaitGeometry,\n P extends DrawOptions = DrawOptions,\n K extends TextRectangleOptions = TextRectangleOptions\n>(\n shape: DrawShapes\n): ShapeEngine<T, P, K> => {\n return ShapeEngineMap[shape];\n};\n","import {\n Point,\n PlaitBoard,\n getElementById,\n RectangleClient,\n PointOfRectangle,\n Direction,\n Vector,\n hasValidAngle,\n rotatePointsByElement,\n findElements,\n PlaitElement,\n Path\n} from '@plait/core';\nimport {\n getDirectionFactor,\n rotateVectorAnti90,\n getDirectionByVector,\n getOppositeDirection,\n getDirectionByPointOfRectangle,\n getSourceAndTargetOuterRectangle,\n getNextPoint,\n rotateVector\n} from '@plait/common';\nimport {\n BasicShapes,\n ArrowLineHandleKey,\n ArrowLineHandleRef,\n ArrowLineHandleRefPair,\n ArrowLineMarkerType,\n PlaitArrowLine,\n PlaitGeometry,\n PlaitShapeElement,\n PlaitDrawElement\n} from '../../interfaces';\nimport { getEngine } from '../../engines';\nimport { getElementShape } from '../shape';\nimport { getSourceAndTargetRectangle } from './elbow';\nimport { getStrokeWidthByElement } from '../common';\nimport { getArrowLinePoints, getHitConnection } from './arrow-line-basic';\n\nexport const getArrowLineHandleRefPair = (board: PlaitBoard, element: PlaitArrowLine): ArrowLineHandleRefPair => {\n const strokeWidth = getStrokeWidthByElement(element);\n const sourceBoundElement = element.source.boundId ? getElementById<PlaitShapeElement>(board, element.source.boundId) : undefined;\n const targetBoundElement = element.target.boundId ? getElementById<PlaitShapeElement>(board, element.target.boundId) : undefined;\n let sourcePoint = sourceBoundElement ? getConnectionPoint(sourceBoundElement, element.source.connection!) : element.points[0];\n let targetPoint = targetBoundElement\n ? getConnectionPoint(targetBoundElement, element.target.connection!)\n : element.points[element.points.length - 1];\n let sourceDirection = getDirectionByVector([targetPoint[0] - sourcePoint[0], targetPoint[1] - sourcePoint[1]]) || Direction.right;\n let targetDirection = getOppositeDirection(sourceDirection);\n const sourceFactor = getDirectionFactor(sourceDirection);\n const targetFactor = getDirectionFactor(targetDirection);\n const sourceHandleRef: ArrowLineHandleRef = {\n key: ArrowLineHandleKey.source,\n point: sourcePoint,\n direction: sourceDirection,\n vector: [sourceFactor.x, sourceFactor.y]\n };\n const targetHandleRef: ArrowLineHandleRef = {\n key: ArrowLineHandleKey.target,\n point: targetPoint,\n direction: targetDirection,\n vector: [targetFactor.x, targetFactor.y]\n };\n if (sourceBoundElement) {\n const connectionOffset = PlaitArrowLine.isSourceMarkOrTargetMark(\n element as PlaitArrowLine,\n ArrowLineMarkerType.none,\n ArrowLineHandleKey.source\n )\n ? 0\n : strokeWidth;\n const sourceVector = getVectorByConnection(sourceBoundElement, element.source.connection!);\n sourceHandleRef.vector = sourceVector;\n sourceHandleRef.boundElement = sourceBoundElement;\n if (hasValidAngle(sourceBoundElement)) {\n const direction = getDirectionByVector(rotateVector(sourceVector, sourceBoundElement.angle!));\n sourceDirection = direction ? direction : sourceDirection;\n } else {\n const direction = getDirectionByVector(sourceVector);\n sourceDirection = direction ? direction : sourceDirection;\n }\n sourceHandleRef.direction = sourceDirection;\n sourcePoint = getConnectionPoint(sourceBoundElement, element.source.connection!, sourceDirection, connectionOffset);\n sourceHandleRef.point = rotatePointsByElement(sourcePoint, sourceBoundElement) || sourcePoint;\n }\n if (targetBoundElement) {\n const connectionOffset = PlaitArrowLine.isSourceMarkOrTargetMark(\n element as PlaitArrowLine,\n ArrowLineMarkerType.none,\n ArrowLineHandleKey.target\n )\n ? 0\n : strokeWidth;\n const targetVector = getVectorByConnection(targetBoundElement, element.target.connection!);\n targetHandleRef.vector = targetVector;\n targetHandleRef.boundElement = targetBoundElement;\n if (hasValidAngle(targetBoundElement)) {\n const direction = getDirectionByVector(rotateVector(targetVector, targetBoundElement.angle!));\n targetDirection = direction ? direction : targetDirection;\n } else {\n const direction = getDirectionByVector(targetVector);\n targetDirection = direction ? direction : targetDirection;\n }\n targetHandleRef.direction = targetDirection;\n targetPoint = getConnectionPoint(targetBoundElement, element.target.connection!, targetDirection, connectionOffset);\n targetHandleRef.point = rotatePointsByElement(targetPoint, targetBoundElement) || targetPoint;\n }\n return { source: sourceHandleRef, target: targetHandleRef };\n};\n\nexport const getConnectionPoint = (geometry: PlaitShapeElement, connection: Point, direction?: Direction, delta?: number): Point => {\n const rectangle = RectangleClient.getRectangleByPoints(geometry.points);\n if (direction && delta) {\n const directionFactor = getDirectionFactor(direction);\n const point = RectangleClient.getConnectionPoint(rectangle, connection);\n return [point[0] + directionFactor.x * delta, point[1] + directionFactor.y * delta];\n } else {\n return RectangleClient.getConnectionPoint(rectangle, connection);\n }\n};\n\nexport const getVectorByConnection = (boundElement: PlaitShapeElement, connection: PointOfRectangle): Vector => {\n const rectangle = RectangleClient.getRectangleByPoints(boundElement.points);\n const shape = getElementShape(boundElement);\n const engine = getEngine(shape);\n let vector: Vector = [0, 0];\n const direction = getDirectionByPointOfRectangle(connection);\n if (direction && boundElement.shape !== BasicShapes.ellipse) {\n const factor = getDirectionFactor(direction);\n return [factor.x, factor.y];\n }\n if (engine.getEdgeByConnectionPoint) {\n const edge = engine.getEdgeByConnectionPoint(rectangle, connection);\n if (edge) {\n const lineVector = [edge[1][0] - edge[0][0], edge[1][1] - edge[0][1]] as Vector;\n return rotateVectorAnti90(lineVector);\n }\n }\n if (engine.getTangentVectorByConnectionPoint) {\n const lineVector = engine.getTangentVectorByConnectionPoint(rectangle, connection);\n if (lineVector) {\n return rotateVectorAnti90(lineVector);\n }\n }\n return vector;\n};\n\nexport const getElbowLineRouteOptions = (board: PlaitBoard, element: PlaitArrowLine, handleRefPair?: ArrowLineHandleRefPair) => {\n handleRefPair = handleRefPair ?? getArrowLineHandleRefPair(board, element);\n const { sourceRectangle, targetRectangle } = getSourceAndTargetRectangle(board, element, handleRefPair);\n const { sourceOuterRectangle, targetOuterRectangle } = getSourceAndTargetOuterRectangle(sourceRectangle, targetRectangle);\n const sourcePoint = handleRefPair.source.point;\n const targetPoint = handleRefPair.target.point;\n const nextSourcePoint = getNextPoint(sourcePoint, sourceOuterRectangle, handleRefPair.source.direction);\n const nextTargetPoint = getNextPoint(targetPoint, targetOuterRectangle, handleRefPair.target.direction);\n return {\n sourcePoint,\n nextSourcePoint,\n sourceRectangle,\n sourceOuterRectangle,\n targetPoint,\n nextTargetPoint,\n targetRectangle,\n targetOuterRectangle\n };\n};\n\nexport const collectArrowLineUpdatedRefsByGeometry = (\n board: PlaitBoard,\n element: PlaitShapeElement,\n refs: { property: Partial<PlaitArrowLine>; path: Path }[]\n) => {\n const lines = findElements(board, {\n match: (element: PlaitElement) => {\n if (PlaitDrawElement.isArrowLine(element)) {\n return element.source.boundId === element.id || element.target.boundId === element.id;\n }\n return false;\n },\n recursion: element => true\n }) as PlaitArrowLine[];\n if (lines.length) {\n lines.forEach(line => {\n const isSourceBound = line.source.boundId === element.id;\n const handle = isSourceBound ? 'source' : 'target';\n const object = { ...line[handle] };\n const linePoints = getArrowLinePoints(board, line);\n const point = isSourceBound ? linePoints[0] : linePoints[linePoints.length - 1];\n object.connection = getHitConnection(board, point, element);\n const path = PlaitBoard.findPath(board, line);\n const index = refs.findIndex(obj => Path.equals(obj.path, path));\n if (index === -1) {\n refs.push({\n property: {\n [handle]: object\n },\n path\n });\n } else {\n refs[index].property = { ...refs[index].property, [handle]: object };\n }\n });\n }\n};\n","import { Direction, PlaitBoard, PlaitElement, Point, PointOfRectangle, Vector, getElementById, rotatePointsByElement } from '@plait/core';\nimport { Element } from 'slate';\nimport { getConnectionPoint } from '../utils/arrow-line/arrow-line-common';\nimport { PlaitShapeElement } from '.';\nimport { StrokeStyle } from '@plait/common';\n\nexport enum ArrowLineMarkerType {\n arrow = 'arrow',\n none = 'none',\n openTriangle = 'open-triangle',\n solidTriangle = 'solid-triangle',\n sharpArrow = 'sharp-arrow',\n oneSideUp = 'one-side-up',\n oneSideDown = 'one-side-down',\n hollowTriangle = 'hollow-triangle',\n singleSlash = 'single-slash'\n}\n\nexport enum ArrowLineShape {\n straight = 'straight',\n curve = 'curve',\n elbow = 'elbow'\n}\n\nexport enum ArrowLineHandleKey {\n source = 'source',\n target = 'target'\n}\n\nexport interface ArrowLineText {\n text: Element;\n // Percentage of positioning based on line length\n position: number;\n}\n\nexport interface ArrowLineHandle {\n // The id of the bounded element\n boundId?: string;\n connection?: PointOfRectangle;\n marker: ArrowLineMarkerType;\n}\n\nexport interface ArrowLineHandleRef {\n key: ArrowLineHandleKey;\n direction: Direction;\n point: PointOfRectangle;\n vector: Vector;\n boundElement?: PlaitShapeElement;\n}\n\nexport interface ArrowLineHandleRefPair {\n source: ArrowLineHandleRef;\n target: ArrowLineHandleRef;\n}\n\nexport interface PlaitArrowLine extends PlaitElement {\n type: 'arrow-line';\n shape: ArrowLineShape;\n points: Point[];\n\n source: ArrowLineHandle;\n target: ArrowLineHandle;\n\n texts: ArrowLineText[];\n\n // node style attributes\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n\n opacity: number;\n}\n\nexport interface PlaitStraightArrowLine extends PlaitArrowLine {\n shape: ArrowLineShape.straight;\n}\n\nexport interface PlaitCurveArrowLine extends PlaitArrowLine {\n shape: ArrowLineShape.curve;\n}\n\nexport interface PlaitElbowArrowLine extends PlaitArrowLine {\n shape: ArrowLineShape.elbow;\n}\n\nexport const PlaitArrowLine = {\n isSourceMarkOrTargetMark(line: PlaitArrowLine, markType: ArrowLineMarkerType, handleKey: ArrowLineHandleKey) {\n if (handleKey === ArrowLineHandleKey.source) {\n return line.source.marker === markType;\n } else {\n return line.target.marker === markType;\n }\n },\n isSourceMark(line: PlaitArrowLine, markType: ArrowLineMarkerType) {\n return PlaitArrowLine.isSourceMarkOrTargetMark(line, markType, ArrowLineHandleKey.source);\n },\n isTargetMark(line: PlaitArrowLine, markType: ArrowLineMarkerType) {\n return PlaitArrowLine.isSourceMarkOrTargetMark(line, markType, ArrowLineHandleKey.target);\n },\n isBoundElementOfSource(line: PlaitArrowLine, element: PlaitShapeElement) {\n return line.source.boundId === element.id;\n },\n isBoundElementOfTarget(line: PlaitArrowLine, element: PlaitShapeElement) {\n return line.target.boundId === element.id;\n },\n getPoints(board: PlaitBoard, line: PlaitArrowLine) {\n let sourcePoint;\n if (line.source.boundId) {\n const sourceElement = getElementById<PlaitShapeElement>(board, line.source.boundId)!;\n const sourceConnectionPoint = getConnectionPoint(sourceElement, line.source.connection!);\n sourcePoint = rotatePointsByElement(sourceConnectionPoint, sourceElement) || sourceConnectionPoint;\n } else {\n sourcePoint = line.points[0];\n }\n\n let targetPoint;\n if (line.target.boundId) {\n const targetElement = getElementById<PlaitShapeElement>(board, line.target.boundId)!;\n const targetConnectionPoint = getConnectionPoint(targetElement, line.target.connection!);\n targetPoint = rotatePointsByElement(targetConnectionPoint, targetElement) || targetConnectionPoint;\n } else {\n targetPoint = line.points[line.points.length - 1];\n }\n const restPoints = line.points.length > 2 ? line.points.slice(1, line.points.length - 1) : [];\n return [sourcePoint, ...restPoints, targetPoint];\n }\n};\n","export enum MemorizeKey {\n basicShape = 'basicShape',\n flowchart = 'flowchart',\n text = 'text',\n arrowLine = 'arrow-line',\n UML = 'UML'\n}\n","import { Path, PlaitElement, Point } from '@plait/core';\nimport { ArrowLineShape } from './arrow-line';\nimport { StrokeStyle } from '@plait/common';\n\nexport enum VectorLinePointerType {\n vectorLine = 'vectorLine'\n}\n\nexport enum VectorLineShape {\n straight = ArrowLineShape.straight,\n curve = ArrowLineShape.curve\n}\n\nexport interface PlaitVectorLine extends PlaitElement {\n type: 'vector-line';\n shape: VectorLineShape;\n points: Point[];\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n fill?: string;\n opacity: number;\n}\n","import { BasicShapes, FlowchartSymbols, GeometryShapes, PlaitCustomGeometry, PlaitGeometry, UMLSymbols } from './geometry';\nimport { PlaitImage } from './image';\nimport { PlaitArrowLine } from './arrow-line';\nimport { PlaitSwimlane, SwimlaneSymbols } from './swimlane';\nimport { PlaitBaseTable, PlaitTable, PlaitTableElement, TableSymbols } from './table';\nimport { PlaitText } from './text';\nimport { PlaitVectorLine } from './vector-line';\nimport { PlaitLine } from './line';\nimport { PlaitBoard, PlaitOptionsBoard } from '@plait/core';\nimport { WithDrawOptions } from './options';\nimport { WithDrawPluginKey } from '../constants/default';\n\nexport * from './arrow-line';\nexport * from './geometry';\nexport * from './text';\nexport * from './element';\nexport * from './engine';\nexport * from './swimlane';\nexport * from './table';\nexport * from './vector-line';\nexport * from './options';\nexport * from './image';\n\nexport type PlaitDrawElement = PlaitGeometry | PlaitArrowLine | PlaitVectorLine | PlaitImage | PlaitBaseTable | PlaitSwimlane;\n\nexport type PlaitShapeElement = PlaitGeometry | PlaitImage | PlaitTable | PlaitSwimlane;\n\nexport type DrawShapes = GeometryShapes | TableSymbols | SwimlaneSymbols;\n\nexport const PlaitDrawElement = {\n isGeometry: (value: any): value is PlaitGeometry => {\n return value.type === 'geometry';\n },\n isArrowLine: (value: any): value is PlaitArrowLine => {\n return value.type === 'arrow-line' || value.type === 'line';\n },\n isVectorLine: (value: any): value is PlaitVectorLine => {\n return value.type === 'vector-line';\n },\n isLine: (value: any): value is PlaitLine => {\n return PlaitDrawElement.isArrowLine(value) || PlaitDrawElement.isVectorLine(value);\n },\n isText: (value: any): value is PlaitText => {\n return value.type === 'geometry' && value.shape === BasicShapes.text;\n },\n isImage: (value: any): value is PlaitImage => {\n return value.type === 'image';\n },\n isTable: (value: any): value is PlaitTable => {\n return PlaitTableElement.isTable(value);\n },\n isDrawElement: (value: any): value is PlaitDrawElement => {\n if (\n PlaitDrawElement.isGeometry(value) ||\n PlaitDrawElement.isLine(value) ||\n PlaitDrawElement.isImage(value) ||\n PlaitDrawElement.isTable(value) ||\n PlaitDrawElement.isSwimlane(value)\n ) {\n return true;\n } else {\n return false;\n }\n },\n isCustomGeometryElement: (board: PlaitBoard, value: any): value is PlaitCustomGeometry => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithDrawOptions | undefined>(WithDrawPluginKey);\n const customGeometryTypes = options?.customGeometryTypes || [];\n if (customGeometryTypes.includes(value.type)) {\n return true;\n } else {\n return false;\n }\n },\n isShapeElement: (value: any): value is PlaitShapeElement => {\n return (\n PlaitDrawElement.isImage(value) ||\n PlaitDrawElement.isGeometry(value) ||\n PlaitDrawElement.isTable(value) ||\n PlaitDrawElement.isSwimlane(value)\n );\n },\n isBasicShape: (value: any) => {\n return Object.keys(BasicShapes).includes(value.shape);\n },\n isFlowchart: (value: any) => {\n return Object.keys(FlowchartSymbols).includes(value.shape);\n },\n isUML: (value: any) => {\n return Object.keys(UMLSymbols).includes(value.shape);\n },\n isSwimlane: (value: any): value is PlaitSwimlane => {\n return value.type === 'swimlane';\n },\n isVerticalSwimlane: (value: any) => {\n return PlaitDrawElement.isSwimlane(value) && value.shape === SwimlaneSymbols.swimlaneVertical;\n },\n isHorizontalSwimlane: (value: any) => {\n return PlaitDrawElement.isSwimlane(value) && value.shape === SwimlaneSymbols.swimlaneHorizontal;\n },\n isUMLClassOrInterface: (value: any) => {\n return Object.keys(UMLSymbols).includes(value.shape) && [UMLSymbols.class, UMLSymbols.interface].includes(value.shape);\n },\n isGeometryByTable: (value: any): value is PlaitBaseTable => {\n return PlaitDrawElement.isUMLClassOrInterface(value);\n },\n isElementByTable: (value: any): value is PlaitBaseTable => {\n return PlaitDrawElement.isTable(value) || PlaitDrawElement.isSwimlane(value) || PlaitDrawElement.isGeometryByTable(value);\n }\n};\n","import {\n PlaitBoard,\n PlaitPluginElementContext,\n OnContextChanged,\n isSelectionMoving,\n getSelectedElements,\n ACTIVE_STROKE_WIDTH,\n RectangleClient\n} from '@plait/core';\nimport { PlaitCommonGeometry, PlaitGeometry, PlaitMultipleTextGeometry } from './interfaces/geometry';\nimport { GeometryShapeGenerator } from './generators/geometry-shape.generator';\nimport { DrawTransforms } from './transforms';\nimport { ActiveGenerator, CommonElementFlavour, TextManageChangeData, createActiveGenerator, hasResizeHandle } from '@plait/common';\nimport { ArrowLineAutoCompleteGenerator } from './generators/arrow-line-auto-complete.generator';\nimport { getTextRectangle, isGeometryIncludeText, isMultipleTextGeometry, memorizeLatestText } from './utils';\nimport { DrawTextInfo, TextGenerator } from './generators/text.generator';\nimport { SingleTextGenerator } from './generators/single-text.generator';\nimport { PlaitDrawElement, PlaitText } from './interfaces';\nimport { GeometryThreshold } from './constants';\nimport { getEngine } from './engines';\n\nexport class GeometryComponent\n extends CommonElementFlavour<PlaitCommonGeometry, PlaitBoard>\n implements OnContextChanged<PlaitCommonGeometry, PlaitBoard>\n{\n activeGenerator!: ActiveGenerator<PlaitCommonGeometry>;\n\n lineAutoCompleteGenerator!: ArrowLineAutoCompleteGenerator;\n\n shapeGenerator!: GeometryShapeGenerator;\n\n textGenerator!: TextGenerator<PlaitMultipleTextGeometry> | SingleTextGenerator;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.activeGenerator = createActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (selectedElements.length === 1 && !isSelectionMoving(this.board)) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if (selectedElements.length === 1 && !isSelectionMoving(this.board)) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: (element: PlaitCommonGeometry) => {\n return RectangleClient.getRectangleByPoints(element.points);\n },\n hasResizeHandle: () => {\n return hasResizeHandle(this.board, this.element);\n }\n });\n this.lineAutoCompleteGenerator = new ArrowLineAutoCompleteGenerator(this.board);\n this.shapeGenerator = new GeometryShapeGenerator(this.board);\n if (isGeometryIncludeText(this.element)) {\n this.initializeTextManage();\n }\n this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);\n this.getRef().addGenerator(ActiveGenerator.key, this.activeGenerator);\n this.getRef().updateActiveSection = () => {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n };\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n this.shapeGenerator.processDrawing(this.element as PlaitGeometry, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getElementTopHost(this.board), {\n selected: this.selected\n });\n this.textGenerator && this.textGenerator.draw(this.getElementG());\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitCommonGeometry, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitCommonGeometry, PlaitBoard>\n ) {\n if (value.element !== previous.element || value.hasThemeChanged) {\n this.shapeGenerator.processDrawing(this.element as PlaitGeometry, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n this.textGenerator && this.updateText(previous.element, value.element);\n } else {\n const hasSameSelected = value.selected === previous.selected;\n if (!hasSameSelected || value.selected) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n }\n }\n\n updateText(previousElement: PlaitCommonGeometry, currentElement: PlaitCommonGeometry) {\n if (isMultipleTextGeometry(this.element)) {\n (this.textGenerator as TextGenerator<PlaitMultipleTextGeometry>).update(\n this.element,\n previousElement.texts,\n currentElement.texts,\n this.getElementG()\n );\n } else {\n (this.textGenerator as SingleTextGenerator).update(\n this.element as PlaitGeometry,\n previousElement.text,\n currentElement.text,\n this.getElementG()\n );\n }\n }\n\n initializeTextManage() {\n const onTextChange = (element: PlaitCommonGeometry, textManageChangeData: TextManageChangeData, text: DrawTextInfo) => {\n if (textManageChangeData.newText) {\n if (isMultipleTextGeometry(element)) {\n DrawTransforms.setDrawTexts(this.board, element, {\n id: text.id,\n text: textManageChangeData.newText\n });\n } else {\n DrawTransforms.setText(\n this.board,\n element as PlaitGeometry,\n textManageChangeData.newText,\n textManageChangeData.width,\n textManageChangeData.height\n );\n }\n } else {\n DrawTransforms.setTextSize(this.board, element as PlaitGeometry, textManageChangeData.width, textManageChangeData.height);\n }\n textManageChangeData.operations && memorizeLatestText(element, textManageChangeData.operations);\n };\n\n if (isMultipleTextGeometry(this.element)) {\n this.textGenerator = new TextGenerator<PlaitMultipleTextGeometry>(\n this.board,\n this.element as PlaitMultipleTextGeometry,\n this.element.texts!,\n {\n onChange: onTextChange\n }\n );\n } else {\n this.textGenerator = new SingleTextGenerator(this.board, this.element as PlaitGeometry, this.element.text, {\n onChange: onTextChange,\n getMaxWidth: () => {\n let width = getTextRectangle(this.board, this.element).width;\n const getRectangle = getEngine(this.element.shape).getTextRectangle;\n if (getRectangle) {\n width = getRectangle(this.board, this.element as PlaitGeometry).width;\n }\n return PlaitDrawElement.isText(this.element) && this.element.autoSize ? GeometryThreshold.defaultTextMaxWidth : width;\n }\n });\n }\n this.textGenerator.initialize();\n }\n\n destroy(): void {\n super.destroy();\n this.activeGenerator.destroy();\n this.lineAutoCompleteGenerator.destroy();\n this.textGenerator?.destroy();\n }\n}\n","import { PlaitBoard, PlaitPluginElementContext, OnContextChanged, getElementById, createDebugGenerator, PlaitNode } from '@plait/core';\nimport { ArrowLineText, PlaitArrowLine, PlaitGeometry } from './interfaces';\nimport { LineActiveGenerator } from './generators/line-active.generator';\nimport { DrawTransforms } from './transforms';\nimport { GeometryThreshold, MIN_TEXT_WIDTH } from './constants';\nimport { CommonElementFlavour, TextManage, TextManageChangeData } from '@plait/common';\nimport { getArrowLineTextRectangle } from './utils/arrow-line/arrow-line-basic';\nimport { memorizeLatestText } from './utils/memorize';\nimport { ArrowLineShapeGenerator } from './generators/arrow-line.generator';\nimport { getArrowLinePoints } from './utils';\n\ninterface BoundedElements {\n source?: PlaitGeometry;\n target?: PlaitGeometry;\n}\n\nconst debugKey = 'debug:plait:line-turning';\nconst debugGenerator = createDebugGenerator(debugKey);\n\nexport class ArrowLineComponent\n extends CommonElementFlavour<PlaitArrowLine, PlaitBoard>\n implements OnContextChanged<PlaitArrowLine, PlaitBoard>\n{\n shapeGenerator!: ArrowLineShapeGenerator;\n\n activeGenerator!: LineActiveGenerator;\n\n boundedElements: BoundedElements = {};\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.shapeGenerator = new ArrowLineShapeGenerator(this.board);\n this.activeGenerator = new LineActiveGenerator(this.board);\n this.initializeTextManages();\n }\n\n initialize(): void {\n this.initializeGenerator();\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n const linePoints = getArrowLinePoints(this.board, this.element);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n super.initialize();\n this.boundedElements = this.getBoundedElements();\n this.drawText();\n this.getRef().updateActiveSection = () => {\n const linePoints = getArrowLinePoints(this.board, this.element);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n };\n debugGenerator.isDebug() && debugGenerator.drawCircles(this.board, this.element.points.slice(1, -1), 4, true);\n }\n\n getBoundedElements() {\n const boundedElements: BoundedElements = {};\n if (this.element.source.boundId) {\n const boundElement = getElementById<PlaitGeometry>(this.board, this.element.source.boundId);\n if (boundElement) {\n boundedElements.source = boundElement;\n }\n }\n if (this.element.target.boundId) {\n const boundElement = getElementById<PlaitGeometry>(this.board, this.element.target.boundId);\n if (boundElement) {\n boundedElements.target = boundElement;\n }\n }\n return boundedElements;\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitArrowLine, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitArrowLine, PlaitBoard>\n ) {\n const boundedElements = this.getBoundedElements();\n const isBoundedElementsChanged =\n boundedElements.source !== this.boundedElements.source || boundedElements.target !== this.boundedElements.target;\n this.boundedElements = boundedElements;\n const linePoints = getArrowLinePoints(this.board, this.element);\n if (value.element !== previous.element || value.hasThemeChanged) {\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n this.updateText(previous.element.texts, value.element.texts);\n this.updateTextRectangle();\n } else {\n const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate();\n if (needUpdate || value.selected) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n }\n }\n if (isBoundedElementsChanged) {\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n this.updateTextRectangle();\n return;\n }\n }\n\n initializeTextManages() {\n if (this.element.texts?.length) {\n const textManages: TextManage[] = [];\n this.element.texts.forEach((text: ArrowLineText, index: number) => {\n const manage = this.createTextManage(text, index);\n textManages.push(manage);\n });\n this.getRef().initializeTextManage(textManages);\n }\n }\n\n drawText() {\n if (this.element.texts?.length) {\n this.getRef()\n .getTextManages()\n .forEach((manage, index) => {\n manage.draw(this.element.texts![index].text);\n this.getElementG().append(manage.g);\n });\n }\n }\n\n createTextManage(text: ArrowLineText, index: number) {\n return new TextManage(this.board, {\n getRectangle: () => {\n return getArrowLineTextRectangle(this.board, this.element as PlaitArrowLine, index);\n },\n onChange: (textManageChangeData: TextManageChangeData) => {\n const path = PlaitBoard.findPath(this.board, this.element);\n const node = PlaitNode.get(this.board, path) as PlaitArrowLine;\n const texts = [...node.texts];\n // const newWidth = textManageChangeData.width < MIN_TEXT_WIDTH ? MIN_TEXT_WIDTH : textManageChangeData.width;\n texts.splice(index, 1, {\n text: textManageChangeData.newText ? textManageChangeData.newText : this.element.texts[index].text,\n position: this.element.texts[index].position\n });\n DrawTransforms.setArrowLineTexts(this.board, this.element as PlaitArrowLine, texts);\n textManageChangeData.operations && memorizeLatestText(this.element, textManageChangeData.operations);\n },\n getMaxWidth: () => GeometryThreshold.defaultTextMaxWidth,\n textPlugins: []\n });\n }\n\n updateText(previousTexts: ArrowLineText[], currentTexts: ArrowLineText[]) {\n if (previousTexts === currentTexts) return;\n const previousTextsLength = previousTexts.length;\n const currentTextsLength = currentTexts.length;\n const textManages = this.getRef().getTextManages();\n if (currentTextsLength === previousTextsLength) {\n for (let i = 0; i < previousTextsLength; i++) {\n if (previousTexts[i].text !== currentTexts[i].text) {\n textManages[i].updateText(currentTexts[i].text);\n }\n }\n } else {\n this.getRef().destroyTextManage();\n this.initializeTextManages();\n this.drawText();\n }\n }\n\n updateTextRectangle() {\n const textManages = this.getRef().getTextManages();\n textManages.forEach((manage) => {\n manage.updateRectangle();\n });\n }\n\n destroy(): void {\n super.destroy();\n this.activeGenerator.destroy();\n this.getRef().destroyTextManage();\n }\n}\n","import { PlaitBoard, PlaitPluginElementContext, OnContextChanged } from '@plait/core';\nimport { PlaitVectorLine } from './interfaces';\nimport { LineActiveGenerator } from './generators/line-active.generator';\nimport { CommonElementFlavour } from '@plait/common';\nimport { getVectorLinePoints } from './utils';\nimport { VectorLineShapeGenerator } from './generators/vector-line-generator';\n\nexport class VectorLineComponent\n extends CommonElementFlavour<PlaitVectorLine, PlaitBoard>\n implements OnContextChanged<PlaitVectorLine, PlaitBoard>\n{\n shapeGenerator!: VectorLineShapeGenerator;\n\n activeGenerator!: LineActiveGenerator;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.shapeGenerator = new VectorLineShapeGenerator(this.board);\n this.activeGenerator = new LineActiveGenerator(this.board);\n this.getRef().updateActiveSection = () => {\n const linePoints = getVectorLinePoints(this.board, this.element)!;\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n };\n }\n\n initialize(): void {\n this.initializeGenerator();\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n const linePoints = getVectorLinePoints(this.board, this.element)!;\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n super.initialize();\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitVectorLine, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitVectorLine, PlaitBoard>\n ) {\n const linePoints = getVectorLinePoints(this.board, this.element)!;\n if (value.element !== previous.element || value.hasThemeChanged) {\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n } else {\n const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate() || value.selected;\n if (needUpdate) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n }\n }\n }\n\n destroy(): void {\n super.destroy();\n this.activeGenerator.destroy();\n }\n}\n","import { PlaitBoard, getHitElementByPoint, getSelectedElements, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { isVirtualKey, isSpaceHotkey, isDelete } from '@plait/common';\nimport { GeometryCommonTextKeys, PlaitDrawElement } from '../interfaces';\nimport { editText } from '../utils/geometry';\nimport { getHitMultipleGeometryText, isDrawElementIncludeText, isMultipleTextGeometry } from '../utils';\n\nexport const withDrawHotkey = (board: PlaitBoard) => {\n const { keyDown, dblClick } = board;\n\n board.keyDown = (event: KeyboardEvent) => {\n const selectedElements = getSelectedElements(board);\n const isSingleSelection = selectedElements.length === 1;\n const targetElement = selectedElements[0];\n if (\n !PlaitBoard.isReadonly(board) &&\n !isVirtualKey(event) &&\n !isDelete(event) &&\n !isSpaceHotkey(event) &&\n isSingleSelection &&\n PlaitDrawElement.isGeometry(targetElement)\n ) {\n event.preventDefault();\n editText(board, targetElement);\n return;\n }\n\n keyDown(event);\n };\n\n board.dblClick = (event: MouseEvent) => {\n event.preventDefault();\n if (!PlaitBoard.isReadonly(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const hitElement = getHitElementByPoint(board, point, undefined, false);\n if (hitElement && PlaitDrawElement.isGeometry(hitElement) && isDrawElementIncludeText(hitElement)) {\n if (isMultipleTextGeometry(hitElement)) {\n const hitText =\n getHitMultipleGeometryText(board, hitElement, point) ||\n hitElement.texts.find((item) => item.id.includes(GeometryCommonTextKeys.content)) ||\n hitElement.texts[0];\n editText(board, hitElement, hitText);\n } else {\n editText(board, hitElement);\n }\n }\n }\n dblClick(event);\n };\n return board;\n};\n","import { PlaitBoard, Point, RectangleClient, createG, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { BasicShapes, GeometryShapes, PlaitCommonGeometry, PlaitGeometry } from '../interfaces';\nimport {\n createDefaultGeometry,\n createTextElement,\n getDefaultGeometryPoints,\n getTextShapeProperty,\n getMemorizedLatestByPointer,\n getTextRectangle,\n insertElement,\n getDefaultGeometryText\n} from '../utils';\nimport { DrawPointerType, getGeometryPointers } from '../constants';\nimport {\n normalizeShapePoints,\n isDndMode,\n isDrawingMode,\n getDirectionFactorByDirectionComponent,\n getUnitVectorByPointAndPoint,\n TextManage\n} from '@plait/common';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { getSnapResizingRef } from '../utils/snap-resizing';\nimport { getGeometryGeneratorByShape } from '../utils/shape';\n\nexport interface FakeCreateTextRef {\n g: SVGGElement;\n textManage: TextManage;\n}\n\nconst isGeometryDndMode = (board: PlaitBoard) => {\n const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n const dndMode = isGeometryPointer && isDndMode(board);\n return dndMode;\n};\n\nconst isGeometryDrawingMode = (board: PlaitBoard) => {\n const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n const drawingMode = isGeometryPointer && isDrawingMode(board);\n return drawingMode;\n};\n\nexport const withGeometryCreateByDrag = (board: PlaitBoard) => {\n const { pointerMove, globalPointerUp, pointerUp } = board;\n\n let geometryShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitCommonGeometry | null = null;\n\n let fakeCreateTextRef: FakeCreateTextRef | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n geometryShapeG?.remove();\n geometryShapeG = createG();\n\n const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n const dragMode = isGeometryPointer && isDndMode(board);\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n const geometryGenerator = getGeometryGeneratorByShape(board, pointer);\n if (dragMode) {\n const memorizedLatest = getMemorizedLatestByPointer(pointer);\n if (pointer === BasicShapes.text) {\n const property = getTextShapeProperty(board, getDefaultGeometryText(board), memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(movingPoint, property.width, property.height)\n );\n temporaryElement = createTextElement(board, points, getDefaultGeometryText(board));\n if (!fakeCreateTextRef) {\n const textManage = new TextManage(board, {\n getRectangle: () => {\n return getTextRectangle(board, temporaryElement!);\n }\n });\n textManage.draw(temporaryElement!.text);\n fakeCreateTextRef = {\n g: createG(),\n textManage\n };\n\n PlaitBoard.getHost(board).append(fakeCreateTextRef.g);\n fakeCreateTextRef.g.append(textManage.g);\n } else {\n fakeCreateTextRef.textManage.updateRectangle();\n fakeCreateTextRef.g.append(fakeCreateTextRef.textManage.g);\n }\n } else {\n const points = getDefaultGeometryPoints(pointer, movingPoint);\n temporaryElement = createDefaultGeometry(board, points, pointer as GeometryShapes);\n geometryGenerator.processDrawing(temporaryElement as PlaitGeometry, geometryShapeG);\n PlaitBoard.getElementTopHost(board).append(geometryShapeG);\n }\n }\n\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n if (isGeometryDndMode(board) && temporaryElement) {\n return;\n }\n pointerUp(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (isGeometryDndMode(board) && temporaryElement) {\n insertElement(board, temporaryElement);\n fakeCreateTextRef?.textManage.destroy();\n fakeCreateTextRef?.g.remove();\n fakeCreateTextRef = null;\n }\n temporaryElement = null;\n geometryShapeG?.remove();\n geometryShapeG = null;\n globalPointerUp(event);\n };\n\n return board;\n};\n\nexport const withGeometryCreateByDrawing = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, pointerUp, keyDown, keyUp, touchMove } = board;\n let start: Point | null = null;\n\n let geometryShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitCommonGeometry | null = null;\n\n let isShift = false;\n\n let snapG: SVGGElement | null;\n\n board.keyDown = (event: KeyboardEvent) => {\n isShift = isKeyHotkey('shift', event);\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n isShift = false;\n keyUp(event);\n };\n\n board.pointerDown = (event: PointerEvent) => {\n if (!PlaitBoard.isReadonly(board) && isGeometryDrawingMode(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n start = point;\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (pointer === BasicShapes.text) {\n const memorizedLatest = getMemorizedLatestByPointer(pointer);\n const property = getTextShapeProperty(board, getDefaultGeometryText(board), memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(point, property.width, property.height));\n const textElement = createTextElement(board, points, getDefaultGeometryText(board));\n insertElement(board, textElement);\n start = null;\n }\n }\n pointerDown(event);\n };\n\n board.touchMove = (event: TouchEvent) => {\n if (start && isGeometryDrawingMode(board)) {\n event.preventDefault();\n }\n touchMove(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n geometryShapeG?.remove();\n geometryShapeG = createG();\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n const geometryGenerator = getGeometryGeneratorByShape(board, pointer);\n\n snapG?.remove();\n if (start && isGeometryDrawingMode(board)) {\n let points: [Point, Point] = normalizeShapePoints([start, movingPoint], isShift);\n const activeRectangle = RectangleClient.getRectangleByPoints(points);\n const [x, y] = getUnitVectorByPointAndPoint(start, movingPoint);\n const resizeSnapRef = getSnapResizingRef(board, [], {\n resizePoints: points,\n activeRectangle,\n directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],\n isAspectRatio: isShift,\n isFromCorner: true,\n isCreate: true\n });\n snapG = resizeSnapRef.snapG;\n PlaitBoard.getElementTopHost(board).append(snapG);\n points = normalizeShapePoints(resizeSnapRef.activePoints as [Point, Point], isShift);\n temporaryElement = createDefaultGeometry(board, points, pointer as GeometryShapes);\n geometryGenerator.processDrawing(temporaryElement as PlaitGeometry, geometryShapeG);\n PlaitBoard.getElementTopHost(board).append(geometryShapeG);\n }\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n if (isGeometryDrawingMode(board) && start) {\n const targetPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const { width, height } = RectangleClient.getRectangleByPoints([start!, targetPoint]);\n if (Math.hypot(width, height) < 8) {\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (pointer !== BasicShapes.text) {\n const points = getDefaultGeometryPoints(pointer, targetPoint);\n temporaryElement = createDefaultGeometry(board, points, pointer as GeometryShapes);\n }\n }\n if (temporaryElement) {\n insertElement(board, temporaryElement);\n }\n snapG?.remove();\n geometryShapeG?.remove();\n geometryShapeG = null;\n start = null;\n temporaryElement = null;\n return;\n }\n pointerUp(event);\n };\n return board;\n};\n","import {\n ClipboardData,\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n WritableClipboardContext,\n WritableClipboardOperationType,\n WritableClipboardType,\n addOrCreateClipboardContext,\n getSelectedElements\n} from '@plait/core';\nimport { getSelectedDrawElements } from '../utils/selected';\nimport { PlaitDrawElement, PlaitGeometry, PlaitArrowLine, PlaitShapeElement, PlaitSwimlane, PlaitVectorLine } from '../interfaces';\nimport { buildClipboardData, insertClipboardData } from '../utils/clipboard';\nimport { DrawTransforms } from '../transforms';\nimport { getArrowLines } from '../utils/arrow-line/arrow-line-basic';\nimport { PlaitImage } from '../interfaces/image';\nimport { acceptImageTypes, buildImage, getElementOfFocusedImage, getElementsText } from '@plait/common';\nimport { DEFAULT_IMAGE_WIDTH } from '../constants';\nimport { PlaitTable } from '../interfaces/table';\n\nexport const withDrawFragment = (baseBoard: PlaitBoard) => {\n const board = baseBoard as PlaitBoard;\n const { getDeletedFragment, buildFragment, insertFragment } = board;\n\n board.getDeletedFragment = (data: PlaitElement[]) => {\n const drawElements = getSelectedDrawElements(board);\n if (drawElements.length) {\n const geometryElements = drawElements.filter(value => PlaitDrawElement.isGeometry(value)) as PlaitGeometry[];\n const arrowLineElements = drawElements.filter(value => PlaitDrawElement.isArrowLine(value)) as PlaitArrowLine[];\n const vectorLineElements = drawElements.filter(value => PlaitDrawElement.isVectorLine(value)) as PlaitVectorLine[];\n const imageElements = drawElements.filter(value => PlaitDrawElement.isImage(value)) as PlaitImage[];\n const tableElements = drawElements.filter(value => PlaitDrawElement.isTable(value)) as PlaitTable[];\n const swimlaneElements = drawElements.filter(value => PlaitDrawElement.isSwimlane(value)) as PlaitSwimlane[];\n\n const boundLineElements = [\n ...getBoundedArrowLineElements(board, geometryElements),\n ...getBoundedArrowLineElements(board, imageElements),\n ...getBoundedArrowLineElements(board, tableElements),\n ...getBoundedArrowLineElements(board, swimlaneElements)\n ].filter(line => !arrowLineElements.includes(line));\n data.push(\n ...[\n ...geometryElements,\n ...arrowLineElements,\n ...vectorLineElements,\n ...imageElements,\n ...tableElements,\n ...swimlaneElements,\n ...boundLineElements.filter(line => !arrowLineElements.includes(line))\n ]\n );\n }\n return getDeletedFragment(data);\n };\n\n board.buildFragment = (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => {\n const targetDrawElements = getSelectedDrawElements(board, originData);\n let boundLineElements: PlaitArrowLine[] = [];\n if (targetDrawElements.length) {\n if (operationType === WritableClipboardOperationType.cut) {\n const geometryElements = targetDrawElements.filter(value => PlaitDrawElement.isGeometry(value)) as PlaitGeometry[];\n const lineElements = targetDrawElements.filter(value => PlaitDrawElement.isArrowLine(value)) as PlaitArrowLine[];\n boundLineElements = getBoundedArrowLineElements(board, geometryElements).filter(line => !lineElements.includes(line));\n }\n const selectedElements = [...targetDrawElements, ...boundLineElements];\n const elements = buildClipboardData(board, selectedElements, rectangle ? [rectangle.x, rectangle.y] : [0, 0]);\n const text = getElementsText(selectedElements);\n const addition: WritableClipboardContext = {\n text,\n type: WritableClipboardType.elements,\n elements: elements\n };\n clipboardContext = addOrCreateClipboardContext(clipboardContext, addition);\n }\n return buildFragment(clipboardContext, rectangle, operationType, originData);\n };\n\n board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n const selectedElements = getSelectedElements(board);\n if (clipboardData?.files?.length) {\n const acceptImageArray = acceptImageTypes.map(type => 'image/' + type);\n const canInsertionImage =\n !getElementOfFocusedImage(board) && !(selectedElements.length === 1 && board.isImageBindingAllowed(selectedElements[0]));\n if (acceptImageArray.includes(clipboardData.files[0].type) && canInsertionImage) {\n const imageFile = clipboardData.files[0];\n buildImage(board, imageFile, DEFAULT_IMAGE_WIDTH, imageItem => {\n DrawTransforms.insertImage(board, imageItem, targetPoint);\n });\n return;\n }\n }\n\n if (clipboardData?.elements?.length) {\n const drawElements = clipboardData.elements?.filter(value => PlaitDrawElement.isDrawElement(value)) as PlaitDrawElement[];\n if (clipboardData.elements && clipboardData.elements.length > 0 && drawElements.length > 0) {\n insertClipboardData(board, drawElements, targetPoint);\n }\n }\n\n if (clipboardData?.text) {\n if (!clipboardData.elements || clipboardData.elements.length === 0) {\n // (* ̄︶ ̄)\n const insertAsChildren = selectedElements.length === 1 && selectedElements[0].children;\n const insertAsFreeText = !insertAsChildren;\n if (insertAsFreeText) {\n DrawTransforms.insertText(board, targetPoint, clipboardData.text);\n return;\n }\n }\n }\n\n insertFragment(clipboardData, targetPoint, operationType);\n };\n\n return board;\n};\n\nexport const getBoundedArrowLineElements = (board: PlaitBoard, plaitShapes: PlaitShapeElement[]) => {\n const lines = getArrowLines(board);\n return lines.filter(line =>\n plaitShapes.find(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, touchStart } = board;\n\n let start: Point | null = null;\n\n let sourceElement: PlaitShapeElement | null;\n\n let lineShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitArrowLine | null = null;\n\n board.touchStart = (event: TouchEvent) => {\n const linePointers = getArrowLinePointers();\n const isLinePointer = PlaitBoard.isInPointer(board, linePointers);\n if (!PlaitBoard.isReadonly(board) && isLinePointer && isDrawingMode(board)) {\n return event.preventDefault();\n }\n touchStart(event);\n };\n\n board.pointerDown = (event: PointerEvent) => {\n const linePointers = getArrowLinePointers();\n const isLinePointer = PlaitBoard.isInPointer(board, linePointers);\n if (!PlaitBoard.isReadonly(board) && isLinePointer && isDrawingMode(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n start = point;\n const hitElement = getSnappingShape(board, point);\n if (hitElement) {\n sourceElement = hitElement;\n }\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, 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.getElementTopHost(board).append(boundShapeG);\n }\n }\n pointerMove(event);\n };\n\n board.pointerUp = (event) => {\n boundShapeG?.remove();\n boundShapeG = null;\n pointerUp(event);\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitNode,\n getHitElementByPoint,\n getI18nValue,\n getNearestPointBetweenPointAndSegments,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitArrowLine, PlaitDrawElement } from '../../interfaces';\nimport { Node } from 'slate';\nimport { buildText, getMemorizedLatest, getRatioByPoint, getTextManages } from '@plait/common';\nimport { DrawTransforms } from '../../transforms';\nimport { getArrowLinePoints } from '../../utils/arrow-line/arrow-line-basic';\nimport { getHitArrowLineTextIndex } from '../../utils/position/arrow-line';\nimport { isHitArrowLineText } from '../../utils/hit';\nimport { LINE_TEXT } from '../../constants/line';\nimport { DrawI18nKey } from '../../constants/default';\n\nexport const getDefaultLineText = (board: PlaitBoard) => {\n return getI18nValue(board, DrawI18nKey.lineText, LINE_TEXT);\n};\n\nexport const withArrowLineText = (board: PlaitBoard) => {\n const { dblClick } = board;\n\n board.dblClick = (event: MouseEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n const clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const hitTarget = getHitElementByPoint(board, clickPoint) as undefined | PlaitArrowLine;\n if (hitTarget && PlaitDrawElement.isArrowLine(hitTarget)) {\n const hitTargetPath = hitTarget && PlaitBoard.findPath(board, hitTarget);\n const points = getArrowLinePoints(board, hitTarget);\n const point = getNearestPointBetweenPointAndSegments(clickPoint, points);\n const texts = hitTarget.texts?.length ? [...hitTarget.texts] : [];\n const textIndex = getHitArrowLineTextIndex(board, hitTarget, clickPoint);\n const isHitText = isHitArrowLineText(board, hitTarget, clickPoint);\n if (isHitText) {\n editHandle(board, hitTarget, textIndex);\n } else {\n const defaultLineText = getDefaultLineText(board);\n const textMemory = getMemorizedLatest('arrow-line')?.text || {};\n const textElement = buildText(defaultLineText, undefined, textMemory);\n const ratio = getRatioByPoint(points, point);\n texts.push({\n text: textElement,\n position: ratio\n });\n DrawTransforms.setArrowLineTexts(board, hitTarget, texts);\n setTimeout(() => {\n if (hitTargetPath) {\n const newHitTarget = PlaitNode.get(board, hitTargetPath) as PlaitArrowLine;\n const textManages = getTextManages(newHitTarget);\n editHandle(board, newHitTarget, textManages.length - 1, true);\n }\n });\n }\n }\n }\n dblClick(event);\n };\n\n return board;\n};\n\nfunction editHandle(board: PlaitBoard, element: PlaitArrowLine, manageIndex: number, isFirstEdit: boolean = false) {\n const textManages = getTextManages(element);\n const textManage = textManages[manageIndex];\n textManage.edit(() => {\n const text = Node.string(textManage.getText());\n const defaultLineText = getDefaultLineText(board);\n const shouldRemove = !text || (isFirstEdit && text === defaultLineText);\n if (shouldRemove) {\n DrawTransforms.removeArrowLineText(board, element, manageIndex);\n }\n });\n}\n","import { PlaitBoard, PlaitPluginElementContext, OnContextChanged } from '@plait/core';\nimport { CommonElementFlavour, ImageGenerator } from '@plait/common';\nimport { PlaitImage } from './interfaces/image';\nimport { ArrowLineAutoCompleteGenerator } from './generators/arrow-line-auto-complete.generator';\n\nexport class ImageComponent extends CommonElementFlavour<PlaitImage, PlaitBoard> implements OnContextChanged<PlaitImage, PlaitBoard> {\n imageGenerator!: ImageGenerator<PlaitImage>;\n\n lineAutoCompleteGenerator!: ArrowLineAutoCompleteGenerator<PlaitImage>;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.imageGenerator = new ImageGenerator<PlaitImage>(this.board, {\n getRectangle: (element: PlaitImage) => {\n return {\n x: element.points[0][0],\n y: element.points[0][1],\n width: element.points[1][0] - element.points[0][0],\n height: element.points[1][1] - element.points[0][1]\n };\n },\n getImageItem: (element) => {\n return {\n url: element.url,\n width: element.points[1][0] - element.points[0][0],\n height: element.points[1][1] - element.points[0][1]\n };\n }\n });\n this.lineAutoCompleteGenerator = new ArrowLineAutoCompleteGenerator(this.board);\n this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);\n this.getRef().updateActiveSection = () => {\n this.imageGenerator.setFocus(this.element, this.selected);\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n };\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n this.imageGenerator.processDrawing(this.element, this.getElementG());\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitImage, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitImage, PlaitBoard>\n ) {\n if (value.element !== previous.element) {\n this.imageGenerator.updateImage(this.getElementG(), previous.element, value.element);\n this.imageGenerator.setFocus(this.element, this.selected);\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n } else {\n const hasSameSelected = value.selected === previous.selected;\n if (!hasSameSelected || value.selected) {\n this.imageGenerator.setFocus(this.element, this.selected);\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n }\n }\n\n destroy(): void {\n super.destroy();\n this.imageGenerator.destroy();\n this.lineAutoCompleteGenerator.destroy();\n }\n}\n","import {\n BoardTransforms,\n PRESS_AND_MOVE_BUFFER,\n PlaitBoard,\n PlaitOptionsBoard,\n PlaitPointerType,\n Point,\n RectangleClient,\n Transforms,\n addSelectedElement,\n clearSelectedElement,\n createG,\n distanceBetweenPointAndPoint,\n rotateAntiPointsByElement,\n rotatePointsByElement,\n temporaryDisableSelection,\n toActivePoint,\n toHostPoint,\n toScreenPointFromActivePoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement, PlaitGeometry, PlaitShapeElement, PlaitSwimlane } from '../../interfaces';\nimport { getElementShape } from '../../utils/shape';\nimport { getEngine } from '../../engines';\nimport { handleArrowLineCreating } from '../../utils/arrow-line/arrow-line-basic';\nimport { getSelectedDrawElements } from '../../utils/selected';\nimport { getAutoCompletePoints, getHitIndexOfAutoCompletePoint } from '../../utils/geometry';\nimport { insertElement } from '../../utils';\n\nexport const WithArrowLineAutoCompletePluginKey = 'plait-arrow-line-auto-complete-plugin-key';\n\nexport interface ArrowLineAutoCompleteOptions {\n afterComplete: (element: PlaitArrowLine) => {};\n}\n\nexport type PreCommitRef = { temporaryArrowLineElement: PlaitArrowLine; temporaryShapeElement: PlaitGeometry };\n\nexport const BOARD_TO_PRE_COMMIT = new WeakMap<PlaitBoard, PreCommitRef>();\n\nexport const withArrowLineAutoComplete = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp, touchMove } = board;\n\n let autoCompletePoint: Point | null = null;\n let lineShapeG: SVGGElement | null = null;\n let sourceElement: PlaitShapeElement | null;\n let temporaryElement: PlaitArrowLine | null;\n\n board.pointerDown = (event: PointerEvent) => {\n const selectedElements = getSelectedDrawElements(board);\n const targetElement = selectedElements.length === 1 && selectedElements[0];\n const activePoint = toActivePoint(board, event.x, event.y);\n if (!PlaitBoard.isReadonly(board) && targetElement && PlaitDrawElement.isShapeElement(targetElement)) {\n const points = getAutoCompletePoints(board, targetElement, true);\n const index = getHitIndexOfAutoCompletePoint(\n rotateAntiPointsByElement(board, activePoint, targetElement, true) || activePoint,\n points\n );\n const hitPoint = points[index];\n if (hitPoint) {\n temporaryDisableSelection(board as PlaitOptionsBoard);\n const screenPoint = toScreenPointFromActivePoint(board, hitPoint);\n autoCompletePoint = toViewBoxPoint(board, toHostPoint(board, screenPoint[0], screenPoint[1]));\n sourceElement = targetElement;\n BoardTransforms.updatePointerType(board, ArrowLineShape.elbow);\n }\n }\n pointerDown(event);\n };\n\n board.touchMove = (event: TouchEvent) => {\n if (autoCompletePoint && sourceElement) {\n return event.preventDefault();\n }\n touchMove(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n lineShapeG?.remove();\n lineShapeG = createG();\n let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (autoCompletePoint && sourceElement) {\n const distance = distanceBetweenPointAndPoint(\n ...(rotateAntiPointsByElement(board, movingPoint, sourceElement) || movingPoint),\n ...autoCompletePoint\n );\n if (distance > PRESS_AND_MOVE_BUFFER * 2) {\n const rectangle = RectangleClient.getRectangleByPoints(sourceElement.points);\n const shape = getElementShape(sourceElement);\n const engine = getEngine(shape);\n let sourcePoint = autoCompletePoint;\n if (engine.getNearestCrossingPoint) {\n const crossingPoint = engine.getNearestCrossingPoint(rectangle, autoCompletePoint);\n sourcePoint = crossingPoint;\n }\n // source point must be click point\n const rotatedSourcePoint = rotatePointsByElement(sourcePoint, sourceElement) || sourcePoint;\n temporaryElement = handleArrowLineCreating(\n board,\n ArrowLineShape.elbow,\n rotatedSourcePoint,\n movingPoint,\n sourceElement,\n lineShapeG\n );\n Transforms.addSelectionWithTemporaryElements(board, []);\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event) => {\n if (temporaryElement) {\n Transforms.insertNode(board, temporaryElement, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(board, temporaryElement);\n const afterComplete = (board as PlaitOptionsBoard).getPluginOptions<ArrowLineAutoCompleteOptions>(\n WithArrowLineAutoCompletePluginKey\n )?.afterComplete;\n afterComplete && afterComplete(temporaryElement);\n } else {\n const preCommitRef = BOARD_TO_PRE_COMMIT.get(board);\n if (preCommitRef) {\n Transforms.insertNode(board, preCommitRef.temporaryArrowLineElement, [board.children.length]);\n insertElement(board, preCommitRef.temporaryShapeElement);\n BOARD_TO_PRE_COMMIT.delete(board);\n }\n }\n if (autoCompletePoint) {\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n autoCompletePoint = null;\n }\n lineShapeG?.remove();\n lineShapeG = null;\n sourceElement = null;\n temporaryElement = null;\n globalPointerUp(event);\n };\n\n return board;\n};\n","import {\n CursorClass,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n rgbaToHEX,\n drawCircle,\n hasValidAngle,\n isSelectionMoving,\n rotateAntiPointsByElement,\n setAngleForG,\n toActivePoint,\n toActiveRectangleFromViewBoxRectangle,\n createG,\n rotatePointsByElement,\n isHorizontalDirection,\n Point\n} from '@plait/core';\nimport {\n createDefaultGeometry,\n createDefaultSwimlane,\n getAutoCompletePoints,\n getHitConnection,\n getHitIndexOfAutoCompletePoint,\n getSelectedDrawElements,\n handleArrowLineCreating\n} from '../../utils';\nimport { PRIMARY_COLOR, PlaitCommonElementRef, getDirectionByIndex, getXDistanceBetweenPoint, moveXOfPoint } from '@plait/common';\nimport { BOARD_TO_PRE_COMMIT } from './with-arrow-line-auto-complete';\nimport { DrawPointerType, LINE_AUTO_COMPLETE_HOVERED_DIAMETER, LINE_AUTO_COMPLETE_HOVERED_OPACITY } from '../../constants';\nimport { ArrowLineAutoCompleteGenerator } from '../../generators';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement, PlaitGeometry, PlaitSwimlane, SwimlaneDrawSymbols } from '../../interfaces';\nimport { getGeometryGeneratorByShape } from '../../utils/shape';\n\nconst PREVIEW_ARROW_LINE_DISTANCE = 100;\n\nexport const withArrowLineAutoCompleteReaction = (board: PlaitBoard) => {\n const { pointerMove, pointerLeave, globalPointerUp } = board;\n let reactionG: SVGGElement | null = null;\n let temporaryArrowLineElement: PlaitArrowLine | null = null;\n let temporaryShapeElement: PlaitGeometry | PlaitSwimlane | null = null;\n let temporaryArrowLineG: SVGGElement | null = null;\n let temporaryShapeG: SVGGElement | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n reactionG?.remove();\n PlaitBoard.getBoardContainer(board).classList.remove(CursorClass.crosshair);\n const selectedElements = getSelectedDrawElements(board);\n temporaryArrowLineG?.remove();\n temporaryShapeG?.remove();\n const originElement = selectedElements.length === 1 && selectedElements[0];\n const activePoint = toActivePoint(board, event.x, event.y);\n if (!PlaitBoard.isReadonly(board) && !isSelectionMoving(board) && originElement && PlaitDrawElement.isShapeElement(originElement)) {\n const points = getAutoCompletePoints(board, originElement, true);\n const hitIndex = getHitIndexOfAutoCompletePoint(\n rotateAntiPointsByElement(board, activePoint, originElement, true) || activePoint,\n points\n );\n const hitPoint = points[hitIndex];\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(originElement);\n const lineAutoCompleteGenerator = ref.getGenerator<ArrowLineAutoCompleteGenerator>(ArrowLineAutoCompleteGenerator.key);\n lineAutoCompleteGenerator.recoverAutoCompleteG();\n if (hitPoint) {\n // function 1: dnd\n reactionG = drawCircle(PlaitBoard.getRoughSVG(board), hitPoint, LINE_AUTO_COMPLETE_HOVERED_DIAMETER, {\n stroke: 'none',\n fill: rgbaToHEX(PRIMARY_COLOR, LINE_AUTO_COMPLETE_HOVERED_OPACITY),\n fillStyle: 'solid'\n });\n PlaitBoard.getActiveHost(board).append(reactionG);\n PlaitBoard.getBoardContainer(board).classList.add(CursorClass.crosshair);\n if (hasValidAngle(originElement)) {\n const rectangle = board.getRectangle(originElement)!;\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n setAngleForG(reactionG, RectangleClient.getCenterPoint(activeRectangle), originElement.angle!);\n }\n // function 2: hover to preview and click to commit\n if (PlaitDrawElement.isGeometry(originElement) && !PlaitDrawElement.isText(originElement)) {\n const originRect = RectangleClient.getRectangleByPoints(originElement.points);\n let arrowLineStartPoint = RectangleClient.getEdgeCenterPoints(originRect)[hitIndex];\n const arrowLineDirection = getDirectionByIndex(hitIndex);\n let arrowLineEndPoint = moveXOfPoint(arrowLineStartPoint, PREVIEW_ARROW_LINE_DISTANCE, arrowLineDirection);\n const geometryGenerator = getGeometryGeneratorByShape(board, originElement.shape);\n const temporaryShapePoints = originElement.points.map((point) =>\n moveXOfPoint(\n point,\n PREVIEW_ARROW_LINE_DISTANCE +\n getXDistanceBetweenPoint(\n originElement.points[0],\n originElement.points[1],\n isHorizontalDirection(arrowLineDirection)\n ),\n arrowLineDirection\n )\n );\n temporaryArrowLineG = createG();\n temporaryShapeG = createG();\n temporaryArrowLineG.style.opacity = '0.6';\n temporaryShapeG.style.opacity = '0.6';\n\n temporaryShapeElement = createDefaultGeometry(board, temporaryShapePoints as [Point, Point], originElement.shape);\n temporaryShapeElement.angle = originElement.angle;\n temporaryShapeElement.fill = originElement.fill;\n temporaryShapeElement.strokeColor = originElement.strokeColor;\n temporaryShapeElement.strokeStyle = originElement.strokeStyle;\n temporaryShapeElement.strokeWidth = originElement.strokeWidth;\n temporaryShapeElement.groupId = originElement.groupId;\n\n const rotatedArrowLineStartPoint = rotatePointsByElement(arrowLineStartPoint, originElement) || arrowLineStartPoint;\n const rotatedArrowLineEndPoint = rotatePointsByElement(arrowLineEndPoint, temporaryShapeElement) || arrowLineEndPoint;\n temporaryArrowLineElement = handleArrowLineCreating(\n board,\n ArrowLineShape.elbow,\n rotatedArrowLineStartPoint,\n rotatedArrowLineEndPoint,\n originElement,\n temporaryArrowLineG\n );\n BOARD_TO_PRE_COMMIT.set(board, { temporaryArrowLineElement, temporaryShapeElement });\n const connectionInfo = getHitConnection(board, rotatedArrowLineEndPoint, temporaryShapeElement);\n temporaryArrowLineElement.target.boundId = temporaryShapeElement.id;\n temporaryArrowLineElement.target.connection = connectionInfo;\n geometryGenerator.processDrawing(temporaryShapeElement as PlaitGeometry, temporaryShapeG);\n PlaitBoard.getElementTopHost(board).append(temporaryShapeG);\n }\n return;\n }\n }\n BOARD_TO_PRE_COMMIT.delete(board);\n pointerMove(event);\n };\n\n board.pointerLeave = (pointer: PointerEvent) => {\n clearRef();\n pointerLeave(pointer);\n };\n\n const clearRef = () => {\n if (reactionG) {\n reactionG?.remove();\n PlaitBoard.getBoardContainer(board).classList.remove(CursorClass.crosshair);\n temporaryArrowLineG?.remove();\n temporaryShapeG?.remove();\n }\n if (BOARD_TO_PRE_COMMIT.get(board)) {\n BOARD_TO_PRE_COMMIT.delete(board);\n }\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n clearRef();\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitElement,\n Point,\n distanceBetweenPointAndSegments,\n getHitElementByPoint,\n getNearestPointBetweenPointAndSegments\n} from '@plait/core';\nimport { PlaitArrowLine, PlaitDrawElement } from '../../interfaces';\nimport { ResizeHandle, ResizeRef, ResizeState, WithResizeOptions, getRatioByPoint, getTextManages, withResize } from '@plait/common';\nimport { DrawTransforms } from '../../transforms';\nimport { getArrowLinePoints } from '../../utils/arrow-line/arrow-line-basic';\nimport { getHitArrowLineTextIndex } from '../../utils/position/arrow-line';\n\nexport const withArrowLineTextMove = (board: PlaitBoard) => {\n let textIndex = 0;\n const movableBuffer = 100;\n const options: WithResizeOptions<PlaitArrowLine> = {\n key: 'line-text',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n let result = null;\n const line = getHitElementByPoint(board, point, (element: PlaitElement) => {\n return PlaitDrawElement.isArrowLine(element);\n }) as undefined | PlaitArrowLine;\n if (line) {\n const index = getHitArrowLineTextIndex(board, line, point);\n const textManages = getTextManages(line);\n const textManage = textManages[index];\n if (index !== -1 && !textManage.isEditing) {\n textIndex = index;\n return { element: line, handle: ResizeHandle.e };\n }\n }\n return result;\n },\n onResize: (resizeRef: ResizeRef<PlaitArrowLine>, resizeState: ResizeState) => {\n const element = resizeRef.element;\n if (element) {\n const movingPoint = resizeState.endPoint;\n const points = getArrowLinePoints(board, element);\n const distance = distanceBetweenPointAndSegments(movingPoint, points);\n if (distance <= movableBuffer) {\n const point = getNearestPointBetweenPointAndSegments(movingPoint, points, false);\n const position = getRatioByPoint(points, point);\n const texts = [...element.texts];\n texts[textIndex] = {\n ...texts[textIndex],\n position\n };\n DrawTransforms.setArrowLineTexts(board, element, texts);\n }\n }\n }\n };\n\n withResize<PlaitArrowLine>(board, options);\n\n return board;\n};\n","import {\n MERGING,\n PlaitBoard,\n RectangleClient,\n Transforms,\n getRectangleByElements,\n getSelectedElements,\n getSelectionAngle,\n isMainPointer,\n isSelectionMoving,\n rotatePoints,\n throttleRAF,\n drawRectangle,\n ACTIVE_STROKE_WIDTH,\n SELECTION_BORDER_COLOR,\n setAngleForG,\n rotateElements,\n getAngleBetweenPoints,\n ROTATE_HANDLE_CLASS_NAME,\n SELECTION_RECTANGLE_CLASS_NAME,\n normalizeAngle,\n degreesToRadians,\n toActiveRectangleFromViewBoxRectangle,\n toActivePoint\n} from '@plait/core';\nimport { addRotating, removeRotating, drawRotateHandle, RotateRef } from '@plait/common';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getRotateHandleRectangle } from '../utils/position/geometry';\n\nexport const withDrawRotate = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp, afterChange, drawSelectionRectangle } = board;\n let rotateRef: RotateRef | null = null;\n let rotateHandleG: SVGGElement | null;\n let needCustomActiveRectangle = false;\n\n const canRotate = () => {\n const elements = getSelectedElements(board);\n return (\n elements.length > 0 &&\n elements.every(\n (el) =>\n (PlaitDrawElement.isDrawElement(el) && !PlaitDrawElement.isArrowLine(el)) ||\n PlaitDrawElement.isCustomGeometryElement(board, el)\n )\n );\n };\n\n board.pointerDown = (event: PointerEvent) => {\n if (!canRotate() || PlaitBoard.isReadonly(board) || PlaitBoard.hasBeenTextEditing(board) || !isMainPointer(event)) {\n pointerDown(event);\n return;\n }\n const activePoint = toActivePoint(board, event.x, event.y);\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const rectangle = getRectangleByElements(board, elements, false);\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n const handleRectangle = getRotateHandleRectangle(activeRectangle);\n const angle = getSelectionAngle(elements);\n const rotatedPoint = angle ? rotatePoints(activePoint, RectangleClient.getCenterPoint(activeRectangle), -angle) : activePoint;\n if (handleRectangle && RectangleClient.isHit(RectangleClient.getRectangleByPoints([rotatedPoint, rotatedPoint]), handleRectangle)) {\n rotateRef = {\n elements: [...elements],\n startPoint: activePoint\n };\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (rotateRef) {\n event.preventDefault();\n const isShift = !!event.shiftKey;\n addRotating(board, rotateRef);\n const endPoint = toActivePoint(board, event.x, event.y);\n const rectangle = getRectangleByElements(board, rotateRef.elements, false);\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n const selectionCenterPoint = RectangleClient.getCenterPoint(activeRectangle);\n if (!getSelectionAngle(rotateRef.elements) && rotateRef.elements.length > 1) {\n needCustomActiveRectangle = true;\n }\n\n throttleRAF(board, 'with-common-rotate', () => {\n if (rotateRef && rotateRef.startPoint) {\n let angle = getAngleBetweenPoints(rotateRef.startPoint, endPoint, selectionCenterPoint);\n const selectionAngle = getSelectionAngle(rotateRef.elements);\n angle = normalizeAngle(selectionAngle + angle);\n if (isShift) {\n angle += Math.PI / 12 / 2;\n angle -= angle % (Math.PI / 12);\n }\n\n let remainder = angle % (Math.PI / 2);\n if (Math.PI / 2 - remainder <= degreesToRadians(5)) {\n const snapAngle = Math.PI / 2 - remainder;\n angle += snapAngle;\n }\n\n if (remainder <= degreesToRadians(5)) {\n const snapAngle = -remainder;\n angle += snapAngle;\n }\n\n rotateRef.angle = normalizeAngle(angle - selectionAngle) || 0;\n rotateElements(board, rotateRef.elements, rotateRef.angle);\n MERGING.set(board, true);\n PlaitBoard.getBoardContainer(board).classList.add('element-rotating');\n }\n });\n return;\n }\n\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (needCustomActiveRectangle) {\n needCustomActiveRectangle = false;\n const selectedElements = getSelectedElements(board);\n Transforms.addSelectionWithTemporaryElements(board, selectedElements);\n }\n PlaitBoard.getBoardContainer(board).classList.remove('element-rotating');\n removeRotating(board);\n rotateRef = null;\n MERGING.set(board, false);\n };\n\n board.afterChange = () => {\n afterChange();\n if (rotateHandleG) {\n rotateHandleG.remove();\n rotateHandleG = null;\n }\n\n if (canRotate() && !isSelectionMoving(board)) {\n if (needCustomActiveRectangle && rotateRef) {\n const boundingRectangle = getRectangleByElements(board, rotateRef.elements, false);\n const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);\n rotateHandleG = drawRotateHandle(board, boundingActiveRectangle);\n rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);\n if (rotateRef.angle) {\n setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingActiveRectangle), rotateRef.angle);\n }\n } else {\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);\n rotateHandleG = drawRotateHandle(board, boundingActiveRectangle);\n rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);\n setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingActiveRectangle), getSelectionAngle(elements));\n }\n PlaitBoard.getActiveHost(board).append(rotateHandleG);\n }\n };\n\n board.drawSelectionRectangle = () => {\n if (needCustomActiveRectangle && rotateRef) {\n const rectangle = getRectangleByElements(board, rotateRef.elements, false);\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n const rectangleG = drawRectangle(board, RectangleClient.inflate(activeRectangle, ACTIVE_STROKE_WIDTH), {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH\n });\n rectangleG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n if (rotateRef.angle) {\n setAngleForG(rectangleG, RectangleClient.getCenterPoint(activeRectangle), rotateRef.angle);\n }\n return rectangleG;\n }\n return drawSelectionRectangle();\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitPluginElementContext,\n OnContextChanged,\n ACTIVE_STROKE_WIDTH,\n RectangleClient,\n setAngleForG,\n degreesToRadians\n} from '@plait/core';\nimport { ActiveGenerator, CommonElementFlavour, TextManageChangeData, createActiveGenerator, hasResizeHandle } from '@plait/common';\nimport { PlaitTable, PlaitTableBoard, PlaitTableCell, PlaitTableElement } from './interfaces/table';\nimport { DrawTextInfo, TextGenerator } from './generators/text.generator';\nimport { TableGenerator } from './generators/table.generator';\nimport { DrawTransforms } from './transforms';\nimport { getCellWithPoints, getTextManageByCell, isCellIncludeText } from './utils/table';\nimport {\n clearSelectedCells,\n getCellsRectangle,\n getSelectedCells,\n getStrokeWidthByElement,\n memorizeLatestText,\n setSelectedCells\n} from './utils';\nimport { getEngine } from './engines';\nimport { TableSymbols } from './interfaces';\nimport { getCellTextHeight, getHorizontalTextRectangle } from './engines/table/table';\nimport { ShapeDefaultSpace } from './constants';\nimport { ArrowLineAutoCompleteGenerator } from './generators/arrow-line-auto-complete.generator';\n\nexport class TableComponent<T extends PlaitTable> extends CommonElementFlavour<T, PlaitBoard> implements OnContextChanged<T, PlaitBoard> {\n activeGenerator!: ActiveGenerator<T>;\n\n tableGenerator!: TableGenerator<T>;\n\n textGenerator!: TextGenerator<T>;\n\n lineAutoCompleteGenerator!: ArrowLineAutoCompleteGenerator<PlaitTable>;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.activeGenerator = createActiveGenerator<T>(this.board, {\n getStrokeWidth: () => {\n return ACTIVE_STROKE_WIDTH;\n },\n getStrokeOpacity: () => {\n return 1;\n },\n getRectangle: (value: T) => {\n const cells = getSelectedCells(value);\n if (cells?.length) {\n return getCellsRectangle(this.board as PlaitTableBoard, this.element, cells);\n }\n return RectangleClient.getRectangleByPoints(value.points!);\n },\n hasResizeHandle: () => {\n const cells = getSelectedCells(this.element);\n if (cells?.length) {\n return false;\n }\n return hasResizeHandle(this.board, this.element);\n }\n });\n this.tableGenerator = new TableGenerator<T>(this.board);\n this.initializeTextManage();\n this.lineAutoCompleteGenerator = new ArrowLineAutoCompleteGenerator(this.board);\n this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);\n this.getRef().updateActiveSection = () => {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n };\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n this.draw();\n }\n\n draw() {\n this.tableGenerator.processDrawing(this.element, this.getElementG());\n this.textGenerator.draw(this.getElementG());\n this.rotateVerticalText();\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n\n rotateVerticalText() {\n const table = (this.board as PlaitTableBoard).buildTable(this.element);\n table.cells.forEach((item) => {\n if (PlaitTableElement.isVerticalText(item)) {\n const textManage = getTextManageByCell(this.board, item);\n if (textManage) {\n const engine = getEngine<PlaitTable>(TableSymbols.table);\n const rectangle = engine.getTextRectangle!(this.board, this.element, { id: item.id, board: this.board });\n textManage.g.classList.add('vertical-cell-text');\n setAngleForG(textManage.g, RectangleClient.getCenterPoint(rectangle), degreesToRadians(-90));\n }\n }\n });\n }\n\n getDrawShapeTexts(cells: PlaitTableCell[]): DrawTextInfo[] {\n return cells\n .filter((item) => isCellIncludeText(item))\n .map((item) => {\n return {\n id: item.id,\n text: item.text!,\n board: this.board\n };\n });\n }\n\n initializeTextManage() {\n const texts = this.getDrawShapeTexts(this.element.cells);\n this.textGenerator = new TextGenerator(this.board, this.element, texts, {\n onChange: (value: PlaitTable, data: TextManageChangeData, text: DrawTextInfo) => {\n const path = PlaitBoard.findPath(this.board, value);\n if (data.newText) {\n DrawTransforms.setTableText(this.board, path, text.id, data.newText, data.height);\n }\n data.operations && memorizeLatestText(value, data.operations);\n },\n getRenderRectangle: (value: PlaitTable, text: DrawTextInfo) => {\n const cell = getCellWithPoints(this.board, value, text.id);\n if (PlaitTableElement.isVerticalText(cell)) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const width = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const height = getCellTextHeight(this.board, cell, true);\n return {\n width: height,\n height: width > 0 ? width : 0,\n x: cellRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: cellRectangle.y + (cellRectangle.height - width) / 2\n };\n } else {\n return getHorizontalTextRectangle(this.board, cell);\n }\n }\n });\n this.textGenerator.initialize();\n }\n\n onContextChanged(value: PlaitPluginElementContext<T, PlaitBoard>, previous: PlaitPluginElementContext<T, PlaitBoard>) {\n if (value.element !== previous.element || value.hasThemeChanged) {\n const previousSelectedCells = getSelectedCells(previous.element);\n if (previousSelectedCells?.length) {\n clearSelectedCells(previous.element);\n setSelectedCells(value.element, previousSelectedCells);\n }\n this.tableGenerator.processDrawing(value.element, this.getElementG());\n this.activeGenerator.processDrawing(value.element, PlaitBoard.getActiveHost(this.board), { selected: this.selected });\n const previousTexts = this.getDrawShapeTexts(previous.element.cells);\n const currentTexts = this.getDrawShapeTexts(value.element.cells);\n this.textGenerator.update(value.element, previousTexts, currentTexts, this.getElementG());\n this.rotateVerticalText();\n } else {\n const hasSameSelected = value.selected === previous.selected;\n const currentSelectedCells = getSelectedCells(value.element);\n if (!hasSameSelected || currentSelectedCells?.length || value.selected) {\n this.activeGenerator.processDrawing(value.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n if (!this.selected) {\n clearSelectedCells(value.element);\n }\n }\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n\n destroy(): void {\n super.destroy();\n this.activeGenerator.destroy();\n this.tableGenerator.destroy();\n this.textGenerator.destroy();\n this.lineAutoCompleteGenerator.destroy();\n }\n}\n","import {\n PlaitBoard,\n Point,\n RectangleClient,\n Transforms,\n isSelectedElement,\n getSelectedElements,\n hasValidAngle,\n} 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 {\n getResizeOriginPointAndHandlePoint,\n getResizeZoom,\n movePointByZoomAndOriginPoint\n} from './with-draw-resize';\nimport { getSnapResizingRef, getSnapResizingRefOptions } from '../utils/snap-resizing';\nimport { PlaitDrawElement } from '../interfaces';\nimport { isSingleSelectTable } from '../utils';\n\n// const debugKey = 'debug:plait:table:resize';\n// const debugGenerator = createDebugGenerator(debugKey);\n\ninterface TableResizeOptions extends ResizeOptions {\n cell: PlaitTableCellWithPoints;\n}\n\nconst MIN_CELL_SIZE = 20;\n\nexport function withTableResize(board: PlaitTableBoard) {\n let snapG: SVGGElement | null;\n\n const options: WithResizeOptions<PlaitBaseTable, ResizeHandle, TableResizeOptions> = {\n key: 'draw-table',\n canResize: () => {\n const selectedElements = getSelectedElements(board);\n return isSingleSelectTable(board) && !hasValidAngle(selectedElements[0]);\n },\n hitTest: (point: Point) => {\n const selectedElements = getSelectedElements(board);\n const hitElement = selectedElements[0];\n // debugGenerator.clear();\n if (hitElement && PlaitDrawElement.isElementByTable(hitElement)) {\n let rectangle = board.getRectangle(hitElement) as RectangleClient;\n // debugGenerator.drawRectangle(board, rectangle);\n // debugGenerator.drawCircles(board, [point], 5);\n let handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, hitElement.angle);\n if (handleRef) {\n const selectElement = isSelectedElement(board, hitElement);\n if ((selectElement && isSingleSelectTable(board)) || (!selectElement && !isCornerHandle(board, handleRef.handle))) {\n return {\n element: hitElement,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass,\n rectangle\n };\n }\n }\n const cells = getCellsWithPoints(board, hitElement);\n for (let i = 0; i < cells.length; i++) {\n rectangle = RectangleClient.getRectangleByPoints(cells[i].points);\n handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, 0);\n if (handleRef && !isCornerHandle(board, handleRef.handle)) {\n return {\n element: hitElement,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass,\n rectangle,\n options: {\n cell: cells[i]\n }\n };\n }\n }\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<PlaitBaseTable, ResizeHandle, TableResizeOptions>, resizeState: ResizeState) => {\n snapG?.remove();\n const path = PlaitBoard.findPath(board, resizeRef.element);\n if (resizeRef.options?.cell && resizeRef.rectangle) {\n const handleIndex = getIndexByResizeHandle(resizeRef.handle);\n const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle!);\n const resizePoints: [Point, Point] = [resizeState.startPoint, resizeState.endPoint];\n const { xZoom, yZoom } = getResizeZoom(resizePoints, originPoint, handlePoint, false, false);\n const originPoints = resizeRef.options?.cell.points;\n const targetPoints = originPoints.map((p) => {\n return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);\n }) as [Point, Point];\n const offsetX = targetPoints[1][0] - originPoints[1][0];\n const offsetY = targetPoints[1][1] - originPoints[1][1];\n const width = targetPoints[1][0] - targetPoints[0][0];\n const height = targetPoints[1][1] - targetPoints[0][1];\n if (offsetX !== 0 && width >= MIN_CELL_SIZE) {\n const { columns, points } = updateColumns(resizeRef.element, resizeRef.options?.cell.columnId, width, offsetX);\n Transforms.setNode(board, { columns, points }, path);\n } else if (offsetY !== 0 && height >= MIN_CELL_SIZE) {\n const { rows, points } = updateRows(resizeRef.element, resizeRef.options?.cell.rowId, height, offsetY);\n Transforms.setNode(board, { rows, points }, path);\n }\n } else {\n const isFromCorner = isCornerHandle(board, resizeRef.handle);\n const isAspectRatio = resizeState.isShift;\n const handleIndex = getIndexByResizeHandle(resizeRef.handle);\n const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle!);\n const resizeSnapRefOptions = getSnapResizingRefOptions(\n board,\n resizeRef,\n resizeState,\n {\n originPoint,\n handlePoint\n },\n isAspectRatio,\n isFromCorner\n );\n const resizeSnapRef = getSnapResizingRef(board, [resizeRef.element], resizeSnapRefOptions);\n snapG = resizeSnapRef.snapG;\n PlaitBoard.getElementTopHost(board).append(snapG);\n const points = resizeSnapRef.activePoints as [Point, Point];\n const originPoints = resizeRef.element.points;\n const originRect = RectangleClient.getRectangleByPoints(originPoints);\n const targetRect = RectangleClient.getRectangleByPoints(points);\n const offsetWidth = targetRect.width - originRect.width;\n const offsetHeight = targetRect.height - originRect.height;\n let columns = [...resizeRef.element.columns];\n let rows = [...resizeRef.element.rows];\n if (offsetWidth !== 0) {\n columns = columns.map((item) => {\n if (item.width) {\n return {\n ...item,\n width: item.width + offsetWidth * (item.width / originRect.width)\n };\n }\n return item;\n });\n }\n if (offsetHeight !== 0) {\n rows = rows.map((item) => {\n if (item.height) {\n return {\n ...item,\n height: item.height + offsetHeight * (item.height / originRect.height)\n };\n }\n return item;\n });\n }\n Transforms.setNode(board, { points: normalizeShapePoints(points), columns, rows }, path);\n }\n },\n afterResize: (resizeRef: ResizeRef<PlaitBaseTable, ResizeHandle, TableResizeOptions>) => {\n snapG?.remove();\n snapG = null;\n }\n };\n\n withResize<PlaitBaseTable, ResizeHandle, TableResizeOptions>(board, options);\n\n return board;\n}\n","import { TableComponent } from '../table.component';\nimport { PlaitBaseTable, PlaitTableBoard } from '../interfaces/table';\nimport {\n PlaitBoard,\n PlaitPluginElementContext,\n PlaitElement,\n RectangleClient,\n Selection,\n isLineHitRectangle,\n toViewBoxPoint,\n toHostPoint,\n getHitElementByPoint,\n getSelectedElements,\n PlaitPointerType,\n isDragging,\n isMainPointer,\n distanceBetweenPointAndPoint,\n HIT_DISTANCE_BUFFER\n} from '@plait/core';\nimport { editCell, getHitCell } from '../utils/table';\nimport { withTableResize } from './with-table-resize';\nimport { isVirtualKey, isDelete, isSpaceHotkey } from '@plait/common';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getSelectedCells, getSelectedTableElements, isHitEdgeOfShape, isSingleSelectTable, setSelectedCells } from '../utils';\nimport { TableEngine } from '../engines/table/table';\n\nexport const withTable = (board: PlaitBoard) => {\n const tableBoard = board as PlaitTableBoard;\n\n const { drawElement, getRectangle, isRectangleHit, isHit, isMovable, dblClick, keyDown, pointerUp } = tableBoard;\n\n tableBoard.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitDrawElement.isElementByTable(context.element)) {\n return TableComponent;\n }\n return drawElement(context);\n };\n\n tableBoard.isHit = (element, point, isStrict?: boolean) => {\n if (PlaitDrawElement.isElementByTable(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n const nearestPoint = TableEngine.getNearestPoint(client, point);\n const distance = distanceBetweenPointAndPoint(nearestPoint[0], nearestPoint[1], point[0], point[1]);\n return distance <= HIT_DISTANCE_BUFFER || RectangleClient.isPointInRectangle(client, point);\n }\n return isHit(element, point, isStrict);\n };\n\n tableBoard.getRectangle = (element: PlaitElement) => {\n if (PlaitDrawElement.isElementByTable(element)) {\n return RectangleClient.getRectangleByPoints(element.points);\n }\n return getRectangle(element);\n };\n\n tableBoard.isMovable = (element: PlaitElement) => {\n if (PlaitDrawElement.isElementByTable(element)) {\n return true;\n }\n\n return isMovable(element);\n };\n\n tableBoard.isRectangleHit = (element: PlaitElement, selection: Selection) => {\n if (PlaitDrawElement.isElementByTable(element)) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]);\n const client = RectangleClient.getRectangleByPoints(element.points);\n return isLineHitRectangle(RectangleClient.getCornerPoints(client), rangeRectangle);\n }\n return isRectangleHit(element, selection);\n };\n\n tableBoard.keyDown = (event: KeyboardEvent) => {\n const selectedElements = getSelectedElements(board);\n const isSingleSelection = selectedElements.length === 1;\n const targetElement = selectedElements[0];\n if (\n !PlaitBoard.isReadonly(board) &&\n !PlaitBoard.hasBeenTextEditing(tableBoard) &&\n !isVirtualKey(event) &&\n !isDelete(event) &&\n !isSpaceHotkey(event) &&\n isSingleSelection\n ) {\n event.preventDefault();\n if (PlaitDrawElement.isElementByTable(targetElement)) {\n const cells = getSelectedCells(targetElement);\n let cell = targetElement.cells.find((item) => item.text);\n if (cells?.length) {\n cell = cells.find((item) => item.text);\n }\n if (cell) {\n editCell(board, cell);\n return;\n }\n }\n }\n keyDown(event);\n };\n\n tableBoard.dblClick = (event: MouseEvent) => {\n event.preventDefault();\n if (!PlaitBoard.isReadonly(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const hitElement = getHitElementByPoint(board, point);\n if (hitElement && PlaitDrawElement.isElementByTable(hitElement)) {\n const hitCell = getHitCell(tableBoard, hitElement, point);\n if (hitCell && hitCell.text) {\n editCell(board, hitCell);\n return;\n }\n }\n }\n dblClick(event);\n };\n\n tableBoard.pointerUp = (event: PointerEvent) => {\n const isSetSelectionPointer =\n PlaitBoard.isPointer(tableBoard, PlaitPointerType.selection) || PlaitBoard.isPointer(tableBoard, PlaitPointerType.hand);\n const isSkip = !isMainPointer(event) || isDragging(tableBoard) || !isSetSelectionPointer;\n if (isSkip) {\n pointerUp(event);\n return;\n }\n if (isSingleSelectTable(tableBoard)) {\n const point = toViewBoxPoint(tableBoard, toHostPoint(tableBoard, event.x, event.y));\n const element = getSelectedTableElements(tableBoard)[0];\n const hitCell = getHitCell(tableBoard, element, point);\n if (hitCell && hitCell.text) {\n setSelectedCells(element, [hitCell]);\n }\n }\n pointerUp(event);\n };\n\n tableBoard.buildTable = (element: PlaitBaseTable) => {\n return element;\n };\n\n return withTableResize(tableBoard);\n};\n","import { PlaitBoard, Point, RectangleClient, createG, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { PlaitSwimlane, SwimlaneDrawSymbols } from '../interfaces';\nimport { insertElement } from '../utils';\nimport {\n normalizeShapePoints,\n isDndMode,\n isDrawingMode,\n getDirectionFactorByDirectionComponent,\n getUnitVectorByPointAndPoint,\n TextManage\n} from '@plait/common';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { getSnapResizingRef } from '../utils/snap-resizing';\nimport { TableGenerator } from '../generators/table.generator';\nimport { createDefaultSwimlane, getDefaultSwimlanePoints, isSwimlanePointers } from '../utils/swimlane';\nimport { getGeometryGeneratorByShape } from '../utils/shape';\nimport { DrawPointerType } from '../constants/pointer';\n\nexport interface FakeCreateTextRef {\n g: SVGGElement;\n textManage: TextManage;\n}\n\nconst isSwimlaneDndMode = (board: PlaitBoard) => {\n const isSwimlanePointer = isSwimlanePointers(board);\n const dndMode = isSwimlanePointer && isDndMode(board);\n return dndMode;\n};\n\nconst isSwimlaneDrawingMode = (board: PlaitBoard) => {\n const isSwimlanePointer = isSwimlanePointers(board);\n const drawingMode = isSwimlanePointer && isDrawingMode(board);\n return drawingMode;\n};\n\nexport const withSwimlaneCreateByDrag = (board: PlaitBoard) => {\n const { pointerMove, globalPointerUp, pointerUp } = board;\n\n let swimlaneG: SVGGElement | null = null;\n\n let temporaryElement: PlaitSwimlane | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n swimlaneG?.remove();\n swimlaneG = createG();\n const tableGenerator = new TableGenerator(board);\n const pointer = PlaitBoard.getPointer(board) as SwimlaneDrawSymbols;\n const dragMode = isSwimlaneDndMode(board);\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n\n if (dragMode) {\n const points = getDefaultSwimlanePoints(pointer, movingPoint);\n temporaryElement = createDefaultSwimlane(pointer, points);\n tableGenerator.processDrawing(temporaryElement, swimlaneG);\n PlaitBoard.getElementTopHost(board).append(swimlaneG);\n }\n\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n if (isSwimlaneDndMode(board) && temporaryElement) {\n return;\n }\n pointerUp(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (isSwimlaneDndMode(board) && temporaryElement) {\n insertElement(board, temporaryElement);\n }\n temporaryElement = null;\n swimlaneG?.remove();\n swimlaneG = null;\n globalPointerUp(event);\n };\n\n return board;\n};\n\nexport const withSwimlaneCreateByDrawing = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, pointerUp, keyDown, keyUp } = board;\n let start: Point | null = null;\n\n let swimlaneG: SVGGElement | null = null;\n\n let temporaryElement: PlaitSwimlane | null = null;\n\n let isShift = false;\n\n let snapG: SVGGElement | null;\n\n board.keyDown = (event: KeyboardEvent) => {\n isShift = isKeyHotkey('shift', event);\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n isShift = false;\n keyUp(event);\n };\n\n board.pointerDown = (event: PointerEvent) => {\n if (!PlaitBoard.isReadonly(board) && isSwimlaneDrawingMode(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n start = point;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n swimlaneG?.remove();\n swimlaneG = createG();\n const tableGenerator = new TableGenerator(board);\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as SwimlaneDrawSymbols;\n snapG?.remove();\n if (start && isSwimlaneDrawingMode(board)) {\n let points: [Point, Point] = normalizeShapePoints([start, movingPoint], isShift);\n const activeRectangle = RectangleClient.getRectangleByPoints(points);\n const [x, y] = getUnitVectorByPointAndPoint(start, movingPoint);\n const resizeSnapRef = getSnapResizingRef(board, [], {\n resizePoints: points,\n activeRectangle,\n directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],\n isAspectRatio: isShift,\n isFromCorner: true,\n isCreate: true\n });\n snapG = resizeSnapRef.snapG;\n PlaitBoard.getElementTopHost(board).append(snapG);\n points = normalizeShapePoints(resizeSnapRef.activePoints as [Point, Point], isShift);\n temporaryElement = createDefaultSwimlane(pointer, points);\n tableGenerator.processDrawing(temporaryElement, swimlaneG);\n PlaitBoard.getElementTopHost(board).append(swimlaneG);\n }\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n if (isSwimlaneDrawingMode(board) && start) {\n const targetPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const { width, height } = RectangleClient.getRectangleByPoints([start!, targetPoint]);\n if (Math.hypot(width, height) < 8) {\n const pointer = PlaitBoard.getPointer(board) as SwimlaneDrawSymbols;\n const points = getDefaultSwimlanePoints(pointer, targetPoint);\n temporaryElement = createDefaultSwimlane(pointer, points);\n }\n if (temporaryElement) {\n insertElement(board, temporaryElement);\n }\n snapG?.remove();\n swimlaneG?.remove();\n swimlaneG = null;\n start = null;\n temporaryElement = null;\n return;\n }\n pointerUp(event);\n };\n return board;\n};\n","import { PlaitPluginElementContext } from '@plait/core';\nimport { PlaitDrawElement, PlaitSwimlane } from '../interfaces';\nimport { buildSwimlaneTable } from '../utils/swimlane';\nimport { TableComponent } from '../table.component';\nimport { withSwimlaneCreateByDrag, withSwimlaneCreateByDrawing } from './with-swimlane-create';\nimport { PlaitBaseTable, PlaitTableBoard } from '../interfaces/table';\n\nexport const withSwimlane = (board: PlaitTableBoard) => {\n const { drawElement, buildTable, pointerUp } = board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitDrawElement.isSwimlane(context.element)) {\n return TableComponent;\n }\n return drawElement(context);\n };\n\n board.buildTable = (element: PlaitBaseTable) => {\n if (PlaitDrawElement.isSwimlane(element)) {\n return buildSwimlaneTable(element as PlaitSwimlane);\n }\n return buildTable(element);\n };\n\n return withSwimlaneCreateByDrawing(withSwimlaneCreateByDrag(board));\n};\n","import {\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n Point,\n Transforms,\n addSelectedElement,\n createG,\n distanceBetweenPointAndPoint,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitVectorLine, VectorLineShape, VectorLinePointerType } from '../interfaces';\nimport { DrawPointerType, LINE_HIT_GEOMETRY_BUFFER, getVectorLinePointers } from '../constants';\nimport { isDrawingMode } from '@plait/common';\nimport { vectorLineCreating } from '../utils';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport const withVectorLineCreateByDraw = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, dblClick, globalKeyDown } = board;\n\n let lineShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitVectorLine | null = null;\n\n let drawPoints: Point[] = [];\n\n const vectorLineComplete = () => {\n if (temporaryElement) {\n Transforms.insertNode(board, temporaryElement, [board.children.length]);\n }\n PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);\n lineShapeG?.remove();\n lineShapeG = null;\n temporaryElement = null;\n drawPoints = [];\n };\n\n board.pointerDown = (event: PointerEvent) => {\n const penPointers = getVectorLinePointers();\n const isVectorLinePointer = PlaitBoard.isInPointer(board, penPointers);\n if (!PlaitBoard.isReadonly(board) && isVectorLinePointer && isDrawingMode(board)) {\n let point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (drawPoints.length > 1) {\n const isClosed = distanceBetweenPointAndPoint(...point, ...drawPoints[0]) <= LINE_HIT_GEOMETRY_BUFFER;\n if (isClosed) {\n drawPoints.push(drawPoints[0]);\n vectorLineComplete();\n return;\n }\n }\n drawPoints.push(point);\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n lineShapeG?.remove();\n lineShapeG = createG();\n let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (pointer === VectorLinePointerType.vectorLine) {\n if (drawPoints.length > 0) {\n const distance = distanceBetweenPointAndPoint(...movingPoint, ...drawPoints[0]);\n if (distance <= LINE_HIT_GEOMETRY_BUFFER) {\n movingPoint = drawPoints[0];\n PlaitBoard.getBoardContainer(board).classList.add(`vector-line-closed`);\n } else {\n PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);\n }\n temporaryElement = vectorLineCreating(board, VectorLineShape.straight, drawPoints, movingPoint, lineShapeG);\n }\n }\n pointerMove(event);\n };\n\n board.dblClick = (event: MouseEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n if (temporaryElement) {\n vectorLineComplete();\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n return;\n }\n }\n dblClick(event);\n };\n\n board.globalKeyDown = (event: KeyboardEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n const isEsc = isKeyHotkey('esc', event);\n const isV = isKeyHotkey('v', event);\n if ((isEsc || isV) && temporaryElement) {\n vectorLineComplete();\n if (isV) {\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n }\n }\n }\n globalKeyDown(event);\n };\n\n return board;\n};\n","import { Path, PlaitBoard, Point, Transforms, distanceBetweenPointAndPoint } from '@plait/core';\nimport { ResizeRef, ResizeState, WithResizeOptions, withResize } from '@plait/common';\nimport { getSelectedVectorLineElements } from '../utils/selected';\nimport { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';\nimport { PlaitVectorLine } from '../interfaces';\nimport { LINE_HIT_GEOMETRY_BUFFER } from '../constants';\nimport { isClosedPoints } from '../utils';\n\nexport const withVectorLineResize = (board: PlaitBoard) => {\n const options: WithResizeOptions<PlaitVectorLine, LineResizeHandle> = {\n key: 'draw-vector-line',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n const selectedVectorLineElements = getSelectedVectorLineElements(board);\n if (selectedVectorLineElements.length > 0) {\n let result = null;\n selectedVectorLineElements.forEach(value => {\n const handleRef = getHitLineResizeHandleRef(board, value, point);\n if (handleRef) {\n result = {\n element: value,\n handle: handleRef.handle,\n handleIndex: handleRef.handleIndex\n };\n }\n });\n return result;\n }\n return null;\n },\n\n onResize: (resizeRef: ResizeRef<PlaitVectorLine, LineResizeHandle>, resizeState: ResizeState) => {\n let points: Point[] = [...resizeRef.element.points];\n let handleIndex = resizeRef.handleIndex!;\n if (resizeRef.handle === LineResizeHandle.source || resizeRef.handle === LineResizeHandle.target) {\n points[handleIndex] = resizeState.endPoint;\n if (isClosedPoints(resizeRef.element.points)) {\n points[points.length - 1] = resizeState.endPoint;\n } else {\n const targetPoint = resizeRef.handle === LineResizeHandle.source ? points[points.length - 1] : points[0];\n const distance = distanceBetweenPointAndPoint(...resizeState.endPoint, ...targetPoint);\n if (distance <= LINE_HIT_GEOMETRY_BUFFER) {\n points[handleIndex] = targetPoint;\n }\n }\n } else {\n if (resizeRef.handle === LineResizeHandle.addHandle) {\n points.splice(handleIndex + 1, 0, resizeState.endPoint);\n } else {\n points[handleIndex] = resizeState.endPoint;\n }\n }\n\n Transforms.setNode(board, { points }, resizeRef.path as Path);\n }\n };\n\n withResize<PlaitVectorLine, LineResizeHandle>(board, options);\n\n return board;\n};\n","import { PlaitBoard, PlaitElement, PlaitPluginElementContext, Point, RectangleClient, Selection, getSelectedElements } from '@plait/core';\nimport { GeometryComponent } from '../geometry.component';\nimport { ArrowLineComponent } from '../arrow-line.component';\nimport { VectorLineComponent } from '../vector-line.component';\nimport { PlaitDrawElement } from '../interfaces';\nimport { withDrawHotkey } from './with-draw-hotkey';\nimport { withGeometryCreateByDrawing, withGeometryCreateByDrag } from './with-geometry-create';\nimport { withDrawFragment } from './with-draw-fragment';\nimport { withArrowLineCreateByDraw } from './arrow-line/with-arrow-line-create';\nimport { withArrowLineResize } from './arrow-line/with-arrow-line-resize';\nimport { withArrowLineBoundReaction } from './arrow-line/with-arrow-line-bound-reaction';\nimport { withArrowLineText } from './arrow-line/with-arrow-line-text';\nimport { ImageComponent } from '../image.component';\nimport { withArrowLineAutoCompleteReaction } from './arrow-line/with-arrow-line-auto-complete-reaction';\nimport { withArrowLineAutoComplete } from './arrow-line/with-arrow-line-auto-complete';\nimport { withArrowLineTextMove } from './arrow-line/with-arrow-line-text-move';\nimport { withDrawResize } from './with-draw-resize';\nimport { getHitDrawElement, isHitDrawElement, isHitElementInside, isRectangleHitDrawElement } from '../utils/hit';\nimport { getArrowLinePoints, getArrowLineTextRectangle } from '../utils/arrow-line/arrow-line-basic';\nimport { withDrawRotate } from './with-draw-rotate';\nimport { withTable } from './with-table';\nimport { withSwimlane } from './with-swimlane';\nimport { withVectorLineCreateByDraw } from './with-vector-line-create';\nimport { getVectorLinePoints } from '../utils/vector-line';\nimport { withVectorLineResize } from './with-vector-line-resize';\n\nexport const withDraw = (board: PlaitBoard) => {\n const { drawElement, getRectangle, isRectangleHit, isHit, isInsidePoint, isMovable, isAlign, getRelatedFragment, getOneHitElement } =\n board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitDrawElement.isGeometry(context.element)) {\n if (PlaitDrawElement.isUML(context.element)) {\n return GeometryComponent;\n }\n return GeometryComponent;\n } else if (PlaitDrawElement.isArrowLine(context.element)) {\n return ArrowLineComponent;\n } else if (PlaitDrawElement.isVectorLine(context.element)) {\n return VectorLineComponent;\n } else if (PlaitDrawElement.isImage(context.element)) {\n return ImageComponent;\n }\n return drawElement(context);\n };\n\n board.getRectangle = (element: PlaitElement) => {\n if (PlaitDrawElement.isGeometry(element)) {\n return RectangleClient.getRectangleByPoints(element.points);\n }\n if (PlaitDrawElement.isArrowLine(element)) {\n const points = getArrowLinePoints(board, element);\n const lineTextRectangles = element.texts.map((text, index) => {\n const rectangle = getArrowLineTextRectangle(board, element, index);\n return rectangle;\n });\n const linePointsRectangle = RectangleClient.getRectangleByPoints(points);\n return RectangleClient.getBoundingRectangle([linePointsRectangle, ...lineTextRectangles]);\n }\n if (PlaitDrawElement.isVectorLine(element)) {\n const points = getVectorLinePoints(board, element);\n const linePointsRectangle = RectangleClient.getRectangleByPoints(points!);\n return RectangleClient.getBoundingRectangle([linePointsRectangle]);\n }\n if (PlaitDrawElement.isImage(element)) {\n return RectangleClient.getRectangleByPoints(element.points);\n }\n return getRectangle(element);\n };\n\n board.isRectangleHit = (element: PlaitElement, selection: Selection) => {\n const result = isRectangleHitDrawElement(board, element, selection);\n if (result !== null) {\n return result;\n }\n return isRectangleHit(element, selection);\n };\n\n board.isHit = (element, point, isStrict?: boolean) => {\n const result = isHitDrawElement(board, element, point, isStrict);\n if (result !== null) {\n return result;\n }\n return isHit(element, point, isStrict);\n };\n\n board.getOneHitElement = (elements) => {\n const isAllDrawElements = elements.every((item) => PlaitDrawElement.isDrawElement(item));\n if (isAllDrawElements) {\n return getHitDrawElement(board, elements as PlaitDrawElement[]);\n }\n return getOneHitElement(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 withVectorLineCreateByDraw(\n withArrowLineAutoCompleteReaction(\n withArrowLineBoundReaction(\n withVectorLineResize(\n withArrowLineResize(\n withArrowLineTextMove(\n withArrowLineText(\n withDrawRotate(\n withArrowLineCreateByDraw(\n withArrowLineAutoComplete(\n withGeometryCreateByDrag(\n withGeometryCreateByDrawing(withDrawFragment(withDrawHotkey(board)))\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getTextRectangle","debugKey","debugGenerator","getCenterPointsOnPolygon","basicBuildClipboard","basicInsertClipboard","heightRatio","getNearestPointBetweenPointAndRoundRectangle"],"mappings":"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"}
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/default.ts","../../../packages/draw/src/constants/geometry.ts","../../../packages/draw/src/constants/pointer.ts","../../../packages/draw/src/constants/image.ts","../../../packages/draw/src/constants/theme.ts","../../../packages/draw/src/constants/swimlane.ts","../../../packages/draw/src/constants/text.ts","../../../packages/draw/src/constants/line.ts","../../../packages/draw/src/generators/text.generator.ts","../../../packages/draw/src/utils/table-selected.ts","../../../packages/draw/src/utils/table.ts","../../../packages/draw/src/utils/memorize.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-resize.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-arrow.ts","../../../packages/draw/src/generators/arrow-line.generator.ts","../../../packages/draw/src/utils/text-size.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-basic.ts","../../../packages/draw/src/utils/position/arrow-line.ts","../../../packages/draw/src/utils/multi-text-geometry.ts","../../../packages/draw/src/generators/vector-line-generator.ts","../../../packages/draw/src/utils/vector-line.ts","../../../packages/draw/src/utils/polygon.ts","../../../packages/draw/src/engines/basic-shapes/cloud.ts","../../../packages/draw/src/utils/hit.ts","../../../packages/draw/src/utils/common.ts","../../../packages/draw/src/utils/style/stroke.ts","../../../packages/draw/src/generators/geometry-shape.generator.ts","../../../packages/draw/src/utils/line.ts","../../../packages/draw/src/utils/position/line.ts","../../../packages/draw/src/generators/line-active.generator.ts","../../../packages/draw/src/generators/arrow-line-auto-complete.generator.ts","../../../packages/draw/src/generators/single-text.generator.ts","../../../packages/draw/src/generators/table.generator.ts","../../../packages/draw/src/utils/shape.ts","../../../packages/draw/src/utils/uml.ts","../../../packages/draw/src/utils/geometry.ts","../../../packages/draw/src/utils/arrow-line/elbow.ts","../../../packages/draw/src/utils/selected.ts","../../../packages/draw/src/transforms/geometry.ts","../../../packages/draw/src/transforms/geometry-text.ts","../../../packages/draw/src/transforms/image.ts","../../../packages/draw/src/transforms/arrow-line.ts","../../../packages/draw/src/utils/swimlane.ts","../../../packages/draw/src/transforms/swimlane.ts","../../../packages/draw/src/transforms/multi-text-geometry-text.ts","../../../packages/draw/src/transforms/table-text.ts","../../../packages/draw/src/transforms/table.ts","../../../packages/draw/src/transforms/vector-line.ts","../../../packages/draw/src/transforms/common.ts","../../../packages/draw/src/transforms/index.ts","../../../packages/draw/src/utils/position/geometry.ts","../../../packages/draw/src/plugins/with-draw-resize.ts","../../../packages/draw/src/utils/snap-resizing.ts","../../../packages/draw/src/utils/clipboard.ts","../../../packages/draw/src/engines/basic-shapes/comment.ts","../../../packages/draw/src/engines/basic-shapes/polygon.ts","../../../packages/draw/src/engines/basic-shapes/cross.ts","../../../packages/draw/src/engines/basic-shapes/diamond.ts","../../../packages/draw/src/engines/basic-shapes/ellipse.ts","../../../packages/draw/src/engines/basic-shapes/hexagon.ts","../../../packages/draw/src/engines/basic-shapes/left-arrow.ts","../../../packages/draw/src/engines/basic-shapes/octagon.ts","../../../packages/draw/src/engines/basic-shapes/parallelogram.ts","../../../packages/draw/src/engines/basic-shapes/pentagon.ts","../../../packages/draw/src/engines/basic-shapes/pentagon-arrow.ts","../../../packages/draw/src/engines/basic-shapes/process-arrow.ts","../../../packages/draw/src/engines/basic-shapes/right-arrow.ts","../../../packages/draw/src/engines/basic-shapes/rectangle.ts","../../../packages/draw/src/engines/basic-shapes/round-rectangle.ts","../../../packages/draw/src/engines/basic-shapes/round-comment.ts","../../../packages/draw/src/engines/basic-shapes/trapezoid.ts","../../../packages/draw/src/engines/basic-shapes/triangle.ts","../../../packages/draw/src/engines/basic-shapes/two-way-arrow.ts","../../../packages/draw/src/engines/basic-shapes/star.ts","../../../packages/draw/src/engines/flowchart/terminal.ts","../../../packages/draw/src/engines/flowchart/manual-input.ts","../../../packages/draw/src/engines/flowchart/preparation.ts","../../../packages/draw/src/engines/flowchart/manual-loop.ts","../../../packages/draw/src/engines/flowchart/merge.ts","../../../packages/draw/src/engines/flowchart/delay.ts","../../../packages/draw/src/engines/flowchart/stored-data.ts","../../../packages/draw/src/engines/flowchart/predefined-process.ts","../../../packages/draw/src/engines/flowchart/off-page.ts","../../../packages/draw/src/engines/flowchart/or.ts","../../../packages/draw/src/engines/flowchart/summing-junction.ts","../../../packages/draw/src/engines/flowchart/document.ts","../../../packages/draw/src/engines/flowchart/multi-document.ts","../../../packages/draw/src/engines/flowchart/database.ts","../../../packages/draw/src/engines/flowchart/hard-disk.ts","../../../packages/draw/src/engines/flowchart/internal-storage.ts","../../../packages/draw/src/engines/flowchart/note-curly-left.ts","../../../packages/draw/src/engines/flowchart/note-curly-right.ts","../../../packages/draw/src/engines/flowchart/note-square.ts","../../../packages/draw/src/engines/flowchart/display.ts","../../../packages/draw/src/engines/table/table.ts","../../../packages/draw/src/engines/uml/actor.ts","../../../packages/draw/src/engines/uml/container.ts","../../../packages/draw/src/engines/uml/package.ts","../../../packages/draw/src/engines/uml/combined-fragment.ts","../../../packages/draw/src/engines/uml/deletion.ts","../../../packages/draw/src/engines/uml/activity-class.ts","../../../packages/draw/src/engines/uml/note.ts","../../../packages/draw/src/engines/uml/assembly.ts","../../../packages/draw/src/engines/uml/required-interface.ts","../../../packages/draw/src/engines/uml/provided-interface.ts","../../../packages/draw/src/engines/uml/component.ts","../../../packages/draw/src/engines/uml/component-box.ts","../../../packages/draw/src/engines/uml/template.ts","../../../packages/draw/src/engines/index.ts","../../../packages/draw/src/utils/arrow-line/arrow-line-common.ts","../../../packages/draw/src/interfaces/arrow-line.ts","../../../packages/draw/src/interfaces/element.ts","../../../packages/draw/src/interfaces/vector-line.ts","../../../packages/draw/src/interfaces/index.ts","../../../packages/draw/src/geometry.component.ts","../../../packages/draw/src/arrow-line.component.ts","../../../packages/draw/src/vector-line.component.ts","../../../packages/draw/src/plugins/with-draw-hotkey.ts","../../../packages/draw/src/plugins/with-geometry-create.ts","../../../packages/draw/src/plugins/with-draw-fragment.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-create.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-resize.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-bound-reaction.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-text.ts","../../../packages/draw/src/image.component.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-auto-complete.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-auto-complete-reaction.ts","../../../packages/draw/src/plugins/arrow-line/with-arrow-line-text-move.ts","../../../packages/draw/src/plugins/with-draw-rotate.ts","../../../packages/draw/src/table.component.ts","../../../packages/draw/src/plugins/with-table-resize.ts","../../../packages/draw/src/plugins/with-table.ts","../../../packages/draw/src/plugins/with-swimlane-create.ts","../../../packages/draw/src/plugins/with-swimlane.ts","../../../packages/draw/src/plugins/with-vector-line-create.ts","../../../packages/draw/src/plugins/with-vector-line-resize.ts","../../../packages/draw/src/plugins/with-draw.ts","../../../packages/draw/src/plait-draw.ts"],"sourcesContent":["import { PlaitElement, Point } from '@plait/core';\nimport { DrawTextInfo } from '../generators/text.generator';\nimport { ParagraphElement, StrokeStyle } from '@plait/common';\n\nexport enum BasicShapes {\n rectangle = 'rectangle',\n ellipse = 'ellipse',\n diamond = 'diamond',\n roundRectangle = 'roundRectangle',\n parallelogram = 'parallelogram',\n text = 'text',\n triangle = 'triangle',\n leftArrow = 'leftArrow',\n trapezoid = 'trapezoid',\n rightArrow = 'rightArrow',\n cross = 'cross',\n star = 'star',\n pentagon = 'pentagon',\n hexagon = 'hexagon',\n octagon = 'octagon',\n pentagonArrow = 'pentagonArrow',\n processArrow = 'processArrow',\n twoWayArrow = 'twoWayArrow',\n comment = 'comment',\n roundComment = 'roundComment',\n cloud = 'cloud'\n}\n\nexport enum FlowchartSymbols {\n process = 'process',\n decision = 'decision',\n data = 'data',\n connector = 'connector',\n terminal = 'terminal',\n manualInput = 'manualInput',\n preparation = 'preparation',\n manualLoop = 'manualLoop',\n merge = 'merge',\n delay = 'delay',\n storedData = 'storedData',\n or = 'or',\n summingJunction = 'summingJunction',\n predefinedProcess = 'predefinedProcess',\n offPage = 'offPage',\n document = 'document',\n multiDocument = 'multiDocument',\n database = 'database',\n hardDisk = 'hardDisk',\n internalStorage = 'internalStorage',\n noteCurlyRight = 'noteCurlyRight',\n noteCurlyLeft = 'noteCurlyLeft',\n noteSquare = 'noteSquare',\n display = 'display'\n}\n\nexport enum UMLSymbols {\n actor = 'actor',\n useCase = 'useCase',\n container = 'container',\n note = 'note',\n simpleClass = 'simpleClass',\n activityClass = 'activityClass',\n branchMerge = 'branchMerge',\n port = 'port',\n package = 'package',\n combinedFragment = 'combinedFragment',\n class = 'class',\n interface = 'interface',\n object = 'object',\n component = 'component',\n componentBox = 'componentBox',\n template = 'template',\n activation = 'activation',\n deletion = 'deletion',\n assembly = 'assembly',\n providedInterface = 'providedInterface',\n requiredInterface = 'requiredInterface'\n}\n\nexport enum GeometryCommonTextKeys {\n name = 'name',\n content = 'content'\n}\n\nexport type GeometryShapes = BasicShapes | FlowchartSymbols | UMLSymbols;\n\nexport type SwimlaneDirection = 'horizontal' | 'vertical';\n\nexport interface PlaitBaseGeometry<T extends string = 'geometry', P extends Point[] = [Point, Point], S extends string = GeometryShapes>\n extends PlaitElement {\n type: T;\n points: P;\n shape: S;\n}\n\nexport interface PlaitCommonGeometry<T extends string = 'geometry', P extends Point[] = [Point, Point], S extends string = GeometryShapes>\n extends PlaitBaseGeometry<T, P, S> {\n // node style attributes\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n angle?: number;\n opacity?: number;\n}\n\nexport interface PlaitCustomGeometry<T extends string = string, P extends Point[] = Point[], S extends string = string>\n extends PlaitBaseGeometry<T, P, S> {}\n\nexport interface PlaitMultipleTextGeometry extends PlaitCommonGeometry {\n texts: DrawTextInfo[];\n}\n\nexport interface PlaitGeometry extends PlaitCommonGeometry {\n text?: ParagraphElement;\n}\n\nexport interface PlaitRectangle extends PlaitGeometry {\n shape: BasicShapes.rectangle;\n}\n\nexport interface PlaitEllipse extends PlaitGeometry {\n shape: BasicShapes.ellipse;\n}\n\nexport interface PlaitDiamond extends PlaitGeometry {\n shape: BasicShapes.diamond;\n}\n\nexport const PlaitGeometry = {};\n","import { PlaitBaseTable } from './table';\n\nexport enum SwimlaneSymbols {\n swimlaneVertical = 'swimlaneVertical',\n swimlaneHorizontal = 'swimlaneHorizontal'\n}\n\nexport enum SwimlaneDrawSymbols {\n swimlaneVertical = 'swimlaneVertical',\n swimlaneHorizontal = 'swimlaneHorizontal',\n swimlaneVerticalWithHeader = 'swimlaneVerticalWithHeader',\n swimlaneHorizontalWithHeader = 'swimlaneHorizontalWithHeader'\n}\n\nexport interface PlaitSwimlane extends PlaitBaseTable {\n type: 'swimlane';\n shape: SwimlaneSymbols;\n header?: boolean;\n}\n\nexport interface PlaitSwimlaneVertical extends PlaitSwimlane {\n shape: SwimlaneSymbols.swimlaneVertical;\n}\n\nexport interface PlaitSwimlaneHorizontal extends PlaitSwimlane {\n shape: SwimlaneSymbols.swimlaneHorizontal;\n}\n","import { PlaitBoard, PlaitElement, Point } from '@plait/core';\nimport { ParagraphElement } from '@plait/common';\nimport { DrawOptions } from './engine';\n\nexport enum TableSymbols {\n table = 'table'\n}\n\nexport interface PlaitTableBoard extends PlaitBoard {\n buildTable: (element: PlaitBaseTable) => PlaitBaseTable;\n}\n\nexport interface PlaitBaseTable extends PlaitElement {\n id: string;\n points: Point[];\n rows: {\n id: string;\n height?: number;\n }[];\n columns: {\n id: string;\n width?: number;\n }[];\n cells: PlaitTableCell[];\n groupId?: string;\n}\n\nexport interface PlaitTable extends PlaitBaseTable {\n type: 'table';\n}\n\nexport interface PlaitTableCell {\n id: string;\n rowId: string;\n columnId: string;\n colspan?: number;\n rowspan?: number;\n text?: PlaitTableCellParagraph;\n fill?: string;\n}\n\nexport interface PlaitTableDrawOptions extends DrawOptions {\n element: PlaitTable;\n}\n\nexport interface PlaitTableCellWithPoints extends PlaitTableCell {\n points: [Point, Point];\n}\n\nexport interface PlaitTableCellParagraph extends ParagraphElement {\n direction?: 'vertical' | 'horizontal';\n}\n\nexport const PlaitTableElement = {\n isTable: (value: any): value is PlaitTable => {\n return value.type === 'table';\n },\n isVerticalText: (value: PlaitTableCell): value is PlaitTableCell => {\n return value.text?.direction === 'vertical';\n }\n};\n","export const WithDrawPluginKey = 'plait-draw-plugin-key';\n\nexport enum DrawI18nKey {\n lineText = 'line-text',\n geometryText = 'geometry-text'\n}","import { ACTIVE_STROKE_WIDTH, DEFAULT_COLOR } from '@plait/core';\nimport { BasicShapes, FlowchartSymbols, GeometryShapes, GeometryCommonTextKeys, UMLSymbols } from '../interfaces';\nimport { Alignment, DEFAULT_FILL } from '@plait/common';\n\nexport const ShapeDefaultSpace = {\n rectangleAndText: 4\n};\n\nexport const DefaultDrawStyle = {\n strokeWidth: 2,\n defaultRadius: 4,\n strokeColor: '#000',\n fill: DEFAULT_FILL\n};\n\nexport const DefaultDrawActiveStyle = {\n strokeWidth: ACTIVE_STROKE_WIDTH,\n selectionStrokeWidth: ACTIVE_STROKE_WIDTH\n};\n\nexport const DefaultBasicShapeProperty = {\n width: 100,\n height: 100,\n strokeColor: DEFAULT_COLOR,\n strokeWidth: 2\n};\n\nexport const DefaultPentagonArrowProperty = {\n width: 120,\n height: 50\n};\n\nexport const DefaultTwoWayArrowProperty = {\n width: 138,\n height: 80\n};\n\nexport const DefaultArrowProperty = {\n width: 100,\n height: 80\n};\n\nexport const DefaultCloudProperty = {\n width: 120,\n height: 100\n};\n\nexport const DefaultTextProperty = {\n width: 36,\n height: 20,\n text: '文本'\n};\n\nexport const GeometryThreshold = {\n defaultTextMaxWidth: 34 * 14\n};\n\nexport const DefaultConnectorProperty = {\n width: 44,\n height: 44\n};\n\nexport const DefaultFlowchartProperty = {\n width: 120,\n height: 60\n};\n\nexport const DefaultDataBaseProperty = {\n width: 70,\n height: 80\n};\n\nexport const DefaultInternalStorageProperty = {\n width: 80,\n height: 80\n};\n\nexport const DefaultDecisionProperty = {\n width: 140,\n height: 70\n};\n\nexport const DefaultDataProperty = {\n width: 124,\n height: 60\n};\n\nexport const DefaultDocumentProperty = {\n width: 120,\n height: 70\n};\n\nexport const DefaultNoteProperty = {\n width: 160,\n height: 100\n};\n\nexport const DefaultMultiDocumentProperty = {\n width: 120,\n height: 80\n};\n\nexport const DefaultManualInputProperty = {\n width: 117,\n height: 59\n};\n\nexport const DefaultMergeProperty = {\n width: 47,\n height: 33\n};\n\nexport const DefaultActorProperty = {\n width: 68,\n height: 100\n};\n\nexport const DefaultContainerProperty = {\n width: 300,\n height: 240\n};\n\nexport const DefaultPackageProperty = {\n width: 210,\n height: 150,\n texts: [\n {\n id: GeometryCommonTextKeys.name,\n text: '包名',\n align: Alignment.left\n },\n {\n id: GeometryCommonTextKeys.content,\n text: '',\n align: Alignment.left\n }\n ]\n};\n\nexport const DefaultActivationProperty = {\n width: 18,\n height: 80\n};\n\nexport const DefaultObjectProperty = {\n width: 120,\n height: 60\n};\n\nexport const DefaultComponentBoxProperty = {\n width: 200,\n height: 150\n};\n\nexport const DefaultDeletionProperty = {\n width: 40,\n height: 40\n};\n\nexport const DefaultPortProperty = {\n width: 20,\n height: 20\n};\n\nexport const DefaultRequiredInterfaceProperty = {\n width: 70,\n height: 56\n};\n\nexport const DefaultAssemblyProperty = {\n width: 120,\n height: 56\n};\n\nexport const DefaultProvidedInterfaceProperty = {\n width: 70,\n height: 34\n};\n\nexport const DefaultCombinedFragmentProperty = {\n width: 400,\n height: 280,\n texts: [\n {\n id: GeometryCommonTextKeys.name,\n text: 'Opt | Alt | Loop',\n align: Alignment.left\n },\n {\n id: GeometryCommonTextKeys.content,\n text: '[Condition]',\n align: Alignment.left\n }\n ]\n};\n\nexport const DefaultClassProperty = {\n width: 230,\n height: 180,\n texts: [\n { text: 'Class', align: Alignment.center },\n {\n text: '+ attribute1:type defaultValue\\n+ attribute2:type\\n- attribute3:type',\n align: Alignment.left\n },\n {\n text: '+ operation1(params):returnType\\n- operation2(params)\\n- operation3()',\n align: Alignment.left\n }\n ]\n};\n\nexport const DefaultInterfaceProperty = {\n width: 230,\n height: 140,\n texts: [\n { text: '<<interface>>\\nInterface', align: Alignment.center },\n {\n text: '+ operation1(params):returnType\\n- operation2(params)\\n- operation3()',\n align: Alignment.left\n }\n ]\n};\n\nexport const DefaultBasicShapePropertyMap: Record<string, { width: number; height: number }> = {\n [BasicShapes.pentagonArrow]: DefaultPentagonArrowProperty,\n [BasicShapes.processArrow]: DefaultPentagonArrowProperty,\n [BasicShapes.cloud]: DefaultCloudProperty,\n [BasicShapes.twoWayArrow]: DefaultTwoWayArrowProperty,\n [BasicShapes.leftArrow]: DefaultArrowProperty,\n [BasicShapes.rightArrow]: DefaultArrowProperty\n};\n\nexport const DefaultFlowchartPropertyMap = {\n [FlowchartSymbols.connector]: DefaultConnectorProperty,\n [FlowchartSymbols.process]: DefaultFlowchartProperty,\n [FlowchartSymbols.decision]: DefaultDecisionProperty,\n [FlowchartSymbols.data]: DefaultDataProperty,\n [FlowchartSymbols.terminal]: DefaultFlowchartProperty,\n [FlowchartSymbols.manualInput]: DefaultManualInputProperty,\n [FlowchartSymbols.preparation]: DefaultFlowchartProperty,\n [FlowchartSymbols.manualLoop]: DefaultFlowchartProperty,\n [FlowchartSymbols.merge]: DefaultMergeProperty,\n [FlowchartSymbols.delay]: DefaultFlowchartProperty,\n [FlowchartSymbols.storedData]: DefaultFlowchartProperty,\n [FlowchartSymbols.or]: DefaultConnectorProperty,\n [FlowchartSymbols.summingJunction]: DefaultConnectorProperty,\n [FlowchartSymbols.predefinedProcess]: DefaultFlowchartProperty,\n [FlowchartSymbols.offPage]: DefaultFlowchartProperty,\n [FlowchartSymbols.document]: DefaultDocumentProperty,\n [FlowchartSymbols.multiDocument]: DefaultMultiDocumentProperty,\n [FlowchartSymbols.database]: DefaultDataBaseProperty,\n [FlowchartSymbols.hardDisk]: DefaultFlowchartProperty,\n [FlowchartSymbols.internalStorage]: DefaultInternalStorageProperty,\n [FlowchartSymbols.noteCurlyLeft]: DefaultNoteProperty,\n [FlowchartSymbols.noteCurlyRight]: DefaultNoteProperty,\n [FlowchartSymbols.noteSquare]: DefaultNoteProperty,\n [FlowchartSymbols.display]: DefaultFlowchartProperty\n};\n\nexport const DefaultUMLPropertyMap = {\n [UMLSymbols.actor]: DefaultActorProperty,\n [UMLSymbols.useCase]: DefaultDocumentProperty,\n [UMLSymbols.container]: DefaultContainerProperty,\n [UMLSymbols.note]: DefaultObjectProperty,\n [UMLSymbols.package]: DefaultPackageProperty,\n [UMLSymbols.combinedFragment]: DefaultCombinedFragmentProperty,\n [UMLSymbols.class]: DefaultClassProperty,\n [UMLSymbols.interface]: DefaultInterfaceProperty,\n [UMLSymbols.activation]: DefaultActivationProperty,\n [UMLSymbols.object]: DefaultObjectProperty,\n [UMLSymbols.deletion]: DefaultDeletionProperty,\n [UMLSymbols.activityClass]: DefaultObjectProperty,\n [UMLSymbols.simpleClass]: DefaultObjectProperty,\n [UMLSymbols.component]: DefaultMultiDocumentProperty,\n [UMLSymbols.template]: DefaultMultiDocumentProperty,\n [UMLSymbols.componentBox]: DefaultComponentBoxProperty,\n [UMLSymbols.port]: DefaultPortProperty,\n [UMLSymbols.branchMerge]: DefaultDeletionProperty,\n [UMLSymbols.assembly]: DefaultAssemblyProperty,\n [UMLSymbols.providedInterface]: DefaultProvidedInterfaceProperty,\n [UMLSymbols.requiredInterface]: DefaultRequiredInterfaceProperty\n};\n\nexport const MultipleTextGeometryTextKeys: { [key in GeometryShapes]?: string[] } = {\n [UMLSymbols.package]: Object.keys(GeometryCommonTextKeys),\n [UMLSymbols.combinedFragment]: Object.keys(GeometryCommonTextKeys)\n};\n\nexport const LINE_HIT_GEOMETRY_BUFFER = 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 VectorLinePointerType,\n SwimlaneSymbols\n} from '../interfaces';\n\nexport type DrawPointerType =\n | BasicShapes\n | ArrowLineShape\n | FlowchartSymbols\n | SwimlaneDrawSymbols\n | TableSymbols\n | UMLSymbols\n | VectorLinePointerType;\n\nexport const getGeometryPointers = () => {\n return [...Object.keys(BasicShapes), ...Object.keys(FlowchartSymbols), ...Object.keys(UMLSymbols)];\n};\n\nexport const getSwimlanePointers = () => {\n return Object.keys(SwimlaneDrawSymbols);\n};\n\nexport const getSwimlaneShapes = () => {\n return Object.keys(SwimlaneSymbols);\n};\n\nexport const getBasicPointers = () => {\n return Object.keys(BasicShapes);\n};\n\nexport const getFlowchartPointers = () => {\n return Object.keys(FlowchartSymbols);\n};\n\nexport const getUMLPointers = () => {\n return Object.keys(UMLSymbols);\n};\n\nexport const getArrowLinePointers = () => {\n return Object.keys(ArrowLineShape);\n};\n\nexport const getVectorLinePointers = () => {\n return Object.keys(VectorLinePointerType);\n};\n","export const DEFAULT_IMAGE_WIDTH = 1000;\n","import { DEFAULT_COLOR, ThemeColorMode } from '@plait/core';\n\nexport const DrawThemeColors = {\n [ThemeColorMode.default]: {\n strokeColor: DEFAULT_COLOR,\n fill: '#FFFFFF'\n },\n [ThemeColorMode.colorful]: {\n strokeColor: '#06ADBF',\n fill: '#CDEFF2'\n },\n [ThemeColorMode.soft]: {\n strokeColor: '#6D89C1',\n fill: '#DADFEB'\n },\n [ThemeColorMode.retro]: {\n strokeColor: '#E9C358',\n fill: '#F6EDCF'\n },\n [ThemeColorMode.dark]: {\n strokeColor: '#FFFFFF',\n fill: '#434343'\n },\n [ThemeColorMode.starry]: {\n strokeColor: '#42ABE5',\n fill: '#163F5A'\n }\n};\n","import { SwimlaneDrawSymbols } from '../interfaces/swimlane';\n\nexport const SWIMLANE_HEADER_SIZE = 42;\n\nexport const DefaultSwimlaneVerticalWithHeaderProperty = {\n width: 580,\n height: 524\n};\n\nexport const DefaultSwimlaneHorizontalWithHeaderProperty = {\n width: 524,\n height: 580\n};\n\nexport const DefaultSwimlaneVerticalProperty = {\n width: 580,\n height: 524\n};\n\nexport const DefaultSwimlaneHorizontalProperty = {\n width: 524,\n height: 580\n};\n\nexport const DefaultSwimlanePropertyMap: Record<string, { width: number; height: number }> = {\n [SwimlaneDrawSymbols.swimlaneHorizontal]: DefaultSwimlaneHorizontalProperty,\n [SwimlaneDrawSymbols.swimlaneVertical]: DefaultSwimlaneVerticalProperty,\n [SwimlaneDrawSymbols.swimlaneHorizontalWithHeader]: DefaultSwimlaneHorizontalWithHeaderProperty,\n [SwimlaneDrawSymbols.swimlaneVerticalWithHeader]: DefaultSwimlaneVerticalWithHeaderProperty\n};\n","export const MIN_TEXT_WIDTH = 5;\n","export const DefaultLineStyle = {\n strokeWidth: 2,\n strokeColor: '#000'\n};\n\nexport const LINE_TEXT_SPACE = 4;\n\nexport const LINE_AUTO_COMPLETE_DIAMETER = 6;\n\nexport const LINE_AUTO_COMPLETE_OPACITY = 1;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_OPACITY = 1;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_DIAMETER = 12;\n\nexport const LINE_ALIGN_TOLERANCE = 3;\n\nexport const LINE_TEXT = '文本';\n","import {\n ParagraphElement,\n PlaitCommonElementRef,\n TextManage,\n TextManageChangeData,\n TextPlugin,\n WithTextPluginKey,\n WithTextPluginOptions\n} from '@plait/common';\nimport { PlaitBoard, PlaitElement, PlaitOptionsBoard, RectangleClient } from '@plait/core';\nimport { getEngine } from '../engines';\nimport { DrawShapes, PlaitGeometry, TextRectangleOptions } from '../interfaces';\nimport { getTextKey, getTextRectangle } from '../utils';\n\nexport interface DrawTextInfo extends TextRectangleOptions {\n text: ParagraphElement;\n}\n\nexport interface TextGeneratorOptions<T> {\n onChange: (element: T, textChangeRef: TextManageChangeData, text: DrawTextInfo) => void;\n getRenderRectangle?: (element: T, text: DrawTextInfo) => RectangleClient;\n getMaxWidth?: () => number;\n}\n\n// TODO: 是否可以完全基于位置定位 TextManager,实现 line 和 多文本 geometry 统一\n// 一个元素有多个文本时,单纯通过位置无法获取 TextManage,因此这里单独通过 Map 保存关键字 key 和 TextManage 的对应关系\n// 1. 单文本元素 key 就是元素的 id\n// 2. 表格元素 key 是单元格的 id\n// 3. 符合 isMultipleTextGeometry 的元素,key 是元素 id + text.id (通常不是 id 而是文本位置的常量)\n// 4. arrow-line 和 vector-line 文本不依赖于 text.generator,基于 text 可以直接找到 TextManage\nexport const KEY_TO_TEXT_MANAGE: WeakMap<PlaitBoard, { [key: string]: TextManage }> = new WeakMap();\n\nexport const setTextManage = (board: PlaitBoard, element: PlaitElement, text: DrawTextInfo, textManage: TextManage) => {\n const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n return KEY_TO_TEXT_MANAGE.set(board, { ...textManages, [getTextKey(element, text)]: textManage });\n};\n\nexport const getTextManage = (board: PlaitBoard, element: PlaitElement | undefined, text: Pick<DrawTextInfo, 'id'>): TextManage => {\n const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n return textManages[getTextKey(element, text)];\n};\n\nexport const deleteTextManage = (board: PlaitBoard, key: string) => {\n const textManages = KEY_TO_TEXT_MANAGE.get(board)!;\n delete textManages[key];\n KEY_TO_TEXT_MANAGE.set(board, textManages);\n};\n\nexport class TextGenerator<T extends PlaitElement = PlaitGeometry> {\n protected board: PlaitBoard;\n\n protected element: T;\n\n protected texts: DrawTextInfo[];\n\n protected options: TextGeneratorOptions<T>;\n\n public textManages!: TextManage[];\n\n get shape(): DrawShapes {\n return this.element.shape || this.element.type;\n }\n\n constructor(board: PlaitBoard, element: T, texts: DrawTextInfo[], options: TextGeneratorOptions<T>) {\n this.board = board;\n this.texts = texts;\n this.element = element;\n this.options = options;\n }\n\n initialize() {\n const textPlugins = ((this.board as PlaitOptionsBoard).getPluginOptions<WithTextPluginOptions>(WithTextPluginKey) || {})\n .textPlugins;\n this.textManages = this.texts.map(text => {\n const textManage = this.createTextManage(text, textPlugins);\n setTextManage(this.board, this.element, text, textManage);\n return textManage;\n });\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(this.element);\n ref.initializeTextManage(this.textManages);\n }\n\n draw(elementG: SVGElement) {\n const centerPoint = RectangleClient.getCenterPoint(this.board.getRectangle(this.element)!);\n this.texts.forEach(drawShapeText => {\n const textManage = getTextManage(this.board, this.element, drawShapeText);\n if (drawShapeText.text && textManage) {\n textManage.draw(drawShapeText.text);\n elementG.append(textManage.g);\n (this.element.angle || this.element.angle === 0) && textManage.updateAngle(centerPoint, this.element.angle);\n }\n });\n }\n\n update(element: T, previousDrawShapeTexts: DrawTextInfo[], currentDrawShapeTexts: DrawTextInfo[], elementG: SVGElement) {\n this.element = element;\n\n const centerPoint = RectangleClient.getCenterPoint(this.board.getRectangle(this.element)!);\n const textPlugins = ((this.board as PlaitOptionsBoard).getPluginOptions<WithTextPluginOptions>(WithTextPluginKey) || {})\n .textPlugins;\n const removedTexts = previousDrawShapeTexts.filter(value => {\n return !currentDrawShapeTexts.find(item => item.id === value.id);\n });\n if (removedTexts.length) {\n removedTexts.forEach(item => {\n const textManage = getTextManage(this.board, element, item);\n const index = this.textManages.findIndex(value => value === textManage);\n if (index > -1 && item.text) {\n this.textManages.splice(index, 1);\n }\n textManage?.destroy();\n deleteTextManage(this.board, item.id);\n });\n }\n currentDrawShapeTexts.forEach(drawShapeText => {\n if (drawShapeText.text) {\n let textManage = getTextManage(this.board, this.element, drawShapeText);\n if (!textManage) {\n textManage = this.createTextManage(drawShapeText, textPlugins);\n setTextManage(this.board, element, drawShapeText, textManage);\n textManage.draw(drawShapeText.text);\n elementG.append(textManage.g);\n this.textManages.push(textManage);\n } else {\n textManage.updateText(drawShapeText.text);\n textManage.updateRectangle();\n }\n (this.element.angle || this.element.angle === 0) && textManage.updateAngle(centerPoint, this.element.angle);\n }\n });\n }\n\n private createTextManage(text: DrawTextInfo, textPlugins?: TextPlugin[]) {\n const textManage = new TextManage(this.board, {\n getRectangle: () => {\n return this.getRectangle(text);\n },\n onChange: (data: TextManageChangeData) => {\n return this.options.onChange(this.element, data, text);\n },\n getMaxWidth: () => {\n return this.getMaxWidth(text);\n },\n getRenderRectangle: () => {\n return this.options.getRenderRectangle ? this.options.getRenderRectangle(this.element, text) : this.getRectangle(text);\n },\n textPlugins\n });\n return textManage;\n }\n\n getRectangle(text: DrawTextInfo) {\n const getRectangle = getEngine<T>(this.shape).getTextRectangle;\n if (getRectangle) {\n return getRectangle(this.board, this.element, text);\n }\n return getTextRectangle(this.board, this.element);\n }\n\n getMaxWidth(text: DrawTextInfo) {\n return this.options.getMaxWidth ? this.options.getMaxWidth() : this.getRectangle(text).width;\n }\n\n destroy() {\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(this.element);\n ref.destroyTextManage();\n this.textManages = [];\n this.texts.forEach(item => {\n deleteTextManage(this.board, item.id);\n });\n }\n}\n","import { PlaitBoard, getSelectedElements, PlaitElement } from '@plait/core';\nimport { PlaitTableCell, PlaitBaseTable, PlaitTable } from '../interfaces/table';\nimport { PlaitDrawElement } from '../interfaces';\n\nexport const isSingleSelectTable = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board);\n return selectedElements && selectedElements.length === 1 && PlaitDrawElement.isElementByTable(selectedElements[0]);\n};\n\nexport const getSelectedTableElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n return selectedElements.filter(value => PlaitDrawElement.isElementByTable(value)) as PlaitTable[];\n};\n\nexport const SELECTED_CELLS = new WeakMap<PlaitBaseTable, PlaitTableCell[]>();\n\nexport function getSelectedCells(element: PlaitBaseTable) {\n return SELECTED_CELLS.get(element);\n}\n\nexport function setSelectedCells(element: PlaitBaseTable, cells: PlaitTableCell[]) {\n return SELECTED_CELLS.set(element, cells);\n}\n\nexport function clearSelectedCells(element: PlaitBaseTable) {\n return SELECTED_CELLS.delete(element);\n}\n","import { idCreator, PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitBaseTable, PlaitTable, PlaitTableBoard, PlaitTableCell, PlaitTableCellWithPoints } from '../interfaces/table';\nimport { getTextManage } from '../generators/text.generator';\nimport { Alignment } from '@plait/common';\nimport { TEXT_DEFAULT_HEIGHT } from '@plait/text-plugins';\nimport { getSelectedCells, getSelectedTableElements, isSingleSelectTable } from './table-selected';\nimport { BaseEditor } from 'slate';\n\nexport function getCellsWithPoints(board: PlaitBoard, element: PlaitBaseTable): PlaitTableCellWithPoints[] {\n const table = (board as PlaitTableBoard)?.buildTable(element);\n if (!table || !table.points || !table.columns || !table.rows) {\n throw new Error('can not get table cells points');\n }\n const rectangle = RectangleClient.getRectangleByPoints(table.points);\n const columnsCount = table.columns.length;\n const rowsCount = table.rows.length;\n const cellWidths = calculateCellsSize(table.columns, rectangle.width, columnsCount, true);\n const cellHeights = calculateCellsSize(table.rows, rectangle.height, rowsCount, false);\n const cells: PlaitTableCellWithPoints[] = table.cells.map(cell => {\n const rowIdx = table.rows.findIndex(row => row.id === cell.rowId);\n const columnIdx = table.columns.findIndex(column => column.id === cell.columnId);\n\n let cellTopLeftX = rectangle.x;\n for (let i = 0; i < columnIdx; i++) {\n cellTopLeftX += cellWidths[i];\n }\n\n let cellTopLeftY = rectangle.y;\n for (let i = 0; i < rowIdx; i++) {\n cellTopLeftY += cellHeights[i];\n }\n\n const cellWidth = calculateCellSize(cell, cellWidths, columnIdx, true);\n const cellBottomRightX = cellTopLeftX + cellWidth;\n\n const cellHeight = calculateCellSize(cell, cellHeights, rowIdx, false);\n const cellBottomRightY = cellTopLeftY + cellHeight;\n\n return {\n ...cell,\n points: [\n [cellTopLeftX, cellTopLeftY],\n [cellBottomRightX, cellBottomRightY]\n ]\n };\n });\n\n return cells;\n}\n\nexport function getCellWithPoints(board: PlaitBoard, table: PlaitBaseTable, cellId: string) {\n try {\n const cells = getCellsWithPoints(board as PlaitTableBoard, table);\n const cellIndex = cells && table.cells.findIndex(item => item.id === cellId);\n return cells[cellIndex];\n } catch (error) {\n throw new Error('can not get table cell points');\n }\n}\n\nfunction calculateCellsSize(items: { id: string; [key: string]: any }[], tableSize: number, count: number, isWidth: boolean) {\n const cellSizes: number[] = [];\n const sizeType = isWidth ? 'width' : 'height';\n\n // The remaining size of the table excluding cells with already set sizes.\n let totalSizeRemaining = tableSize;\n\n items.forEach((item, index) => {\n if (item[sizeType]) {\n cellSizes[index] = item[sizeType];\n totalSizeRemaining -= item[sizeType];\n }\n });\n\n // Divide the remaining size equally.\n const remainingItemCount = count - cellSizes.filter(item => !!item).length;\n const remainingCellSize = remainingItemCount > 0 ? totalSizeRemaining / remainingItemCount : 0;\n for (let i = 0; i < count; i++) {\n if (!cellSizes[i]) {\n cellSizes[i] = remainingCellSize;\n }\n }\n return cellSizes;\n}\n\nfunction calculateCellSize(cell: PlaitTableCell, sizes: number[], index: number, isWidth: boolean) {\n const span = isWidth ? cell.colspan || 1 : cell.rowspan || 1;\n let size = 0;\n for (let i = 0; i < span; i++) {\n const cellIndex = index + i;\n size += sizes[cellIndex];\n }\n return size;\n}\n\nexport function getHitCell(board: PlaitTableBoard, element: PlaitBaseTable, point: Point) {\n const table = board.buildTable(element);\n const cells = getCellsWithPoints(board, table);\n const rectangle = RectangleClient.getRectangleByPoints([point, point]);\n const cell = cells.find(item => {\n const cellRectangle = RectangleClient.getRectangleByPoints(item.points);\n return RectangleClient.isHit(rectangle, cellRectangle);\n });\n if (cell) {\n return table.cells.find(item => item.id === cell.id);\n }\n return null;\n}\n\nexport function editCell(board: PlaitBoard, cell: PlaitTableCell) {\n const textManage = getTextManageByCell(board, cell);\n textManage && textManage.edit();\n}\n\nexport function getTextManageByCell(board: PlaitBoard, cell: PlaitTableCell) {\n return getTextManage(board, undefined, cell);\n}\n\nexport const updateColumns = (table: PlaitBaseTable, columnId: string, width: number, offset: number) => {\n const columns = table.columns.map(item => (item.id === columnId ? { ...item, width } : item));\n const points = [table.points[0], [table.points[1][0] + offset, table.points[1][1]]] as Point[];\n return { columns, points };\n};\n\nexport const updateRows = (table: PlaitBaseTable, rowId: string, height: number, offset: number) => {\n const rows = table.rows.map(item => (item.id === rowId ? { ...item, height } : item));\n const points = [table.points[0], [table.points[1][0], table.points[1][1] + offset]] as Point[];\n return { rows, points };\n};\n\nexport function updateCellIdsByRowOrColumn(cells: PlaitTableCell[], oldId: string, newId: string, type: 'row' | 'column') {\n const id: 'rowId' | 'columnId' = `${type}Id`;\n cells.forEach(item => {\n if (item[id] === oldId) {\n item[id] = newId;\n }\n });\n}\n\nexport function updateRowOrColumnIds(element: PlaitTable, type: 'row' | 'column') {\n element[`${type}s`].forEach(item => {\n const newId = idCreator();\n updateCellIdsByRowOrColumn(element.cells, item.id, newId, type);\n item.id = newId;\n });\n}\n\nexport function updateCellIds(cells: PlaitTableCell[]) {\n cells.forEach(item => {\n const newId = idCreator();\n item.id = newId;\n });\n}\n\nexport function isCellIncludeText(cell: PlaitTableCell) {\n return cell.text;\n}\n\nexport function getCellsRectangle(board: PlaitTableBoard, element: PlaitTable, cells: PlaitTableCell[]) {\n const cellsWithPoints = getCellsWithPoints(board as PlaitTableBoard, element);\n const points = cells.map(cell => {\n const cellWithPoints = cellsWithPoints.find(item => item.id === cell.id);\n return cellWithPoints!.points;\n });\n return RectangleClient.getRectangleByPoints(points);\n}\n\nexport const createCell = (rowId: string, columnId: string, text: string | null = null) => {\n const cell: PlaitTableCell = {\n id: idCreator(),\n rowId,\n columnId\n };\n if (text !== null) {\n cell['text'] = {\n children: [{ text }],\n align: Alignment.center\n };\n }\n return cell;\n};\n\nexport const getSelectedTableCellsEditor = (board: PlaitBoard): BaseEditor[] | undefined => {\n if (isSingleSelectTable(board)) {\n const elements = getSelectedTableElements(board);\n const selectedCells = getSelectedCells(elements[0]);\n const selectedCellsEditor = selectedCells?.map(cell => {\n const textManage = getTextManageByCell(board, cell);\n return textManage?.editor;\n });\n if (selectedCellsEditor?.length) {\n return selectedCellsEditor as BaseEditor[];\n }\n }\n return undefined;\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { BasicShapes, GeometryShapes, MemorizeKey, PlaitDrawElement } from '../interfaces';\nimport { getMemorizedLatest, memorizeLatest } from '@plait/common';\nimport { DrawPointerType } from '../constants';\nimport { BaseOperation, BaseSetNodeOperation, Node } from 'slate';\n\nconst SHAPE_MAX_LENGTH = 6;\nconst memorizedShape: WeakMap<PlaitBoard, GeometryShapes[]> = new WeakMap();\n\nexport const getMemorizeKey = (element: PlaitElement) => {\n let key = '';\n switch (true) {\n case PlaitDrawElement.isText(element): {\n key = MemorizeKey.text;\n break;\n }\n case PlaitDrawElement.isBasicShape(element): {\n key = MemorizeKey.basicShape;\n break;\n }\n case PlaitDrawElement.isFlowchart(element): {\n key = MemorizeKey.flowchart;\n break;\n }\n case PlaitDrawElement.isArrowLine(element): {\n key = MemorizeKey.arrowLine;\n break;\n }\n case PlaitDrawElement.isUML(element): {\n key = MemorizeKey.UML;\n }\n }\n return key;\n};\n\nexport const getLineMemorizedLatest = () => {\n const properties = getMemorizedLatest(MemorizeKey.arrowLine);\n return { ...properties };\n};\n\nexport const getMemorizedLatestByPointer = (pointer: DrawPointerType) => {\n let memorizeKey = '';\n if (PlaitDrawElement.isBasicShape({ shape: pointer })) {\n memorizeKey = pointer === BasicShapes.text ? MemorizeKey.text : MemorizeKey.basicShape;\n } else if (PlaitDrawElement.isUML({ shape: pointer })) {\n memorizeKey = MemorizeKey.UML;\n } else {\n memorizeKey = MemorizeKey.flowchart;\n }\n const properties = { ...getMemorizedLatest(memorizeKey) };\n const textProperties = { ...properties.text };\n delete properties.text;\n return { textProperties, geometryProperties: properties };\n};\n\nexport const memorizeLatestText = <T extends PlaitElement = PlaitDrawElement>(element: T, operations: BaseOperation[]) => {\n const memorizeKey = getMemorizeKey(element);\n let textMemory = getMemorizedLatest(memorizeKey)?.text || {};\n const setNodeOperation = operations.find((operation) => operation.type === 'set_node');\n if (setNodeOperation) {\n const { properties, newProperties } = setNodeOperation as BaseSetNodeOperation;\n for (const key in newProperties) {\n const value = newProperties[key as keyof Partial<Node>];\n if (value == null) {\n delete textMemory[key];\n } else {\n textMemory[key] = value;\n }\n }\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete textMemory[key];\n }\n }\n memorizeLatest(memorizeKey, 'text', textMemory);\n }\n};\n\nexport const memorizeLatestShape = (board: PlaitBoard, shape: GeometryShapes) => {\n const shapes = memorizedShape.has(board) ? memorizedShape.get(board)! : [];\n const shapeIndex = shapes.indexOf(shape);\n if (shape === BasicShapes.text || shapeIndex === 0) {\n return;\n }\n if (shapeIndex !== -1) {\n shapes.splice(shapeIndex, 1);\n } else {\n if (shapes.length === SHAPE_MAX_LENGTH) {\n shapes.pop();\n }\n }\n shapes.unshift(shape);\n memorizedShape.set(board, shapes);\n};\n\nexport const getMemorizedLatestShape = (board: PlaitBoard) => {\n return memorizedShape.get(board);\n};\n","import { ElbowLineRouteOptions, ResizeState, generateElbowLineRoute, removeDuplicatePoints, simplifyOrthogonalPoints } from '@plait/common';\nimport { PlaitBoard, Point, RectangleClient, createDebugGenerator } from '@plait/core';\nimport { 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 { DEFAULT_FONT_FAMILY, ElementSize, getElementSize, ParagraphElement } from '@plait/common';\nimport { PlaitBoard } from '@plait/core';\nimport { DEFAULT_FONT_SIZE } from '@plait/text-plugins';\nimport { MIN_TEXT_WIDTH } from '../constants';\n\nexport const getTextSize = (board: PlaitBoard, text: ParagraphElement, maxWidth?: number): ElementSize => {\n const textSize = getElementSize(board, text, { fontSize: DEFAULT_FONT_SIZE, fontFamily: DEFAULT_FONT_FAMILY }, maxWidth);\n const normalizedTextSize = normalizeWidthAndHeight(textSize);\n return normalizedTextSize;\n};\n\nexport const normalizeWidthAndHeight = (textSize: ElementSize) => {\n return { ...textSize, width: textSize.width < MIN_TEXT_WIDTH ? MIN_TEXT_WIDTH : textSize.width };\n};\n","import {\n Point,\n idCreator,\n PlaitBoard,\n createG,\n RectangleClient,\n findElements,\n PlaitElement,\n drawLinearPath,\n createMask,\n createRect,\n distanceBetweenPointAndPoint,\n catmullRomFitting,\n setStrokeLinecap\n} from '@plait/core';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport {\n getPointOnPolyline,\n getPointByVectorComponent,\n removeDuplicatePoints,\n getExtendPoint,\n getStrokeLineDash,\n StrokeStyle\n} from '@plait/common';\nimport {\n ArrowLineHandle,\n ArrowLineMarkerType,\n ArrowLineShape,\n ArrowLineText,\n PlaitArrowLine,\n PlaitDrawElement,\n PlaitShapeElement\n} from '../../interfaces';\nimport { getStrokeColorByElement, getStrokeStyleByElement } from '../style/stroke';\nimport { getEngine } from '../../engines';\nimport { getElementShape } from '../shape';\nimport { DefaultLineStyle, LINE_TEXT_SPACE } from '../../constants/line';\nimport { LINE_SNAPPING_CONNECTOR_BUFFER } from '../../constants';\nimport { getLineMemorizedLatest } from '../memorize';\nimport { 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';\nimport { getTextSize } from '../text-size';\n\nexport const createArrowLineElement = (\n shape: ArrowLineShape,\n points: [Point, Point],\n source: ArrowLineHandle,\n target: ArrowLineHandle,\n texts?: ArrowLineText[],\n options?: Pick<PlaitArrowLine, 'strokeColor' | 'strokeWidth'>\n): PlaitArrowLine => {\n return {\n id: idCreator(),\n type: 'arrow-line',\n shape,\n source,\n texts: texts ? texts : [],\n target,\n opacity: 1,\n points,\n ...options\n };\n};\n\nexport const getArrowLinePoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n switch (element.shape) {\n case ArrowLineShape.elbow: {\n return getElbowPoints(board, element);\n }\n case ArrowLineShape.curve: {\n return getCurvePoints(board, element);\n }\n default: {\n const points = PlaitArrowLine.getPoints(board, element);\n const handleRefPair = getArrowLineHandleRefPair(board, element);\n points[0] = handleRefPair.source.point;\n points[points.length - 1] = handleRefPair.target.point;\n return points;\n }\n }\n};\n\nexport const getCurvePoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n if (element.points.length === 2) {\n const handleRefPair = getArrowLineHandleRefPair(board, element);\n const { source, target } = handleRefPair;\n const sourceBoundElement = handleRefPair.source.boundElement;\n const targetBoundElement = handleRefPair.target.boundElement;\n let curvePoints: Point[] = [source.point];\n const sumDistance = distanceBetweenPointAndPoint(...source.point, ...target.point);\n const offset = 12 + sumDistance / 3;\n if (sourceBoundElement) {\n curvePoints.push(getPointByVectorComponent(source.point, source.vector, offset));\n }\n if (targetBoundElement) {\n curvePoints.push(getPointByVectorComponent(target.point, target.vector, offset));\n }\n const isSingleBound = (sourceBoundElement && !targetBoundElement) || (!sourceBoundElement && targetBoundElement);\n if (isSingleBound) {\n curvePoints.push(target.point);\n const points = Q2C(curvePoints);\n return pointsOnBezierCurves(points) as Point[];\n }\n if (!sourceBoundElement && !targetBoundElement) {\n curvePoints.push(getPointByVectorComponent(source.point, source.vector, offset));\n curvePoints.push(getPointByVectorComponent(target.point, target.vector, offset));\n }\n curvePoints.push(target.point);\n return pointsOnBezierCurves(curvePoints) as Point[];\n } else {\n let dataPoints = PlaitArrowLine.getPoints(board, element);\n dataPoints = removeDuplicatePoints(dataPoints);\n const points = catmullRomFitting(dataPoints);\n return pointsOnBezierCurves(points) as Point[];\n }\n};\n\nexport const drawArrowLine = (board: PlaitBoard, element: PlaitArrowLine) => {\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(board, element);\n const strokeStyle = getStrokeStyleByElement(board, element);\n const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n const options = { stroke: strokeColor, strokeWidth, strokeLineDash };\n const lineG = createG();\n let points = getArrowLinePoints(board, element);\n let line;\n if (element.shape === ArrowLineShape.curve) {\n line = PlaitBoard.getRoughSVG(board).curve(points, options);\n } else {\n line = drawLinearPath(points, options);\n }\n const id = idCreator();\n line.setAttribute('mask', `url(#${id})`);\n if (element.strokeStyle === StrokeStyle.dotted) {\n setStrokeLinecap(line, 'round');\n }\n lineG.appendChild(line);\n\n const { mask, maskTargetFillRect } = drawArrowLineMask(board, element as PlaitArrowLine, id);\n lineG.appendChild(mask);\n line.appendChild(maskTargetFillRect);\n const arrow = drawArrowLineArrow(element as PlaitArrowLine, points, { stroke: strokeColor, strokeWidth });\n arrow && lineG.appendChild(arrow);\n return lineG;\n};\n\nexport const getHitConnection = (board: PlaitBoard, point: Point, hitElement: PlaitShapeElement): Point => {\n const ref = getSnappingRef(board, hitElement, point);\n const connectionPoint = ref.connectorPoint || ref.edgePoint;\n return getHitConnectionFromConnectionPoint(connectionPoint, hitElement);\n};\n\nexport const getHitConnectionFromConnectionPoint = (connectionPoint: Point, hitElement: PlaitShapeElement): Point => {\n let rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n return [(connectionPoint[0] - rectangle.x) / rectangle.width, (connectionPoint[1] - rectangle.y) / rectangle.height];\n};\n\nexport const getHitConnectorPoint = (point: Point, hitElement: PlaitShapeElement) => {\n const rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n const shape = getElementShape(hitElement);\n const connectorPoints = getEngine(shape).getConnectorPoints(rectangle);\n return connectorPoints.find((connectorPoint) => {\n return distanceBetweenPointAndPoint(...connectorPoint, ...point) <= LINE_SNAPPING_CONNECTOR_BUFFER;\n });\n};\n\nexport const getArrowLineTextRectangle = (board: PlaitBoard, element: PlaitArrowLine, index: number): RectangleClient => {\n const text = element.texts[index];\n const elbowPoints = getArrowLinePoints(board, element);\n const point = getPointOnPolyline(elbowPoints, text.position);\n const textSize = getTextSize(board, text.text);\n return {\n x: point[0] - textSize.width / 2,\n y: point[1] - textSize.height / 2,\n width: textSize.width,\n height: textSize.height\n };\n};\n\nexport const getArrowLines = (board: PlaitBoard) => {\n return findElements(board, {\n match: (element: PlaitElement) => PlaitDrawElement.isArrowLine(element),\n recursion: (element: PlaitElement) => PlaitDrawElement.isDrawElement(element)\n }) as PlaitArrowLine[];\n};\n\n// quadratic Bezier to cubic Bezier\nexport const Q2C = (points: Point[]) => {\n const result = [];\n const numSegments = points.length / 3;\n for (let i = 0; i < numSegments; i++) {\n const start = points[i];\n const qControl = points[i + 1];\n const end = points[i + 2];\n const startDistance = distanceBetweenPointAndPoint(...start, ...qControl);\n const endDistance = distanceBetweenPointAndPoint(...end, ...qControl);\n const cControl1 = getExtendPoint(start, qControl, (startDistance * 2) / 3);\n const cControl2 = getExtendPoint(end, qControl, (endDistance * 2) / 3);\n result.push(start, cControl1, cControl2, end);\n }\n return result;\n};\n\nexport const handleArrowLineCreating = (\n board: PlaitBoard,\n lineShape: ArrowLineShape,\n sourcePoint: Point,\n movingPoint: Point,\n sourceElement: PlaitShapeElement | null,\n lineShapeG: SVGGElement,\n options?: Pick<PlaitArrowLine, 'strokeColor' | 'strokeWidth'>\n) => {\n const alignedMovingPoint = alignPoints(sourcePoint, movingPoint);\n const hitElement = getSnappingShape(board, alignedMovingPoint);\n const targetConnection = hitElement ? getHitConnection(board, alignedMovingPoint, hitElement) : undefined;\n const sourceConnection = sourceElement ? getHitConnection(board, sourcePoint, sourceElement) : undefined;\n const targetBoundId = hitElement ? hitElement.id : undefined;\n const lineGenerator = new ArrowLineShapeGenerator(board);\n const memorizedLatest = getLineMemorizedLatest();\n let sourceMarker, targetMarker;\n sourceMarker = memorizedLatest.source;\n targetMarker = memorizedLatest.target;\n sourceMarker && delete memorizedLatest.source;\n targetMarker && delete memorizedLatest.target;\n const temporaryLineElement = createArrowLineElement(\n lineShape,\n [sourcePoint, alignedMovingPoint],\n { marker: sourceMarker || ArrowLineMarkerType.none, connection: sourceConnection, boundId: sourceElement?.id },\n { marker: targetMarker || ArrowLineMarkerType.arrow, connection: targetConnection, boundId: targetBoundId },\n [],\n {\n strokeWidth: DefaultLineStyle.strokeWidth,\n ...memorizedLatest,\n ...options\n }\n );\n const linePoints = getArrowLinePoints(board, temporaryLineElement);\n const otherPoint = linePoints[0];\n temporaryLineElement.points[1] = alignPoints(otherPoint, alignedMovingPoint);\n lineGenerator.processDrawing(temporaryLineElement, lineShapeG);\n PlaitBoard.getElementTopHost(board).append(lineShapeG);\n return temporaryLineElement;\n};\n\nfunction drawArrowLineMask(board: PlaitBoard, element: PlaitArrowLine, id: string) {\n const mask = createMask();\n mask.setAttribute('id', id);\n const points = getArrowLinePoints(board, element);\n let rectangle = RectangleClient.getRectangleByPoints(points);\n rectangle = RectangleClient.getOutlineRectangle(rectangle, -30);\n const maskFillRect = createRect(rectangle, {\n fill: 'white'\n });\n mask.appendChild(maskFillRect);\n\n const texts = element.texts;\n texts.forEach((text, index) => {\n let textRectangle = getArrowLineTextRectangle(board, element, index);\n textRectangle = RectangleClient.inflate(textRectangle, LINE_TEXT_SPACE * 2);\n const rect = createRect(textRectangle, {\n fill: 'black'\n });\n mask.appendChild(rect);\n });\n // open line\n const maskTargetFillRect = createRect(rectangle);\n maskTargetFillRect.setAttribute('opacity', '0');\n maskTargetFillRect.setAttribute('fill', 'none');\n return { mask, maskTargetFillRect };\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitArrowLine } from '../../interfaces';\nimport { getPointOnPolyline } from '@plait/common';\nimport { getArrowLinePoints } from '../arrow-line/arrow-line-basic';\nimport { getTextSize } from '../text-size';\n\nexport const getHitArrowLineTextIndex = (board: PlaitBoard, element: PlaitArrowLine, point: Point) => {\n const texts = element.texts;\n if (!texts.length) return -1;\n\n const points = getArrowLinePoints(board, element);\n return texts.findIndex((text) => {\n const center = getPointOnPolyline(points, text.position);\n const textSize = getTextSize(board, text.text);\n const rectangle = {\n x: center[0] - textSize.width / 2,\n y: center[1] - textSize.height / 2,\n width: textSize.width,\n height: textSize.height\n };\n return RectangleClient.isHit(rectangle, RectangleClient.getRectangleByPoints([point, point]));\n });\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, idCreator } from '@plait/core';\nimport { GeometryShapes, UMLSymbols, PlaitMultipleTextGeometry } from '../interfaces/geometry';\nimport { DefaultTextProperty, GEOMETRY_WITH_MULTIPLE_TEXT, MultipleTextGeometryTextKeys } from '../constants';\nimport { getEngine } from '../engines';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { DrawTextInfo } from '../generators/text.generator';\nimport { GeometryStyleOptions, getDefaultGeometryProperty } from './geometry';\nimport { PlaitDrawElement } from '../interfaces';\nimport { Alignment, buildText } from '@plait/common';\n\nexport const isMultipleTextShape = (shape: GeometryShapes) => {\n return GEOMETRY_WITH_MULTIPLE_TEXT.includes(shape as UMLSymbols);\n};\n\nexport const isMultipleTextGeometry = (geometry: PlaitElement): geometry is PlaitMultipleTextGeometry => {\n return PlaitDrawElement.isGeometry(geometry) && isMultipleTextShape(geometry.shape);\n};\n\nexport const getMultipleTextGeometryTextKeys = (shape: GeometryShapes) => {\n return MultipleTextGeometryTextKeys[shape];\n};\n\nexport const createMultipleTextGeometryElement = (\n shape: GeometryShapes,\n points: [Point, Point],\n options: GeometryStyleOptions = {}\n): PlaitMultipleTextGeometry => {\n const id = idCreator();\n const drawShapeTexts: DrawTextInfo[] = buildDefaultTextsByShape(shape);\n return {\n id,\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n texts: drawShapeTexts,\n points,\n ...options\n };\n};\n\nexport const buildDefaultTextsByShape = (shape: GeometryShapes): DrawTextInfo[] => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n const textProperties = { ...memorizedLatest.textProperties };\n const alignment = textProperties?.align;\n delete textProperties?.align;\n const defaultTexts = (getDefaultGeometryProperty(shape) as any)?.texts || [];\n const textKeys = getMultipleTextGeometryTextKeys(shape);\n return (textKeys || []).map((textKey: string) => {\n const text = defaultTexts?.find((item: { key: string }) => item?.key === textKey);\n return {\n id: textKey,\n text: buildText(text?.text || '', alignment || text?.align || Alignment.center, textProperties)\n };\n });\n};\n\nexport const getHitMultipleGeometryText = (board: PlaitBoard, element: PlaitMultipleTextGeometry, point: Point) => {\n const engine = getEngine<PlaitMultipleTextGeometry>(element.shape);\n const rectangle = RectangleClient.getRectangleByPoints([point, point]);\n let hitText;\n if (engine.getTextRectangle) {\n hitText = element.texts.find((text) => {\n const textRectangle = engine.getTextRectangle!(board, element, { id: text.id });\n return RectangleClient.isHit(rectangle, textRectangle);\n });\n }\n return hitText;\n};\n","import { PlaitVectorLine } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { drawVectorLine } from '../utils';\n\nexport class VectorLineShapeGenerator extends Generator<PlaitVectorLine> {\n canDraw(element: PlaitVectorLine): boolean {\n return true;\n }\n\n draw(element: PlaitVectorLine) {\n let lineG: SVGGElement | undefined;\n lineG = drawVectorLine(this.board, element);\n return lineG;\n }\n}\n","import { PlaitBoard, Point, catmullRomFitting, createG, drawLinearPath, idCreator, setStrokeLinecap } from '@plait/core';\nimport { PlaitVectorLine, VectorLineShape } from '../interfaces';\nimport { getLineMemorizedLatest } from './memorize';\nimport { DefaultLineStyle } from '../constants/line';\nimport { alignPoints } from './arrow-line';\nimport { getStrokeWidthByElement } from './common';\nimport { getFillByElement, getStrokeColorByElement, getStrokeStyleByElement } from './style';\nimport { VectorLineShapeGenerator } from '../generators/vector-line-generator';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { getStrokeLineDash, StrokeStyle } from '@plait/common';\n\nexport const getVectorLinePoints = (board: PlaitBoard, element: PlaitVectorLine) => {\n switch (element.shape) {\n case VectorLineShape.straight: {\n return element.points;\n }\n case VectorLineShape.curve: {\n if (element.points.length === 2) {\n return pointsOnBezierCurves(element.points) as Point[];\n } else {\n let dataPoints = element.points;\n const points = catmullRomFitting(dataPoints);\n return pointsOnBezierCurves(points) as Point[];\n }\n }\n default:\n return null;\n }\n};\n\nexport const createVectorLineElement = (\n shape: VectorLineShape,\n points: Point[],\n options?: Pick<PlaitVectorLine, 'strokeColor' | 'strokeWidth' | 'fill'>\n): PlaitVectorLine => {\n return {\n id: idCreator(),\n type: 'vector-line',\n shape,\n opacity: 1,\n points,\n ...options\n };\n};\n\nexport const vectorLineCreating = (\n board: PlaitBoard,\n lineShape: VectorLineShape,\n points: Point[],\n movingPoint: Point,\n lineShapeG: SVGGElement\n) => {\n const lineGenerator = new VectorLineShapeGenerator(board);\n const memorizedLatest = getLineMemorizedLatest();\n\n const temporaryLineElement = createVectorLineElement(lineShape, [...points, movingPoint], {\n strokeWidth: DefaultLineStyle.strokeWidth,\n ...memorizedLatest\n });\n const otherPoint = points[points.length - 1];\n temporaryLineElement.points[temporaryLineElement.points.length - 1] = alignPoints(otherPoint, movingPoint);\n lineGenerator.processDrawing(temporaryLineElement, lineShapeG);\n PlaitBoard.getElementTopHost(board).append(lineShapeG);\n return temporaryLineElement;\n};\n\nexport const drawVectorLine = (board: PlaitBoard, element: PlaitVectorLine) => {\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(board, element);\n const strokeStyle = getStrokeStyleByElement(board, element);\n const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n const fill = getFillByElement(board, element);\n const options = { stroke: strokeColor, strokeWidth, strokeLineDash, fill };\n const lineG = createG();\n let points = getVectorLinePoints(board, element)!;\n const line = drawLinearPath(points, options);\n const id = idCreator();\n line.setAttribute('mask', `url(#${id})`);\n if (element.strokeStyle === StrokeStyle.dotted) {\n setStrokeLinecap(line, 'round');\n }\n lineG.appendChild(line);\n return lineG;\n};\n","import { getCrossingPointsBetweenPointAndSegment, isPointOnSegment } from '@plait/common';\nimport { Point } from '@plait/core';\n\nexport const getCenterPointsOnPolygon = (points: Point[]) => {\n const centerPoints: Point[] = [];\n for (let i = 0; i < points.length; i++) {\n let j = i == points.length - 1 ? 0 : i + 1;\n centerPoints.push([(points[i][0] + points[j][0]) / 2, (points[i][1] + points[j][1]) / 2]);\n }\n return centerPoints;\n};\n\nexport const getCrossingPointBetweenPointAndPolygon = (corners: Point[], point: Point) => {\n const result: Point[] = [];\n for (let index = 1; index <= corners.length; index++) {\n let start = corners[index - 1];\n let end = index === corners.length ? corners[0] : corners[index];\n const crossingPoint = getCrossingPointsBetweenPointAndSegment(point, start, end);\n result.push(...crossingPoint);\n }\n return result;\n};\n\nexport const getPolygonEdgeByConnectionPoint = (corners: Point[], point: Point) => {\n for (let index = 1; index <= corners.length; index++) {\n let start = corners[index - 1];\n let end = index === corners.length ? corners[0] : corners[index];\n if (isPointOnSegment(point, start, end)) {\n return [start, end] as [Point, Point];\n }\n }\n return null;\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n SVGArcCommand,\n distanceBetweenPointAndPoint,\n setPathStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { getNearestPointBetweenPointAndArc } from '@plait/core';\n\nexport function generateCloudPath(rectangle: RectangleClient): { startPoint: Point; arcCommands: SVGArcCommand[] } {\n const divisionWidth = rectangle.width / 7;\n const divisionHeight = rectangle.height / 3.2;\n const xRadius = divisionWidth / 8.5;\n const yRadius = divisionHeight / 20;\n\n const startPoint = [rectangle.x + divisionWidth, rectangle.y + divisionHeight] as Point;\n\n const arcCommands: SVGArcCommand[] = [\n {\n rx: xRadius,\n ry: yRadius * 1.2,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 2,\n endY: rectangle.y + divisionHeight / 2\n },\n {\n rx: xRadius,\n ry: yRadius,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 4.2,\n endY: rectangle.y + divisionHeight / 2.2\n },\n {\n rx: xRadius,\n ry: yRadius,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 5.8,\n endY: rectangle.y + divisionHeight\n },\n {\n rx: xRadius,\n ry: yRadius * 1.3,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 6,\n endY: rectangle.y + divisionHeight * 2.2\n },\n {\n rx: xRadius,\n ry: yRadius * 1.2,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 5,\n endY: rectangle.y + divisionHeight * 2.8\n },\n {\n rx: xRadius,\n ry: yRadius / 1.2,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth * 2.8,\n endY: rectangle.y + divisionHeight * 2.8\n },\n {\n rx: xRadius,\n ry: yRadius,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth,\n endY: rectangle.y + divisionHeight * 2.2\n },\n {\n rx: xRadius,\n ry: yRadius * 1.42,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + divisionWidth,\n endY: rectangle.y + divisionHeight\n }\n ];\n\n return { startPoint, arcCommands };\n}\n\nexport const CloudEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, arcCommands } = generateCloudPath(rectangle);\n\n const pathData =\n `M ${startPoint[0]} ${startPoint[1]} ` +\n arcCommands\n .map(\n (command) =>\n `A ${command.rx} ${command.ry} ${command.xAxisRotation} ${command.largeArcFlag} ${command.sweepFlag} ${command.endX} ${command.endY}`\n )\n .join('\\n') +\n ' Z';\n\n const svgElement = rs.path(pathData, { ...options, fillStyle: 'solid' });\n setPathStrokeLinecap(svgElement, 'round');\n return svgElement;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { startPoint, arcCommands } = generateCloudPath(rectangle);\n let minDistance = Infinity;\n let nearestPoint = point;\n\n let currentStart = startPoint;\n for (const arcCommand of arcCommands) {\n const arcNearestPoint = getNearestPointBetweenPointAndArc(point, currentStart, arcCommand);\n const distance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);\n\n if (distance < minDistance) {\n minDistance = distance;\n nearestPoint = arcNearestPoint;\n }\n\n currentStart = [arcCommand.endX, arcCommand.endY];\n }\n\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = CloudEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const widthRatio = 1 / 1.5;\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const textRectangle = getCustomTextRectangle(board, element, widthRatio);\n return textRectangle;\n }\n};\n","import {\n PlaitElement,\n RectangleClient,\n Selection,\n PlaitBoard,\n isLineHitRectangle,\n Point,\n distanceBetweenPointAndSegments,\n distanceBetweenPointAndPoint,\n HIT_DISTANCE_BUFFER,\n rotateAntiPointsByElement,\n isPointInPolygon,\n rotatePointsByAngle,\n createDebugGenerator,\n getNearestPointBetweenPointAndArc,\n getEllipseArcCenter\n} from '@plait/core';\nimport {\n BasicShapes,\n GeometryShapes,\n PlaitArrowLine,\n PlaitCommonGeometry,\n PlaitCustomGeometry,\n PlaitDrawElement,\n PlaitGeometry,\n PlaitShapeElement,\n PlaitVectorLine\n} from '../interfaces';\nimport { getNearestPoint } from './geometry';\nimport { getArrowLinePoints } from './arrow-line/arrow-line-basic';\nimport { getFillByElement } from './style/stroke';\nimport { getEngine } from '../engines';\nimport { getElementShape } from './shape';\nimport { getHitArrowLineTextIndex } from './position/arrow-line';\nimport { getTextRectangle, isClosedCustomGeometry, isClosedDrawElement, isClosedPoints, isDrawElementIncludeText } from './common';\nimport { isMultipleTextGeometry } from './multi-text-geometry';\nimport { getFirstTextEditor, isFilled, sortElementsByArea } from '@plait/common';\nimport { getVectorLinePoints } from './vector-line';\nimport { Editor, Element } from 'slate';\nimport { generateCloudPath } from '../engines/basic-shapes/cloud';\n\nexport const isHitArrowLineText = (board: PlaitBoard, element: PlaitArrowLine, point: Point) => {\n return getHitArrowLineTextIndex(board, element, point) !== -1;\n};\n\nexport const isHitPolyLine = (pathPoints: Point[], point: Point) => {\n const distance = distanceBetweenPointAndSegments(point, pathPoints);\n return distance <= HIT_DISTANCE_BUFFER;\n};\n\nexport const isHitArrowLine = (board: PlaitBoard, element: PlaitArrowLine, point: Point) => {\n const points = getArrowLinePoints(board, element);\n const isHitText = isHitArrowLineText(board, element as PlaitArrowLine, point);\n return isHitText || isHitPolyLine(points, point);\n};\n\nexport const isHitVectorLine = (board: PlaitBoard, element: PlaitVectorLine, point: Point) => {\n const points = getVectorLinePoints(board, element)!;\n if (isClosedPoints(element.points)) {\n return isPointInPolygon(point, points) || isHitPolyLine(points, point);\n } else {\n return isHitPolyLine(points, point);\n }\n};\n\nexport const isRectangleHitElementText = (board: PlaitBoard, element: PlaitCommonGeometry, rectangle: RectangleClient) => {\n const engine = getEngine<PlaitCommonGeometry>(element.shape);\n if (isMultipleTextGeometry(element)) {\n const texts = element.texts;\n return texts.some((item) => {\n const textClient = engine.getTextRectangle!(board, element, { id: item.id });\n return isRectangleHitRotatedPoints(rectangle, RectangleClient.getCornerPoints(textClient), element.angle);\n });\n } else {\n const textClient = engine.getTextRectangle ? engine.getTextRectangle(board, element) : getTextRectangle(board, element);\n return isRectangleHitRotatedPoints(rectangle, RectangleClient.getCornerPoints(textClient), element.angle);\n }\n};\n\nexport const isHitElementText = (board: PlaitBoard, element: PlaitCommonGeometry, point: Point) => {\n const engine = getEngine<PlaitCommonGeometry>(element.shape);\n if (isMultipleTextGeometry(element)) {\n const texts = element.texts;\n return texts.some((item) => {\n const textClient = engine.getTextRectangle!(board, element, { id: item.id });\n return RectangleClient.isPointInRectangle(textClient, point);\n });\n } else {\n const textClient = engine.getTextRectangle ? engine.getTextRectangle(board, element) : getTextRectangle(board, element);\n return RectangleClient.isPointInRectangle(textClient, point);\n }\n};\n\nexport const isEmptyTextElement = (element: PlaitCommonGeometry) => {\n if (!isDrawElementIncludeText(element)) {\n return true;\n }\n const editor = getFirstTextEditor(element);\n return Editor.isEmpty(editor, editor.children[0] as Element);\n};\n\nexport const isRectangleHitDrawElement = (board: PlaitBoard, element: PlaitElement, selection: Selection) => {\n const rangeRectangle = RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]);\n if (PlaitDrawElement.isGeometry(element)) {\n const isHitElement = isRectangleHitRotatedElement(board, rangeRectangle, element);\n if (isHitElement) {\n return isHitElement;\n }\n return !isEmptyTextElement(element) && isRectangleHitElementText(board, element, rangeRectangle);\n }\n\n if (PlaitDrawElement.isImage(element)) {\n return isRectangleHitRotatedElement(board, rangeRectangle, element);\n }\n\n if (PlaitDrawElement.isArrowLine(element)) {\n const points = getArrowLinePoints(board, element);\n return isLineHitRectangle(points, rangeRectangle);\n }\n\n if (PlaitDrawElement.isVectorLine(element)) {\n const points = getVectorLinePoints(board, element)!;\n return isLineHitRectangle(points, rangeRectangle);\n }\n\n return null;\n};\n\nexport const isRectangleHitRotatedElement = (\n board: PlaitBoard,\n rectangle: RectangleClient,\n element: PlaitElement & { points: Point[] }\n) => {\n const client = RectangleClient.getRectangleByPoints(element.points);\n return isRectangleHitRotatedPoints(rectangle, RectangleClient.getCornerPoints(client), element.angle);\n};\n\nexport const isRectangleHitRotatedPoints = (rectangle: RectangleClient, points: Point[], angle: number | undefined) => {\n let rotatedPoints = rotatePointsByAngle(points, angle) || points;\n return isLineHitRectangle(rotatedPoints, rectangle);\n};\n\nexport const getHitDrawElement = (board: PlaitBoard, elements: (PlaitDrawElement | PlaitCustomGeometry)[]) => {\n let firstFilledElement = getFirstFilledDrawElement(board, elements);\n let endIndex = elements.length;\n if (firstFilledElement) {\n endIndex = elements.indexOf(firstFilledElement) + 1;\n }\n const newElements = elements.slice(0, endIndex);\n const solidElements = getSolidElements(newElements);\n if (solidElements) {\n return solidElements[0];\n }\n const sortElements = sortElementsByArea(board, newElements, 'asc');\n return sortElements[0];\n};\n\nexport const getFirstFilledDrawElement = (board: PlaitBoard, elements: (PlaitDrawElement | PlaitCustomGeometry)[]) => {\n let filledElement: PlaitGeometry | PlaitCustomGeometry | null = null;\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (isClosedCustomGeometry(board, element) || isClosedDrawElement(element)) {\n const fill = getFillByElement(board, element);\n if (isFilled(fill)) {\n filledElement = element as PlaitGeometry;\n break;\n }\n }\n }\n return filledElement;\n};\n\nexport const isFilledDrawElement = (board: PlaitBoard, element: PlaitDrawElement | PlaitCustomGeometry) => {\n return getFirstFilledDrawElement(board, [element]) !== null;\n};\n\nexport const getSolidElements = (elements: PlaitElement[]) => {\n const solidElements = elements.filter(\n (item) => PlaitDrawElement.isText(item) || PlaitDrawElement.isLine(item) || PlaitDrawElement.isImage(item)\n );\n if (solidElements.length) {\n return solidElements;\n }\n return null;\n};\n\nconst debugKey = 'debug:plait:hit:shape:edge:sample-points';\nconst debugGenerator = createDebugGenerator(debugKey);\nconst shapes: GeometryShapes[] = [BasicShapes.cloud];\n\nexport const isHitDrawElement = (board: PlaitBoard, element: PlaitElement, point: Point, isStrict: boolean = true) => {\n const rectangle = board.getRectangle(element);\n point = rotateAntiPointsByElement(board, point, element) || point;\n if (PlaitDrawElement.isGeometry(element) && rectangle) {\n if (debugGenerator.isDebug() && shapes.includes(element.shape)) {\n debugGenerator.clear();\n const { startPoint, arcCommands } = generateCloudPath(rectangle);\n const points = [startPoint, ...arcCommands.map((arc) => [arc.endX, arc.endY])] as Point[];\n debugGenerator.drawCircles(board, points, 5, false);\n let minDistance = Infinity;\n let nearestPoint = point;\n let currentStart = startPoint;\n for (const arc of arcCommands) {\n const arcNearestPoint = getNearestPointBetweenPointAndArc(point, currentStart, arc);\n const distance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);\n const { center } = getEllipseArcCenter(currentStart, arc);\n debugGenerator.drawCircles(board, [center], 8, false, { fill: 'yellow' });\n if (distance < minDistance) {\n minDistance = distance;\n nearestPoint = arcNearestPoint;\n }\n currentStart = [arc.endX, arc.endY];\n }\n debugGenerator.drawCircles(board, [point], 12, false, { fill: 'black', stroke: 'black' });\n debugGenerator.drawCircles(board, [nearestPoint], 12, false, { fill: 'green', stroke: 'green' });\n }\n if (isHitEdgeOfShape(board, element, point, HIT_DISTANCE_BUFFER)) {\n return true;\n }\n const engine = getEngine(getElementShape(element));\n if (PlaitDrawElement.isText(element)) {\n const textClient = getTextRectangle(board, element);\n return RectangleClient.isPointInRectangle(textClient, point);\n }\n if (!!isStrict && isEmptyTextElement(element) && !isFilledDrawElement(board, element)) {\n return false;\n }\n const isHitText = isHitElementText(board, element, point);\n return isHitText || engine.isInsidePoint(rectangle!, point);\n }\n if (PlaitDrawElement.isImage(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n return RectangleClient.isPointInRectangle(client, point);\n }\n if (PlaitDrawElement.isArrowLine(element)) {\n return isHitArrowLine(board, element, point);\n }\n\n if (PlaitDrawElement.isVectorLine(element)) {\n return isHitVectorLine(board, element, point);\n }\n return null;\n};\n\nexport const isHitEdgeOfShape = (board: PlaitBoard, element: PlaitShapeElement, point: Point, hitDistanceBuffer: number) => {\n const nearestPoint = getNearestPoint(element, point);\n const distance = distanceBetweenPointAndPoint(nearestPoint[0], nearestPoint[1], point[0], point[1]);\n return distance <= hitDistanceBuffer;\n};\n\nexport const isInsideOfShape = (board: PlaitBoard, element: PlaitShapeElement, point: Point, hitDistanceBuffer: number) => {\n const client = RectangleClient.inflate(RectangleClient.getRectangleByPoints(element.points), hitDistanceBuffer);\n return getEngine(getElementShape(element)).isInsidePoint(client, point);\n};\n\nexport const isHitElementInside = (board: PlaitBoard, element: PlaitElement, point: Point) => {\n const rectangle = board.getRectangle(element);\n point = rotateAntiPointsByElement(board, point, element) || point;\n if (PlaitDrawElement.isGeometry(element) && !PlaitDrawElement.isGeometryByTable(element)) {\n const engine = getEngine(getElementShape(element));\n const isHitInside = engine.isInsidePoint(rectangle!, point);\n if (isHitInside) {\n return isHitInside;\n }\n if (engine.getTextRectangle) {\n const isHitText = isHitElementText(board, element, point);\n if (isHitText) {\n return isHitText;\n }\n }\n }\n if (PlaitDrawElement.isImage(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n return RectangleClient.isPointInRectangle(client, point);\n }\n\n if (PlaitDrawElement.isArrowLine(element)) {\n return isHitArrowLine(board, element, point);\n }\n\n if (PlaitDrawElement.isVectorLine(element)) {\n return isHitVectorLine(board, element, point);\n }\n\n return null;\n};\n","import {\n ACTIVE_STROKE_WIDTH,\n addSelectedElement,\n Ancestor,\n BoardTransforms,\n clearSelectedElement,\n createG,\n depthFirstRecursion,\n drawCircle,\n getI18nValue,\n getIsRecursionFunc,\n PlaitBoard,\n PlaitElement,\n PlaitPointerType,\n Point,\n RectangleClient,\n rotateAntiPointsByElement,\n SELECTION_BORDER_COLOR,\n SELECTION_FILL_COLOR,\n SNAPPING_STROKE_WIDTH,\n Transforms\n} from '@plait/core';\nimport {\n DefaultDrawStyle,\n DefaultTextProperty,\n DrawI18nKey,\n GeometryThreshold,\n LINE_HIT_GEOMETRY_BUFFER,\n LINE_SNAPPING_BUFFER,\n ShapeDefaultSpace\n} from '../constants';\nimport {\n DrawOptions,\n DrawShapes,\n GeometryCommonTextKeys,\n PlaitBaseGeometry,\n PlaitCommonGeometry,\n PlaitCustomGeometry,\n PlaitDrawElement,\n PlaitGeometry,\n PlaitShapeElement\n} from '../interfaces';\nimport { Alignment, getTextEditorsByElement } from '@plait/common';\nimport { isCellIncludeText } from './table';\nimport { getEngine } from '../engines';\nimport { getElementShape } from './shape';\nimport { Options } from 'roughjs/bin/core';\nimport { PlaitBaseTable } from '../interfaces/table';\nimport { memorizeLatestShape } from './memorize';\nimport { isHitEdgeOfShape, isInsideOfShape } from './hit';\nimport { getHitConnectorPoint } from './arrow-line';\nimport { getNearestPoint, isGeometryClosed, isGeometryIncludeText, isSingleTextGeometry } from './geometry';\nimport { isMultipleTextGeometry } from './multi-text-geometry';\nimport { DrawTextInfo } from '../generators/text.generator';\nimport { getTextSize } from './text-size';\n\nexport const getTextRectangle = <T extends PlaitElement = PlaitGeometry>(board: PlaitBoard, element: T) => {\n const isAutoSize = PlaitDrawElement.isText(element) ? element.autoSize : false;\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const textSize = getTextSize(board, element.text, isAutoSize ? GeometryThreshold.defaultTextMaxWidth : width);\n if (isAutoSize) {\n return {\n height: textSize.height,\n width: textSize.width,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n};\n\nexport const getCustomTextRectangle = <T extends PlaitElement = PlaitGeometry>(board: PlaitBoard, element: T, widthRatio: number) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const width = widthRatio * elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - getStrokeWidthByElement(element) * 2;\n const textSize = getTextSize(board, element.text!, width);\n return {\n height: textSize.height,\n width: width,\n x: elementRectangle.x + (elementRectangle.width - width) / 2,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n};\n\nexport const getStrokeWidthByElement = (element: PlaitElement) => {\n if (PlaitDrawElement.isText(element)) {\n return 0;\n }\n const strokeWidth = element.strokeWidth || DefaultDrawStyle.strokeWidth;\n return strokeWidth;\n};\n\nexport const insertElement = (board: PlaitBoard, element: PlaitBaseGeometry | PlaitBaseTable) => {\n memorizeLatestShape(board, element.shape);\n Transforms.insertNode(board, element, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(board, element);\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n};\n\nexport const isDrawElementIncludeText = (element: PlaitDrawElement) => {\n if (PlaitDrawElement.isText(element)) {\n return true;\n }\n if (PlaitDrawElement.isImage(element)) {\n return false;\n }\n if (PlaitDrawElement.isGeometry(element)) {\n return isGeometryIncludeText(element);\n }\n if (PlaitDrawElement.isArrowLine(element)) {\n const editors = getTextEditorsByElement(element);\n return editors.length > 0;\n }\n if (PlaitDrawElement.isElementByTable(element)) {\n return element.cells.some((cell) => isCellIncludeText(cell));\n }\n return true;\n};\n\nexport const isDrawElementsIncludeText = (elements: PlaitDrawElement[]) => {\n return elements.some((item) => {\n return isDrawElementIncludeText(item);\n });\n};\n\nexport const isClosedDrawElement = (element: PlaitElement) => {\n if (PlaitDrawElement.isDrawElement(element)) {\n if (PlaitDrawElement.isText(element) || PlaitDrawElement.isArrowLine(element) || PlaitDrawElement.isImage(element)) {\n return false;\n }\n if (PlaitDrawElement.isVectorLine(element)) {\n return isClosedPoints(element.points);\n }\n if (PlaitDrawElement.isGeometry(element)) {\n return isGeometryClosed(element);\n }\n return true;\n }\n return false;\n};\n\nexport const isClosedCustomGeometry = (board: PlaitBoard, value: PlaitElement): value is PlaitCustomGeometry => {\n return PlaitDrawElement.isCustomGeometryElement(board, value) && isClosedPoints(value.points);\n};\n\nexport const getSnappingShape = (board: PlaitBoard, point: Point): PlaitShapeElement | null => {\n let hitElement: PlaitShapeElement | null = getHitShape(board, point);\n if (hitElement) {\n const ref = getSnappingRef(board, hitElement, point);\n if (ref.isHitConnector || ref.isHitEdge) {\n return hitElement;\n }\n }\n return null;\n};\n\nexport const getSnappingRef = (board: PlaitBoard, hitElement: PlaitShapeElement, point: Point) => {\n const rotatedPoint = rotateAntiPointsByElement(board, point, hitElement) || point;\n const connectorPoint = getHitConnectorPoint(rotatedPoint, hitElement);\n const edgePoint = getNearestPoint(hitElement, rotatedPoint);\n const isHitEdge = isHitEdgeOfShape(board, hitElement, rotatedPoint, LINE_SNAPPING_BUFFER);\n return { isHitEdge, isHitConnector: !!connectorPoint, connectorPoint, edgePoint };\n};\n\nexport const getHitShape = (board: PlaitBoard, point: Point, offset = LINE_HIT_GEOMETRY_BUFFER): PlaitShapeElement | null => {\n let hitShape: PlaitShapeElement | null = null;\n traverseDrawShapes(board, (element: PlaitShapeElement) => {\n if (hitShape === null && isInsideOfShape(board, element, rotateAntiPointsByElement(board, point, element) || point, offset * 2)) {\n hitShape = element;\n }\n });\n return hitShape;\n};\n\nexport const traverseDrawShapes = (board: PlaitBoard, callback: (element: PlaitShapeElement) => void) => {\n depthFirstRecursion<Ancestor>(\n board,\n (node) => {\n if (!PlaitBoard.isBoard(node) && PlaitDrawElement.isShapeElement(node)) {\n callback(node);\n }\n },\n getIsRecursionFunc(board),\n true\n );\n};\n\nexport const drawShape = (\n board: PlaitBoard,\n outerRectangle: RectangleClient,\n shape: DrawShapes,\n roughOptions: Options,\n drawOptions?: DrawOptions\n) => {\n return getEngine(shape).draw(board, outerRectangle, roughOptions, drawOptions);\n};\n\nexport const drawBoundReaction = (\n board: PlaitBoard,\n element: PlaitShapeElement,\n roughOptions: { hasMask: boolean; hasConnector: boolean } = { hasMask: true, hasConnector: true }\n) => {\n const g = createG();\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const activeRectangle = RectangleClient.inflate(rectangle, SNAPPING_STROKE_WIDTH);\n const shape = getElementShape(element);\n let drawOptions: DrawOptions | undefined;\n if (PlaitDrawElement.isElementByTable(element)) {\n drawOptions = { element };\n }\n const strokeG = drawShape(\n board,\n activeRectangle,\n shape,\n {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: SNAPPING_STROKE_WIDTH\n },\n drawOptions\n );\n g.appendChild(strokeG);\n\n if (roughOptions.hasMask) {\n const maskG = drawShape(\n board,\n activeRectangle,\n shape,\n {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 0,\n fill: isClosedDrawElement(element) ? SELECTION_FILL_COLOR : DefaultDrawStyle.fill,\n fillStyle: 'solid'\n },\n drawOptions\n );\n g.appendChild(maskG);\n }\n if (roughOptions.hasConnector) {\n const connectorPoints = getEngine(shape).getConnectorPoints(rectangle);\n connectorPoints.forEach((point) => {\n const circleG = drawCircle(PlaitBoard.getRoughSVG(board), point, 8, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n fill: '#FFF',\n fillStyle: 'solid'\n });\n g.appendChild(circleG);\n });\n }\n return g;\n};\n\nexport const getTextKey = (element: PlaitElement | undefined, text: Pick<DrawTextInfo, 'id'>) => {\n if (element && isMultipleTextGeometry(element)) {\n return `${element.id}-${text.id}`;\n } else {\n return text.id;\n }\n};\n\nexport const getGeometryAlign = (board: PlaitBoard, element: PlaitCommonGeometry | PlaitBaseTable) => {\n if (isMultipleTextGeometry(element)) {\n const drawShapeText = element.texts.find((item) => item.id.includes(GeometryCommonTextKeys.content));\n return drawShapeText?.text.align || Alignment.center;\n }\n if (isSingleTextGeometry(element as PlaitCommonGeometry)) {\n return (element as PlaitGeometry).text?.align || Alignment.center;\n }\n\n if (PlaitDrawElement.isElementByTable(element)) {\n const firstTextCell = element.cells.find((item) => item.text);\n return firstTextCell?.text?.align || Alignment.center;\n }\n return Alignment.center;\n};\n\nexport const isClosedPoints = (points: Point[]) => {\n const startPoint = points[0];\n const endPoint = points[points.length - 1];\n return startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1];\n};\n\nexport const getDefaultGeometryText = (board: PlaitBoard) => {\n return getI18nValue(board, DrawI18nKey.geometryText, DefaultTextProperty.text);\n};\n","import { PlaitDrawElement } from '../../interfaces';\nimport { DefaultDrawStyle } from '../../constants';\nimport { PlaitBoard, PlaitElement } from '@plait/core';\nimport { getDrawDefaultStrokeColor, getFlowchartDefaultFill } from '../geometry';\nimport { isClosedDrawElement } from '../common';\nimport { StrokeStyle } from '@plait/common';\n\nexport const getStrokeColorByElement = (board: PlaitBoard, element: PlaitElement) => {\n const defaultColor = getDrawDefaultStrokeColor(board.theme.themeColorMode);\n const strokeColor = element.strokeColor || defaultColor;\n return strokeColor;\n};\n\nexport const getFillByElement = (board: PlaitBoard, element: PlaitElement) => {\n const defaultFill =\n PlaitDrawElement.isFlowchart(element) && isClosedDrawElement(element as PlaitDrawElement)\n ? getFlowchartDefaultFill(board.theme.themeColorMode)\n : DefaultDrawStyle.fill;\n const fill = element.fill || defaultFill;\n return fill;\n};\n\nexport const getStrokeStyleByElement = (board: PlaitBoard, element: PlaitElement) => {\n return element.strokeStyle || StrokeStyle.solid;\n};\n","import { BasicShapes, PlaitGeometry } from '../interfaces';\nimport { Generator, getStrokeLineDash } from '@plait/common';\nimport { getFillByElement, getStrokeColorByElement, getStrokeStyleByElement } from '../utils/style/stroke';\nimport { drawGeometry, getStrokeWidthByElement } from '../utils';\nimport { RectangleClient } from '@plait/core';\n\nexport interface ShapeData {}\n\nexport class GeometryShapeGenerator extends Generator<PlaitGeometry, ShapeData> {\n canDraw(element: PlaitGeometry, data: ShapeData): boolean {\n return true;\n }\n\n draw(element: PlaitGeometry, data: ShapeData) {\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const shape = element.shape;\n if (shape === BasicShapes.text) {\n return;\n }\n const fill = getFillByElement(this.board, element);\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(this.board, element);\n const strokeStyle = getStrokeStyleByElement(this.board, element);\n const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n return drawGeometry(this.board, RectangleClient.inflate(rectangle, -strokeWidth), shape, {\n stroke: strokeColor,\n strokeWidth,\n fill,\n strokeLineDash\n });\n }\n}\n","import { PlaitBoard, Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { PlaitLine } from '../interfaces/line';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement, PlaitVectorLine } from '../interfaces';\nimport {\n getCurvePoints,\n getElbowLineRouteOptions,\n getElbowPoints,\n getNextSourceAndTargetPoints,\n isUseDefaultOrthogonalRoute\n} from './arrow-line';\nimport { getVectorLinePoints } from './vector-line';\n\nexport function getMiddlePoints(board: PlaitBoard, element: PlaitLine) {\n const result: Point[] = [];\n const shape = element.shape;\n const hideBuffer = 10;\n if (shape === ArrowLineShape.straight) {\n const points = PlaitDrawElement.isArrowLine(element)\n ? PlaitArrowLine.getPoints(board, element)\n : (element as PlaitVectorLine).points;\n for (let i = 0; i < points.length - 1; i++) {\n const distance = distanceBetweenPointAndPoint(...points[i], ...points[i + 1]);\n if (distance < hideBuffer) continue;\n result.push([(points[i][0] + points[i + 1][0]) / 2, (points[i][1] + points[i + 1][1]) / 2]);\n }\n }\n if (shape === ArrowLineShape.curve) {\n const points = PlaitDrawElement.isArrowLine(element)\n ? PlaitArrowLine.getPoints(board, element)\n : (element as PlaitVectorLine).points;\n const pointsOnBezier = PlaitDrawElement.isArrowLine(element)\n ? getCurvePoints(board, element)\n : getVectorLinePoints(board, element)!;\n if (points.length === 2) {\n const start = 0;\n const endIndex = pointsOnBezier.length - 1;\n const middleIndex = Math.round((start + endIndex) / 2);\n result.push(pointsOnBezier[middleIndex]);\n } else {\n for (let i = 0; i < points.length - 1; i++) {\n const startIndex = pointsOnBezier.findIndex(point => point[0] === points[i][0] && point[1] === points[i][1]);\n const endIndex = pointsOnBezier.findIndex(point => point[0] === points[i + 1][0] && point[1] === points[i + 1][1]);\n const middleIndex = Math.round((startIndex + endIndex) / 2);\n const distance = distanceBetweenPointAndPoint(...points[i], ...points[i + 1]);\n if (distance < hideBuffer) continue;\n result.push(pointsOnBezier[middleIndex]);\n }\n }\n }\n if (shape === ArrowLineShape.elbow) {\n const renderPoints = getElbowPoints(board, element);\n const options = getElbowLineRouteOptions(board, element);\n if (!isUseDefaultOrthogonalRoute(element, options)) {\n const [nextSourcePoint, nextTargetPoint] = getNextSourceAndTargetPoints(board, element);\n for (let i = 0; i < renderPoints.length - 1; i++) {\n if (\n (i == 0 && Point.isEquals(renderPoints[i + 1], nextSourcePoint)) ||\n (i === renderPoints.length - 2 && Point.isEquals(renderPoints[renderPoints.length - 2], nextTargetPoint))\n ) {\n continue;\n }\n const [currentX, currentY] = renderPoints[i];\n const [nextX, nextY] = renderPoints[i + 1];\n const middlePoint = [(currentX + nextX) / 2, (currentY + nextY) / 2] as Point;\n result.push(middlePoint);\n }\n }\n }\n return result;\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement } from '../../interfaces';\nimport { RESIZE_HANDLE_DIAMETER } from '@plait/common';\nimport { PlaitLine } from '../../interfaces/line';\nimport { getMiddlePoints } from '../line';\n\nexport enum LineResizeHandle {\n 'source' = 'source',\n 'target' = 'target',\n 'addHandle' = 'addHandle'\n}\n\nexport const getHitLineResizeHandleRef = (board: PlaitBoard, element: PlaitLine, point: Point) => {\n let dataPoints = PlaitDrawElement.isArrowLine(element) ? PlaitArrowLine.getPoints(board, element) : element.points;\n const index = getHitPointIndex(dataPoints, point);\n if (index !== -1) {\n const handleIndex = index;\n if (index === 0) {\n return { handle: LineResizeHandle.source, handleIndex };\n }\n if (index === dataPoints.length - 1) {\n return { handle: LineResizeHandle.target, handleIndex };\n }\n // elbow line, data points only verify source connection point and target connection point\n if (element.shape !== ArrowLineShape.elbow) {\n return { handleIndex };\n }\n }\n const middlePoints = getMiddlePoints(board, element);\n const indexOfMiddlePoints = getHitPointIndex(middlePoints, point);\n if (indexOfMiddlePoints !== -1) {\n return {\n handle: LineResizeHandle.addHandle,\n handleIndex: indexOfMiddlePoints\n };\n }\n return undefined;\n};\n\nexport function getHitPointIndex(points: Point[], movingPoint: Point) {\n const rectangles = points.map(point => {\n return {\n x: point[0] - RESIZE_HANDLE_DIAMETER / 2,\n y: point[1] - RESIZE_HANDLE_DIAMETER / 2,\n width: RESIZE_HANDLE_DIAMETER,\n height: RESIZE_HANDLE_DIAMETER\n };\n });\n const rectangle = rectangles.find(rectangle => {\n return RectangleClient.isHit(RectangleClient.getRectangleByPoints([movingPoint, movingPoint]), rectangle);\n });\n return rectangle ? rectangles.indexOf(rectangle) : -1;\n}\n","import {\n PlaitBoard,\n Point,\n SELECTION_RECTANGLE_CLASS_NAME,\n createG,\n drawRectangle,\n getSelectedElements,\n toActivePointFromViewBoxPoint,\n toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement } from '../interfaces';\nimport { Generator, PRIMARY_COLOR, drawFillPrimaryHandle, drawPrimaryHandle } from '@plait/common';\nimport { getMiddlePoints } from '../utils/line';\nimport { getNextRenderPoints } from '../utils/arrow-line/elbow';\nimport { isUpdatedHandleIndex } from '../utils/arrow-line';\nimport { getHitPointIndex } from '../utils/position/line';\nimport { DefaultDrawActiveStyle } from '../constants';\nimport { PlaitLine } from '../interfaces/line';\n\nexport interface ActiveData {\n selected: boolean;\n linePoints: Point[];\n}\n\nexport class LineActiveGenerator extends Generator<PlaitLine, ActiveData> {\n onlySelectedCurrentLine = false;\n\n constructor(protected board: PlaitBoard, options: { active: boolean } = { active: true }) {\n super(board, options);\n }\n\n canDraw(element: PlaitLine, data: ActiveData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: PlaitLine, data: ActiveData): SVGGElement {\n const activeG = createG();\n const selectedElements = getSelectedElements(this.board);\n this.onlySelectedCurrentLine = selectedElements.length === 1;\n if (this.onlySelectedCurrentLine) {\n activeG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n const points = PlaitDrawElement.isArrowLine(element) ? PlaitArrowLine.getPoints(this.board, element) : element.points;\n let updatePoints = [...points];\n let elbowNextRenderPoints: Point[] = [];\n if (element.shape === ArrowLineShape.elbow) {\n updatePoints = points.slice(0, 1).concat(points.slice(-1));\n elbowNextRenderPoints = getNextRenderPoints(this.board, element, data.linePoints);\n }\n const activePoints = updatePoints.map((point) => toActivePointFromViewBoxPoint(this.board, point));\n activePoints.forEach((point) => {\n const updateHandle = drawPrimaryHandle(this.board, point);\n activeG.appendChild(updateHandle);\n });\n const middlePoints = getMiddlePoints(this.board, element);\n const activeMiddlePoints = middlePoints.map((point) => toActivePointFromViewBoxPoint(this.board, point));\n if (!PlaitBoard.hasBeenTextEditing(this.board)) {\n for (let i = 0; i < activeMiddlePoints.length; i++) {\n const point = activeMiddlePoints[i];\n if (element.shape === ArrowLineShape.elbow && elbowNextRenderPoints.length) {\n const handleIndex = getHitPointIndex(activeMiddlePoints, point);\n const isUpdateHandleIndex = isUpdatedHandleIndex(\n this.board,\n element,\n [...points],\n elbowNextRenderPoints,\n handleIndex\n );\n if (isUpdateHandleIndex) {\n const updateHandle = drawPrimaryHandle(this.board, point);\n activeG.appendChild(updateHandle);\n continue;\n }\n }\n const circle = drawFillPrimaryHandle(this.board, point);\n activeG.appendChild(circle);\n }\n }\n } else {\n const rectangle = this.board.getRectangle(element);\n if (rectangle) {\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(this.board, rectangle);\n let opacity = '0.5';\n if (activeRectangle.height === 0 || activeRectangle.width === 0) {\n opacity = '0.8';\n }\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: DefaultDrawActiveStyle.selectionStrokeWidth\n });\n strokeG.style.opacity = opacity;\n activeG.appendChild(strokeG);\n }\n }\n return activeG;\n }\n\n needUpdate() {\n const selectedElements = getSelectedElements(this.board);\n const onlySelectedCurrentLine = selectedElements.length === 1;\n return onlySelectedCurrentLine !== this.onlySelectedCurrentLine;\n }\n}\n","import { PlaitBoard, rgbaToHEX, createG, drawCircle, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { PlaitGeometry, PlaitShapeElement } from '../interfaces';\nimport { ActiveGeneratorExtraData, Generator, PRIMARY_COLOR } from '@plait/common';\nimport { getAutoCompletePoints } from '../utils';\nimport { LINE_AUTO_COMPLETE_DIAMETER, LINE_AUTO_COMPLETE_OPACITY } from '../constants/line';\n\nexport class ArrowLineAutoCompleteGenerator<T extends PlaitShapeElement = PlaitGeometry> extends Generator<T, ActiveGeneratorExtraData> {\n static key = 'line-auto-complete-generator';\n\n autoCompleteG!: SVGGElement;\n hoverElement: SVGGElement | null = null;\n\n constructor(public board: PlaitBoard) {\n super(board, { active: true });\n }\n\n canDraw(element: PlaitShapeElement, data: ActiveGeneratorExtraData): boolean {\n const selectedElements = getSelectedElements(this.board);\n if (data.selected && selectedElements.length === 1 && !isSelectionMoving(this.board)) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n this.autoCompleteG = createG();\n const middlePoints = getAutoCompletePoints(this.board, element, true);\n middlePoints.forEach((point, index) => {\n const circle = drawCircle(PlaitBoard.getRoughSVG(this.board), point, LINE_AUTO_COMPLETE_DIAMETER, {\n stroke: 'none',\n fill: rgbaToHEX(PRIMARY_COLOR, LINE_AUTO_COMPLETE_OPACITY),\n fillStyle: 'solid'\n });\n circle.classList.add(`line-auto-complete-${index}`);\n this.autoCompleteG.appendChild(circle);\n });\n return this.autoCompleteG;\n }\n\n removeAutoCompleteG(index: number) {\n this.hoverElement = this.autoCompleteG.querySelector(`.line-auto-complete-${index}`);\n this.hoverElement!.style.visibility = 'hidden';\n }\n\n recoverAutoCompleteG() {\n if (this.hoverElement) {\n this.hoverElement.style.visibility = 'visible';\n this.hoverElement = null;\n }\n }\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { PlaitCommonGeometry, PlaitGeometry } from '../interfaces';\nimport { DrawTextInfo, TextGenerator, TextGeneratorOptions } from './text.generator';\nimport { isMultipleTextGeometry } from '../utils';\nimport { ParagraphElement } from '@plait/common';\n\nexport class SingleTextGenerator<T extends PlaitElement = PlaitGeometry> extends TextGenerator<T> {\n get textManage() {\n return this.textManages[0];\n }\n\n constructor(board: PlaitBoard, element: T, text: ParagraphElement, options: TextGeneratorOptions<T>) {\n super(board, element, [{ id: element.id, text: text }], options);\n }\n\n update(element: T, previousDrawShapeTexts: DrawTextInfo[], currentDrawShapeTexts: DrawTextInfo[], elementG: SVGElement): void;\n update(element: T, previousText: ParagraphElement, currentText: ParagraphElement, elementG: SVGElement): void;\n update(\n element: T,\n previousText: ParagraphElement | DrawTextInfo[],\n currentText: ParagraphElement | DrawTextInfo[],\n elementG: SVGElement\n ) {\n if (!isMultipleTextGeometry((element as unknown) as PlaitCommonGeometry)) {\n super.update(\n element,\n [{ text: previousText as ParagraphElement, id: element.id }],\n [{ text: currentText as ParagraphElement, id: element.id }],\n elementG\n );\n }\n }\n}\n","import { TableSymbols } from '../interfaces';\nimport { Generator, getStrokeLineDash } from '@plait/common';\nimport { PlaitElement, RectangleClient } from '@plait/core';\nimport { PlaitBaseTable } from '../interfaces/table';\nimport { getEngine } from '../engines';\nimport { getStrokeColorByElement, getStrokeStyleByElement, getStrokeWidthByElement } from '../utils';\n\nexport interface TableData {}\n\nexport class TableGenerator<T extends PlaitElement = PlaitBaseTable> extends Generator<T, TableData> {\n canDraw(element: T, data: TableData): boolean {\n return true;\n }\n\n draw(element: T, data: TableData) {\n const rectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(this.board, element);\n const strokeStyle = getStrokeStyleByElement(this.board, element);\n const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n return getEngine(TableSymbols.table).draw(\n this.board,\n rectangle,\n {\n strokeWidth,\n stroke: strokeColor,\n strokeLineDash\n },\n {\n element: element\n }\n );\n }\n}\n","import { PlaitBoard } from '@plait/core';\nimport { BasicShapes, PlaitDrawElement, PlaitGeometry, PlaitShapeElement, TableSymbols } from '../interfaces';\nimport { DrawPointerType } from '../constants/pointer';\nimport { GeometryShapeGenerator, TableGenerator } from '../generators';\n\nexport const getElementShape = (value: PlaitShapeElement) => {\n if (PlaitDrawElement.isImage(value)) {\n return BasicShapes.rectangle;\n }\n if (PlaitDrawElement.isTable(value)) {\n return TableSymbols.table;\n }\n return value.shape;\n};\n\nexport const getGeometryGeneratorByShape = (board: PlaitBoard, shape: DrawPointerType) => {\n if (PlaitDrawElement.isUMLClassOrInterface({ shape: shape })) {\n return new TableGenerator<PlaitGeometry>(board);\n } else {\n return new GeometryShapeGenerator(board);\n }\n};\n","import { PlaitBoard, Point, idCreator } from '@plait/core';\nimport { DefaultBasicShapeProperty } from '../constants';\nimport { GeometryShapes, UMLSymbols, PlaitCommonGeometry } from '../interfaces';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { GeometryStyleOptions, getDefaultGeometryProperty, getTextShapeProperty } from './geometry';\nimport { PlaitTableCell } from '../interfaces/table';\nimport { getDefaultGeometryText } from './common';\n\nexport const createUMLClassOrInterfaceGeometryElement = (board: PlaitBoard, shape: GeometryShapes, points: [Point, Point]) => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n const element = {\n id: idCreator(),\n type: 'geometry',\n angle: 0,\n opacity: 1,\n points,\n strokeWidth: DefaultBasicShapeProperty.strokeWidth,\n ...(memorizedLatest.geometryProperties as GeometryStyleOptions)\n };\n let rows: { id: string; height?: number }[];\n let columns: { id: string; height?: number }[];\n if (shape === UMLSymbols.class) {\n rows = [\n {\n id: idCreator(),\n height: 30\n },\n {\n id: idCreator()\n },\n {\n id: idCreator()\n }\n ];\n columns = [\n {\n id: idCreator()\n }\n ];\n } else {\n rows = [\n {\n id: idCreator(),\n height: 50\n },\n {\n id: idCreator()\n }\n ];\n columns = [\n {\n id: idCreator()\n }\n ];\n }\n return {\n ...element,\n shape,\n rows,\n columns,\n cells: buildTableCellsForGeometry(board, rows, columns, shape)\n } as unknown as PlaitCommonGeometry;\n};\n\nconst buildTableCellsForGeometry = (\n board: PlaitBoard,\n rows: {\n id: string;\n height?: number;\n }[],\n columns: {\n id: string;\n height?: number;\n }[],\n shape: GeometryShapes\n): PlaitTableCell[] => {\n const cellCount = rows.length * columns.length;\n const defaultTexts = (getDefaultGeometryProperty(shape) as any)?.texts || [];\n return new Array(cellCount).fill('').map((item, index) => {\n const rowIndex = Math.floor(index / columns.length);\n const columnIndex = index % columns.length;\n return {\n id: idCreator(),\n rowId: rows[rowIndex].id,\n columnId: columns[columnIndex].id,\n text: {\n children: [\n {\n text: defaultTexts[index].text\n }\n ],\n align: defaultTexts[index].align\n }\n };\n });\n};\n","import {\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n ThemeColorMode,\n getSelectedElements,\n idCreator,\n toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\nimport { GeometryShapes, BasicShapes, PlaitGeometry, FlowchartSymbols, UMLSymbols } from '../interfaces/geometry';\nimport { Element } from 'slate';\nimport {\n DefaultBasicShapeProperty,\n DefaultBasicShapePropertyMap,\n DefaultFlowchartPropertyMap,\n DefaultTextProperty,\n DefaultUMLPropertyMap,\n DrawPointerType,\n DrawThemeColors,\n GEOMETRY_NOT_CLOSED,\n GEOMETRY_WITHOUT_TEXT,\n ShapeDefaultSpace,\n getFlowchartPointers,\n getUMLPointers\n} from '../constants';\nimport {\n ActiveGenerator,\n Alignment,\n CustomText,\n DEFAULT_FONT_FAMILY,\n PlaitCommonElementRef,\n RESIZE_HANDLE_DIAMETER,\n buildText,\n getFirstTextManage,\n measureElement\n} from '@plait/common';\nimport { Options } from 'roughjs/bin/core';\nimport { getEngine } from '../engines';\nimport { getElementShape } from './shape';\nimport { PlaitDrawElement, PlaitShapeElement } from '../interfaces';\nimport { getMemorizedLatestByPointer } from './memorize';\nimport { DrawTextInfo, getTextManage } from '../generators/text.generator';\nimport { createUMLClassOrInterfaceGeometryElement } from './uml';\nimport { createMultipleTextGeometryElement, isMultipleTextGeometry, isMultipleTextShape } from './multi-text-geometry';\nimport { DEFAULT_FONT_SIZE } from '@plait/text-plugins';\n\nexport type GeometryStyleOptions = Pick<PlaitGeometry, 'fill' | 'strokeColor' | 'strokeWidth'>;\n\nexport type TextProperties = Partial<CustomText> & { align?: Alignment };\n\nexport const createGeometryElement = (\n shape: GeometryShapes,\n points: [Point, Point],\n text: string | Element,\n options: GeometryStyleOptions = {},\n textProperties: TextProperties = {}\n): PlaitGeometry => {\n if (GEOMETRY_WITHOUT_TEXT.includes(shape)) {\n return createGeometryElementWithoutText(shape, points, options);\n } else {\n return createGeometryElementWithText(shape, points, text, options, textProperties);\n }\n};\n\nexport const createGeometryElementWithText = (\n shape: GeometryShapes,\n points: [Point, Point],\n text: string | Element,\n options: GeometryStyleOptions = {},\n textProperties: TextProperties = {}\n): PlaitGeometry => {\n let textOptions = {};\n let alignment: undefined | Alignment = Alignment.center;\n if (shape === BasicShapes.text) {\n textOptions = { autoSize: true };\n alignment = undefined;\n }\n textProperties = { ...textProperties };\n textProperties?.align && (alignment = textProperties?.align);\n delete textProperties?.align;\n\n return {\n id: idCreator(),\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n text: buildText(text, alignment, textProperties),\n points,\n ...textOptions,\n ...options\n };\n};\n\nexport const createGeometryElementWithoutText = (\n shape: GeometryShapes,\n points: [Point, Point],\n options: GeometryStyleOptions = {}\n): PlaitGeometry => {\n return {\n id: idCreator(),\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n points,\n ...options\n };\n};\n\nexport const drawGeometry = (board: PlaitBoard, outerRectangle: RectangleClient, shape: GeometryShapes, roughOptions: Options) => {\n return getEngine(shape).draw(board, outerRectangle, roughOptions);\n};\n\nexport const getNearestPoint = (element: PlaitShapeElement, point: Point) => {\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const shape = getElementShape(element);\n return getEngine(shape).getNearestPoint(rectangle, point);\n};\n\nexport const getCenterPointsOnPolygon = (points: Point[]) => {\n const centerPoint: Point[] = [];\n for (let i = 0; i < points.length; i++) {\n let j = i == points.length - 1 ? 0 : i + 1;\n centerPoint.push([(points[i][0] + points[j][0]) / 2, (points[i][1] + points[j][1]) / 2]);\n }\n return centerPoint;\n};\n\nexport const getDefaultFlowchartProperty = (symbol: FlowchartSymbols) => {\n return DefaultFlowchartPropertyMap[symbol];\n};\n\nexport const getDefaultBasicShapeProperty = (shape: BasicShapes) => {\n return DefaultBasicShapePropertyMap[shape] || DefaultBasicShapeProperty;\n};\n\nexport const getDefaultUMLProperty = (shape: UMLSymbols) => {\n return DefaultUMLPropertyMap[shape];\n};\n\nexport const getAutoCompletePoints = (board: PlaitBoard, element: PlaitShapeElement, isToActive = false) => {\n const AutoCompleteMargin = (12 + RESIZE_HANDLE_DIAMETER / 2) * 2;\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n const targetRectangle = isToActive ? activeRectangle : rectangle;\n return RectangleClient.getEdgeCenterPoints(RectangleClient.inflate(targetRectangle, AutoCompleteMargin));\n};\n\nexport const getHitIndexOfAutoCompletePoint = (movingPoint: Point, points: Point[]) => {\n return points.findIndex((point) => {\n const movingRectangle = RectangleClient.getRectangleByPoints([movingPoint]);\n let rectangle = RectangleClient.getRectangleByPoints([point]);\n rectangle = RectangleClient.inflate(rectangle, RESIZE_HANDLE_DIAMETER);\n return RectangleClient.isHit(movingRectangle, rectangle);\n });\n};\n\nexport const getDrawDefaultStrokeColor = (theme: ThemeColorMode) => {\n return DrawThemeColors[theme].strokeColor;\n};\n\nexport const getFlowchartDefaultFill = (theme: ThemeColorMode) => {\n return DrawThemeColors[theme].fill;\n};\n\nexport const getTextShapeProperty = (board: PlaitBoard, text: string | Element, fontSize?: number | string) => {\n fontSize = fontSize ? Number(fontSize) : DEFAULT_FONT_SIZE;\n const textSize = measureElement(board, buildText(text), { fontSize, fontFamily: DEFAULT_FONT_FAMILY });\n return {\n width: textSize.width + ShapeDefaultSpace.rectangleAndText * 2,\n height: textSize.height\n };\n};\n\nexport const getDefaultGeometryPoints = (pointer: DrawPointerType, centerPoint: Point) => {\n const property = getDefaultGeometryProperty(pointer);\n return RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height));\n};\n\nexport const getDefaultGeometryProperty = (pointer: DrawPointerType) => {\n const isFlowChart = getFlowchartPointers().includes(pointer);\n const isUML = getUMLPointers().includes(pointer);\n if (isFlowChart) {\n return getDefaultFlowchartProperty(pointer as FlowchartSymbols);\n } else if (isUML) {\n return getDefaultUMLProperty(pointer as UMLSymbols);\n } else {\n return getDefaultBasicShapeProperty(pointer as BasicShapes);\n }\n};\n\nexport const getDefaultTextPoints = (board: PlaitBoard, centerPoint: Point, fontSize?: number | string) => {\n const property = getTextShapeProperty(board, DefaultTextProperty.text, fontSize);\n return RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height));\n};\n\nexport const createTextElement = (board: PlaitBoard, points: [Point, Point], text: string | Element) => {\n const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n return createGeometryElement(BasicShapes.text, points, text, memorizedLatest.geometryProperties as GeometryStyleOptions, {\n ...memorizedLatest.textProperties\n });\n};\n\nexport const createDefaultGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n if (PlaitDrawElement.isUMLClassOrInterface({ shape })) {\n return createUMLClassOrInterfaceGeometryElement(board, shape, points);\n }\n if (isMultipleTextShape(shape)) {\n return createMultipleTextGeometryElement(shape, points, {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth,\n ...(memorizedLatest.geometryProperties as GeometryStyleOptions)\n });\n } else {\n return createGeometryElement(\n shape,\n points,\n '',\n {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth,\n ...(memorizedLatest.geometryProperties as GeometryStyleOptions)\n },\n { ...memorizedLatest.textProperties }\n );\n }\n};\n\nexport const editText = (board: PlaitBoard, element: PlaitGeometry, text?: DrawTextInfo) => {\n const textManage = text ? getTextManage(board, element, text) : getFirstTextManage(element);\n if (textManage) {\n textManage.edit(() => {});\n }\n};\n\nexport const isGeometryIncludeText = (element: PlaitGeometry) => {\n return isSingleTextGeometry(element) || isMultipleTextGeometry(element);\n};\n\nexport const isSingleTextShape = (shape: GeometryShapes) => {\n return !GEOMETRY_WITHOUT_TEXT.includes(shape) && !isMultipleTextShape(shape);\n};\n\nexport const isSingleTextGeometry = (element: PlaitGeometry) => {\n return PlaitDrawElement.isGeometry(element) && isSingleTextShape(element.shape);\n};\n\nexport const isGeometryClosed = (element: PlaitGeometry) => {\n return !GEOMETRY_NOT_CLOSED.includes(element.shape);\n};\n","import { Point, PlaitBoard, getElementById, RectangleClient, Vector, rotatePoints, rotatePointsByElement } from '@plait/core';\nimport {\n getPoints,\n getPointByVectorComponent,\n removeDuplicatePoints,\n generateElbowLineRoute,\n simplifyOrthogonalPoints,\n isSourceAndTargetIntersect,\n DEFAULT_ROUTE_MARGIN,\n ElbowLineRouteOptions\n} from '@plait/common';\nimport { BasicShapes, ArrowLineHandleRefPair, PlaitGeometry, PlaitArrowLine } from '../../interfaces';\nimport { createGeometryElement } from '../geometry';\nimport { getElbowLineRouteOptions, getArrowLineHandleRefPair } from './arrow-line-common';\nimport { getMidKeyPoints, getMirrorDataPoints, hasIllegalElbowPoint } from './arrow-line-resize';\nimport { getStrokeWidthByElement } from '../common';\n\nexport const isSelfLoop = (element: PlaitArrowLine) => {\n return element.source.boundId && element.source.boundId === element.target.boundId;\n};\n\nexport const isUseDefaultOrthogonalRoute = (element: PlaitArrowLine, options: ElbowLineRouteOptions) => {\n return isSourceAndTargetIntersect(options) && !isSelfLoop(element);\n};\n\nexport const getElbowPoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n const handleRefPair = getArrowLineHandleRefPair(board, element);\n const params = getElbowLineRouteOptions(board, element, handleRefPair);\n // console.log(params, 'params');\n if (isUseDefaultOrthogonalRoute(element, params)) {\n return simplifyOrthogonalPoints(\n getPoints(\n handleRefPair.source.point,\n handleRefPair.source.direction,\n handleRefPair.target.point,\n handleRefPair.target.direction,\n DEFAULT_ROUTE_MARGIN\n )\n );\n }\n const keyPoints = removeDuplicatePoints(generateElbowLineRoute(params, board));\n const nextKeyPoints = keyPoints.slice(1, keyPoints.length - 1);\n if (element.points.length === 2) {\n return simplifyOrthogonalPoints(keyPoints);\n } else {\n const simplifiedNextKeyPoints = simplifyOrthogonalPoints(nextKeyPoints);\n const dataPoints = removeDuplicatePoints(PlaitArrowLine.getPoints(board, element));\n const midDataPoints = dataPoints.slice(1, -1);\n if (hasIllegalElbowPoint(midDataPoints)) {\n return simplifyOrthogonalPoints(keyPoints);\n }\n const nextDataPoints = [simplifiedNextKeyPoints[0], ...midDataPoints, simplifiedNextKeyPoints[simplifiedNextKeyPoints.length - 1]];\n const mirrorDataPoints = getMirrorDataPoints(board, nextDataPoints, simplifiedNextKeyPoints, params);\n // console.log(mirrorDataPoints, 'mirrorDataPoints');\n const renderPoints: Point[] = [keyPoints[0]];\n for (let index = 0; index < mirrorDataPoints.length - 1; index++) {\n let currentPoint = mirrorDataPoints[index];\n let nextPoint = mirrorDataPoints[index + 1];\n const isStraight = Point.isAlign([currentPoint, nextPoint]);\n if (!isStraight) {\n const midKeyPoints = getMidKeyPoints(simplifiedNextKeyPoints, currentPoint, nextPoint);\n if (midKeyPoints.length) {\n renderPoints.push(currentPoint);\n renderPoints.push(...midKeyPoints);\n } else {\n renderPoints.push(currentPoint);\n console.log('unknown data points');\n }\n } else {\n renderPoints.push(currentPoint);\n }\n }\n renderPoints.push(keyPoints[keyPoints.length - 2], keyPoints[keyPoints.length - 1]);\n // Remove the middle point to avoid the situation where the starting and ending positions are drawn back, such as when sourcePoint is between nextSourcePoint and the first key point.\n // Issue\n // keyPoint2\n // |\n // |\n // nextPoint---sourcePoint---keyPoint1\n // The correct rendering should be (nextPoint should be filtered out):\n // keyPoint2\n // |\n // |\n // sourcePoint---keyPoint1\n const ret = simplifyOrthogonalPoints(renderPoints);\n return ret;\n }\n};\n\nexport const getNextSourceAndTargetPoints = (board: PlaitBoard, element: PlaitArrowLine) => {\n const options = getElbowLineRouteOptions(board, element);\n return [options.nextSourcePoint, options.nextTargetPoint];\n};\n\nexport const getSourceAndTargetRectangle = (board: PlaitBoard, element: PlaitArrowLine, handleRefPair: ArrowLineHandleRefPair) => {\n let sourceElement = element.source.boundId ? getElementById<PlaitGeometry>(board, element.source.boundId) : undefined;\n let targetElement = element.target.boundId ? getElementById<PlaitGeometry>(board, element.target.boundId) : undefined;\n if (!sourceElement) {\n const source = handleRefPair.source;\n sourceElement = createFakeElement(source.point, source.vector);\n }\n if (!targetElement) {\n const target = handleRefPair.target;\n targetElement = createFakeElement(target.point, target.vector);\n }\n\n let sourceRectangle = RectangleClient.getRectangleByPoints(sourceElement.points);\n const rotatedSourceCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(sourceRectangle), sourceElement) ||\n RectangleClient.getCornerPoints(sourceRectangle);\n sourceRectangle = RectangleClient.getRectangleByPoints(rotatedSourceCornerPoints);\n sourceRectangle = RectangleClient.inflate(sourceRectangle, getStrokeWidthByElement(sourceElement) * 2);\n\n let targetRectangle = RectangleClient.getRectangleByPoints(targetElement.points);\n const rotatedTargetCornerPoints =\n rotatePointsByElement(RectangleClient.getCornerPoints(targetRectangle), targetElement) ||\n RectangleClient.getCornerPoints(targetRectangle);\n targetRectangle = RectangleClient.getRectangleByPoints(rotatedTargetCornerPoints);\n targetRectangle = RectangleClient.inflate(targetRectangle, getStrokeWidthByElement(targetElement) * 2);\n\n return {\n sourceRectangle,\n targetRectangle\n };\n};\n\nconst createFakeElement = (startPoint: Point, vector: Vector) => {\n const point = getPointByVectorComponent(startPoint, vector, -25);\n const points = RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(point, 50, 50));\n return createGeometryElement(BasicShapes.rectangle, points, '');\n};\n\nexport function getNextRenderPoints(board: PlaitBoard, element: PlaitArrowLine, renderPoints?: Point[]) {\n let newRenderKeyPoints = renderPoints ?? getElbowPoints(board, element);\n const [nextSourcePoint, nextTargetPoint] = getNextSourceAndTargetPoints(board, element);\n newRenderKeyPoints.splice(0, 1, nextSourcePoint);\n newRenderKeyPoints.splice(-1, 1, nextTargetPoint);\n return removeDuplicatePoints(newRenderKeyPoints);\n}\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { PlaitArrowLine, PlaitCustomGeometry, PlaitDrawElement, PlaitGeometry, PlaitSwimlane, PlaitVectorLine } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\n\nexport const getSelectedDrawElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n return selectedElements.filter(value => PlaitDrawElement.isDrawElement(value)) as PlaitDrawElement[];\n};\n\nexport const getSelectedGeometryElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isGeometry(value)) as PlaitGeometry[];\n return selectedElements;\n};\n\nexport const getSelectedCustomGeometryElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value =>\n PlaitDrawElement.isCustomGeometryElement(board, value)\n ) as PlaitCustomGeometry[];\n return selectedElements;\n};\n\nexport const getSelectedArrowLineElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isArrowLine(value)) as PlaitArrowLine[];\n return selectedElements;\n};\n\nexport const getSelectedVectorLineElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isVectorLine(value)) as PlaitVectorLine[];\n return selectedElements;\n};\n\nexport const getSelectedImageElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isImage(value)) as PlaitImage[];\n return selectedElements;\n};\n\nexport const isSingleSelectSwimlane = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board);\n return selectedElements && selectedElements.length === 1 && PlaitDrawElement.isSwimlane(selectedElements[0]);\n};\n\nexport const isSingleSelectLine = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board);\n return selectedElements && selectedElements.length === 1 && PlaitDrawElement.isLine(selectedElements[0]);\n};\n\nexport const getSelectedSwimlane = (board: PlaitBoard): PlaitSwimlane => {\n const selectedElements = getSelectedElements(board);\n return selectedElements.find(item => PlaitDrawElement.isSwimlane(item)) as PlaitSwimlane;\n};\n","import { PlaitBoard, Transforms, Point, Path, PlaitNode, getSelectedElements } from '@plait/core';\nimport { PlaitDrawElement, GeometryShapes, PlaitText, BasicShapes, PlaitArrowLine } from '../interfaces';\nimport {\n collectArrowLineUpdatedRefsByGeometry,\n createDefaultGeometry,\n createTextElement,\n getMemorizedLatestByPointer,\n getTextShapeProperty,\n insertElement\n} from '../utils';\nimport { Element } from 'slate';\nimport { normalizeShapePoints } from '@plait/common';\nimport { DrawTransforms } from '.';\n\nexport const insertGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n const newElement = createDefaultGeometry(board, points, shape);\n insertElement(board, newElement);\n return newElement;\n};\n\nexport const insertText = (board: PlaitBoard, point: Point, text: string | Element) => {\n const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n const property = getTextShapeProperty(board, text, memorizedLatest.textProperties['font-size']);\n const points: [Point, Point] = [point, [point[0] + property.width, point[1] + property.height]];\n const newElement = createTextElement(board, points, text);\n insertElement(board, newElement);\n};\n\nexport const resizeGeometry = (board: PlaitBoard, points: [Point, Point], path: Path) => {\n const normalizePoints = normalizeShapePoints(points);\n const element = PlaitNode.get(board, path);\n const newProperties = { points: normalizePoints, text: { ...element.text } };\n if (PlaitDrawElement.isText(element) && element.autoSize) {\n (newProperties as Partial<PlaitText>).autoSize = false;\n }\n Transforms.setNode(board, newProperties, path);\n};\n\nexport const switchGeometryShape = (board: PlaitBoard, shape: GeometryShapes) => {\n const selectedElements = getSelectedElements(board);\n const refs: { property: Partial<PlaitArrowLine>; path: Path }[] = [];\n selectedElements.forEach((item) => {\n if (PlaitDrawElement.isGeometry(item) && !PlaitDrawElement.isText(item)) {\n const path = PlaitBoard.findPath(board, item);\n Transforms.setNode(board, { shape }, path);\n collectArrowLineUpdatedRefsByGeometry(board, { ...item, shape }, refs);\n }\n });\n if (refs.length) {\n refs.forEach((ref) => {\n DrawTransforms.resizeArrowLine(board, ref.property, ref.path);\n });\n }\n};\n","import { PlaitBoard, Point, Transforms, hasValidAngle, RectangleClient } from '@plait/core';\nimport { Element } from 'slate';\nimport { PlaitDrawElement, PlaitGeometry } from '../interfaces';\nimport { ShapeDefaultSpace } from '../constants';\nimport { Alignment, getFirstTextEditor, resetPointsAfterResize } from '@plait/common';\nimport { AlignEditor } from '@plait/text-plugins';\nimport { MIN_TEXT_WIDTH } from '../constants/text';\n\nconst normalizePoints = (board: PlaitBoard, element: PlaitGeometry, width: number, height: number) => {\n let points = element.points;\n let autoSize = PlaitDrawElement.isText(element) ? element.autoSize : false;\n const defaultSpace = ShapeDefaultSpace.rectangleAndText;\n\n if (autoSize) {\n const newWidth = width < MIN_TEXT_WIDTH ? MIN_TEXT_WIDTH : width;\n const editor = getFirstTextEditor(element);\n if (AlignEditor.isActive(editor, Alignment.right)) {\n points = [\n [points[1][0] - (newWidth + defaultSpace * 2), points[0][1]],\n [points[1][0], points[0][1] + height]\n ];\n } else if (AlignEditor.isActive(editor, Alignment.center)) {\n const oldWidth = Math.abs(points[0][0] - points[1][0]);\n const offset = (newWidth - oldWidth) / 2;\n points = [\n [points[0][0] - offset - defaultSpace, points[0][1]],\n [points[1][0] + offset + defaultSpace, points[0][1] + height]\n ];\n } else {\n points = [points[0], [points[0][0] + newWidth + defaultSpace * 2, points[0][1] + height]];\n }\n if (hasValidAngle(element)) {\n points = resetPointsAfterResize(\n RectangleClient.getRectangleByPoints(element.points),\n RectangleClient.getRectangleByPoints(points),\n RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(element.points)),\n RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(points)),\n element.angle!\n );\n }\n }\n\n return { points };\n};\n\nexport const setText = (board: PlaitBoard, element: PlaitGeometry, text: Element, width: number, height: number) => {\n const newElement = {\n text,\n ...normalizePoints(board, element, width, height)\n };\n const path = board.children.findIndex((child) => child === element);\n Transforms.setNode(board, newElement, [path]);\n};\n\nexport const setTextSize = (board: PlaitBoard, element: PlaitGeometry, width: number, height: number) => {\n const isAutoSize = PlaitDrawElement.isText(element) ? element.autoSize : false;\n if (isAutoSize) {\n const newElement = {\n ...normalizePoints(board, element, width, height)\n };\n const path = board.children.findIndex((child) => child === element);\n Transforms.setNode(board, newElement, [path]);\n }\n};\n","import { CommonImageItem } from '@plait/common';\nimport { PlaitBoard, Point, Transforms, idCreator, toHostPoint, toViewBoxPoint } from '@plait/core';\n\nexport const insertImage = (board: PlaitBoard, imageItem: CommonImageItem, startPoint?: Point) => {\n const { width, height, url } = imageItem;\n const viewportWidth = PlaitBoard.getBoardContainer(board).clientWidth;\n const viewportHeight = PlaitBoard.getBoardContainer(board).clientHeight;\n const point = toViewBoxPoint(board, toHostPoint(board, viewportWidth / 2, viewportHeight / 2));\n const points: Point[] = startPoint\n ? [startPoint, [startPoint[0] + width, startPoint[1] + height]]\n : [\n [point[0] - width / 2, point[1] - height / 2],\n [point[0] + width / 2, point[1] + height / 2]\n ];\n const imageElement = {\n id: idCreator(),\n type: 'image',\n points,\n url\n };\n Transforms.insertNode(board, imageElement, [board.children.length]);\n Transforms.addSelectionWithTemporaryElements(board, [imageElement]);\n};\n\nexport const createImage = (startPoint: Point, imageItem: CommonImageItem) => {\n const { width, height, url } = imageItem;\n const points: Point[] = [startPoint, [startPoint[0] + width, startPoint[1] + height]];\n const imageElement = {\n id: idCreator(),\n type: 'image',\n points,\n url\n };\n return imageElement;\n};\n","import { Path, PlaitBoard, PlaitElement, PointOfRectangle, Transforms, findElements } from '@plait/core';\nimport {\n ArrowLineHandle,\n ArrowLineHandleKey,\n ArrowLineMarkerType,\n ArrowLineText,\n MemorizeKey,\n PlaitArrowLine,\n PlaitShapeElement\n} from '../interfaces';\nimport { memorizeLatest } from '@plait/common';\nimport { getSelectedArrowLineElements } from '../utils/selected';\nimport { getHitConnection } from '../utils/arrow-line/arrow-line-basic';\n\nexport const resizeArrowLine = (board: PlaitBoard, options: Partial<PlaitArrowLine>, path: Path) => {\n Transforms.setNode(board, options, path);\n};\n\nexport const setArrowLineTexts = (board: PlaitBoard, element: PlaitArrowLine, texts: ArrowLineText[]) => {\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, { texts }, path);\n};\n\nexport const removeArrowLineText = (board: PlaitBoard, element: PlaitArrowLine, index: number) => {\n const path = PlaitBoard.findPath(board, element);\n const texts = element.texts?.length ? [...element.texts] : [];\n const newTexts = [...texts];\n newTexts.splice(index, 1);\n Transforms.setNode(board, { texts: newTexts }, path);\n};\n\nexport const setArrowLineMark = (board: PlaitBoard, handleKey: ArrowLineHandleKey, marker: ArrowLineMarkerType) => {\n memorizeLatest(MemorizeKey.arrowLine, handleKey, marker);\n const selectedElements = getSelectedArrowLineElements(board);\n selectedElements.forEach((element: PlaitArrowLine) => {\n const path = PlaitBoard.findPath(board, element);\n let handle = handleKey === ArrowLineHandleKey.source ? element.source : element.target;\n handle = { ...handle, marker };\n Transforms.setNode(board, { [handleKey]: handle }, path);\n });\n};\n\nexport const setArrowLineShape = (board: PlaitBoard, newProperties: Partial<PlaitArrowLine>) => {\n const elements = getSelectedArrowLineElements(board);\n elements.map(element => {\n const _properties = { ...newProperties };\n if (element.shape === newProperties.shape) {\n return;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, _properties, path);\n });\n};\n\nexport const connectArrowLineToDraw = (\n board: PlaitBoard,\n lineElement: PlaitArrowLine,\n handle: ArrowLineHandleKey,\n geometryElement: PlaitShapeElement\n) => {\n const linePoints = PlaitArrowLine.getPoints(board, lineElement);\n const point = handle === ArrowLineHandleKey.source ? linePoints[0] : linePoints[linePoints.length - 1];\n const connection: PointOfRectangle = getHitConnection(board, point, geometryElement);\n if (connection) {\n let source: ArrowLineHandle = lineElement.source;\n let target: ArrowLineHandle = lineElement.target;\n if (handle === ArrowLineHandleKey.source) {\n source = {\n ...source,\n boundId: geometryElement.id,\n connection\n };\n } else {\n target = {\n ...target,\n boundId: geometryElement.id,\n connection\n };\n }\n const path = PlaitBoard.findPath(board, lineElement);\n resizeArrowLine(board, { source, target }, path);\n }\n};\n","import { idCreator, PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { DefaultSwimlanePropertyMap, getSwimlanePointers, getSwimlaneShapes, SWIMLANE_HEADER_SIZE } from '../constants';\nimport { PlaitDrawElement, PlaitSwimlane, PlaitTableCell, SwimlaneDrawSymbols, SwimlaneSymbols } from '../interfaces';\nimport { createCell } from './table';\n\nexport function buildSwimlaneTable(element: PlaitSwimlane) {\n const swimlaneElement = { ...element };\n if (PlaitDrawElement.isHorizontalSwimlane(element)) {\n swimlaneElement.cells = element.cells.map((item, index) => {\n if (index === 0 && element.header) {\n item = {\n ...element.cells[0],\n rowspan: element.rows.length\n };\n }\n if (item.text && !item.text.direction) {\n item = {\n ...item,\n text: {\n ...item.text,\n direction: 'vertical'\n }\n };\n }\n return item;\n });\n\n return swimlaneElement;\n }\n if (element.header) {\n swimlaneElement.cells = [\n {\n ...element.cells[0],\n colspan: element.columns.length\n },\n ...element.cells.slice(1, element.cells.length)\n ];\n }\n return swimlaneElement;\n}\n\nexport const getDefaultSwimlanePoints = (pointer: SwimlaneDrawSymbols, centerPoint: Point) => {\n const property = DefaultSwimlanePropertyMap[pointer];\n return RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height));\n};\n\nexport const createDefaultSwimlane = (shape: SwimlaneDrawSymbols, points: [Point, Point]) => {\n const header = isSwimlaneWithHeader(shape);\n const dataShape = adjustSwimlaneShape(shape);\n const width = points[1][0] - points[0][0];\n const height = points[1][1] - points[0][1];\n const rows = createDefaultRowsOrColumns(dataShape, 'row', header, height);\n const columns = createDefaultRowsOrColumns(dataShape, 'column', header, width);\n const swimlane = {\n id: idCreator(),\n type: 'swimlane',\n shape: dataShape,\n points,\n rows,\n columns,\n header,\n cells: createDefaultCells(dataShape, rows, columns, header)\n } as PlaitSwimlane;\n return swimlane;\n};\n\nexport const createDefaultRowsOrColumns = (shape: SwimlaneSymbols, type: 'row' | 'column', header: boolean, size: number) => {\n const createItems = (count: number) => new Array(count).fill('').map(() => ({ id: idCreator() }));\n let data = createItems(3);\n if (\n (type === 'row' && shape === SwimlaneSymbols.swimlaneVertical) ||\n (type === 'column' && shape === SwimlaneSymbols.swimlaneHorizontal)\n ) {\n data = header ? data : createItems(2);\n const dimension = type === 'row' ? 'height' : 'width';\n let defaultSize = SWIMLANE_HEADER_SIZE;\n if (size < SWIMLANE_HEADER_SIZE * data.length) {\n defaultSize = Math.min((size / data.length / SWIMLANE_HEADER_SIZE) * SWIMLANE_HEADER_SIZE, SWIMLANE_HEADER_SIZE);\n }\n data = data.map((item, index) => {\n if (index === 0 || (index === 1 && header)) {\n return {\n ...item,\n [dimension]: defaultSize\n };\n }\n return item;\n });\n }\n\n return data;\n};\n\nexport const createDefaultCells = (\n shape: SwimlaneSymbols,\n rows: { id: string; height?: number }[],\n columns: { id: string; width?: number }[],\n header: boolean\n) => {\n let headerCell: PlaitTableCell[] = [];\n let startIndex = 0;\n if (header) {\n headerCell = [createCell(rows[0].id, columns[0].id, 'New Swimlane')];\n startIndex = 1;\n }\n const cells = new Array(6).fill('').map((_, index) => {\n if (index < 3) {\n const rowId = shape === SwimlaneSymbols.swimlaneVertical ? rows[startIndex].id : rows[index].id;\n const columnId = shape === SwimlaneSymbols.swimlaneVertical ? columns[index].id : columns[startIndex].id;\n return createCell(rowId, columnId, header ? 'Lane' : 'New Swimlane');\n }\n const rowId = shape === SwimlaneSymbols.swimlaneVertical ? rows[startIndex + 1].id : rows[index - 3].id;\n const columnId = shape === SwimlaneSymbols.swimlaneVertical ? columns[index - 3].id : columns[startIndex + 1].id;\n return createCell(rowId, columnId);\n });\n return [...headerCell, ...cells];\n};\n\nexport const getSwimlaneCount = (swimlane: PlaitSwimlane) => {\n if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n return swimlane.rows.length;\n }\n if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n return swimlane.columns.length;\n }\n return 0;\n};\n\nexport const isSwimlaneWithHeader = (shape: SwimlaneDrawSymbols) => {\n return [SwimlaneDrawSymbols.swimlaneHorizontalWithHeader, SwimlaneDrawSymbols.swimlaneVerticalWithHeader].includes(shape);\n};\n\nexport const isSwimlaneShape = (shape: SwimlaneSymbols) => {\n return getSwimlaneShapes().includes(shape);\n};\n\nexport const adjustSwimlaneShape = (shape: SwimlaneDrawSymbols): SwimlaneSymbols => {\n return [SwimlaneDrawSymbols.swimlaneHorizontalWithHeader, SwimlaneDrawSymbols.swimlaneHorizontal].includes(shape)\n ? SwimlaneSymbols.swimlaneHorizontal\n : SwimlaneSymbols.swimlaneVertical;\n};\n\nexport const isSwimlanePointers = (board: PlaitBoard, pointer: string = board.pointer) => {\n return getSwimlanePointers().includes(pointer);\n};\n","import { idCreator, Path, PlaitBoard, Point, RectangleClient, Transforms } from '@plait/core';\nimport { PlaitDrawElement, PlaitSwimlane } from '../interfaces';\nimport { PlaitBaseTable, PlaitTableCell } from '../interfaces/table';\nimport { getCellWithPoints } from '../utils/table';\nimport { getSwimlaneCount } from '../utils/swimlane';\nimport { Alignment } from '@plait/common';\n\nexport const updateSwimlaneCount = (board: PlaitBoard, swimlane: PlaitSwimlane, count: number) => {\n if (count > 0 && PlaitDrawElement.isSwimlane(swimlane)) {\n const currentCount = getSwimlaneCount(swimlane);\n if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n if (count > currentCount) {\n addSwimlaneRow(board, swimlane, swimlane.rows.length, count - currentCount);\n } else {\n const deleteIndex = swimlane.rows.length - (currentCount - count);\n removeSwimlaneRow(board, swimlane, deleteIndex, currentCount - count);\n }\n }\n if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n if (count > currentCount) {\n addSwimlaneColumn(board, swimlane, swimlane.columns.length, count - currentCount);\n } else {\n const deleteIndex = swimlane.columns.length - (currentCount - count);\n removeSwimlaneColumn(board, swimlane, deleteIndex, currentCount - count);\n }\n }\n }\n};\n\nexport const addSwimlaneRow = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n const newRows = [...swimlane.rows];\n const addRows: { id: string }[] = [];\n for (let i = 0; i < count; i++) {\n addRows.push({ id: idCreator() });\n }\n newRows.splice(index, 0, ...addRows);\n const newCells = [...swimlane.cells];\n addRows.forEach(item => {\n newCells.push(...createNewSwimlaneCells(swimlane, item.id, 'column'));\n });\n const lastCellPoints = getCellWithPoints(board, swimlane, swimlane.cells[swimlane.cells.length - 1].id).points;\n const lastRowHeight = RectangleClient.getRectangleByPoints(lastCellPoints).height;\n const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0], swimlane.points[1][1] + lastRowHeight * count]];\n updateSwimlane(board, swimlane, swimlane.columns, newRows, newCells, newPoints);\n }\n};\n\nexport const addSwimlaneColumn = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n const newColumns = [...swimlane.columns];\n const addColumns: { id: string }[] = [];\n for (let i = 0; i < count; i++) {\n addColumns.push({ id: idCreator() });\n }\n newColumns.splice(index, 0, ...addColumns);\n const newCells = [...swimlane.cells];\n addColumns.forEach(item => {\n newCells.push(...createNewSwimlaneCells(swimlane, item.id, 'row'));\n });\n const lastCellPoints = getCellWithPoints(board, swimlane, swimlane.cells[swimlane.cells.length - 1].id).points;\n const lastColumnWidth = RectangleClient.getRectangleByPoints(lastCellPoints).width;\n const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0] + lastColumnWidth * count, swimlane.points[1][1]]];\n updateSwimlane(board, swimlane, newColumns, swimlane.rows, newCells, newPoints);\n }\n};\n\nexport const removeSwimlaneRow = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n if (PlaitDrawElement.isHorizontalSwimlane(swimlane)) {\n if (count > swimlane.rows.length) {\n return;\n }\n const newRows = [...swimlane.rows];\n newRows.splice(index, count);\n if (newRows.length === 0) {\n const path = PlaitBoard.findPath(board, swimlane);\n Transforms.removeNode(board, path);\n } else {\n let newCells = [...swimlane.cells];\n const removeRows = [];\n for (let i = index; i < count + index; i++) {\n const removeRow = swimlane.rows[i];\n removeRows.push(removeRow);\n newCells = newCells.filter(item => item.rowId !== removeRow.id);\n }\n let removeRowHeight = 0;\n removeRows.forEach(row => {\n if (!row.height) {\n const rowCell = swimlane.cells.find(item => item.rowId === row.id)!;\n const cellPoints = getCellWithPoints(board, swimlane, rowCell.id).points;\n removeRowHeight += RectangleClient.getRectangleByPoints(cellPoints).height;\n } else {\n removeRowHeight += row.height;\n }\n });\n\n const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0], swimlane.points[1][1] - removeRowHeight]];\n updateSwimlane(board, swimlane, swimlane.columns, newRows, newCells, newPoints);\n }\n }\n};\n\nexport const removeSwimlaneColumn = (board: PlaitBoard, swimlane: PlaitSwimlane, index: number, count: number = 1) => {\n if (PlaitDrawElement.isVerticalSwimlane(swimlane)) {\n if (count > swimlane.columns.length) {\n return;\n }\n const newColumns = [...swimlane.columns];\n newColumns.splice(index, count);\n if (newColumns.length === 0) {\n const path = PlaitBoard.findPath(board, swimlane);\n Transforms.removeNode(board, path);\n } else {\n let newCells = [...swimlane.cells];\n const removeColumns = [];\n for (let i = index; i < count + index; i++) {\n const removeColumn = swimlane.columns[i];\n removeColumns.push(removeColumn);\n newCells = newCells.filter(item => item.columnId !== removeColumn.id);\n }\n let removeColumnWidth = 0;\n removeColumns.forEach(column => {\n if (!column.width) {\n const rowCell = swimlane.cells.find(item => item.columnId === column.id)!;\n const cellPoints = getCellWithPoints(board, swimlane, rowCell.id).points;\n removeColumnWidth += RectangleClient.getRectangleByPoints(cellPoints).width;\n } else {\n removeColumnWidth += column.width;\n }\n });\n const newPoints: Point[] = [swimlane.points[0], [swimlane.points[1][0] - removeColumnWidth, swimlane.points[1][1]]];\n updateSwimlane(board, swimlane, newColumns, swimlane.rows, newCells, newPoints);\n }\n }\n};\n\nconst createNewSwimlaneCells = (swimlane: PlaitSwimlane, newId: string, type: 'row' | 'column'): PlaitTableCell[] => {\n const cells: PlaitTableCell[] = swimlane[`${type}s`].map(item => ({\n id: idCreator(),\n rowId: type === 'row' ? item.id : newId,\n columnId: type === 'row' ? newId : item.id\n }));\n if (swimlane.header) {\n cells.shift();\n }\n cells[0] = {\n ...cells[0],\n text: {\n children: [{ text: swimlane.header ? 'Lane' : 'New Swimlane' }],\n align: Alignment.center,\n direction: type === 'row' ? undefined : 'vertical'\n }\n };\n return cells;\n};\n\nconst updateSwimlane = (\n board: PlaitBoard,\n swimlane: PlaitSwimlane,\n newColumns: { id: string; width?: number }[],\n newRows: { id: string; height?: number }[],\n newCells: PlaitTableCell[],\n newPoints: Point[]\n) => {\n const path = PlaitBoard.findPath(board, swimlane);\n Transforms.setNode(\n board,\n {\n columns: newColumns,\n rows: newRows,\n cells: newCells,\n points: newPoints\n },\n path\n );\n};\n","import { PlaitBoard, Transforms } from '@plait/core';\nimport { PlaitMultipleTextGeometry } from '../interfaces';\nimport { DrawTextInfo } from '../generators/text.generator';\n\nexport const setDrawTexts = (board: PlaitBoard, element: PlaitMultipleTextGeometry, text: DrawTextInfo) => {\n const newTexts = element.texts?.map(item => {\n if (item.id === text.id) {\n return { ...item, ...text };\n }\n return item;\n });\n const newElement = {\n texts: newTexts\n };\n const path = board.children.findIndex(child => child === element);\n Transforms.setNode(board, newElement, [path]);\n};\n","import { Path, PlaitBoard, PlaitNode, RectangleClient, Transforms } from '@plait/core';\nimport { ShapeDefaultSpace } from '../constants';\nimport { Element } from 'slate';\nimport { PlaitBaseTable, PlaitTableCell, PlaitTableElement } from '../interfaces/table';\nimport { getCellWithPoints, updateColumns, updateRows } from '../utils/table';\n\nexport const setTableText = (board: PlaitBoard, path: Path, cellId: string, text: Element, textHeight: number) => {\n const table = PlaitNode.get(board, path) as PlaitBaseTable;\n const cell = getCellWithPoints(board, table, cellId);\n const cellIndex = table.cells.findIndex((item) => item.id === cell.id);\n let rows = [...table.rows];\n let columns = [...table.columns];\n let cells = [...table.cells];\n let points = [...table.points];\n const { width: cellWidth, height: cellHeight } = RectangleClient.getRectangleByPoints(cell.points);\n const defaultSpace = ShapeDefaultSpace.rectangleAndText;\n if (PlaitTableElement.isVerticalText(cell as PlaitTableCell)) {\n const columnIdx = table.columns.findIndex((column) => column.id === cell.columnId);\n if (textHeight > cellWidth) {\n const newColumnWidth = textHeight + defaultSpace * 2;\n const offset = newColumnWidth - cellWidth;\n const result = updateColumns(table, table.columns[columnIdx].id, newColumnWidth, offset);\n points = result.points;\n columns = result.columns;\n }\n } else {\n const rowIdx = table.rows.findIndex((row) => row.id === cell.rowId);\n const tableRow = table.rows[rowIdx];\n const compareHeight = tableRow.height ?? Math.max(cellHeight, 0);\n if (textHeight > compareHeight) {\n const newRowHeight = textHeight + defaultSpace * 2;\n const offset = newRowHeight - compareHeight;\n const result = updateRows(table, table.rows[rowIdx].id, newRowHeight, offset);\n points = result.points;\n rows = result.rows;\n }\n }\n cells[cellIndex] = {\n ...cells[cellIndex],\n text\n };\n\n Transforms.setNode(board, { rows, columns, cells, points }, path);\n};\n","import { Path, PlaitBoard, Transforms } from '@plait/core';\nimport { PlaitBaseTable, PlaitTableCell } from '../interfaces';\nimport { getSelectedCells } from '../utils';\n\nexport const setTableFill = (board: PlaitBoard, element: PlaitBaseTable, fill: string | null, path: Path) => {\n const selectedCells = getSelectedCells(element);\n let newCells = element.cells;\n if (selectedCells?.length) {\n newCells = element.cells.map(cell => {\n if (selectedCells.map(item => item.id).includes(cell.id)) {\n return getNewCell(cell, fill);\n }\n return cell;\n });\n } else {\n newCells = element.cells.map(cell => {\n if (cell.text) {\n return getNewCell(cell, fill);\n }\n return cell;\n });\n }\n Transforms.setNode(board, { cells: newCells }, path);\n};\n\nconst getNewCell = (cell: PlaitTableCell, fill: string | null) => {\n const newCell = {\n ...cell\n };\n if (fill) {\n newCell.fill = fill;\n } else {\n delete newCell.fill;\n }\n return newCell;\n};\n","import { PlaitBoard, Transforms } from '@plait/core';\nimport { PlaitVectorLine } from '../interfaces';\nimport { getSelectedVectorLineElements } from '../utils';\n\nexport const setVectorLineShape = (board: PlaitBoard, newProperties: Partial<PlaitVectorLine>) => {\n const elements = getSelectedVectorLineElements(board);\n elements.map(element => {\n if (element.shape === newProperties.shape) {\n return;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, { ...newProperties }, path);\n });\n};\n","import { getDirectionByVector, getPointByVectorComponent } from '@plait/common';\nimport { PlaitBoard, Vector, Direction, RectangleClient, Point } from '@plait/core';\nimport { createDefaultSwimlane, insertElement } from '../utils';\nimport { insertGeometry } from './geometry';\nimport { BasicShapes, FlowchartSymbols, GeometryShapes, SwimlaneDrawSymbols, UMLSymbols } from '../interfaces';\nimport {\n DefaultBasicShapeProperty,\n DefaultBasicShapePropertyMap,\n DefaultFlowchartPropertyMap,\n DefaultSwimlanePropertyMap,\n DefaultUMLPropertyMap,\n getSwimlanePointers\n} from '../constants';\n\nexport const insertDrawByVector = (board: PlaitBoard, point: Point, shape: GeometryShapes | SwimlaneDrawSymbols, vector: Vector) => {\n const swimlanePointers = getSwimlanePointers();\n const isSwimlanePointer = swimlanePointers.includes(shape);\n let shapeProperty =\n DefaultFlowchartPropertyMap[shape as FlowchartSymbols] ||\n DefaultBasicShapePropertyMap[shape as BasicShapes] ||\n DefaultUMLPropertyMap[shape as UMLSymbols] ||\n DefaultBasicShapeProperty;\n if (isSwimlanePointer) {\n shapeProperty = DefaultSwimlanePropertyMap[shape];\n }\n const direction = getDirectionByVector(vector);\n if (direction) {\n let offset = 0;\n if ([Direction.left, Direction.right].includes(direction)) {\n offset = -shapeProperty.width / 2;\n } else {\n offset = -shapeProperty.height / 2;\n }\n const vectorPoint = getPointByVectorComponent(point, vector, offset);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(vectorPoint, shapeProperty.width, shapeProperty.height)\n );\n if (isSwimlanePointer) {\n const swimlane = createDefaultSwimlane(shape as SwimlaneDrawSymbols, points);\n insertElement(board, swimlane);\n return swimlane;\n }\n return insertGeometry(board, points, shape as GeometryShapes);\n }\n return null;\n};\n","import { insertText, insertGeometry, resizeGeometry, switchGeometryShape } from './geometry';\nimport { setText, setTextSize } from './geometry-text';\nimport { insertImage } from './image';\nimport {\n connectArrowLineToDraw,\n removeArrowLineText,\n resizeArrowLine,\n setArrowLineMark,\n setArrowLineShape,\n setArrowLineTexts\n} from './arrow-line';\nimport { addSwimlaneColumn, addSwimlaneRow, removeSwimlaneColumn, removeSwimlaneRow, updateSwimlaneCount } from './swimlane';\nimport { setDrawTexts } from './multi-text-geometry-text';\nimport { setTableText } from './table-text';\nimport { setTableFill } from './table';\nimport { setVectorLineShape } from './vector-line';\nimport { insertDrawByVector } from './common';\n\nexport const DrawTransforms = {\n setText,\n setDrawTexts,\n insertGeometry,\n resizeGeometry,\n insertText,\n setTextSize,\n resizeArrowLine,\n setArrowLineTexts,\n removeArrowLineText,\n setArrowLineMark,\n setArrowLineShape,\n setVectorLineShape,\n insertImage,\n connectArrowLineToDraw,\n switchGeometryShape,\n setTableText,\n addSwimlaneRow,\n addSwimlaneColumn,\n removeSwimlaneRow,\n removeSwimlaneColumn,\n updateSwimlaneCount,\n setTableFill,\n insertDrawByVector\n};\n","import {\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 toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\nimport { PlaitDrawElement } from '../interfaces';\nimport { DrawTransforms } from '../transforms';\nimport { getHitRectangleResizeHandleRef } from '../utils/position/geometry';\nimport { getSnapResizingRefOptions, getSnapResizingRef } from '../utils/snap-resizing';\nimport { isGeometryIncludeText, isSingleSelectLine, isSingleSelectSwimlane } from '../utils';\n\nconst debugKey = 'debug:plait:resize-for-rotation';\nconst debugGenerator = createDebugGenerator(debugKey);\n\nexport interface BulkRotationRef {\n angle: number;\n offsetX: number;\n offsetY: number;\n newCenterPoint: Point;\n}\n\nexport function withDrawResize(board: PlaitBoard) {\n const { afterChange, drawSelectionRectangle } = board;\n let snapG: SVGGElement | null;\n let handleG: SVGGElement | null;\n let needCustomActiveRectangle = false;\n let resizeActivePoints: Point[] | null = null;\n\n const canResize = () => {\n const elements = getSelectedElements(board);\n return (\n elements.length >= 1 &&\n elements.every(\n (el) =>\n (PlaitDrawElement.isDrawElement(el) || (PlaitDrawElement.isCustomGeometryElement(board, el) && el.points.length > 1)) &&\n !isSingleSelectLine(board) &&\n !isSingleSelectSwimlane(board)\n )\n );\n };\n\n const options: WithResizeOptions<PlaitDrawElement[]> = {\n key: 'draw-elements',\n canResize,\n hitTest: (point: Point) => {\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n const angle = getSelectionAngle(elements);\n const handleRef = getHitRectangleResizeHandleRef(board, boundingRectangle, point, angle);\n if (handleRef) {\n return {\n element: [...elements],\n rectangle: boundingRectangle,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass\n };\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<PlaitDrawElement[]>, resizeState: ResizeState) => {\n snapG?.remove();\n debugGenerator.isDebug() && debugGenerator.clear();\n const isFromCorner = isCornerHandle(board, resizeRef.handle);\n const isAspectRatio = resizeState.isShift || (resizeRef.element.length === 1 && PlaitDrawElement.isImage(resizeRef.element[0]));\n const centerPoint = RectangleClient.getCenterPoint(resizeRef.rectangle!);\n const handleIndex = getIndexByResizeHandle(resizeRef.handle);\n const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle!);\n const angle = getSelectionAngle(resizeRef.element);\n let bulkRotationRef: BulkRotationRef | undefined;\n if (angle) {\n bulkRotationRef = {\n angle: angle,\n offsetX: 0,\n offsetY: 0,\n newCenterPoint: [0, 0]\n };\n const [rotatedStartPoint, rotateEndPoint] = rotatePoints(\n [resizeState.startPoint, resizeState.endPoint],\n centerPoint,\n -bulkRotationRef.angle\n );\n resizeState.startPoint = rotatedStartPoint;\n resizeState.endPoint = rotateEndPoint;\n }\n const resizeSnapRefOptions = getSnapResizingRefOptions(\n board,\n resizeRef,\n resizeState,\n {\n originPoint,\n handlePoint\n },\n isAspectRatio,\n isFromCorner\n );\n const resizeSnapRef = getSnapResizingRef(board, resizeRef.element, resizeSnapRefOptions);\n resizeActivePoints = resizeSnapRef.activePoints;\n snapG = resizeSnapRef.snapG;\n PlaitBoard.getElementTopHost(board).append(snapG);\n\n if (bulkRotationRef) {\n const boundingBoxCornerPoints = RectangleClient.getPoints(resizeRef.rectangle!);\n const resizedBoundingBoxCornerPoints = boundingBoxCornerPoints.map((p) => {\n return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);\n });\n const newBoundingBox = RectangleClient.getRectangleByPoints(resizedBoundingBoxCornerPoints);\n\n debugGenerator.isDebug() && debugGenerator.drawRectangle(board, newBoundingBox, { stroke: 'blue' });\n\n const newBoundingBoxCenter = RectangleClient.getCenterPoint(newBoundingBox);\n const adjustedNewBoundingBoxPoints = resetPointsAfterResize(\n RectangleClient.getRectangleByPoints(boundingBoxCornerPoints),\n RectangleClient.getRectangleByPoints(resizedBoundingBoxCornerPoints),\n centerPoint,\n newBoundingBoxCenter,\n bulkRotationRef.angle\n );\n const newCenter = RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(adjustedNewBoundingBoxPoints));\n bulkRotationRef = Object.assign(bulkRotationRef, {\n offsetX: newCenter[0] - newBoundingBoxCenter[0],\n offsetY: newCenter[1] - newBoundingBoxCenter[1],\n newCenterPoint: newCenter\n });\n\n debugGenerator.isDebug() && debugGenerator.drawRectangle(board, adjustedNewBoundingBoxPoints);\n }\n\n resizeRef.element.forEach((target) => {\n const path = PlaitBoard.findPath(board, target);\n let points;\n if (bulkRotationRef) {\n const reversedPoints = rotatedDataPoints(target.points, centerPoint, -bulkRotationRef.angle);\n points = reversedPoints.map((p: Point) => {\n return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);\n }) as [Point, Point];\n const adjustTargetPoints = points.map((p) => [\n p[0] + bulkRotationRef!.offsetX,\n p[1] + bulkRotationRef!.offsetY\n ]) as Point[];\n points = rotatedDataPoints(adjustTargetPoints, bulkRotationRef.newCenterPoint, bulkRotationRef.angle) as [Point, Point];\n } else {\n if (hasValidAngle(target)) {\n needCustomActiveRectangle = true;\n }\n if (hasValidAngle(target) && isAxisChangedByAngle(target.angle!)) {\n points = getResizePointsByOtherwiseAxis(\n board,\n target.points,\n originPoint,\n resizeSnapRef.xZoom,\n resizeSnapRef.yZoom\n );\n } else {\n points = target.points.map((p) => {\n return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);\n });\n }\n }\n\n if (PlaitDrawElement.isGeometry(target)) {\n DrawTransforms.resizeGeometry(board, points as [Point, Point], path);\n } else if (\n PlaitDrawElement.isLine(target) ||\n PlaitDrawElement.isCustomGeometryElement(board, target) ||\n PlaitDrawElement.isVectorLine(target)\n ) {\n Transforms.setNode(board, { points }, path);\n } else if (PlaitDrawElement.isImage(target)) {\n if (isAspectRatio) {\n Transforms.setNode(board, { points }, path);\n } else {\n // The image element does not follow the resize, but moves based on the center point.\n const targetRectangle = RectangleClient.getRectangleByPoints(target.points);\n const centerPoint = RectangleClient.getCenterPoint(targetRectangle);\n const newCenterPoint = movePointByZoomAndOriginPoint(\n centerPoint,\n originPoint,\n resizeSnapRef.xZoom,\n resizeSnapRef.yZoom\n );\n const newTargetRectangle = RectangleClient.getRectangleByCenterPoint(\n newCenterPoint,\n targetRectangle.width,\n targetRectangle.height\n );\n Transforms.setNode(board, { points: RectangleClient.getPoints(newTargetRectangle) }, path);\n }\n }\n });\n },\n afterResize: (resizeRef: ResizeRef<PlaitDrawElement[]>) => {\n snapG?.remove();\n snapG = null;\n if (needCustomActiveRectangle) {\n needCustomActiveRectangle = false;\n resizeActivePoints = null;\n const selectedElements = getSelectedElements(board);\n Transforms.addSelectionWithTemporaryElements(board, selectedElements);\n }\n }\n };\n\n withResize<PlaitDrawElement[]>(board, options);\n\n board.afterChange = () => {\n afterChange();\n if (handleG) {\n handleG.remove();\n handleG = null;\n }\n const selectedElements = getSelectedElements(board);\n if (canResize() && !isSelectionMoving(board) && selectedElements.length > 1) {\n handleG = generatorResizeHandles(board, resizeActivePoints!, needCustomActiveRectangle);\n PlaitBoard.getActiveHost(board).append(handleG);\n }\n };\n\n board.drawSelectionRectangle = () => {\n if (needCustomActiveRectangle) {\n const rectangle = RectangleClient.getRectangleByPoints(resizeActivePoints!);\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n return drawRectangle(board, RectangleClient.inflate(activeRectangle, ACTIVE_STROKE_WIDTH), {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH\n });\n }\n return drawSelectionRectangle();\n };\n\n return board;\n}\n\nexport const getResizeOriginPointAndHandlePoint = (board: PlaitBoard, handleIndex: number, rectangle: RectangleClient) => {\n const symmetricHandleIndex = getSymmetricHandleIndex(board, handleIndex);\n const originPoint = getResizeHandlePointByIndex(rectangle as RectangleClient, symmetricHandleIndex);\n const handlePoint = getResizeHandlePointByIndex(rectangle as RectangleClient, handleIndex);\n return {\n originPoint,\n handlePoint\n };\n};\n\nexport const getResizeZoom = (\n resizeStartAndEnd: [Point, Point],\n resizeOriginPoint: Point,\n resizeHandlePoint: Point,\n isFromCorner: boolean,\n isAspectRatio: boolean\n) => {\n const [startPoint, endPoint] = resizeStartAndEnd;\n let xZoom = 0;\n let yZoom = 0;\n if (isFromCorner) {\n if (isAspectRatio) {\n let normalizedOffsetX = Point.getOffsetX(startPoint, endPoint);\n xZoom = normalizedOffsetX / (resizeHandlePoint[0] - resizeOriginPoint[0]);\n yZoom = xZoom;\n } else {\n let normalizedOffsetX = Point.getOffsetX(startPoint, endPoint);\n let normalizedOffsetY = Point.getOffsetY(startPoint, endPoint);\n xZoom = normalizedOffsetX / (resizeHandlePoint[0] - resizeOriginPoint[0]);\n yZoom = normalizedOffsetY / (resizeHandlePoint[1] - resizeOriginPoint[1]);\n }\n } else {\n const isHorizontal = Point.isHorizontal(resizeOriginPoint, resizeHandlePoint, 0.1) || false;\n let normalizedOffset = isHorizontal ? Point.getOffsetX(startPoint, endPoint) : Point.getOffsetY(startPoint, endPoint);\n let benchmarkOffset = isHorizontal ? resizeHandlePoint[0] - resizeOriginPoint[0] : resizeHandlePoint[1] - resizeOriginPoint[1];\n const zoom = normalizedOffset / benchmarkOffset;\n if (isAspectRatio) {\n xZoom = zoom;\n yZoom = zoom;\n } else {\n if (isHorizontal) {\n xZoom = zoom;\n } else {\n yZoom = zoom;\n }\n }\n }\n return { xZoom, yZoom };\n};\n\nexport const movePointByZoomAndOriginPoint = (p: Point, resizeOriginPoint: Point, xZoom: number, yZoom: number) => {\n const offsetX = (p[0] - resizeOriginPoint[0]) * xZoom;\n const offsetY = (p[1] - resizeOriginPoint[1]) * yZoom;\n return [p[0] + offsetX, p[1] + offsetY] as Point;\n};\n\n/**\n * 1. Rotate 90°\n * 2. Scale based on the rotated points\n * 3. Reverse rotate the scaled points by 90°\n */\nexport const getResizePointsByOtherwiseAxis = (\n board: PlaitBoard,\n points: Point[],\n resizeOriginPoint: Point,\n xZoom: number,\n yZoom: number\n) => {\n const currentRectangle = RectangleClient.getRectangleByPoints(points);\n debugGenerator.isDebug() && debugGenerator.drawRectangle(board, currentRectangle, { stroke: 'black' });\n let resultPoints = points;\n resultPoints = rotatePoints(resultPoints, RectangleClient.getCenterPoint(currentRectangle), (1 / 2) * Math.PI);\n debugGenerator.isDebug() && debugGenerator.drawRectangle(board, resultPoints, { stroke: 'blue' });\n resultPoints = resultPoints.map((p) => {\n return movePointByZoomAndOriginPoint(p, resizeOriginPoint, xZoom, yZoom);\n });\n debugGenerator.isDebug() && debugGenerator.drawRectangle(board, resultPoints);\n const newRectangle = RectangleClient.getRectangleByPoints(resultPoints);\n return rotatePoints(resultPoints, RectangleClient.getCenterPoint(newRectangle), -(1 / 2) * Math.PI);\n};\n\nexport const generatorResizeHandles = (board: PlaitBoard, resizeActivePoints?: Point[], needCustomActiveRectangle?: boolean) => {\n const handleG = createG();\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = needCustomActiveRectangle\n ? RectangleClient.getRectangleByPoints(resizeActivePoints!)\n : getRectangleByElements(board, elements, false);\n const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);\n let corners = RectangleClient.getCornerPoints(boundingActiveRectangle);\n const angle = getSelectionAngle(elements);\n if (angle) {\n const centerPoint = RectangleClient.getCenterPoint(boundingActiveRectangle);\n corners = rotatePoints(corners, centerPoint, angle) as [Point, Point, Point, Point];\n }\n corners.forEach((corner) => {\n const g = drawHandle(board, corner);\n handleG.append(g);\n });\n return handleG;\n};\n","import {\n ResizeRef,\n ResizeState,\n getDirectionFactorByDirectionComponent,\n getUnitVectorByPointAndPoint,\n resetPointsAfterResize\n} from '@plait/common';\nimport {\n DirectionFactors,\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n createDebugGenerator,\n createG,\n getSelectionAngle,\n getRectangleByAngle,\n getRectangleByElements,\n SnapDelta,\n SnapRef,\n getSnapRectangles,\n SNAP_TOLERANCE,\n drawSolidLines,\n drawPointSnapLines,\n getTripleAxis,\n getMinPointDelta\n} from '@plait/core';\nimport { getResizeZoom, movePointByZoomAndOriginPoint } from '../plugins/with-draw-resize';\nimport { PlaitCustomGeometry, PlaitDrawElement } from '../interfaces';\n\nconst debugKey = 'debug:plait:point-for-geometry';\nexport const debugGenerator = createDebugGenerator(debugKey);\n\nexport interface ResizeSnapRef extends SnapRef {\n xZoom: number;\n yZoom: number;\n activePoints: Point[];\n}\n\nexport interface ResizeSnapOptions {\n resizePoints: Point[];\n activeRectangle: RectangleClient;\n directionFactors: DirectionFactors;\n isFromCorner: boolean;\n isAspectRatio: boolean;\n resizeOriginPoint?: Point[];\n originPoint?: Point;\n handlePoint?: Point;\n isCreate?: boolean;\n}\n\nconst EQUAL_SPACING = 10;\n\nexport function getSnapResizingRefOptions(\n board: PlaitBoard,\n resizeRef: ResizeRef<PlaitDrawElement | PlaitCustomGeometry | (PlaitDrawElement | PlaitCustomGeometry)[]>,\n resizeState: ResizeState,\n resizeOriginPointAndHandlePoint: {\n originPoint: Point;\n handlePoint: Point;\n },\n isAspectRatio: boolean,\n isFromCorner: boolean\n): ResizeSnapOptions {\n const { originPoint, handlePoint } = resizeOriginPointAndHandlePoint;\n const resizePoints: [Point, Point] = [resizeState.startPoint, resizeState.endPoint];\n const { xZoom, yZoom } = getResizeZoom(resizePoints, originPoint, handlePoint, isFromCorner, isAspectRatio);\n\n let activeElements: PlaitElement[];\n let resizeOriginPoint: Point[] = [];\n if (Array.isArray(resizeRef.element)) {\n activeElements = resizeRef.element;\n const rectangle = getRectangleByElements(board, resizeRef.element, false);\n resizeOriginPoint = RectangleClient.getPoints(rectangle);\n } else {\n activeElements = [resizeRef.element];\n resizeOriginPoint = resizeRef.element.points;\n }\n\n const points = resizeOriginPoint.map(p => {\n return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);\n }) as [Point, Point];\n const rectangle = RectangleClient.getRectangleByPoints(points);\n const activeRectangle = getRectangleByAngle(rectangle, getSelectionAngle(activeElements));\n const resizeHandlePoint = movePointByZoomAndOriginPoint(handlePoint, originPoint, xZoom, yZoom);\n const [x, y] = getUnitVectorByPointAndPoint(originPoint, resizeHandlePoint);\n return {\n resizePoints,\n resizeOriginPoint,\n activeRectangle,\n originPoint,\n handlePoint,\n directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],\n isAspectRatio,\n isFromCorner\n };\n}\n\nexport function getSnapResizingRef(board: PlaitBoard, activeElements: PlaitElement[], resizeSnapOptions: ResizeSnapOptions): ResizeSnapRef {\n const snapG = createG();\n const snapRectangles = getSnapRectangles(board, activeElements);\n let snapLineDelta = getIsometricLineDelta(snapRectangles, resizeSnapOptions);\n if (snapLineDelta.deltaX === 0 && snapLineDelta.deltaY === 0) {\n snapLineDelta = getSnapPointDelta(snapRectangles, resizeSnapOptions);\n }\n const angle = getSelectionAngle(activeElements);\n const activePointAndZoom = getActivePointAndZoom(snapLineDelta, resizeSnapOptions, angle);\n const isometricLinesG = drawIsometricSnapLines(board, activePointAndZoom.activePoints, snapRectangles, resizeSnapOptions, angle);\n const pointLinesG = drawResizingPointSnapLines(board, activePointAndZoom.activePoints, snapRectangles, resizeSnapOptions, angle);\n snapG.append(isometricLinesG, pointLinesG);\n return { ...activePointAndZoom, ...snapLineDelta, snapG };\n}\n\nfunction getSnapPointDelta(snapRectangles: RectangleClient[], resizeSnapOptions: ResizeSnapOptions) {\n let pointLineDelta: SnapDelta = {\n deltaX: 0,\n deltaY: 0\n };\n const { isAspectRatio, activeRectangle, directionFactors } = resizeSnapOptions;\n const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;\n const drawVertical = directionFactors[1] !== 0 || isAspectRatio;\n\n if (drawHorizontal) {\n const xSnapAxis = getTripleAxis(activeRectangle, true);\n const pointX = directionFactors[0] === -1 ? xSnapAxis[0] : xSnapAxis[2];\n const deltaX = getMinPointDelta(snapRectangles, pointX, true);\n if (Math.abs(deltaX) < SNAP_TOLERANCE) {\n pointLineDelta.deltaX = deltaX;\n if (pointLineDelta.deltaX !== 0 && isAspectRatio) {\n pointLineDelta.deltaY = pointLineDelta.deltaX / (activeRectangle.width / activeRectangle.height);\n return pointLineDelta;\n }\n }\n }\n\n if (drawVertical) {\n const ySnapAxis = getTripleAxis(activeRectangle, false);\n const pointY = directionFactors[1] === -1 ? ySnapAxis[0] : ySnapAxis[2];\n const deltaY = getMinPointDelta(snapRectangles, pointY, false);\n if (Math.abs(deltaY) < SNAP_TOLERANCE) {\n pointLineDelta.deltaY = deltaY;\n if (pointLineDelta.deltaY !== 0 && isAspectRatio) {\n pointLineDelta.deltaX = pointLineDelta.deltaY * (activeRectangle.width / activeRectangle.height);\n return pointLineDelta;\n }\n }\n }\n\n return pointLineDelta;\n}\n\nfunction getActivePointAndZoom(resizeSnapDelta: SnapDelta, resizeSnapOptions: ResizeSnapOptions, angle: number) {\n const { deltaX, deltaY } = resizeSnapDelta;\n const { resizePoints, isCreate } = resizeSnapOptions;\n const newResizePoints: [Point, Point] = [resizePoints[0], [resizePoints[1][0] + deltaX, resizePoints[1][1] + deltaY]];\n let activePoints = newResizePoints;\n let xZoom = 0;\n let yZoom = 0;\n if (!isCreate) {\n const { originPoint, handlePoint, isFromCorner, isAspectRatio, resizeOriginPoint } = resizeSnapOptions;\n const resizeZoom = getResizeZoom(newResizePoints, originPoint!, handlePoint!, isFromCorner, isAspectRatio);\n xZoom = resizeZoom.xZoom;\n yZoom = resizeZoom.yZoom;\n activePoints = resizeOriginPoint!.map(p => {\n return movePointByZoomAndOriginPoint(p, originPoint!, xZoom, yZoom);\n }) as [Point, Point];\n if (angle) {\n activePoints = resetPointsAfterResize(\n RectangleClient.getRectangleByPoints(resizeOriginPoint!),\n RectangleClient.getRectangleByPoints(activePoints),\n RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(resizeOriginPoint!)),\n RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(activePoints)),\n angle\n );\n }\n }\n\n return {\n xZoom,\n yZoom,\n activePoints\n };\n}\n\nfunction getIsometricLineDelta(snapRectangles: RectangleClient[], resizeSnapOptions: ResizeSnapOptions) {\n let isometricLineDelta: SnapDelta = {\n deltaX: 0,\n deltaY: 0\n };\n const { isAspectRatio, activeRectangle } = resizeSnapOptions;\n const widthSnapRectangle = snapRectangles.find(item => Math.abs(item.width - activeRectangle.width) < SNAP_TOLERANCE);\n if (widthSnapRectangle) {\n const deltaWidth = widthSnapRectangle.width - activeRectangle.width;\n isometricLineDelta.deltaX = deltaWidth * resizeSnapOptions.directionFactors[0];\n if (isAspectRatio) {\n const deltaHeight = deltaWidth / (activeRectangle.width / activeRectangle.height);\n isometricLineDelta.deltaY = deltaHeight * resizeSnapOptions.directionFactors[1];\n return isometricLineDelta;\n }\n }\n const heightSnapRectangle = snapRectangles.find(item => Math.abs(item.height - activeRectangle.height) < SNAP_TOLERANCE);\n if (heightSnapRectangle) {\n const deltaHeight = heightSnapRectangle.height - activeRectangle.height;\n isometricLineDelta.deltaY = deltaHeight * resizeSnapOptions.directionFactors[1];\n if (isAspectRatio) {\n const deltaWidth = deltaHeight * (activeRectangle.width / activeRectangle.height);\n isometricLineDelta.deltaX = deltaWidth * resizeSnapOptions.directionFactors[0];\n return isometricLineDelta;\n }\n }\n return isometricLineDelta;\n}\n\nfunction getIsometricLinePoints(rectangle: RectangleClient, isHorizontal: boolean): Point[] {\n return isHorizontal\n ? [\n [rectangle.x, rectangle.y - EQUAL_SPACING],\n [rectangle.x + rectangle.width, rectangle.y - EQUAL_SPACING]\n ]\n : [\n [rectangle.x - EQUAL_SPACING, rectangle.y],\n [rectangle.x - EQUAL_SPACING, rectangle.y + rectangle.height]\n ];\n}\n\nfunction drawResizingPointSnapLines(\n board: PlaitBoard,\n activePoints: Point[],\n snapRectangles: RectangleClient[],\n resizeSnapOptions: ResizeSnapOptions,\n angle: number\n) {\n debugGenerator.isDebug() && debugGenerator.clear();\n const rectangle = RectangleClient.getRectangleByPoints(activePoints);\n const activeRectangle = getRectangleByAngle(rectangle, angle);\n const { isAspectRatio, directionFactors } = resizeSnapOptions;\n const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;\n const drawVertical = directionFactors[1] !== 0 || isAspectRatio;\n return drawPointSnapLines(board, activeRectangle, snapRectangles, drawHorizontal, drawVertical);\n}\n\nfunction drawIsometricSnapLines(\n board: PlaitBoard,\n activePoints: Point[],\n snapRectangles: RectangleClient[],\n resizeSnapOptions: ResizeSnapOptions,\n angle: number\n) {\n let widthIsometricPoints = [];\n let heightIsometricPoints = [];\n\n const drawHorizontalLine = resizeSnapOptions.directionFactors[0] !== 0 || resizeSnapOptions.isAspectRatio;\n const drawVerticalLine = resizeSnapOptions.directionFactors[1] !== 0 || resizeSnapOptions.isAspectRatio;\n const rectangle = RectangleClient.getRectangleByPoints(activePoints);\n const activeRectangle = getRectangleByAngle(rectangle, angle);\n for (let snapRectangle of snapRectangles) {\n if (activeRectangle.width === snapRectangle.width && drawHorizontalLine) {\n widthIsometricPoints.push(getIsometricLinePoints(snapRectangle, true));\n }\n if (activeRectangle.height === snapRectangle.height && drawVerticalLine) {\n heightIsometricPoints.push(getIsometricLinePoints(snapRectangle, false));\n }\n }\n if (widthIsometricPoints.length && drawHorizontalLine) {\n widthIsometricPoints.push(getIsometricLinePoints(activeRectangle, true));\n }\n if (heightIsometricPoints.length && drawVerticalLine) {\n heightIsometricPoints.push(getIsometricLinePoints(activeRectangle, false));\n }\n\n const isometricLines = [...widthIsometricPoints, ...heightIsometricPoints];\n return drawSolidLines(board, isometricLines);\n}\n","import { PlaitBoard, PlaitElement, Point, Transforms, getElementById, idCreator } from '@plait/core';\nimport { buildClipboardData as basicBuildClipboard, insertClipboardData as basicInsertClipboard } from '@plait/common';\nimport { PlaitArrowLine, PlaitDrawElement, PlaitGeometry } from '../interfaces';\nimport { getConnectionPoint } from './arrow-line/arrow-line-common';\nimport { PlaitTable } from '../interfaces/table';\nimport { updateCellIds, updateRowOrColumnIds } from './table';\n\nexport const buildClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n return basicBuildClipboard(board, elements, startPoint, (element: PlaitElement) => {\n if (PlaitDrawElement.isArrowLine(element)) {\n let source = { ...element.source };\n let target = { ...element.target };\n let points = [...element.points];\n if (element.source.boundId) {\n points[0] = getConnectionPoint(getElementById<PlaitGeometry>(board, element.source.boundId)!, element.source.connection!);\n if (!getElementById(board, element.source.boundId, elements)) {\n delete source.boundId;\n delete source.connection;\n }\n }\n if (element.target.boundId) {\n points[points.length - 1] = getConnectionPoint(\n getElementById<PlaitGeometry>(board, element.target.boundId)!,\n element.target.connection!\n );\n if (!getElementById(board, element.target.boundId, elements)) {\n delete target.boundId;\n delete target.connection;\n }\n }\n points = points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);\n return { ...element, points, source, target } as PlaitArrowLine;\n }\n return undefined;\n });\n};\n\nexport const insertClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n basicInsertClipboard(board, elements, startPoint, (element: PlaitElement, idsMap: Record<string, string>) => {\n if (PlaitDrawElement.isArrowLine(element)) {\n if (element.source.boundId) {\n const boundElement = elements.find(item => [element.source.boundId, idsMap[element.source.boundId!]].includes(item.id));\n if (boundElement) {\n element.source.boundId = idsMap[element.source.boundId];\n }\n }\n if (element.target.boundId) {\n const boundElement = elements.find(item => [element.target.boundId, idsMap[element.target.boundId!]].includes(item.id));\n if (boundElement) {\n element.target.boundId = idsMap[element.target.boundId];\n }\n }\n }\n if (PlaitDrawElement.isElementByTable(element)) {\n updateRowOrColumnIds(element as PlaitTable, 'row');\n updateRowOrColumnIds(element as PlaitTable, 'column');\n updateCellIds(element.cells);\n }\n });\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getTextRectangle } from '../../utils';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nconst heightRatio = 3 / 4;\n\nexport const CommentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const points = getCommentPoints(rectangle);\n const rs = PlaitBoard.getRoughSVG(board);\n const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(polygon, 'round');\n return polygon;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const parallelogramPoints = getCommentPoints(rectangle);\n return isPointInPolygon(point, parallelogramPoints);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getCommentPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getCommentPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getCommentPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const textRectangle = getTextRectangle(board, element);\n textRectangle.y = elementRectangle.y + (elementRectangle.height * heightRatio - textRectangle.height) / 2;\n return textRectangle;\n }\n};\n\nexport const getCommentPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + (rectangle.width * 3) / 5, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 2) / 5, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height * heightRatio]\n ];\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n distanceBetweenPointAndPoint,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getCrossingPointBetweenPointAndPolygon, getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport interface CreateOptions {\n getPolygonPoints: (rectangle: RectangleClient) => Point[];\n getConnectorPoints?: (rectangle: RectangleClient) => Point[];\n getTextRectangle?: (board: PlaitBoard, element: PlaitGeometry) => RectangleClient;\n}\n\nexport function createPolygonEngine(options: CreateOptions): ShapeEngine {\n const getPoints = options.getPolygonPoints;\n const engine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const points = getPoints(rectangle);\n const rs = PlaitBoard.getRoughSVG(board);\n const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(polygon, 'round');\n return polygon;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const points = getPoints(rectangle);\n return isPointInPolygon(point, points);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getPoints(rectangle));\n },\n getNearestCrossingPoint(rectangle: RectangleClient, point: Point) {\n const corners = getPoints(rectangle);\n const crossingPoints = getCrossingPointBetweenPointAndPolygon(corners, point);\n let nearestPoint = crossingPoints[0];\n let nearestDistance = distanceBetweenPointAndPoint(point[0], point[1], nearestPoint[0], nearestPoint[1]);\n crossingPoints\n .filter((v, index) => index > 0)\n .forEach(crossingPoint => {\n let distance = distanceBetweenPointAndPoint(point[0], point[1], crossingPoint[0], crossingPoint[1]);\n if (distance < nearestDistance) {\n nearestDistance = distance;\n nearestPoint = crossingPoint;\n }\n });\n\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n if (options.getConnectorPoints) {\n return options.getConnectorPoints(rectangle);\n }\n return getPoints(rectangle);\n }\n };\n if (options.getTextRectangle) {\n engine.getTextRectangle = options.getTextRectangle;\n }\n return engine;\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\nexport const getCrossPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height / 4]\n ];\n};\n\nexport const CrossEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getCrossPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const widthRatio = 1 / 2;\n return getCustomTextRectangle(board, element, widthRatio);\n }\n});\n","import { PlaitBoard, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle, getStrokeWidthByElement, getTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants/geometry';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const DiamondEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: RectangleClient.getEdgeCenterPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 1 / 2);\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n getNearestPointBetweenPointAndEllipse,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\n\nexport interface CreateEllipseOptions {\n draw?: (board: PlaitBoard, rectangle: RectangleClient, options: Options) => SVGGElement;\n getTextRectangle?: (board: PlaitBoard, element: PlaitGeometry) => RectangleClient;\n}\n\nexport function createEllipseEngine(createOptions?: CreateEllipseOptions): ShapeEngine {\n const engine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.ellipse(centerPoint[0], centerPoint[1], rectangle.width, rectangle.height, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n return isPointInEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n return getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const a = rectangle.width / 2;\n const b = rectangle.height / 2;\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return vector;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 3 / 4);\n }\n };\n\n if (createOptions?.draw) {\n engine.draw = createOptions.draw;\n }\n if (createOptions?.getTextRectangle) {\n engine.getTextRectangle = createOptions.getTextRectangle;\n }\n\n return engine;\n}\n\nexport const EllipseEngine: ShapeEngine = createEllipseEngine();\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getHexagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n};\n\nexport const HexagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getHexagonPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 3 / 4);\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getLeftArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width * 0.32, rectangle.y],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.8],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.8],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height]\n ];\n};\n\nexport const LeftArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getLeftArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const customTextRectangle = getCustomTextRectangle(board, element, 1 - 0.32);\n customTextRectangle.x = elementRectangle.x + elementRectangle.width * 0.32 + ShapeDefaultSpace.rectangleAndText;\n return customTextRectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getOctagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + (rectangle.width * 3) / 10, rectangle.y],\n [rectangle.x + (rectangle.width * 7) / 10, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 3) / 10],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 7) / 10],\n [rectangle.x + (rectangle.width * 7) / 10, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 3) / 10, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + (rectangle.height * 7) / 10],\n [rectangle.x, rectangle.y + (rectangle.height * 3) / 10]\n ];\n};\n\nexport const OctagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getOctagonPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 3 / 4);\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getParallelogramPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\nexport const ParallelogramEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getParallelogramPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getParallelogramPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 1 / 2);\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getPentagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 2) / 5],\n [rectangle.x + (rectangle.width * 4) / 5, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 5, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + (rectangle.height * 2) / 5]\n ];\n};\n\nexport const PentagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPentagonPoints,\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const customTextRectangle = getCustomTextRectangle(board, element, 3 / 5);\n const startY = elementRectangle.y + elementRectangle.height / 5;\n const endY = elementRectangle.y + elementRectangle.height;\n customTextRectangle.y = startY + (endY - startY - customTextRectangle.height) / 2;\n return customTextRectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getPentagonArrowPoints = (rectangle: RectangleClient): Point[] => {\n const wider = rectangle.width > rectangle.height / 2;\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const PentagonArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPentagonArrowPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const customTextRectangle = getCustomTextRectangle(board, element, 3 / 4);\n customTextRectangle.x = elementRectangle.x + ShapeDefaultSpace.rectangleAndText;\n return customTextRectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getProcessArrowPoints = (rectangle: RectangleClient): Point[] => {\n const wider = rectangle.width > rectangle.height / 2;\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height],\n [rectangle.x + (wider ? rectangle.height / 2 : rectangle.width), rectangle.y + rectangle.height / 2]\n ];\n};\n\nexport const ProcessArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getProcessArrowPoints,\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const wider = elementRectangle.width > elementRectangle.height + 20;\n const widthRatio = wider ? (elementRectangle.width - elementRectangle.height) / elementRectangle.width : 3 / 4;\n const customTextRectangle = getCustomTextRectangle(board, element, widthRatio);\n return customTextRectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getRightArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height * 0.8],\n [rectangle.x, rectangle.y + rectangle.height * 0.8]\n ];\n};\n\nexport const RightArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getRightArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const customTextRectangle = getCustomTextRectangle(board, element, 1 - 0.32);\n customTextRectangle.x = elementRectangle.x + ShapeDefaultSpace.rectangleAndText;\n return customTextRectangle;\n }\n});\n","import { PlaitBoard, Point, PointOfRectangle, RectangleClient, drawRectangle, getNearestPointBetweenPointAndSegments } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport const RectangleEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRectangle(board, rectangle, { ...options, fillStyle: 'solid' });\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getNearestPointBetweenPointAndSegments,\n isPointInRoundRectangle,\n getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from './rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport const RoundRectangleEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n rectangle.x,\n rectangle.y,\n rectangle.x + rectangle.width,\n rectangle.y + rectangle.height,\n { ...options, fillStyle: 'solid' },\n false,\n getRoundRectangleRadius(rectangle)\n );\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n return isPointInRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n\nexport const getRoundRectangleRadius = (rectangle: RectangleClient) => {\n return Math.min(rectangle.width * 0.1, rectangle.height * 0.1);\n};\n\nexport function getNearestPointBetweenPointAndRoundRectangle(point: Point, rectangle: RectangleClient, radius: number) {\n const { x: rectX, y: rectY, width, height } = rectangle;\n const cornerPoints = RectangleClient.getCornerPoints(rectangle);\n let result = getNearestPointBetweenPointAndSegments(point, cornerPoints);\n let circleCenter: Point | null = null;\n\n const inLeftTop = point[0] >= rectX && point[0] <= rectX + radius && point[1] >= rectY && point[1] <= rectY + radius;\n if (inLeftTop) {\n circleCenter = [rectX + radius, rectY + radius];\n }\n const inLeftBottom =\n point[0] >= rectX && point[0] <= rectX + radius && point[1] >= rectY + height && point[1] <= rectY + height - radius;\n if (inLeftBottom) {\n circleCenter = [rectX + radius, rectY + height - radius];\n }\n const inRightTop = point[0] >= rectX + width - radius && point[0] <= rectX + width && point[1] >= rectY && point[1] <= rectY + radius;\n if (inRightTop) {\n circleCenter = [rectX + width - radius, rectY + radius];\n }\n const inRightBottom =\n point[0] >= rectX + width - radius &&\n point[0] <= rectX + width &&\n point[1] >= rectY + height - radius &&\n point[1] <= rectY + height;\n if (inRightBottom) {\n circleCenter = [rectX + width - radius, rectY + height - radius];\n }\n if (circleCenter) {\n result = getNearestPointBetweenPointAndEllipse(point, circleCenter, radius, radius);\n }\n return result;\n}\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n isPointInRoundRectangle,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getRoundRectangleRadius } from './round-rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getTextRectangle } from '../../utils/common';\n\nconst heightRatio = 3 / 4;\n\nexport const RoundCommentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const x1 = rectangle.x;\n const y1 = rectangle.y;\n const x2 = rectangle.x + rectangle.width;\n const y2 = rectangle.y + rectangle.height * heightRatio;\n const radius = getRoundRectangleRadius(rectangle);\n\n const point1 = [x1 + radius, y1];\n const point2 = [x2 - radius, y1];\n const point3 = [x2, y1 + radius];\n const point4 = [x2, y2 - radius];\n const point5 = [x2 - radius, y2];\n const point6 = [x1 + radius, y2];\n const point7 = [x1, y2 - radius];\n const point8 = [x1, y1 + radius];\n\n const point9 = [x1 + rectangle.width / 4, y2];\n const point10 = [x1 + rectangle.width / 4, rectangle.y + rectangle.height];\n const point11 = [x1 + rectangle.width / 2, y2];\n\n const shape = rs.path(\n `M${point2[0]} ${point2[1]} A ${radius} ${radius}, 0, 0, 1, ${point3[0]} ${point3[1]} L ${point4[0]} ${point4[1]} A ${radius} ${radius}, 0, 0, 1, ${point5[0]} ${point5[1]} L ${point11[0]} ${point11[1]} ${point10[0]} ${point10[1]} ${point9[0]} ${point9[1]} ${point6[0]} ${point6[1]} A ${radius} ${radius}, 0, 0, 1, ${point7[0]} ${point7[1]} L ${point8[0]} ${point8[1]} A ${radius} ${radius}, 0, 0, 1, ${point1[0]} ${point1[1]} Z`,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const points: Point[] = [\n [rectangle.x + rectangle.width / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height * 3) / 4]\n ];\n rectangle.height = (rectangle.height * 3) / 4;\n return isPointInPolygon(point, points) || isPointInRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getRoundCommentPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getRoundCommentPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getRoundCommentPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const textRectangle = getTextRectangle(board, element);\n textRectangle.y = elementRectangle.y + (elementRectangle.height * heightRatio - textRectangle.height) / 2;\n return textRectangle;\n }\n};\n\nexport const getRoundCommentPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height * heightRatio]\n ];\n};\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getTrapezoidPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width * 0.15, rectangle.y],\n [rectangle.x + rectangle.width * 0.85, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TrapezoidEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTrapezoidPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n const points = getTrapezoidPoints(rectangle);\n return getCenterPointsOnPolygon(points);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n return getCustomTextRectangle(board, element, 3 / 4);\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getTrianglePoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TriangleEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTrianglePoints,\n getConnectorPoints(rectangle: RectangleClient) {\n const cornerPoints = getTrianglePoints(rectangle);\n const lineCenterPoints = getCenterPointsOnPolygon(cornerPoints);\n return [...lineCenterPoints, ...cornerPoints];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const customTextRectangle = getCustomTextRectangle(board, element, 1 / 2);\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n customTextRectangle.y =\n elementRectangle.y +\n (elementRectangle.height * 2.5) / 5 +\n (elementRectangle.height - (elementRectangle.height * 2.5) / 5 - customTextRectangle.height) / 2;\n return customTextRectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\n\nexport const getTwoWayArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + rectangle.height / 5],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + rectangle.height / 5],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + (rectangle.height * 4) / 5],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + (rectangle.height * 4) / 5],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TwoWayArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTwoWayArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getStarPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height * 75) / 91],\n [rectangle.x + (rectangle.width * 18.61) / 96, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 24.2235871) / 96, rectangle.y + (rectangle.height * 57.7254249) / 91],\n [rectangle.x, rectangle.y + (rectangle.height * 34.5491503) / 91],\n [rectangle.x + (rectangle.width * 33.3053687) / 96, rectangle.y + (rectangle.height * 29.7745751) / 91],\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + (rectangle.width * 62.6946313) / 96, rectangle.y + (rectangle.height * 29.7745751) / 91],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 34.5491503) / 91],\n [rectangle.x + (rectangle.width * 71.7764129) / 96, rectangle.y + (rectangle.height * 57.7254249) / 91],\n [rectangle.x + (rectangle.width * 77.3892626) / 96, rectangle.y + rectangle.height]\n ];\n};\n\nexport const StarEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getStarPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const points = getStarPoints(rectangle);\n return [points[1], points[3], points[5], points[7], points[9]];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const customTextRectangle = getCustomTextRectangle(board, element, 1 / 2);\n customTextRectangle.y =\n elementRectangle.y +\n elementRectangle.height / 5 +\n (elementRectangle.height - elementRectangle.height / 5 - customTextRectangle.height) / 2;\n return customTextRectangle;\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInRoundRectangle,\n getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\n\nexport const TerminalEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n rectangle.x,\n rectangle.y,\n rectangle.x + rectangle.width,\n rectangle.y + rectangle.height,\n { ...options, fillStyle: 'solid' },\n false,\n getStartEndRadius(rectangle)\n );\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n return isPointInRoundRectangle(point, rectangle, getStartEndRadius(rectangle));\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndRoundRectangle(point, rectangle, getStartEndRadius(rectangle));\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const radius = getStartEndRadius(rectangle);\n const center = getBoundCenterOfRoundRectangle(rectangle, radius, connectionPoint);\n if (center) {\n const point = [connectionPoint[0] - center[0], -(connectionPoint[1] - center[1])];\n const a = radius;\n const b = radius;\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n return getVectorFromPointAndSlope(point[0], point[1], slope);\n }\n return null;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n\nexport const getStartEndRadius = (rectangle: RectangleClient) => {\n return Math.min(rectangle.width / 2, rectangle.height / 2);\n};\n\nexport function getNearestPointBetweenPointAndRoundRectangle(point: Point, rectangle: RectangleClient, radius: number) {\n let result: Point | null = null;\n let boundCenter: Point | null = getBoundCenterOfRoundRectangle(rectangle, radius, point);\n if (boundCenter) {\n result = getNearestPointBetweenPointAndEllipse(point, boundCenter, radius, radius);\n } else {\n const cornerPoints = RectangleClient.getCornerPoints(rectangle);\n result = getNearestPointBetweenPointAndSegments(point, cornerPoints);\n }\n return result;\n}\n\nexport function getBoundCenterOfRoundRectangle(rectangle: RectangleClient, radius: number, point: Point) {\n const { x, y, width, height } = rectangle;\n let center: Point | null = null;\n const inLeftTop = point[0] >= x && point[0] <= x + radius && point[1] >= y && point[1] <= y + radius;\n if (inLeftTop) {\n center = [x + radius, y + radius];\n }\n const inLeftBottom = point[0] >= x && point[0] <= x + radius && point[1] >= y + height - radius && point[1] <= y + height;\n if (inLeftBottom) {\n center = [x + radius, y + height - radius];\n }\n const inRightTop = point[0] >= x + width - radius && point[0] <= x + width && point[1] >= y && point[1] <= y + radius;\n if (inRightTop) {\n center = [x + width - radius, y + radius];\n }\n const inRightBottom =\n point[0] >= x + width - radius && point[0] <= x + width && point[1] >= y + height - radius && point[1] <= y + height;\n if (inRightBottom) {\n center = [x + width - radius, y + height - radius];\n }\n return center;\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const getManualInputPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const ManualInputEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getManualInputPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getManualInputPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + elementRectangle.height / 4 + ((elementRectangle.height * 3) / 4 - textSize.height) / 2\n };\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCustomTextRectangle } from '../../utils';\n\nexport const getPreparationPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 6, rectangle.y],\n [rectangle.x + (rectangle.width * 5) / 6, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 5) / 6, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 6, rectangle.y + rectangle.height]\n ];\n};\n\nexport const PreparationEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPreparationPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n const rectangle = getCustomTextRectangle(board, element, 2 / 3);\n return rectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getCustomTextRectangle, getTextRectangle } from '../../utils';\n\nexport const getManualLoopPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + (rectangle.width * 7) / 8, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 8, rectangle.y + rectangle.height]\n ];\n};\nexport const ManualLoopEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getManualLoopPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getManualLoopPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const rectangle = getCustomTextRectangle(board, element, 3 / 4);\n return rectangle;\n }\n});\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\n\nexport const getMergePoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height]\n ];\n};\n\nexport const MergeEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getMergePoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getMergePoints(rectangle);\n const lineCenterPoints = getCenterPointsOnPolygon(cornerPoints);\n return [...lineCenterPoints, ...cornerPoints];\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 2) / 3;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + ((elementRectangle.height * 2) / 3 - textSize.height) / 2\n };\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n setStrokeLinecap,\n getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\n\nexport const DelayEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} L${rectangle.x + (rectangle.width * 3) / 4} ${rectangle.y} A ${rectangle.width /\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 { getCustomTextRectangle, getTextRectangle } from '../../utils';\n\nexport const StoredDataEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x + rectangle.width / 10} ${rectangle.y} L${rectangle.x + rectangle.width} ${rectangle.y} A ${\n rectangle.width / 10\n } ${rectangle.height / 2}, 0, 0, 0,${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height} L${\n rectangle.x + rectangle.width / 10\n } ${rectangle.y + rectangle.height}A ${rectangle.width / 10} ${rectangle.height / 2}, 0, 0, 1,${\n rectangle.x + rectangle.width / 10\n } ${rectangle.y}`,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n //split shape to rectangle and a half ellipse\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n const isInRectangle = RectangleClient.isHit(\n {\n ...rectangle,\n x: rectangle.x + rectangle.width / 10,\n width: (rectangle.width * 9) / 10\n },\n rangeRectangle\n );\n\n const isInFrontEllipse = isPointInEllipse(\n point,\n [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\n\n const notInBackEllipse = !isPointInEllipse(\n point,\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\n return (isInRectangle && notInBackEllipse) || isInFrontEllipse;\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[0] < rectangle.x + rectangle.width / 10) {\n const centerPoint = [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 10, rectangle.height / 2);\n if (nearestPoint[0] > centerPoint[0]) {\n nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n }\n return nearestPoint;\n }\n if (nearestPoint[0] > rectangle.x + (rectangle.width * 9) / 10) {\n const centerPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 10, rectangle.height / 2);\n if (nearestPoint[0] > centerPoint[0]) {\n nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n }\n return nearestPoint;\n }\n return nearestPoint;\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n let centerPoint = [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2];\n let a = rectangle.width / 10;\n let b = rectangle.height / 2;\n const isBackEllipse = connectionPoint[0] > rectangle.x + (rectangle.width * 9) / 10 && connectionPoint[1] > rectangle.y;\n if (isBackEllipse) {\n centerPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2];\n }\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return isBackEllipse ? (vector.map((num) => -num) as Vector) : vector;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + (rectangle.width * 9) / 10, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n const widthRatio = 3 / 4;\n return getCustomTextRectangle(board, element, widthRatio);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const PredefinedProcessEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y + rectangle.height} H${\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: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.06 * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.06,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const getOffPagePoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n};\n\nexport const OffPageEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getOffPagePoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n width: width > 0 ? width : 0,\n height: textSize.height,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - elementRectangle.height / 2 - textSize.height) / 2\n };\n }\n});\n","import { PlaitBoard, RectangleClient, setStrokeLinecap } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { createEllipseEngine } from '../basic-shapes/ellipse';\n\nexport const OrEngine: ShapeEngine = createEllipseEngine({\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const rx = rectangle.width / 2;\n const ry = rectangle.height / 2;\n const startPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2];\n const shape = rs.path(\n `M${startPoint[0]} ${startPoint[1]}\n A${rx},${ry} 0 1,1 ${startPoint[0]} ${startPoint[1] - 0.01}\n M${rectangle.x} ${rectangle.y + rectangle.height / 2}\n L${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height / 2}\n M${rectangle.x + rectangle.width / 2} ${rectangle.y}\n L${rectangle.x + rectangle.width / 2} ${rectangle.y + rectangle.height}\n `,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n }\n});\n","import { PlaitBoard, RectangleClient, getCrossingPointsBetweenEllipseAndSegment, setStrokeLinecap } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { createEllipseEngine } from '../basic-shapes/ellipse';\n\nexport const SummingJunctionEngine: ShapeEngine = createEllipseEngine({\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const rx = rectangle.width / 2;\n const ry = rectangle.height / 2;\n const startPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2];\n const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n const line1Points = getCrossingPointsBetweenEllipseAndSegment(\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n centerPoint[0],\n centerPoint[1],\n rx,\n ry\n );\n const line2Points = getCrossingPointsBetweenEllipseAndSegment(\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x, rectangle.y + rectangle.height],\n centerPoint[0],\n centerPoint[1],\n rx,\n ry\n );\n\n const shape = rs.path(\n `M${startPoint[0]} ${startPoint[1]}\n A${rx},${ry} 0 1,1 ${startPoint[0]} ${startPoint[1] - 0.01}\n M${line1Points[0][0]} ${line1Points[0][1]}\n L${line1Points[1][0]} ${line1Points[1][1]}\n M${line2Points[0][0]} ${line2Points[0][1]}\n L${line2Points[1][0]} ${line2Points[1][1]}\n `,\n { ...options, fillStyle: 'solid' }\n );\n\n setStrokeLinecap(shape, 'round');\n return shape;\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n catmullRomFitting,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { pointsOnBezierCurves } from 'points-on-curve';\n\nexport const DocumentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9} V${rectangle.y} H${rectangle.x +\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: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 0.88);\n }\n};\n","import {\n Direction,\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n catmullRomFitting,\n distanceBetweenPointAndPoint,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { getDirectionByPointOfRectangle, getDirectionFactor, getUnitVectorByPointAndPoint } from '@plait/common';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { getCrossingPointBetweenPointAndPolygon } from '../../utils/polygon';\n\nexport const getMultiDocumentPoints = (rectangle: RectangleClient): Point[] => {\n const linePoints: Point[] = [\n [rectangle.x, rectangle.y + 10],\n [rectangle.x + 5, rectangle.y + 10],\n [rectangle.x + 5, rectangle.y + 5],\n [rectangle.x + 10, rectangle.y + 5],\n [rectangle.x + 10, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3],\n [rectangle.x + rectangle.width - 5, rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3 - 4],\n [rectangle.x + rectangle.width - 5, rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3],\n [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3 - 4],\n [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9]\n ];\n\n let curvePoints = catmullRomFitting([\n [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9],\n [rectangle.x + rectangle.width - 10 - (rectangle.width - 10) / 4, rectangle.y + rectangle.height - (rectangle.height / 9) * 2],\n [rectangle.x + (rectangle.width - 10) / 2, rectangle.y + rectangle.height - rectangle.height / 9],\n [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height - rectangle.height / 9]\n ]);\n\n curvePoints = pointsOnBezierCurves(curvePoints) as Point[];\n return [...linePoints, ...curvePoints];\n};\n\nexport const MultiDocumentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9} V${rectangle.y + 10} H${rectangle.x + 5} V${\n rectangle.y + 5\n } H${rectangle.x + 10} V${rectangle.y} H${rectangle.x + rectangle.width} V${\n rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3\n } L${rectangle.x + rectangle.width - 5} ${rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3 - 4} V${\n rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3\n }\n L${rectangle.x + rectangle.width - 10} ${rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3 - 4} V${\n rectangle.y + rectangle.height - rectangle.height / 9\n }\n \n Q${rectangle.x + rectangle.width - 10 - (rectangle.width - 10) / 4} ${\n rectangle.y + rectangle.height - (rectangle.height / 9) * 3\n }, ${rectangle.x + (rectangle.width - 10) / 2} ${rectangle.y + rectangle.height - rectangle.height / 9} T${rectangle.x} ${\n rectangle.y + rectangle.height - rectangle.height / 9\n }\n \n M${rectangle.x + 5} ${rectangle.y + 10} H${rectangle.x + rectangle.width - 10} V${\n rectangle.y + rectangle.height - rectangle.height / 9\n } \n \n M${rectangle.x + 10} ${rectangle.y + 5} H${rectangle.x + rectangle.width - 5} V${\n rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3\n }\n `,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getMultiDocumentPoints(rectangle), false);\n },\n\n getConnectorPoints(rectangle: RectangleClient) {\n let curvePoints = catmullRomFitting([\n [rectangle.x, rectangle.y + rectangle.height - rectangle.height / 9],\n [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width - 10) / 2, rectangle.y + rectangle.height - rectangle.height / 9],\n [rectangle.x + ((rectangle.width - 10) / 4) * 3, rectangle.y + rectangle.height - (rectangle.height / 9) * 2],\n [rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9]\n ]);\n curvePoints = pointsOnBezierCurves(curvePoints) as Point[];\n const crossingPoint = getNearestPointBetweenPointAndSegments(\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n curvePoints\n );\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [crossingPoint[0], crossingPoint[1]],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n },\n\n getNearestCrossingPoint(rectangle: RectangleClient, point: Point) {\n const crossingPoints = getCrossingPointBetweenPointAndPolygon(getMultiDocumentPoints(rectangle), point);\n let nearestPoint = crossingPoints[0];\n let nearestDistance = distanceBetweenPointAndPoint(point[0], point[1], nearestPoint[0], nearestPoint[1]);\n crossingPoints\n .filter((v, index) => index > 0)\n .forEach((crossingPoint) => {\n let distance = distanceBetweenPointAndPoint(point[0], point[1], crossingPoint[0], crossingPoint[1]);\n if (distance < nearestDistance) {\n nearestDistance = distance;\n nearestPoint = crossingPoint;\n }\n });\n\n return nearestPoint;\n },\n\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n if (connectionPoint[0] > rectangle.x && connectionPoint[0] < rectangle.x + (rectangle.width - 10) / 4) {\n return getUnitVectorByPointAndPoint(\n [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height],\n connectionPoint\n );\n }\n if (\n connectionPoint[0] > rectangle.x + (rectangle.width - 10) / 4 &&\n connectionPoint[0] < rectangle.x + ((rectangle.width - 10) / 4) * 3\n ) {\n return getUnitVectorByPointAndPoint(\n [rectangle.x + ((rectangle.width - 10) / 4) * 3, rectangle.y + rectangle.height - rectangle.height / 9],\n [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height]\n );\n }\n\n if (\n connectionPoint[0] > rectangle.x + ((rectangle.width - 10) / 4) * 3 &&\n connectionPoint[0] < rectangle.x + rectangle.width - 10\n ) {\n return getUnitVectorByPointAndPoint(\n [rectangle.x + (rectangle.width - 10), rectangle.y + rectangle.height - rectangle.height / 9],\n connectionPoint\n );\n }\n const direction = getDirectionByPointOfRectangle(pointOfRectangle) || Direction.bottom;\n const factor = getDirectionFactor(direction!);\n return [factor.x, factor.y];\n },\n\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 0.88);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\n\nexport const DatabaseEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y + rectangle.height * 0.15} \n A${rectangle.width / 2} ${rectangle.height * 0.15}, 0, 0, 0,${rectangle.x + rectangle.width} ${\n rectangle.y + rectangle.height * 0.15\n } \n A${rectangle.width / 2} ${rectangle.height * 0.15}, 0, 0, 0,${rectangle.x} ${rectangle.y + rectangle.height * 0.15} \n V${rectangle.y + rectangle.height - rectangle.height * 0.15}\n A${rectangle.width / 2} ${rectangle.height * 0.15}, 0, 0, 0, ${rectangle.x + rectangle.width} ${\n rectangle.y + rectangle.height - rectangle.height * 0.15\n }\n V${rectangle.y + rectangle.height * 0.15}`,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n const isInRectangle = RectangleClient.isHit(\n {\n ...rectangle,\n y: rectangle.y + rectangle.height * 0.15,\n height: rectangle.height - rectangle.height * 0.3\n },\n rangeRectangle\n );\n\n const isInTopEllipse = isPointInEllipse(\n point,\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * 0.15],\n rectangle.width / 2,\n rectangle.height * 0.15\n );\n\n const isInBottomEllipse = isPointInEllipse(\n point,\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height * 0.15],\n rectangle.width / 2,\n rectangle.height * 0.15\n );\n return isInRectangle || isInTopEllipse || isInBottomEllipse;\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[1] < rectangle.y + rectangle.height * 0.15) {\n const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * 0.15] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height * 0.15);\n if (nearestPoint[1] > centerPoint[1]) {\n nearestPoint[1] = centerPoint[1] * 2 - nearestPoint[1];\n }\n return nearestPoint;\n }\n if (nearestPoint[1] > rectangle.y + rectangle.height - rectangle.height * 0.15) {\n const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height * 0.15] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height * 0.15);\n if (nearestPoint[1] < centerPoint[1]) {\n nearestPoint[1] = centerPoint[0] * 2 - nearestPoint[1];\n }\n return nearestPoint;\n }\n return nearestPoint;\n },\n\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n let centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height * 0.15];\n let a = rectangle.width / 2;\n let b = rectangle.height * 0.15;\n const isInTopEllipse = connectionPoint[1] < rectangle.y + rectangle.height * 0.15 && connectionPoint[0] > rectangle.x;\n if (isInTopEllipse) {\n centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * 0.15];\n }\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return vector;\n },\n\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const textRectangle = getCustomTextRectangle(board, element, 1);\n textRectangle.y += getStrokeWidthByElement(element);\n const startY = elementRectangle.y + elementRectangle.height * 0.45;\n const endY = elementRectangle.y + elementRectangle.height - elementRectangle.height * 0.3;\n textRectangle.y = startY + (endY - startY - textRectangle.height) / 2;\n return textRectangle;\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const HardDiskEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x + rectangle.width - rectangle.width * 0.15} ${rectangle.y} \n A${rectangle.width * 0.15} ${rectangle.height / 2}, 0, 0, 0,${rectangle.x +\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: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - elementRectangle.width * 0.45 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + elementRectangle.width * 0.15 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\n\nexport const InternalStorageEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} h${rectangle.width} v${rectangle.height} h${-rectangle.width} v${-rectangle.height}\n M${rectangle.x} ${rectangle.y + rectangle.height / 10} h${rectangle.width}\n M${rectangle.x + rectangle.width / 10} ${rectangle.y} v${rectangle.height}\n `,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - elementRectangle.width * 0.1 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + elementRectangle.width * 0.1 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + elementRectangle.height * 0.1 + (elementRectangle.height - elementRectangle.height * 0.1 - textSize.height) / 2\n };\n }\n};\n","import { PlaitBoard, Point, PointOfRectangle, RectangleClient, distanceBetweenPointAndPoint, setStrokeLinecap } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { pointsOnBezierCurves } from 'points-on-curve';\n\ninterface NoteCurlyLeftPathData {\n startPoint: Point;\n upperCurve: {\n controlPoint1: Point;\n controlPoint2: Point;\n endPoint: Point;\n };\n lowerCurve: {\n controlPoint1: Point;\n controlPoint2: Point;\n endPoint: Point;\n };\n}\n\nfunction generateNoteCurlyLeftPath(rectangle: RectangleClient): NoteCurlyLeftPathData {\n const curlyWidth = rectangle.width * 0.09;\n const rightX = rectangle.x + rectangle.width;\n const centerY = rectangle.y + rectangle.height / 2;\n\n return {\n startPoint: [rightX, rectangle.y],\n upperCurve: {\n controlPoint1: [rightX - curlyWidth, rectangle.y],\n controlPoint2: [rightX, centerY],\n endPoint: [rightX - curlyWidth, centerY]\n },\n lowerCurve: {\n controlPoint1: [rightX, centerY],\n controlPoint2: [rightX - curlyWidth, rectangle.y + rectangle.height],\n endPoint: [rightX, rectangle.y + rectangle.height]\n }\n };\n}\n\nexport const NoteCurlyLeftEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyLeftPath(rectangle);\n\n const pathData = [\n `M${startPoint[0]} ${startPoint[1]}`,\n `C${upperCurve.controlPoint1[0]} ${upperCurve.controlPoint1[1]},\n ${upperCurve.controlPoint2[0]} ${upperCurve.controlPoint2[1]},\n ${upperCurve.endPoint[0]} ${upperCurve.endPoint[1]}`,\n `C${lowerCurve.controlPoint1[0]} ${lowerCurve.controlPoint1[1]},\n ${lowerCurve.controlPoint2[0]} ${lowerCurve.controlPoint2[1]},\n ${lowerCurve.endPoint[0]} ${lowerCurve.endPoint[1]}`\n ].join(' ');\n\n const shape = rs.path(pathData, { ...options, fillStyle: 'solid', fill: 'transparent' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyLeftPath(rectangle);\n\n const upperBezierPoints = pointsOnBezierCurves(\n [startPoint, upperCurve.controlPoint1, upperCurve.controlPoint2, upperCurve.endPoint],\n 0.001\n );\n\n const lowerBezierPoints = pointsOnBezierCurves(\n [upperCurve.endPoint, lowerCurve.controlPoint1, lowerCurve.controlPoint2, lowerCurve.endPoint],\n 0.001\n );\n\n const allPoints = [...upperBezierPoints, ...lowerBezierPoints];\n\n let minDistance = Infinity;\n let nearestPoint = point;\n\n for (const curvePoint of allPoints) {\n const distance = distanceBetweenPointAndPoint(point[0], point[1], curvePoint[0], curvePoint[1]);\n if (distance < minDistance) {\n minDistance = distance;\n nearestPoint = [...curvePoint];\n }\n }\n\n return nearestPoint;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const textRectangle = getCustomTextRectangle(board, element, 0.9);\n textRectangle.x = elementRectangle.x + getStrokeWidthByElement(element) + ShapeDefaultSpace.rectangleAndText;\n return textRectangle;\n }\n};\n","import { PlaitBoard, Point, PointOfRectangle, RectangleClient, distanceBetweenPointAndPoint, setStrokeLinecap } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { pointsOnBezierCurves } from 'points-on-curve';\n\ninterface NoteCurlyRightPathData {\n startPoint: Point;\n upperCurve: {\n controlPoint1: Point;\n controlPoint2: Point;\n endPoint: Point;\n };\n lowerCurve: {\n controlPoint1: Point;\n controlPoint2: Point;\n endPoint: Point;\n };\n}\n\nfunction generateNoteCurlyRightPath(rectangle: RectangleClient): NoteCurlyRightPathData {\n const curlyWidth = rectangle.width * 0.09;\n const centerY = rectangle.y + rectangle.height / 2;\n\n return {\n startPoint: [rectangle.x, rectangle.y],\n upperCurve: {\n controlPoint1: [rectangle.x + curlyWidth, rectangle.y],\n controlPoint2: [rectangle.x, centerY],\n endPoint: [rectangle.x + curlyWidth, centerY]\n },\n lowerCurve: {\n controlPoint1: [rectangle.x, centerY],\n controlPoint2: [rectangle.x + curlyWidth, rectangle.y + rectangle.height],\n endPoint: [rectangle.x, rectangle.y + rectangle.height]\n }\n };\n}\n\nexport const NoteCurlyRightEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyRightPath(rectangle);\n\n const pathData = [\n `M${startPoint[0]} ${startPoint[1]}`,\n `C${upperCurve.controlPoint1[0]} ${upperCurve.controlPoint1[1]},\n ${upperCurve.controlPoint2[0]} ${upperCurve.controlPoint2[1]},\n ${upperCurve.endPoint[0]} ${upperCurve.endPoint[1]}`,\n `C${lowerCurve.controlPoint1[0]} ${lowerCurve.controlPoint1[1]},\n ${lowerCurve.controlPoint2[0]} ${lowerCurve.controlPoint2[1]},\n ${lowerCurve.endPoint[0]} ${lowerCurve.endPoint[1]}`\n ].join(' ');\n\n const shape = rs.path(pathData, { ...options, fillStyle: 'solid', fill: 'transparent' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyRightPath(rectangle);\n\n // 生成上部贝塞尔曲线的点\n const upperBezierPoints = pointsOnBezierCurves(\n [startPoint, upperCurve.controlPoint1, upperCurve.controlPoint2, upperCurve.endPoint],\n 0.001\n );\n\n // 生成下部贝塞尔曲线的点\n const lowerBezierPoints = pointsOnBezierCurves(\n [upperCurve.endPoint, lowerCurve.controlPoint1, lowerCurve.controlPoint2, lowerCurve.endPoint],\n 0.001\n );\n\n // 合并所有点\n const allPoints = [...upperBezierPoints, ...lowerBezierPoints];\n\n // 找到最近的点\n let minDistance = Infinity;\n let nearestPoint = [...point] as Point;\n\n for (const curvePoint of allPoints) {\n const distance = distanceBetweenPointAndPoint(point[0], point[1], curvePoint[0], curvePoint[1]);\n if (distance < minDistance) {\n minDistance = distance;\n nearestPoint = [...curvePoint];\n }\n }\n\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const textRectangle = getCustomTextRectangle(board, element, 0.9);\n textRectangle.x =\n elementRectangle.x + getStrokeWidthByElement(element) + ShapeDefaultSpace.rectangleAndText + elementRectangle.width * 0.1;\n return textRectangle;\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const NoteSquareEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x + rectangle.width * 0.075} ${rectangle.y + rectangle.height} H${rectangle.x} V${rectangle.y} H${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: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 0.88);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement, getCustomTextRectangle } from '../../utils';\n\nexport const getDisplayPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width * 0.15, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width * 0.15, rectangle.y + rectangle.height]\n ];\n};\n\nexport const DisplayEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x + rectangle.width * 0.15} ${rectangle.y} \n H${rectangle.x + rectangle.width - rectangle.width * 0.1} \n A ${rectangle.width * 0.1} ${rectangle.height / 2}, 0, 0, 1,${rectangle.x +\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: (board: PlaitBoard, element: PlaitGeometry) => {\n return getCustomTextRectangle(board, element, 0.75);\n }\n};\n","import { PlaitBoard, RectangleClient, Point, createG, drawLine, setStrokeLinecap, drawRectangle, ACTIVE_STROKE_WIDTH } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { getCellsWithPoints, getCellWithPoints } from '../../utils/table';\nimport { ShapeEngine } from '../../interfaces';\nimport { DrawTextInfo } from '../../generators/text.generator';\nimport { PlaitTable, PlaitTableCellWithPoints, PlaitTableDrawOptions, PlaitTableElement } from '../../interfaces/table';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getNearestPointBetweenPointAndRoundRectangle, getRoundRectangleRadius } from '../basic-shapes/round-rectangle';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const TableEngine: ShapeEngine<PlaitTable, PlaitTableDrawOptions, DrawTextInfo> = {\n draw(board: PlaitBoard, rectangle: RectangleClient, roughOptions: Options, options?: PlaitTableDrawOptions) {\n const g = createG();\n try {\n const pointCells = getCellsWithPoints(board, { ...options?.element } as PlaitTable);\n if (pointCells) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { x, y, width, height } = rectangle;\n const tableTopBorder = drawLine(rs, [x, y], [x + width, y], roughOptions);\n const tableLeftBorder = drawLine(rs, [x, y], [x, y + height], roughOptions);\n g.append(tableTopBorder, tableLeftBorder);\n pointCells.forEach((cell) => {\n const rectangle = RectangleClient.getRectangleByPoints(cell.points!);\n const { x, y, width, height } = rectangle;\n const cellRectangle = drawRectangle(\n board,\n {\n x: x + ACTIVE_STROKE_WIDTH,\n y: y + ACTIVE_STROKE_WIDTH,\n width: width - ACTIVE_STROKE_WIDTH * 2,\n height: height - ACTIVE_STROKE_WIDTH * 2\n },\n { fill: cell.fill, fillStyle: 'solid', strokeWidth: 0 }\n );\n const cellRightBorder = drawLine(rs, [x + width, y], [x + width, y + height], roughOptions);\n const cellBottomBorder = drawLine(rs, [x, y + height], [x + width, y + height], roughOptions);\n g.append(cellRectangle, cellRightBorder, cellBottomBorder);\n });\n setStrokeLinecap(g, 'round');\n }\n } catch (error) {\n console.error(error);\n }\n return g;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitTable, options?: DrawTextInfo) {\n try {\n if (options && options.id) {\n const cell = getCellWithPoints(board, element, options!.id);\n if (cell) {\n if (PlaitTableElement.isVerticalText(cell)) {\n return getVerticalTextRectangle(board, cell);\n } else {\n return getHorizontalTextRectangle(board, cell);\n }\n }\n }\n } catch (error) {\n console.error(error);\n }\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n};\n\nexport function getVerticalTextRectangle(board: PlaitBoard, cell: PlaitTableCellWithPoints) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const width = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return getTextRectangle(board, cell, width, cellRectangle);\n}\n\nexport function getHorizontalTextRectangle(board: PlaitBoard, cell: PlaitTableCellWithPoints) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const width = cellRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return getTextRectangle(board, cell, width, cellRectangle);\n}\n\nexport function getTextRectangle(board: PlaitBoard, cell: PlaitTableCellWithPoints, width: number, cellRectangle: RectangleClient) {\n const text = cell.text;\n if (text) {\n const textSize = getTextSize(board, text, width);\n return {\n width: width > 0 ? width : 0,\n height: textSize.height,\n x: cellRectangle.x - width / 2 + cellRectangle.width / 2,\n y: cellRectangle.y + (cellRectangle.height - textSize.height) / 2\n };\n } else {\n return {\n width: 0,\n height: 0,\n x: cellRectangle.x,\n y: cellRectangle.y\n };\n }\n}\n\nexport const getCellTextHeight = (board: PlaitBoard, cell: PlaitTableCellWithPoints, isVertical: boolean = false) => {\n if (cell.text) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n let width = cellRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n if (isVertical) {\n width = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n }\n return getTextSize(board, cell.text, width).height;\n }\n return 0;\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n SVGArcCommand,\n distanceBetweenPointAndPoint,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndDiscreteSegments,\n getNearestPointBetweenPointAndEllipse,\n getVectorFromPointAndSlope,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getUnitVectorByPointAndPoint, rotateVector } from '@plait/common';\n\ninterface ActorPathData {\n headArcCommand: SVGArcCommand;\n bodyLine: [Point, Point];\n armsLine: [Point, Point];\n leftLegLine: [Point, Point];\n rightLegLine: [Point, Point];\n}\n\nfunction generateActorPath(rectangle: RectangleClient): ActorPathData {\n const centerX = rectangle.x + rectangle.width / 2;\n const headRadius = { width: rectangle.width / 3 / 2, height: rectangle.height / 4 / 2 };\n const centerY = rectangle.y + rectangle.height / 4 / 2;\n\n return {\n headArcCommand: {\n rx: headRadius.width,\n ry: headRadius.height,\n xAxisRotation: 0,\n largeArcFlag: 0,\n sweepFlag: 1,\n endX: centerX,\n endY: rectangle.y\n },\n bodyLine: [\n [centerX, rectangle.y + rectangle.height / 4],\n [centerX, rectangle.y + (rectangle.height / 4) * 3]\n ],\n armsLine: [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ],\n leftLegLine: [\n [centerX, rectangle.y + (rectangle.height / 4) * 3],\n [rectangle.x + rectangle.width / 12, rectangle.y + rectangle.height]\n ],\n rightLegLine: [\n [centerX, rectangle.y + (rectangle.height / 4) * 3],\n [rectangle.x + (rectangle.width / 12) * 11, rectangle.y + rectangle.height]\n ]\n };\n}\n\nexport const ActorEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { headArcCommand, bodyLine, armsLine, leftLegLine, rightLegLine } = generateActorPath(rectangle);\n\n const pathData = [\n // 头部(从中间开始画)\n `M${bodyLine[0][0]} ${bodyLine[0][1]}`,\n `A${headArcCommand.rx} ${headArcCommand.ry} ${headArcCommand.xAxisRotation} ${headArcCommand.largeArcFlag} ${headArcCommand.sweepFlag} ${headArcCommand.endX} ${headArcCommand.endY}`,\n `A${headArcCommand.rx} ${headArcCommand.ry} ${headArcCommand.xAxisRotation} ${headArcCommand.largeArcFlag} ${headArcCommand.sweepFlag} ${bodyLine[0][0]} ${bodyLine[0][1]}`,\n // 身体\n `V${bodyLine[1][1]}`,\n // 手臂\n `M${armsLine[0][0]} ${armsLine[0][1]} H${armsLine[1][0]}`,\n // 腿\n `M${leftLegLine[0][0]} ${leftLegLine[0][1]} L${leftLegLine[1][0]} ${leftLegLine[1][1]}`,\n `M${rightLegLine[0][0]} ${rightLegLine[0][1]} L${rightLegLine[1][0]} ${rightLegLine[1][1]}`\n ].join(' ');\n\n const shape = rs.path(pathData, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { headArcCommand, bodyLine, armsLine, leftLegLine, rightLegLine } = generateActorPath(rectangle);\n\n // 检查头部椭圆\n const headCenter: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4 / 2];\n const nearestPointForHead = getNearestPointBetweenPointAndEllipse(point, headCenter, headArcCommand.rx, headArcCommand.ry);\n const distanceForHead = distanceBetweenPointAndPoint(...point, ...nearestPointForHead);\n\n // 检查所有线段\n const allSegments = [bodyLine, armsLine, leftLegLine, rightLegLine];\n const nearestPointForLines = getNearestPointBetweenPointAndDiscreteSegments(point, allSegments);\n const distanceForLines = distanceBetweenPointAndPoint(...point, ...nearestPointForLines);\n\n return distanceForHead < distanceForLines ? nearestPointForHead : nearestPointForLines;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n if (connectionPoint[1] >= rectangle.y && connectionPoint[1] <= rectangle.y + rectangle.height / 4) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4 / 2];\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const a = rectangle.width / 2;\n const b = rectangle.height / 2;\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return vector;\n }\n\n if (connectionPoint[1] >= rectangle.y + rectangle.height / 4 && connectionPoint[1] < rectangle.y + (rectangle.height / 4) * 3) {\n if (connectionPoint[0] < rectangle.x + rectangle.width / 2) {\n return rotateVector(\n getUnitVectorByPointAndPoint([rectangle.x, rectangle.y + rectangle.height / 2], connectionPoint),\n -(Math.PI / 2)\n );\n } else {\n return rotateVector(\n getUnitVectorByPointAndPoint([rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2], connectionPoint),\n -(Math.PI / 2)\n );\n }\n }\n\n if (connectionPoint[1] >= rectangle.y + (rectangle.height / 4) * 3) {\n if (connectionPoint[0] < rectangle.x + rectangle.width / 2) {\n return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x + rectangle.width / 12, rectangle.y + rectangle.height]);\n } else {\n return getUnitVectorByPointAndPoint(\n [rectangle.x + (rectangle.width / 12) * 11, rectangle.y + rectangle.height],\n connectionPoint\n );\n }\n }\n\n return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height]);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const width = elementRectangle.width + 40;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x - 20,\n y: elementRectangle.y + elementRectangle.height + 4\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const ContainerEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y + rectangle.height} H${\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(board: PlaitBoard, element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = 40 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndDiscreteSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\nimport { DrawOptions, GeometryCommonTextKeys, PlaitMultipleTextGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { DrawTextInfo } from '../../generators/text.generator';\nimport { getTextSize } from '../../utils/text-size';\n\ninterface PackagePathData {\n headerHeight: number;\n points: {\n leftTop: Point;\n topStart: Point;\n topEnd: Point;\n cornerPoint: Point;\n rightTop: Point;\n rightBottom: Point;\n leftBottom: Point;\n leftMiddle: Point;\n middlePoint: Point;\n };\n}\n\nfunction generatePackagePath(rectangle: RectangleClient): PackagePathData {\n const headerHeight = 25;\n const topWidth = rectangle.width * 0.7;\n const cornerX = rectangle.x + rectangle.width * 0.8;\n\n return {\n headerHeight,\n points: {\n leftTop: [rectangle.x, rectangle.y + headerHeight],\n topStart: [rectangle.x, rectangle.y],\n topEnd: [rectangle.x + topWidth, rectangle.y],\n cornerPoint: [cornerX, rectangle.y + headerHeight],\n rightTop: [rectangle.x + rectangle.width, rectangle.y + headerHeight],\n rightBottom: [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n leftBottom: [rectangle.x, rectangle.y + rectangle.height],\n leftMiddle: [rectangle.x, rectangle.y + headerHeight],\n middlePoint: [cornerX, rectangle.y + headerHeight]\n }\n };\n}\n\nexport const PackageEngine: ShapeEngine<PlaitMultipleTextGeometry, DrawOptions, DrawTextInfo> = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { points } = generatePackagePath(rectangle);\n\n const pathData = [\n `M${points.leftTop[0]} ${points.leftTop[1]}`,\n `V${points.topStart[1]}`,\n `H${points.topEnd[0]}`,\n `L${points.cornerPoint[0]} ${points.cornerPoint[1]}`,\n `H${points.rightTop[0]}`,\n `V${points.rightBottom[1]}`,\n `H${points.leftBottom[0]}`,\n `V${points.leftMiddle[1]}`,\n `H${points.middlePoint[0]}`\n ].join(' ');\n\n const shape = rs.path(pathData, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { points } = generatePackagePath(rectangle);\n\n const segments: [Point, Point][] = [\n // 左边竖线\n [points.topStart, points.leftTop],\n [points.leftTop, points.leftBottom],\n // 底边\n [points.leftBottom, points.rightBottom],\n // 右边竖线\n [points.rightBottom, points.rightTop],\n // 顶部折线\n [points.topStart, points.topEnd],\n [points.topEnd, points.cornerPoint],\n [points.cornerPoint, points.rightTop],\n // 中间横线\n [points.leftMiddle, points.middlePoint]\n ];\n\n return getNearestPointBetweenPointAndDiscreteSegments(point, segments);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n if (connectionPoint[0] > rectangle.x + rectangle.width * 0.7 && connectionPoint[1] < rectangle.y + 25) {\n return getUnitVectorByPointAndPoint([rectangle.x + rectangle.width * 0.7, rectangle.y], connectionPoint);\n }\n return getUnitVectorByPointAndPoint([rectangle.x + rectangle.width * 0.8, rectangle.y + 25], connectionPoint);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitMultipleTextGeometry, options?: DrawTextInfo) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const textInfo = element.texts?.find((item) => item.id === options?.id);\n if (options?.id === GeometryCommonTextKeys.name && textInfo) {\n const width = elementRectangle.width * 0.7 - ShapeDefaultSpace.rectangleAndText - strokeWidth;\n const textSize = getTextSize(board, textInfo!.text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (25 - textSize.height) / 2\n };\n }\n if (options?.id === GeometryCommonTextKeys.content && textInfo) {\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const textSize = getTextSize(board, textInfo!.text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + 25 + (elementRectangle.height - 25 - textSize.height) / 2\n };\n }\n return elementRectangle;\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { DrawOptions, GeometryCommonTextKeys, PlaitMultipleTextGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { DrawTextInfo } from '../../generators/text.generator';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const CombinedFragmentEngine: ShapeEngine<PlaitMultipleTextGeometry, DrawOptions, DrawTextInfo> = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y + 25} \n V${rectangle.y}\n H${rectangle.x + rectangle.width} \n V${rectangle.y + rectangle.height}\n H${rectangle.x}\n V${rectangle.y + 25}\n H${rectangle.x + rectangle.width / 3 - 8}\n L${rectangle.x + rectangle.width / 3} ${rectangle.y + 16}\n V${rectangle.y}\n `,\n\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitMultipleTextGeometry, options?: DrawTextInfo) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const textInfo = element.texts?.find((item) => item.id === options?.id);\n if (options?.id === GeometryCommonTextKeys.name && textInfo) {\n const width = elementRectangle.width / 3 - 8 - ShapeDefaultSpace.rectangleAndText - strokeWidth;\n const textSize = getTextSize(board, textInfo!.text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (25 - textSize.height) / 2\n };\n }\n if (options?.id === GeometryCommonTextKeys.content && textInfo) {\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const textSize = getTextSize(board, textInfo!.text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + 25 + ShapeDefaultSpace.rectangleAndText + strokeWidth\n };\n }\n return elementRectangle;\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n distanceBetweenPointAndPoint,\n getNearestPointBetweenPointAndSegment,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\n\nfunction getDeletionLines(rectangle: RectangleClient): Array<[Point, Point]> {\n return [\n [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height]\n ],\n [\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x, rectangle.y + rectangle.height]\n ]\n ];\n}\n\nexport const DeletionEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const lines = getDeletionLines(rectangle);\n const shape = rs.path(\n lines.map(([from, to]) => `M${from[0]} ${from[1]} L${to[0]} ${to[1]}`).join(' '),\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 const lines = getDeletionLines(rectangle);\n let minDistance = Infinity;\n let nearestPoint = point;\n lines.forEach(line => {\n const currentPoint = getNearestPointBetweenPointAndSegment(point, line);\n const distance = distanceBetweenPointAndPoint(point[0], point[1], currentPoint[0], currentPoint[1]);\n if (distance < minDistance) {\n minDistance = distance;\n nearestPoint = currentPoint;\n }\n });\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const ActiveClassEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y + rectangle.height} H${\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: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width =\n elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.125 * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.125,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n setStrokeLinecap,\n getNearestPointBetweenPointAndEllipse\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const NoteEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} \n h${rectangle.width - 16}\n v16\n h16\n v${rectangle.height - 16}\n h${-rectangle.width}\n Z\n M${rectangle.x + rectangle.width - 16} ${rectangle.y} \n A16 16, 0,0,1, ${rectangle.x + rectangle.width} ${rectangle.y + 16}\n `,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[0] > rectangle.x + rectangle.width - 16 && nearestPoint[1] < rectangle.y + 16) {\n return getNearestPointBetweenPointAndEllipse(point, [rectangle.x + rectangle.width - 16, rectangle.y + 16], 16, 16);\n }\n return nearestPoint;\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const centerPoint: Point = [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 2];\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const slope = getEllipseTangentSlope(point[0], point[1], 16, 16) as any;\n return getVectorFromPointAndSlope(point[0], point[1], slope);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle: (board: PlaitBoard, element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth - 15;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n SVGArcCommand,\n distanceBetweenPointAndPoint,\n getNearestPointBetweenPointAndArc,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getUnitVectorByPointAndPoint, rotateVector } from '@plait/common';\n\ninterface AssemblyPathData {\n startPoint: Point;\n line1: [Point, Point];\n circleArcCommand: SVGArcCommand;\n verticalArcCommand: SVGArcCommand;\n line2: [Point, Point];\n}\n\nfunction generateAssemblyPath(rectangle: RectangleClient): AssemblyPathData {\n const centerY = rectangle.y + rectangle.height / 2;\n const firstLineEndX = rectangle.x + rectangle.width * 0.3;\n const circleWidth = rectangle.width * 0.13;\n const circleHeight = rectangle.height * 0.285;\n const verticalX = firstLineEndX + circleWidth;\n const verticalRadius = rectangle.width * 0.233;\n\n return {\n startPoint: [rectangle.x, centerY],\n line1: [\n [rectangle.x, centerY],\n [firstLineEndX, centerY]\n ],\n circleArcCommand: {\n rx: circleWidth,\n ry: circleHeight,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: firstLineEndX,\n endY: centerY\n },\n verticalArcCommand: {\n rx: verticalRadius,\n ry: rectangle.height / 2,\n xAxisRotation: 0,\n largeArcFlag: 0,\n sweepFlag: 1,\n endX: verticalX,\n endY: rectangle.y + rectangle.height\n },\n line2: [\n [verticalX + verticalRadius, centerY],\n [rectangle.x + rectangle.width, centerY]\n ]\n };\n}\n\nexport const AssemblyEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, line1, circleArcCommand, verticalArcCommand, line2 } = generateAssemblyPath(rectangle);\n\n const pathData = [\n `M${startPoint[0]} ${startPoint[1]}`,\n `H${line1[1][0]}`,\n // 画完整的圆形:先画一个半圆,再画另一个半圆\n `A${circleArcCommand.rx} ${circleArcCommand.ry} ${circleArcCommand.xAxisRotation} ${circleArcCommand.largeArcFlag} ${circleArcCommand.sweepFlag} ${line1[1][0] + circleArcCommand.rx * 2} ${circleArcCommand.endY}`,\n `A${circleArcCommand.rx} ${circleArcCommand.ry} ${circleArcCommand.xAxisRotation} ${circleArcCommand.largeArcFlag} ${circleArcCommand.sweepFlag} ${circleArcCommand.endX} ${circleArcCommand.endY}`,\n // 垂直椭圆\n `M${verticalArcCommand.endX} ${rectangle.y}`,\n `A${verticalArcCommand.rx} ${verticalArcCommand.ry} ${verticalArcCommand.xAxisRotation} ${verticalArcCommand.largeArcFlag} ${verticalArcCommand.sweepFlag} ${verticalArcCommand.endX} ${verticalArcCommand.endY}`,\n // 最后一条线\n `M${line2[0][0]} ${line2[0][1]} H${line2[1][0]}`\n ].join(' ');\n\n const shape = rs.path(pathData, {\n ...options,\n fillStyle: 'solid'\n });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { line1, line2, circleArcCommand, verticalArcCommand } = generateAssemblyPath(rectangle);\n\n // 检查直线段\n const nearestPointForLines = getNearestPointBetweenPointAndSegments(point, [...line1, ...line2]);\n const distanceForLines = distanceBetweenPointAndPoint(...point, ...nearestPointForLines);\n\n // 检查中间圆形\n const circleCenter = [line1[1][0] + circleArcCommand.rx, line1[1][1]] as Point;\n const nearestPointForCircle = getNearestPointBetweenPointAndEllipse(\n point,\n circleCenter,\n circleArcCommand.rx,\n circleArcCommand.ry\n );\n const distanceForCircle = distanceBetweenPointAndPoint(...point, ...nearestPointForCircle);\n\n // 检查垂直椭圆(使用 getNearestPointBetweenPointAndArc 处理半圆弧)\n const arcStartPoint: Point = [verticalArcCommand.endX, rectangle.y];\n const nearestPointForEllipse = getNearestPointBetweenPointAndArc(\n point,\n arcStartPoint,\n verticalArcCommand\n );\n const distanceForEllipse = distanceBetweenPointAndPoint(...point, ...nearestPointForEllipse);\n\n // 返回最近的点\n const minDistance = Math.min(distanceForLines, distanceForCircle, distanceForEllipse);\n if (minDistance === distanceForLines) return nearestPointForLines;\n if (minDistance === distanceForCircle) return nearestPointForCircle;\n return nearestPointForEllipse;\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n if (connectionPoint[0] > rectangle.x + rectangle.width * 0.43 && connectionPoint[1] < rectangle.y + rectangle.height / 2) {\n return rotateVector(getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]), -Math.PI);\n }\n if (connectionPoint[0] > rectangle.x + rectangle.width * 0.43 && connectionPoint[1] > rectangle.y + rectangle.height / 2) {\n return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]);\n }\n return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n getNearestPointBetweenPointAndArc,\n distanceBetweenPointAndPoint,\n setStrokeLinecap,\n getNearestPointBetweenPointAndSegment,\n SVGArcCommand\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\ninterface RequiredInterfacePathData {\n startPoint: Point;\n leftArcCommand: SVGArcCommand;\n line: {\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n };\n}\n\nfunction generateRequiredInterfacePath(rectangle: RectangleClient): RequiredInterfacePathData {\n const arcWidth = rectangle.width * 0.39;\n const arcHeight = rectangle.height / 2;\n\n return {\n startPoint: [rectangle.x, rectangle.y],\n leftArcCommand: {\n rx: arcWidth,\n ry: arcHeight,\n xAxisRotation: 0,\n largeArcFlag: 0,\n sweepFlag: 1,\n endX: rectangle.x,\n endY: rectangle.y + rectangle.height\n },\n line: {\n startX: rectangle.x + rectangle.width * 0.41,\n startY: rectangle.y + rectangle.height / 2,\n endX: rectangle.x + rectangle.width,\n endY: rectangle.y + rectangle.height / 2\n }\n };\n}\n\nexport const RequiredInterfaceEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, leftArcCommand, line } = generateRequiredInterfacePath(rectangle);\n\n const pathData = [\n `M${startPoint[0]} ${startPoint[1]}`,\n `A${leftArcCommand.rx} ${leftArcCommand.ry} ${leftArcCommand.xAxisRotation} ${leftArcCommand.largeArcFlag} ${leftArcCommand.sweepFlag} ${leftArcCommand.endX} ${leftArcCommand.endY}`,\n `M${line.startX} ${line.startY} H${line.endX}`\n ].join(' ');\n\n const shape = rs.path(pathData, {\n ...options,\n fillStyle: 'solid',\n fill: 'transparent'\n });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { startPoint, leftArcCommand, line } = generateRequiredInterfacePath(rectangle);\n let minDistance = Infinity;\n let nearestPoint = point;\n\n // 检查圆弧段\n const arcNearestPoint = getNearestPointBetweenPointAndArc(point, startPoint, leftArcCommand);\n const arcDistance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);\n if (arcDistance < minDistance) {\n minDistance = arcDistance;\n nearestPoint = arcNearestPoint;\n }\n\n // 检查直线段\n const lineStart: Point = [line.startX, line.startY];\n const lineEnd: Point = [line.endX, line.endY];\n const lineNearestPoint = getNearestPointBetweenPointAndSegment(point, [lineStart, lineEnd]);\n const lineDistance = distanceBetweenPointAndPoint(point[0], point[1], lineNearestPoint[0], lineNearestPoint[1]);\n if (lineDistance < minDistance) {\n minDistance = lineDistance;\n nearestPoint = lineNearestPoint;\n }\n\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n SVGArcCommand,\n distanceBetweenPointAndPoint,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndEllipse,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\n\nconst percentage = 0.54;\n\ninterface ProvidedInterfacePathData {\n startPoint: Point;\n line: {\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n };\n arcCommands: SVGArcCommand[];\n}\n\nfunction generateProvidedInterfacePath(rectangle: RectangleClient): ProvidedInterfacePathData {\n const centerY = rectangle.y + rectangle.height / 2;\n const rx = (rectangle.width * (1 - percentage)) / 2;\n const ry = rectangle.height / 2;\n\n const startPoint: Point = [rectangle.x, centerY];\n const lineEndX = rectangle.x + rectangle.width * percentage;\n\n return {\n startPoint,\n line: {\n startX: startPoint[0],\n startY: centerY,\n endX: lineEndX,\n endY: centerY\n },\n arcCommands: [\n {\n rx,\n ry,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: rectangle.x + rectangle.width,\n endY: centerY\n },\n {\n rx,\n ry,\n xAxisRotation: 0,\n largeArcFlag: 1,\n sweepFlag: 1,\n endX: lineEndX,\n endY: centerY\n }\n ]\n };\n}\n\nexport const ProvidedInterfaceEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { startPoint, line, arcCommands } = generateProvidedInterfacePath(rectangle);\n\n const pathData = [\n `M${startPoint[0]} ${startPoint[1]}`,\n `H${line.endX}`,\n ...arcCommands.map(\n (command) =>\n `A${command.rx} ${command.ry} ${command.xAxisRotation} ${command.largeArcFlag} ${command.sweepFlag} ${command.endX} ${command.endY}`\n )\n ].join(' ');\n\n const shape = rs.path(pathData, {\n ...options,\n fillStyle: 'solid'\n });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { startPoint, line, arcCommands } = generateProvidedInterfacePath(rectangle);\n\n // 检查直线段\n const lineStart: Point = [line.startX, line.startY];\n const lineEnd: Point = [line.endX, line.endY];\n const nearestPointForLine = getNearestPointBetweenPointAndSegments(point, [lineStart, lineEnd]);\n const distanceForLine = distanceBetweenPointAndPoint(...point, ...nearestPointForLine);\n\n // 检查圆弧段\n const arcCenter = [rectangle.x + (3 * rectangle.width) / 4, line.startY] as Point;\n const nearestPointForEllipse = getNearestPointBetweenPointAndEllipse(point, arcCenter, arcCommands[0].rx, arcCommands[0].ry);\n const distanceForEllipse = distanceBetweenPointAndPoint(...point, ...nearestPointForEllipse);\n\n return distanceForLine < distanceForEllipse ? nearestPointForLine : nearestPointForEllipse;\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const centerPoint: Point = [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 2];\n if (connectionPoint[0] > rectangle.x + rectangle.width * 0.54) {\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const rx = (rectangle.width * 0.46) / 2;\n const ry = rectangle.height / 2;\n const slope = getEllipseTangentSlope(point[0], point[1], rx, ry) as any;\n return getVectorFromPointAndSlope(point[0], point[1], slope);\n }\n return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]);\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndDiscreteSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getUnitVectorByPointAndPoint } from '@plait/common';\n\ninterface ComponentPathData {\n boxSize: {\n width: number;\n height: number;\n };\n points: {\n mainStart: Point;\n topBoxStart: Point;\n topBoxEnd: Point;\n bottomBoxStart: Point;\n bottomBoxEnd: Point;\n mainEnd: Point;\n rightTop: Point;\n rightBottom: Point;\n };\n}\n\nfunction generateComponentPath(rectangle: RectangleClient): ComponentPathData {\n const mainLineX = rectangle.x + 12;\n const boxWidth = rectangle.width > 70 ? 24 : rectangle.width * 0.2;\n const boxHeight = rectangle.height - 28 - rectangle.height * 0.35 > 1 ? 14 : rectangle.height * 0.175;\n const topBoxY = rectangle.y + rectangle.height * 0.175;\n const bottomBoxY = rectangle.y + rectangle.height - rectangle.height * 0.175 - boxHeight;\n \n return {\n boxSize: {\n width: boxWidth,\n height: boxHeight\n },\n points: {\n mainStart: [mainLineX, rectangle.y],\n topBoxStart: [mainLineX, topBoxY],\n topBoxEnd: [mainLineX, topBoxY + boxHeight],\n bottomBoxStart: [mainLineX, bottomBoxY],\n bottomBoxEnd: [mainLineX, bottomBoxY + boxHeight],\n mainEnd: [mainLineX, rectangle.y + rectangle.height],\n rightTop: [rectangle.x + rectangle.width, rectangle.y],\n rightBottom: [rectangle.x + rectangle.width, rectangle.y + rectangle.height]\n }\n };\n}\n\nexport const ComponentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const { boxSize, points } = generateComponentPath(rectangle);\n \n const pathData = [\n // 主矩形轮廓\n `M${points.mainStart[0]} ${points.mainStart[1]}`,\n `H${points.rightTop[0]}`,\n `V${points.rightBottom[1]}`,\n `H${points.mainEnd[0]}`,\n\n // 上方小矩形\n `M${points.topBoxStart[0]} ${points.topBoxStart[1]}`,\n `h${boxSize.width / 2} v${boxSize.height} h${-boxSize.width} v${-boxSize.height} h${boxSize.width / 2}`,\n\n // 下方小矩形\n `M${points.bottomBoxStart[0]} ${points.bottomBoxStart[1]}`,\n `h${boxSize.width / 2} v${boxSize.height} h${-boxSize.width} v${-boxSize.height} h${boxSize.width / 2}`,\n\n // 连接线\n `M${points.mainStart[0]} ${points.mainStart[1]}`,\n `V${points.topBoxStart[1]}`,\n `M${points.topBoxEnd[0]} ${points.topBoxEnd[1]}`,\n `V${points.bottomBoxStart[1]}`,\n `M${points.bottomBoxEnd[0]} ${points.bottomBoxEnd[1]}`,\n `V${points.mainEnd[1]}`\n ].join(' ');\n\n const shape = rs.path(pathData, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const { boxSize, points } = generateComponentPath(rectangle);\n \n const segments: [Point, Point][] = [\n // 主矩形轮廓\n [points.mainStart, [points.rightTop[0], points.mainStart[1]]],\n [[points.rightTop[0], points.mainStart[1]], points.rightBottom],\n [points.rightBottom, [points.mainEnd[0], points.rightBottom[1]]],\n [[points.mainEnd[0], points.rightBottom[1]], points.mainStart],\n\n // 上方小矩形\n [points.topBoxStart, [points.topBoxStart[0] + boxSize.width/2, points.topBoxStart[1]]],\n [[points.topBoxStart[0] + boxSize.width/2, points.topBoxStart[1]], [points.topBoxStart[0] + boxSize.width/2, points.topBoxEnd[1]]],\n [[points.topBoxStart[0] + boxSize.width/2, points.topBoxEnd[1]], [points.topBoxStart[0] - boxSize.width/2, points.topBoxEnd[1]]],\n [[points.topBoxStart[0] - boxSize.width/2, points.topBoxEnd[1]], [points.topBoxStart[0] - boxSize.width/2, points.topBoxStart[1]]],\n [[points.topBoxStart[0] - boxSize.width/2, points.topBoxStart[1]], points.topBoxStart],\n\n // 下方小矩形\n [points.bottomBoxStart, [points.bottomBoxStart[0] + boxSize.width/2, points.bottomBoxStart[1]]],\n [[points.bottomBoxStart[0] + boxSize.width/2, points.bottomBoxStart[1]], [points.bottomBoxStart[0] + boxSize.width/2, points.bottomBoxEnd[1]]],\n [[points.bottomBoxStart[0] + boxSize.width/2, points.bottomBoxEnd[1]], [points.bottomBoxStart[0] - boxSize.width/2, points.bottomBoxEnd[1]]],\n [[points.bottomBoxStart[0] - boxSize.width/2, points.bottomBoxEnd[1]], [points.bottomBoxStart[0] - boxSize.width/2, points.bottomBoxStart[1]]],\n [[points.bottomBoxStart[0] - boxSize.width/2, points.bottomBoxStart[1]], points.bottomBoxStart],\n\n // 连接线\n [points.mainStart, points.topBoxStart],\n [points.topBoxEnd, points.bottomBoxStart],\n [points.bottomBoxEnd, points.mainEnd]\n ];\n\n return getNearestPointBetweenPointAndDiscreteSegments(point, segments);\n },\n\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const { points } = generateComponentPath(rectangle);\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getUnitVectorByPointAndPoint(points.mainStart, connectionPoint);\n },\n\n getConnectorPoints(rectangle: RectangleClient) {\n const { points } = generateComponentPath(rectangle);\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [points.mainStart[0], rectangle.y + rectangle.height / 2]\n ] as [Point, Point, Point, Point];\n },\n\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - 24 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + 24 + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { ComponentEngine } from './component';\nimport { getTextSize } from '../../utils/text-size';\n\nexport const ComponentBoxEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const componentWidth = rectangle.width - 45 * 2 - 18 > 1 ? 45 : rectangle.width * 0.25;\n const componentHeight = rectangle.height - 30 - 8 * 2 > 1 ? 30 : rectangle.height * 0.2;\n\n const componentRectangle = {\n x: rectangle.x + rectangle.width - 18 - componentWidth,\n y: rectangle.y + 8,\n width: componentWidth,\n height: componentHeight\n };\n const shape = rs.path(\n `M${rectangle.x} ${rectangle.y} \n H${rectangle.x + rectangle.width} \n V${rectangle.y + rectangle.height} \n H${rectangle.x} Z\n\n `,\n { ...options, fillStyle: 'solid' }\n );\n\n const componentShape = ComponentEngine.draw(board, componentRectangle, options);\n shape.append(componentShape);\n setStrokeLinecap(shape, 'round');\n\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const componentWidth = elementRectangle.width - 45 * 2 - 18 > 1 ? 45 : elementRectangle.width * 0.25;\n const width = elementRectangle.width - 18 - componentWidth - ShapeDefaultSpace.rectangleAndText - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getNearestPointBetweenPointAndSegments\n} from '@plait/core';\nimport { getTextSize } from '../../utils/text-size';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const TemplateEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n\n return drawRoundRectangle(\n rs,\n rectangle.x,\n rectangle.y,\n rectangle.x + rectangle.width,\n rectangle.y + rectangle.height,\n {\n ...options,\n fillStyle: 'solid',\n dashGap: 10,\n strokeLineDash: [10, 10]\n },\n false,\n 4\n );\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(board: PlaitBoard, element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const text = element.text!;\n const textSize = getTextSize(board, text, width);\n return {\n height: textSize.height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - textSize.height) / 2\n };\n }\n};\n","import {\n BasicShapes,\n DrawOptions,\n DrawShapes,\n FlowchartSymbols,\n PlaitGeometry,\n ShapeEngine,\n SwimlaneSymbols,\n TableSymbols,\n TextRectangleOptions,\n UMLSymbols\n} from '../interfaces';\nimport { CommentEngine } from './basic-shapes/comment';\nimport { CrossEngine } from './basic-shapes/cross';\nimport { DiamondEngine } from './basic-shapes/diamond';\nimport { EllipseEngine } from './basic-shapes/ellipse';\nimport { HexagonEngine } from './basic-shapes/hexagon';\nimport { LeftArrowEngine } from './basic-shapes/left-arrow';\nimport { OctagonEngine } from './basic-shapes/octagon';\nimport { ParallelogramEngine } from './basic-shapes/parallelogram';\nimport { PentagonEngine } from './basic-shapes/pentagon';\nimport { PentagonArrowEngine } from './basic-shapes/pentagon-arrow';\nimport { ProcessArrowEngine } from './basic-shapes/process-arrow';\nimport { RightArrowEngine } from './basic-shapes/right-arrow';\nimport { RoundCommentEngine } from './basic-shapes/round-comment';\nimport { RoundRectangleEngine } from './basic-shapes/round-rectangle';\nimport { TrapezoidEngine } from './basic-shapes/trapezoid';\nimport { TriangleEngine } from './basic-shapes/triangle';\nimport { TwoWayArrowEngine } from './basic-shapes/two-way-arrow';\nimport { StarEngine } from './basic-shapes/star';\nimport { TerminalEngine } from './flowchart/terminal';\nimport { ManualInputEngine } from './flowchart/manual-input';\nimport { PreparationEngine } from './flowchart/preparation';\nimport { ManualLoopEngine } from './flowchart/manual-loop';\nimport { MergeEngine } from './flowchart/merge';\nimport { DelayEngine } from './flowchart/delay';\nimport { StoredDataEngine } from './flowchart/stored-data';\nimport { PredefinedProcessEngine } from './flowchart/predefined-process';\nimport { OffPageEngine } from './flowchart/off-page';\nimport { CloudEngine } from './basic-shapes/cloud';\nimport { OrEngine } from './flowchart/or';\nimport { SummingJunctionEngine } from './flowchart/summing-junction';\nimport { DocumentEngine } from './flowchart/document';\nimport { MultiDocumentEngine } from './flowchart/multi-document';\nimport { DatabaseEngine } from './flowchart/database';\nimport { HardDiskEngine } from './flowchart/hard-disk';\nimport { InternalStorageEngine } from './flowchart/internal-storage';\nimport { NoteCurlyLeftEngine } from './flowchart/note-curly-left';\nimport { NoteCurlyRightEngine } from './flowchart/note-curly-right';\nimport { NoteSquareEngine } from './flowchart/note-square';\nimport { DisplayEngine } from './flowchart/display';\nimport { TableEngine } from './table/table';\nimport { RectangleEngine } from './basic-shapes/rectangle';\nimport { PlaitElement } from '@plait/core';\nimport { ActorEngine } from './uml/actor';\nimport { ContainerEngine } from './uml/container';\nimport { PackageEngine } from './uml/package';\nimport { CombinedFragmentEngine } from './uml/combined-fragment';\nimport { DeletionEngine } from './uml/deletion';\nimport { ActiveClassEngine } from './uml/activity-class';\nimport { NoteEngine } from './uml/note';\nimport { AssemblyEngine } from './uml/assembly';\nimport { RequiredInterfaceEngine } from './uml/required-interface';\nimport { ProvidedInterfaceEngine } from './uml/provided-interface';\nimport { ComponentEngine } from './uml/component';\nimport { ComponentBoxEngine } from './uml/component-box';\nimport { TemplateEngine } from './uml/template';\n\nconst ShapeEngineMap: Record<DrawShapes, ShapeEngine<any, any, any>> = {\n [BasicShapes.rectangle]: RectangleEngine,\n [BasicShapes.diamond]: DiamondEngine,\n [BasicShapes.ellipse]: EllipseEngine,\n [BasicShapes.parallelogram]: ParallelogramEngine,\n [BasicShapes.roundRectangle]: RoundRectangleEngine,\n [BasicShapes.text]: RectangleEngine,\n [BasicShapes.triangle]: TriangleEngine,\n [BasicShapes.leftArrow]: LeftArrowEngine,\n [BasicShapes.trapezoid]: TrapezoidEngine,\n [BasicShapes.rightArrow]: RightArrowEngine,\n [BasicShapes.cross]: CrossEngine,\n [BasicShapes.star]: StarEngine,\n [BasicShapes.pentagon]: PentagonEngine,\n [BasicShapes.hexagon]: HexagonEngine,\n [BasicShapes.octagon]: OctagonEngine,\n [BasicShapes.pentagonArrow]: PentagonArrowEngine,\n [BasicShapes.processArrow]: ProcessArrowEngine,\n [BasicShapes.twoWayArrow]: TwoWayArrowEngine,\n [BasicShapes.comment]: CommentEngine,\n [BasicShapes.roundComment]: RoundCommentEngine,\n [BasicShapes.cloud]: CloudEngine,\n [FlowchartSymbols.process]: RectangleEngine,\n [FlowchartSymbols.decision]: DiamondEngine,\n [FlowchartSymbols.connector]: EllipseEngine,\n [FlowchartSymbols.data]: ParallelogramEngine,\n [FlowchartSymbols.terminal]: TerminalEngine,\n [FlowchartSymbols.database]: DatabaseEngine,\n [FlowchartSymbols.hardDisk]: HardDiskEngine,\n [FlowchartSymbols.internalStorage]: InternalStorageEngine,\n [FlowchartSymbols.manualInput]: ManualInputEngine,\n [FlowchartSymbols.preparation]: PreparationEngine,\n [FlowchartSymbols.manualLoop]: ManualLoopEngine,\n [FlowchartSymbols.merge]: MergeEngine,\n [FlowchartSymbols.delay]: DelayEngine,\n [FlowchartSymbols.storedData]: StoredDataEngine,\n [FlowchartSymbols.or]: OrEngine,\n [FlowchartSymbols.summingJunction]: SummingJunctionEngine,\n [FlowchartSymbols.predefinedProcess]: PredefinedProcessEngine,\n [FlowchartSymbols.offPage]: OffPageEngine,\n [FlowchartSymbols.document]: DocumentEngine,\n [FlowchartSymbols.multiDocument]: MultiDocumentEngine,\n [FlowchartSymbols.noteCurlyLeft]: NoteCurlyLeftEngine,\n [FlowchartSymbols.noteCurlyRight]: NoteCurlyRightEngine,\n [FlowchartSymbols.noteSquare]: NoteSquareEngine,\n [FlowchartSymbols.display]: DisplayEngine,\n [SwimlaneSymbols.swimlaneHorizontal]: TableEngine,\n [SwimlaneSymbols.swimlaneVertical]: TableEngine,\n [TableSymbols.table]: TableEngine,\n [UMLSymbols.actor]: ActorEngine,\n [UMLSymbols.useCase]: EllipseEngine,\n [UMLSymbols.container]: ContainerEngine,\n [UMLSymbols.note]: NoteEngine,\n [UMLSymbols.package]: PackageEngine,\n [UMLSymbols.combinedFragment]: CombinedFragmentEngine,\n [UMLSymbols.class]: TableEngine,\n [UMLSymbols.interface]: TableEngine,\n [UMLSymbols.activation]: RectangleEngine,\n [UMLSymbols.object]: RectangleEngine,\n [UMLSymbols.deletion]: DeletionEngine,\n [UMLSymbols.activityClass]: ActiveClassEngine,\n [UMLSymbols.simpleClass]: RectangleEngine,\n [UMLSymbols.component]: ComponentEngine,\n [UMLSymbols.componentBox]: ComponentBoxEngine,\n [UMLSymbols.template]: TemplateEngine,\n [UMLSymbols.port]: RectangleEngine,\n [UMLSymbols.branchMerge]: DiamondEngine,\n [UMLSymbols.assembly]: AssemblyEngine,\n [UMLSymbols.requiredInterface]: RequiredInterfaceEngine,\n [UMLSymbols.providedInterface]: ProvidedInterfaceEngine\n};\n\nexport const getEngine = <\n T extends PlaitElement = PlaitGeometry,\n P extends DrawOptions = DrawOptions,\n K extends TextRectangleOptions = TextRectangleOptions\n>(\n shape: DrawShapes\n): ShapeEngine<T, P, K> => {\n return ShapeEngineMap[shape];\n};\n","import {\n Point,\n PlaitBoard,\n getElementById,\n RectangleClient,\n PointOfRectangle,\n Direction,\n Vector,\n hasValidAngle,\n rotatePointsByElement,\n findElements,\n PlaitElement,\n Path\n} from '@plait/core';\nimport {\n getDirectionFactor,\n rotateVectorAnti90,\n getDirectionByVector,\n getOppositeDirection,\n getDirectionByPointOfRectangle,\n getSourceAndTargetOuterRectangle,\n getNextPoint,\n rotateVector\n} from '@plait/common';\nimport {\n BasicShapes,\n ArrowLineHandleKey,\n ArrowLineHandleRef,\n ArrowLineHandleRefPair,\n ArrowLineMarkerType,\n PlaitArrowLine,\n PlaitGeometry,\n PlaitShapeElement,\n PlaitDrawElement\n} from '../../interfaces';\nimport { getEngine } from '../../engines';\nimport { getElementShape } from '../shape';\nimport { getSourceAndTargetRectangle } from './elbow';\nimport { getStrokeWidthByElement } from '../common';\nimport { getArrowLinePoints, getHitConnection } from './arrow-line-basic';\n\nexport const getArrowLineHandleRefPair = (board: PlaitBoard, element: PlaitArrowLine): ArrowLineHandleRefPair => {\n const strokeWidth = getStrokeWidthByElement(element);\n const sourceBoundElement = element.source.boundId ? getElementById<PlaitShapeElement>(board, element.source.boundId) : undefined;\n const targetBoundElement = element.target.boundId ? getElementById<PlaitShapeElement>(board, element.target.boundId) : undefined;\n let sourcePoint = sourceBoundElement ? getConnectionPoint(sourceBoundElement, element.source.connection!) : element.points[0];\n let targetPoint = targetBoundElement\n ? getConnectionPoint(targetBoundElement, element.target.connection!)\n : element.points[element.points.length - 1];\n let sourceDirection = getDirectionByVector([targetPoint[0] - sourcePoint[0], targetPoint[1] - sourcePoint[1]]) || Direction.right;\n let targetDirection = getOppositeDirection(sourceDirection);\n const sourceFactor = getDirectionFactor(sourceDirection);\n const targetFactor = getDirectionFactor(targetDirection);\n const sourceHandleRef: ArrowLineHandleRef = {\n key: ArrowLineHandleKey.source,\n point: sourcePoint,\n direction: sourceDirection,\n vector: [sourceFactor.x, sourceFactor.y]\n };\n const targetHandleRef: ArrowLineHandleRef = {\n key: ArrowLineHandleKey.target,\n point: targetPoint,\n direction: targetDirection,\n vector: [targetFactor.x, targetFactor.y]\n };\n if (sourceBoundElement) {\n const connectionOffset = PlaitArrowLine.isSourceMarkOrTargetMark(\n element as PlaitArrowLine,\n ArrowLineMarkerType.none,\n ArrowLineHandleKey.source\n )\n ? 0\n : strokeWidth;\n const sourceVector = getVectorByConnection(sourceBoundElement, element.source.connection!);\n sourceHandleRef.vector = sourceVector;\n sourceHandleRef.boundElement = sourceBoundElement;\n if (hasValidAngle(sourceBoundElement)) {\n const direction = getDirectionByVector(rotateVector(sourceVector, sourceBoundElement.angle!));\n sourceDirection = direction ? direction : sourceDirection;\n } else {\n const direction = getDirectionByVector(sourceVector);\n sourceDirection = direction ? direction : sourceDirection;\n }\n sourceHandleRef.direction = sourceDirection;\n sourcePoint = getConnectionPoint(sourceBoundElement, element.source.connection!, sourceDirection, connectionOffset);\n sourceHandleRef.point = rotatePointsByElement(sourcePoint, sourceBoundElement) || sourcePoint;\n }\n if (targetBoundElement) {\n const connectionOffset = PlaitArrowLine.isSourceMarkOrTargetMark(\n element as PlaitArrowLine,\n ArrowLineMarkerType.none,\n ArrowLineHandleKey.target\n )\n ? 0\n : strokeWidth;\n const targetVector = getVectorByConnection(targetBoundElement, element.target.connection!);\n targetHandleRef.vector = targetVector;\n targetHandleRef.boundElement = targetBoundElement;\n if (hasValidAngle(targetBoundElement)) {\n const direction = getDirectionByVector(rotateVector(targetVector, targetBoundElement.angle!));\n targetDirection = direction ? direction : targetDirection;\n } else {\n const direction = getDirectionByVector(targetVector);\n targetDirection = direction ? direction : targetDirection;\n }\n targetHandleRef.direction = targetDirection;\n targetPoint = getConnectionPoint(targetBoundElement, element.target.connection!, targetDirection, connectionOffset);\n targetHandleRef.point = rotatePointsByElement(targetPoint, targetBoundElement) || targetPoint;\n }\n return { source: sourceHandleRef, target: targetHandleRef };\n};\n\nexport const getConnectionPoint = (geometry: PlaitShapeElement, connection: Point, direction?: Direction, delta?: number): Point => {\n const rectangle = RectangleClient.getRectangleByPoints(geometry.points);\n if (direction && delta) {\n const directionFactor = getDirectionFactor(direction);\n const point = RectangleClient.getConnectionPoint(rectangle, connection);\n return [point[0] + directionFactor.x * delta, point[1] + directionFactor.y * delta];\n } else {\n return RectangleClient.getConnectionPoint(rectangle, connection);\n }\n};\n\nexport const getVectorByConnection = (boundElement: PlaitShapeElement, connection: PointOfRectangle): Vector => {\n const rectangle = RectangleClient.getRectangleByPoints(boundElement.points);\n const shape = getElementShape(boundElement);\n const engine = getEngine(shape);\n let vector: Vector = [0, 0];\n const direction = getDirectionByPointOfRectangle(connection);\n if (direction && boundElement.shape !== BasicShapes.ellipse) {\n const factor = getDirectionFactor(direction);\n return [factor.x, factor.y];\n }\n if (engine.getEdgeByConnectionPoint) {\n const edge = engine.getEdgeByConnectionPoint(rectangle, connection);\n if (edge) {\n const lineVector = [edge[1][0] - edge[0][0], edge[1][1] - edge[0][1]] as Vector;\n return rotateVectorAnti90(lineVector);\n }\n }\n if (engine.getTangentVectorByConnectionPoint) {\n const lineVector = engine.getTangentVectorByConnectionPoint(rectangle, connection);\n if (lineVector) {\n return rotateVectorAnti90(lineVector);\n }\n }\n return vector;\n};\n\nexport const getElbowLineRouteOptions = (board: PlaitBoard, element: PlaitArrowLine, handleRefPair?: ArrowLineHandleRefPair) => {\n handleRefPair = handleRefPair ?? getArrowLineHandleRefPair(board, element);\n const { sourceRectangle, targetRectangle } = getSourceAndTargetRectangle(board, element, handleRefPair);\n const { sourceOuterRectangle, targetOuterRectangle } = getSourceAndTargetOuterRectangle(sourceRectangle, targetRectangle);\n const sourcePoint = handleRefPair.source.point;\n const targetPoint = handleRefPair.target.point;\n const nextSourcePoint = getNextPoint(sourcePoint, sourceOuterRectangle, handleRefPair.source.direction);\n const nextTargetPoint = getNextPoint(targetPoint, targetOuterRectangle, handleRefPair.target.direction);\n return {\n sourcePoint,\n nextSourcePoint,\n sourceRectangle,\n sourceOuterRectangle,\n targetPoint,\n nextTargetPoint,\n targetRectangle,\n targetOuterRectangle\n };\n};\n\nexport const collectArrowLineUpdatedRefsByGeometry = (\n board: PlaitBoard,\n element: PlaitShapeElement,\n refs: { property: Partial<PlaitArrowLine>; path: Path }[]\n) => {\n const lines = findElements(board, {\n match: (element: PlaitElement) => {\n if (PlaitDrawElement.isArrowLine(element)) {\n return element.source.boundId === element.id || element.target.boundId === element.id;\n }\n return false;\n },\n recursion: element => true\n }) as PlaitArrowLine[];\n if (lines.length) {\n lines.forEach(line => {\n const isSourceBound = line.source.boundId === element.id;\n const handle = isSourceBound ? 'source' : 'target';\n const object = { ...line[handle] };\n const linePoints = getArrowLinePoints(board, line);\n const point = isSourceBound ? linePoints[0] : linePoints[linePoints.length - 1];\n object.connection = getHitConnection(board, point, element);\n const path = PlaitBoard.findPath(board, line);\n const index = refs.findIndex(obj => Path.equals(obj.path, path));\n if (index === -1) {\n refs.push({\n property: {\n [handle]: object\n },\n path\n });\n } else {\n refs[index].property = { ...refs[index].property, [handle]: object };\n }\n });\n }\n};\n","import { Direction, PlaitBoard, PlaitElement, Point, PointOfRectangle, Vector, getElementById, rotatePointsByElement } from '@plait/core';\nimport { Element } from 'slate';\nimport { getConnectionPoint } from '../utils/arrow-line/arrow-line-common';\nimport { PlaitShapeElement } from '.';\nimport { StrokeStyle } from '@plait/common';\n\nexport enum ArrowLineMarkerType {\n arrow = 'arrow',\n none = 'none',\n openTriangle = 'open-triangle',\n solidTriangle = 'solid-triangle',\n sharpArrow = 'sharp-arrow',\n oneSideUp = 'one-side-up',\n oneSideDown = 'one-side-down',\n hollowTriangle = 'hollow-triangle',\n singleSlash = 'single-slash'\n}\n\nexport enum ArrowLineShape {\n straight = 'straight',\n curve = 'curve',\n elbow = 'elbow'\n}\n\nexport enum ArrowLineHandleKey {\n source = 'source',\n target = 'target'\n}\n\nexport interface ArrowLineText {\n text: Element;\n // Percentage of positioning based on line length\n position: number;\n}\n\nexport interface ArrowLineHandle {\n // The id of the bounded element\n boundId?: string;\n connection?: PointOfRectangle;\n marker: ArrowLineMarkerType;\n}\n\nexport interface ArrowLineHandleRef {\n key: ArrowLineHandleKey;\n direction: Direction;\n point: PointOfRectangle;\n vector: Vector;\n boundElement?: PlaitShapeElement;\n}\n\nexport interface ArrowLineHandleRefPair {\n source: ArrowLineHandleRef;\n target: ArrowLineHandleRef;\n}\n\nexport interface PlaitArrowLine extends PlaitElement {\n type: 'arrow-line';\n shape: ArrowLineShape;\n points: Point[];\n\n source: ArrowLineHandle;\n target: ArrowLineHandle;\n\n texts: ArrowLineText[];\n\n // node style attributes\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n\n opacity: number;\n}\n\nexport interface PlaitStraightArrowLine extends PlaitArrowLine {\n shape: ArrowLineShape.straight;\n}\n\nexport interface PlaitCurveArrowLine extends PlaitArrowLine {\n shape: ArrowLineShape.curve;\n}\n\nexport interface PlaitElbowArrowLine extends PlaitArrowLine {\n shape: ArrowLineShape.elbow;\n}\n\nexport const PlaitArrowLine = {\n isSourceMarkOrTargetMark(line: PlaitArrowLine, markType: ArrowLineMarkerType, handleKey: ArrowLineHandleKey) {\n if (handleKey === ArrowLineHandleKey.source) {\n return line.source.marker === markType;\n } else {\n return line.target.marker === markType;\n }\n },\n isSourceMark(line: PlaitArrowLine, markType: ArrowLineMarkerType) {\n return PlaitArrowLine.isSourceMarkOrTargetMark(line, markType, ArrowLineHandleKey.source);\n },\n isTargetMark(line: PlaitArrowLine, markType: ArrowLineMarkerType) {\n return PlaitArrowLine.isSourceMarkOrTargetMark(line, markType, ArrowLineHandleKey.target);\n },\n isBoundElementOfSource(line: PlaitArrowLine, element: PlaitShapeElement) {\n return line.source.boundId === element.id;\n },\n isBoundElementOfTarget(line: PlaitArrowLine, element: PlaitShapeElement) {\n return line.target.boundId === element.id;\n },\n getPoints(board: PlaitBoard, line: PlaitArrowLine) {\n let sourcePoint;\n if (line.source.boundId) {\n const sourceElement = getElementById<PlaitShapeElement>(board, line.source.boundId)!;\n const sourceConnectionPoint = getConnectionPoint(sourceElement, line.source.connection!);\n sourcePoint = rotatePointsByElement(sourceConnectionPoint, sourceElement) || sourceConnectionPoint;\n } else {\n sourcePoint = line.points[0];\n }\n\n let targetPoint;\n if (line.target.boundId) {\n const targetElement = getElementById<PlaitShapeElement>(board, line.target.boundId)!;\n const targetConnectionPoint = getConnectionPoint(targetElement, line.target.connection!);\n targetPoint = rotatePointsByElement(targetConnectionPoint, targetElement) || targetConnectionPoint;\n } else {\n targetPoint = line.points[line.points.length - 1];\n }\n const restPoints = line.points.length > 2 ? line.points.slice(1, line.points.length - 1) : [];\n return [sourcePoint, ...restPoints, targetPoint];\n }\n};\n","export enum MemorizeKey {\n basicShape = 'basicShape',\n flowchart = 'flowchart',\n text = 'text',\n arrowLine = 'arrow-line',\n UML = 'UML'\n}\n","import { Path, PlaitElement, Point } from '@plait/core';\nimport { ArrowLineShape } from './arrow-line';\nimport { StrokeStyle } from '@plait/common';\n\nexport enum VectorLinePointerType {\n vectorLine = 'vectorLine'\n}\n\nexport enum VectorLineShape {\n straight = ArrowLineShape.straight,\n curve = ArrowLineShape.curve\n}\n\nexport interface PlaitVectorLine extends PlaitElement {\n type: 'vector-line';\n shape: VectorLineShape;\n points: Point[];\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n fill?: string;\n opacity: number;\n}\n","import { BasicShapes, FlowchartSymbols, GeometryShapes, PlaitCustomGeometry, PlaitGeometry, UMLSymbols } from './geometry';\nimport { PlaitImage } from './image';\nimport { PlaitArrowLine } from './arrow-line';\nimport { PlaitSwimlane, SwimlaneSymbols } from './swimlane';\nimport { PlaitBaseTable, PlaitTable, PlaitTableElement, TableSymbols } from './table';\nimport { PlaitText } from './text';\nimport { PlaitVectorLine } from './vector-line';\nimport { PlaitLine } from './line';\nimport { PlaitBoard, PlaitOptionsBoard } from '@plait/core';\nimport { WithDrawOptions } from './options';\nimport { WithDrawPluginKey } from '../constants/default';\n\nexport * from './arrow-line';\nexport * from './geometry';\nexport * from './text';\nexport * from './element';\nexport * from './engine';\nexport * from './swimlane';\nexport * from './table';\nexport * from './vector-line';\nexport * from './options';\nexport * from './image';\n\nexport type PlaitDrawElement = PlaitGeometry | PlaitArrowLine | PlaitVectorLine | PlaitImage | PlaitBaseTable | PlaitSwimlane;\n\nexport type PlaitShapeElement = PlaitGeometry | PlaitImage | PlaitTable | PlaitSwimlane;\n\nexport type DrawShapes = GeometryShapes | TableSymbols | SwimlaneSymbols;\n\nexport const PlaitDrawElement = {\n isGeometry: (value: any): value is PlaitGeometry => {\n return value.type === 'geometry';\n },\n isArrowLine: (value: any): value is PlaitArrowLine => {\n return value.type === 'arrow-line' || value.type === 'line';\n },\n isVectorLine: (value: any): value is PlaitVectorLine => {\n return value.type === 'vector-line';\n },\n isLine: (value: any): value is PlaitLine => {\n return PlaitDrawElement.isArrowLine(value) || PlaitDrawElement.isVectorLine(value);\n },\n isText: (value: any): value is PlaitText => {\n return value.type === 'geometry' && value.shape === BasicShapes.text;\n },\n isImage: (value: any): value is PlaitImage => {\n return value.type === 'image';\n },\n isTable: (value: any): value is PlaitTable => {\n return PlaitTableElement.isTable(value);\n },\n isDrawElement: (value: any): value is PlaitDrawElement => {\n if (\n PlaitDrawElement.isGeometry(value) ||\n PlaitDrawElement.isLine(value) ||\n PlaitDrawElement.isImage(value) ||\n PlaitDrawElement.isTable(value) ||\n PlaitDrawElement.isSwimlane(value)\n ) {\n return true;\n } else {\n return false;\n }\n },\n isCustomGeometryElement: (board: PlaitBoard, value: any): value is PlaitCustomGeometry => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithDrawOptions | undefined>(WithDrawPluginKey);\n const customGeometryTypes = options?.customGeometryTypes || [];\n if (customGeometryTypes.includes(value.type)) {\n return true;\n } else {\n return false;\n }\n },\n isShapeElement: (value: any): value is PlaitShapeElement => {\n return (\n PlaitDrawElement.isImage(value) ||\n PlaitDrawElement.isGeometry(value) ||\n PlaitDrawElement.isTable(value) ||\n PlaitDrawElement.isSwimlane(value)\n );\n },\n isBasicShape: (value: any) => {\n return Object.keys(BasicShapes).includes(value.shape);\n },\n isFlowchart: (value: any) => {\n return Object.keys(FlowchartSymbols).includes(value.shape);\n },\n isUML: (value: any) => {\n return Object.keys(UMLSymbols).includes(value.shape);\n },\n isSwimlane: (value: any): value is PlaitSwimlane => {\n return value.type === 'swimlane';\n },\n isVerticalSwimlane: (value: any) => {\n return PlaitDrawElement.isSwimlane(value) && value.shape === SwimlaneSymbols.swimlaneVertical;\n },\n isHorizontalSwimlane: (value: any) => {\n return PlaitDrawElement.isSwimlane(value) && value.shape === SwimlaneSymbols.swimlaneHorizontal;\n },\n isUMLClassOrInterface: (value: any) => {\n return Object.keys(UMLSymbols).includes(value.shape) && [UMLSymbols.class, UMLSymbols.interface].includes(value.shape);\n },\n isGeometryByTable: (value: any): value is PlaitBaseTable => {\n return PlaitDrawElement.isUMLClassOrInterface(value);\n },\n isElementByTable: (value: any): value is PlaitBaseTable => {\n return PlaitDrawElement.isTable(value) || PlaitDrawElement.isSwimlane(value) || PlaitDrawElement.isGeometryByTable(value);\n }\n};\n","import {\n PlaitBoard,\n PlaitPluginElementContext,\n OnContextChanged,\n isSelectionMoving,\n getSelectedElements,\n ACTIVE_STROKE_WIDTH,\n RectangleClient\n} from '@plait/core';\nimport { PlaitCommonGeometry, PlaitGeometry, PlaitMultipleTextGeometry } from './interfaces/geometry';\nimport { GeometryShapeGenerator } from './generators/geometry-shape.generator';\nimport { DrawTransforms } from './transforms';\nimport { ActiveGenerator, CommonElementFlavour, TextManageChangeData, createActiveGenerator, hasResizeHandle } from '@plait/common';\nimport { ArrowLineAutoCompleteGenerator } from './generators/arrow-line-auto-complete.generator';\nimport { getTextRectangle, isGeometryIncludeText, isMultipleTextGeometry, memorizeLatestText } from './utils';\nimport { DrawTextInfo, TextGenerator } from './generators/text.generator';\nimport { SingleTextGenerator } from './generators/single-text.generator';\nimport { PlaitDrawElement, PlaitText } from './interfaces';\nimport { GeometryThreshold } from './constants';\nimport { getEngine } from './engines';\n\nexport class GeometryComponent\n extends CommonElementFlavour<PlaitCommonGeometry, PlaitBoard>\n implements OnContextChanged<PlaitCommonGeometry, PlaitBoard>\n{\n activeGenerator!: ActiveGenerator<PlaitCommonGeometry>;\n\n lineAutoCompleteGenerator!: ArrowLineAutoCompleteGenerator;\n\n shapeGenerator!: GeometryShapeGenerator;\n\n textGenerator!: TextGenerator<PlaitMultipleTextGeometry> | SingleTextGenerator;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.activeGenerator = createActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (selectedElements.length === 1 && !isSelectionMoving(this.board)) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if (selectedElements.length === 1 && !isSelectionMoving(this.board)) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: (element: PlaitCommonGeometry) => {\n return RectangleClient.getRectangleByPoints(element.points);\n },\n hasResizeHandle: () => {\n return hasResizeHandle(this.board, this.element);\n }\n });\n this.lineAutoCompleteGenerator = new ArrowLineAutoCompleteGenerator(this.board);\n this.shapeGenerator = new GeometryShapeGenerator(this.board);\n if (isGeometryIncludeText(this.element)) {\n this.initializeTextManage();\n }\n this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);\n this.getRef().addGenerator(ActiveGenerator.key, this.activeGenerator);\n this.getRef().updateActiveSection = () => {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n };\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n this.shapeGenerator.processDrawing(this.element as PlaitGeometry, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getElementTopHost(this.board), {\n selected: this.selected\n });\n this.textGenerator && this.textGenerator.draw(this.getElementG());\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitCommonGeometry, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitCommonGeometry, PlaitBoard>\n ) {\n if (value.element !== previous.element || value.hasThemeChanged) {\n this.shapeGenerator.processDrawing(this.element as PlaitGeometry, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n this.textGenerator && this.updateText(previous.element, value.element);\n } else {\n const hasSameSelected = value.selected === previous.selected;\n if (!hasSameSelected || value.selected) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n this.lineAutoCompleteGenerator.processDrawing(this.element as PlaitGeometry, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n }\n }\n\n updateText(previousElement: PlaitCommonGeometry, currentElement: PlaitCommonGeometry) {\n if (isMultipleTextGeometry(this.element)) {\n (this.textGenerator as TextGenerator<PlaitMultipleTextGeometry>).update(\n this.element,\n previousElement.texts,\n currentElement.texts,\n this.getElementG()\n );\n } else {\n (this.textGenerator as SingleTextGenerator).update(\n this.element as PlaitGeometry,\n previousElement.text,\n currentElement.text,\n this.getElementG()\n );\n }\n }\n\n initializeTextManage() {\n const onTextChange = (element: PlaitCommonGeometry, textManageChangeData: TextManageChangeData, text: DrawTextInfo) => {\n if (textManageChangeData.newText) {\n if (isMultipleTextGeometry(element)) {\n DrawTransforms.setDrawTexts(this.board, element, {\n id: text.id,\n text: textManageChangeData.newText\n });\n } else {\n DrawTransforms.setText(\n this.board,\n element as PlaitGeometry,\n textManageChangeData.newText,\n textManageChangeData.width,\n textManageChangeData.height\n );\n }\n } else {\n DrawTransforms.setTextSize(this.board, element as PlaitGeometry, textManageChangeData.width, textManageChangeData.height);\n }\n textManageChangeData.operations && memorizeLatestText(element, textManageChangeData.operations);\n };\n\n if (isMultipleTextGeometry(this.element)) {\n this.textGenerator = new TextGenerator<PlaitMultipleTextGeometry>(\n this.board,\n this.element as PlaitMultipleTextGeometry,\n this.element.texts!,\n {\n onChange: onTextChange\n }\n );\n } else {\n this.textGenerator = new SingleTextGenerator(this.board, this.element as PlaitGeometry, this.element.text, {\n onChange: onTextChange,\n getMaxWidth: () => {\n let width = getTextRectangle(this.board, this.element).width;\n const getRectangle = getEngine(this.element.shape).getTextRectangle;\n if (getRectangle) {\n width = getRectangle(this.board, this.element as PlaitGeometry).width;\n }\n return PlaitDrawElement.isText(this.element) && this.element.autoSize ? GeometryThreshold.defaultTextMaxWidth : width;\n }\n });\n }\n this.textGenerator.initialize();\n }\n\n destroy(): void {\n super.destroy();\n this.activeGenerator.destroy();\n this.lineAutoCompleteGenerator.destroy();\n this.textGenerator?.destroy();\n }\n}\n","import { PlaitBoard, PlaitPluginElementContext, OnContextChanged, getElementById, createDebugGenerator, PlaitNode } from '@plait/core';\nimport { ArrowLineText, PlaitArrowLine, PlaitGeometry } from './interfaces';\nimport { LineActiveGenerator } from './generators/line-active.generator';\nimport { DrawTransforms } from './transforms';\nimport { GeometryThreshold, MIN_TEXT_WIDTH } from './constants';\nimport { CommonElementFlavour, TextManage, TextManageChangeData } from '@plait/common';\nimport { getArrowLineTextRectangle } from './utils/arrow-line/arrow-line-basic';\nimport { memorizeLatestText } from './utils/memorize';\nimport { ArrowLineShapeGenerator } from './generators/arrow-line.generator';\nimport { getArrowLinePoints } from './utils';\n\ninterface BoundedElements {\n source?: PlaitGeometry;\n target?: PlaitGeometry;\n}\n\nconst debugKey = 'debug:plait:line-turning';\nconst debugGenerator = createDebugGenerator(debugKey);\n\nexport class ArrowLineComponent\n extends CommonElementFlavour<PlaitArrowLine, PlaitBoard>\n implements OnContextChanged<PlaitArrowLine, PlaitBoard>\n{\n shapeGenerator!: ArrowLineShapeGenerator;\n\n activeGenerator!: LineActiveGenerator;\n\n boundedElements: BoundedElements = {};\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.shapeGenerator = new ArrowLineShapeGenerator(this.board);\n this.activeGenerator = new LineActiveGenerator(this.board);\n this.initializeTextManages();\n }\n\n initialize(): void {\n this.initializeGenerator();\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n const linePoints = getArrowLinePoints(this.board, this.element);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n super.initialize();\n this.boundedElements = this.getBoundedElements();\n this.drawText();\n this.getRef().updateActiveSection = () => {\n const linePoints = getArrowLinePoints(this.board, this.element);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n };\n debugGenerator.isDebug() && debugGenerator.drawCircles(this.board, this.element.points.slice(1, -1), 4, true);\n }\n\n getBoundedElements() {\n const boundedElements: BoundedElements = {};\n if (this.element.source.boundId) {\n const boundElement = getElementById<PlaitGeometry>(this.board, this.element.source.boundId);\n if (boundElement) {\n boundedElements.source = boundElement;\n }\n }\n if (this.element.target.boundId) {\n const boundElement = getElementById<PlaitGeometry>(this.board, this.element.target.boundId);\n if (boundElement) {\n boundedElements.target = boundElement;\n }\n }\n return boundedElements;\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitArrowLine, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitArrowLine, PlaitBoard>\n ) {\n const boundedElements = this.getBoundedElements();\n const isBoundedElementsChanged =\n boundedElements.source !== this.boundedElements.source || boundedElements.target !== this.boundedElements.target;\n this.boundedElements = boundedElements;\n const linePoints = getArrowLinePoints(this.board, this.element);\n if (value.element !== previous.element || value.hasThemeChanged) {\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n this.updateText(previous.element.texts, value.element.texts);\n this.updateTextRectangle();\n } else {\n const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate();\n if (needUpdate || value.selected) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n }\n }\n if (isBoundedElementsChanged) {\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n this.updateTextRectangle();\n return;\n }\n }\n\n initializeTextManages() {\n if (this.element.texts?.length) {\n const textManages: TextManage[] = [];\n this.element.texts.forEach((text: ArrowLineText, index: number) => {\n const manage = this.createTextManage(text, index);\n textManages.push(manage);\n });\n this.getRef().initializeTextManage(textManages);\n }\n }\n\n drawText() {\n if (this.element.texts?.length) {\n this.getRef()\n .getTextManages()\n .forEach((manage, index) => {\n manage.draw(this.element.texts![index].text);\n this.getElementG().append(manage.g);\n });\n }\n }\n\n createTextManage(text: ArrowLineText, index: number) {\n return new TextManage(this.board, {\n getRectangle: () => {\n return getArrowLineTextRectangle(this.board, this.element as PlaitArrowLine, index);\n },\n onChange: (textManageChangeData: TextManageChangeData) => {\n const path = PlaitBoard.findPath(this.board, this.element);\n const node = PlaitNode.get(this.board, path) as PlaitArrowLine;\n const texts = [...node.texts];\n // const newWidth = textManageChangeData.width < MIN_TEXT_WIDTH ? MIN_TEXT_WIDTH : textManageChangeData.width;\n texts.splice(index, 1, {\n text: textManageChangeData.newText ? textManageChangeData.newText : this.element.texts[index].text,\n position: this.element.texts[index].position\n });\n DrawTransforms.setArrowLineTexts(this.board, this.element as PlaitArrowLine, texts);\n textManageChangeData.operations && memorizeLatestText(this.element, textManageChangeData.operations);\n },\n getMaxWidth: () => GeometryThreshold.defaultTextMaxWidth,\n textPlugins: []\n });\n }\n\n updateText(previousTexts: ArrowLineText[], currentTexts: ArrowLineText[]) {\n if (previousTexts === currentTexts) return;\n const previousTextsLength = previousTexts.length;\n const currentTextsLength = currentTexts.length;\n const textManages = this.getRef().getTextManages();\n if (currentTextsLength === previousTextsLength) {\n for (let i = 0; i < previousTextsLength; i++) {\n if (previousTexts[i].text !== currentTexts[i].text) {\n textManages[i].updateText(currentTexts[i].text);\n }\n }\n } else {\n this.getRef().destroyTextManage();\n this.initializeTextManages();\n this.drawText();\n }\n }\n\n updateTextRectangle() {\n const textManages = this.getRef().getTextManages();\n textManages.forEach((manage) => {\n manage.updateRectangle();\n });\n }\n\n destroy(): void {\n super.destroy();\n this.activeGenerator.destroy();\n this.getRef().destroyTextManage();\n }\n}\n","import { PlaitBoard, PlaitPluginElementContext, OnContextChanged } from '@plait/core';\nimport { PlaitVectorLine } from './interfaces';\nimport { LineActiveGenerator } from './generators/line-active.generator';\nimport { CommonElementFlavour } from '@plait/common';\nimport { getVectorLinePoints } from './utils';\nimport { VectorLineShapeGenerator } from './generators/vector-line-generator';\n\nexport class VectorLineComponent\n extends CommonElementFlavour<PlaitVectorLine, PlaitBoard>\n implements OnContextChanged<PlaitVectorLine, PlaitBoard>\n{\n shapeGenerator!: VectorLineShapeGenerator;\n\n activeGenerator!: LineActiveGenerator;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.shapeGenerator = new VectorLineShapeGenerator(this.board);\n this.activeGenerator = new LineActiveGenerator(this.board);\n this.getRef().updateActiveSection = () => {\n const linePoints = getVectorLinePoints(this.board, this.element)!;\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n };\n }\n\n initialize(): void {\n this.initializeGenerator();\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n const linePoints = getVectorLinePoints(this.board, this.element)!;\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n super.initialize();\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitVectorLine, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitVectorLine, PlaitBoard>\n ) {\n const linePoints = getVectorLinePoints(this.board, this.element)!;\n if (value.element !== previous.element || value.hasThemeChanged) {\n this.shapeGenerator.processDrawing(this.element, this.getElementG());\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n } else {\n const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate() || value.selected;\n if (needUpdate) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n }\n }\n }\n\n destroy(): void {\n super.destroy();\n this.activeGenerator.destroy();\n }\n}\n","import { PlaitBoard, getHitElementByPoint, getSelectedElements, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { isVirtualKey, isSpaceHotkey, isDelete } from '@plait/common';\nimport { GeometryCommonTextKeys, PlaitDrawElement } from '../interfaces';\nimport { editText } from '../utils/geometry';\nimport { getHitMultipleGeometryText, isDrawElementIncludeText, isMultipleTextGeometry } from '../utils';\n\nexport const withDrawHotkey = (board: PlaitBoard) => {\n const { keyDown, dblClick } = board;\n\n board.keyDown = (event: KeyboardEvent) => {\n const selectedElements = getSelectedElements(board);\n const isSingleSelection = selectedElements.length === 1;\n const targetElement = selectedElements[0];\n if (\n !PlaitBoard.isReadonly(board) &&\n !isVirtualKey(event) &&\n !isDelete(event) &&\n !isSpaceHotkey(event) &&\n isSingleSelection &&\n PlaitDrawElement.isGeometry(targetElement)\n ) {\n event.preventDefault();\n editText(board, targetElement);\n return;\n }\n\n keyDown(event);\n };\n\n board.dblClick = (event: MouseEvent) => {\n event.preventDefault();\n if (!PlaitBoard.isReadonly(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const hitElement = getHitElementByPoint(board, point, undefined, false);\n if (hitElement && PlaitDrawElement.isGeometry(hitElement) && isDrawElementIncludeText(hitElement)) {\n if (isMultipleTextGeometry(hitElement)) {\n const hitText =\n getHitMultipleGeometryText(board, hitElement, point) ||\n hitElement.texts.find((item) => item.id.includes(GeometryCommonTextKeys.content)) ||\n hitElement.texts[0];\n editText(board, hitElement, hitText);\n } else {\n editText(board, hitElement);\n }\n return;\n }\n }\n dblClick(event);\n };\n return board;\n};\n","import { PlaitBoard, Point, RectangleClient, createG, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { BasicShapes, GeometryShapes, PlaitCommonGeometry, PlaitGeometry } from '../interfaces';\nimport {\n createDefaultGeometry,\n createTextElement,\n getDefaultGeometryPoints,\n getTextShapeProperty,\n getMemorizedLatestByPointer,\n getTextRectangle,\n insertElement,\n getDefaultGeometryText\n} from '../utils';\nimport { DrawPointerType, getGeometryPointers } from '../constants';\nimport {\n normalizeShapePoints,\n isDndMode,\n isDrawingMode,\n getDirectionFactorByDirectionComponent,\n getUnitVectorByPointAndPoint,\n TextManage\n} from '@plait/common';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { getSnapResizingRef } from '../utils/snap-resizing';\nimport { getGeometryGeneratorByShape } from '../utils/shape';\n\nexport interface FakeCreateTextRef {\n g: SVGGElement;\n textManage: TextManage;\n}\n\nconst isGeometryDndMode = (board: PlaitBoard) => {\n const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n const dndMode = isGeometryPointer && isDndMode(board);\n return dndMode;\n};\n\nconst isGeometryDrawingMode = (board: PlaitBoard) => {\n const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n const drawingMode = isGeometryPointer && isDrawingMode(board);\n return drawingMode;\n};\n\nexport const withGeometryCreateByDrag = (board: PlaitBoard) => {\n const { pointerMove, globalPointerUp, pointerUp } = board;\n\n let geometryShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitCommonGeometry | null = null;\n\n let fakeCreateTextRef: FakeCreateTextRef | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n geometryShapeG?.remove();\n geometryShapeG = createG();\n\n const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n const dragMode = isGeometryPointer && isDndMode(board);\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n const geometryGenerator = getGeometryGeneratorByShape(board, pointer);\n if (dragMode) {\n const memorizedLatest = getMemorizedLatestByPointer(pointer);\n if (pointer === BasicShapes.text) {\n const property = getTextShapeProperty(board, getDefaultGeometryText(board), memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(movingPoint, property.width, property.height)\n );\n temporaryElement = createTextElement(board, points, getDefaultGeometryText(board));\n if (!fakeCreateTextRef) {\n const textManage = new TextManage(board, {\n getRectangle: () => {\n return getTextRectangle(board, temporaryElement!);\n }\n });\n textManage.draw(temporaryElement!.text);\n fakeCreateTextRef = {\n g: createG(),\n textManage\n };\n\n PlaitBoard.getHost(board).append(fakeCreateTextRef.g);\n fakeCreateTextRef.g.append(textManage.g);\n } else {\n fakeCreateTextRef.textManage.updateRectangle();\n fakeCreateTextRef.g.append(fakeCreateTextRef.textManage.g);\n }\n } else {\n const points = getDefaultGeometryPoints(pointer, movingPoint);\n temporaryElement = createDefaultGeometry(board, points, pointer as GeometryShapes);\n geometryGenerator.processDrawing(temporaryElement as PlaitGeometry, geometryShapeG);\n PlaitBoard.getElementTopHost(board).append(geometryShapeG);\n }\n }\n\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n if (isGeometryDndMode(board) && temporaryElement) {\n return;\n }\n pointerUp(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (isGeometryDndMode(board) && temporaryElement) {\n insertElement(board, temporaryElement);\n fakeCreateTextRef?.textManage.destroy();\n fakeCreateTextRef?.g.remove();\n fakeCreateTextRef = null;\n }\n temporaryElement = null;\n geometryShapeG?.remove();\n geometryShapeG = null;\n globalPointerUp(event);\n };\n\n return board;\n};\n\nexport const withGeometryCreateByDrawing = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, pointerUp, keyDown, keyUp, touchMove } = board;\n let start: Point | null = null;\n\n let geometryShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitCommonGeometry | null = null;\n\n let isShift = false;\n\n let snapG: SVGGElement | null;\n\n board.keyDown = (event: KeyboardEvent) => {\n isShift = isKeyHotkey('shift', event);\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n isShift = false;\n keyUp(event);\n };\n\n board.pointerDown = (event: PointerEvent) => {\n if (!PlaitBoard.isReadonly(board) && isGeometryDrawingMode(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n start = point;\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (pointer === BasicShapes.text) {\n const memorizedLatest = getMemorizedLatestByPointer(pointer);\n const property = getTextShapeProperty(board, getDefaultGeometryText(board), memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(point, property.width, property.height));\n const textElement = createTextElement(board, points, getDefaultGeometryText(board));\n insertElement(board, textElement);\n start = null;\n }\n }\n pointerDown(event);\n };\n\n board.touchMove = (event: TouchEvent) => {\n if (start && isGeometryDrawingMode(board)) {\n event.preventDefault();\n }\n touchMove(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n geometryShapeG?.remove();\n geometryShapeG = createG();\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n const geometryGenerator = getGeometryGeneratorByShape(board, pointer);\n\n snapG?.remove();\n if (start && isGeometryDrawingMode(board)) {\n let points: [Point, Point] = normalizeShapePoints([start, movingPoint], isShift);\n const activeRectangle = RectangleClient.getRectangleByPoints(points);\n const [x, y] = getUnitVectorByPointAndPoint(start, movingPoint);\n const resizeSnapRef = getSnapResizingRef(board, [], {\n resizePoints: points,\n activeRectangle,\n directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],\n isAspectRatio: isShift,\n isFromCorner: true,\n isCreate: true\n });\n snapG = resizeSnapRef.snapG;\n PlaitBoard.getElementTopHost(board).append(snapG);\n points = normalizeShapePoints(resizeSnapRef.activePoints as [Point, Point], isShift);\n temporaryElement = createDefaultGeometry(board, points, pointer as GeometryShapes);\n geometryGenerator.processDrawing(temporaryElement as PlaitGeometry, geometryShapeG);\n PlaitBoard.getElementTopHost(board).append(geometryShapeG);\n }\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n if (isGeometryDrawingMode(board) && start) {\n const targetPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const { width, height } = RectangleClient.getRectangleByPoints([start!, targetPoint]);\n if (Math.hypot(width, height) < 8) {\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (pointer !== BasicShapes.text) {\n const points = getDefaultGeometryPoints(pointer, targetPoint);\n temporaryElement = createDefaultGeometry(board, points, pointer as GeometryShapes);\n }\n }\n if (temporaryElement) {\n insertElement(board, temporaryElement);\n }\n snapG?.remove();\n geometryShapeG?.remove();\n geometryShapeG = null;\n start = null;\n temporaryElement = null;\n return;\n }\n pointerUp(event);\n };\n return board;\n};\n","import {\n ClipboardData,\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n WritableClipboardContext,\n WritableClipboardOperationType,\n WritableClipboardType,\n addOrCreateClipboardContext,\n getSelectedElements\n} from '@plait/core';\nimport { getSelectedDrawElements } from '../utils/selected';\nimport { PlaitDrawElement, PlaitGeometry, PlaitArrowLine, PlaitShapeElement, PlaitSwimlane, PlaitVectorLine } from '../interfaces';\nimport { buildClipboardData, insertClipboardData } from '../utils/clipboard';\nimport { DrawTransforms } from '../transforms';\nimport { getArrowLines } from '../utils/arrow-line/arrow-line-basic';\nimport { PlaitImage } from '../interfaces/image';\nimport { acceptImageTypes, buildImage, getElementOfFocusedImage, getElementsText } from '@plait/common';\nimport { DEFAULT_IMAGE_WIDTH } from '../constants';\nimport { PlaitTable } from '../interfaces/table';\n\nexport const withDrawFragment = (baseBoard: PlaitBoard) => {\n const board = baseBoard as PlaitBoard;\n const { getDeletedFragment, buildFragment, insertFragment } = board;\n\n board.getDeletedFragment = (data: PlaitElement[]) => {\n const drawElements = getSelectedDrawElements(board);\n if (drawElements.length) {\n const geometryElements = drawElements.filter(value => PlaitDrawElement.isGeometry(value)) as PlaitGeometry[];\n const arrowLineElements = drawElements.filter(value => PlaitDrawElement.isArrowLine(value)) as PlaitArrowLine[];\n const vectorLineElements = drawElements.filter(value => PlaitDrawElement.isVectorLine(value)) as PlaitVectorLine[];\n const imageElements = drawElements.filter(value => PlaitDrawElement.isImage(value)) as PlaitImage[];\n const tableElements = drawElements.filter(value => PlaitDrawElement.isTable(value)) as PlaitTable[];\n const swimlaneElements = drawElements.filter(value => PlaitDrawElement.isSwimlane(value)) as PlaitSwimlane[];\n\n const boundLineElements = [\n ...getBoundedArrowLineElements(board, geometryElements),\n ...getBoundedArrowLineElements(board, imageElements),\n ...getBoundedArrowLineElements(board, tableElements),\n ...getBoundedArrowLineElements(board, swimlaneElements)\n ].filter(line => !arrowLineElements.includes(line));\n data.push(\n ...[\n ...geometryElements,\n ...arrowLineElements,\n ...vectorLineElements,\n ...imageElements,\n ...tableElements,\n ...swimlaneElements,\n ...boundLineElements.filter(line => !arrowLineElements.includes(line))\n ]\n );\n }\n return getDeletedFragment(data);\n };\n\n board.buildFragment = (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => {\n const targetDrawElements = getSelectedDrawElements(board, originData);\n let boundLineElements: PlaitArrowLine[] = [];\n if (targetDrawElements.length) {\n if (operationType === WritableClipboardOperationType.cut) {\n const geometryElements = targetDrawElements.filter(value => PlaitDrawElement.isGeometry(value)) as PlaitGeometry[];\n const lineElements = targetDrawElements.filter(value => PlaitDrawElement.isArrowLine(value)) as PlaitArrowLine[];\n boundLineElements = getBoundedArrowLineElements(board, geometryElements).filter(line => !lineElements.includes(line));\n }\n const selectedElements = [...targetDrawElements, ...boundLineElements];\n const elements = buildClipboardData(board, selectedElements, rectangle ? [rectangle.x, rectangle.y] : [0, 0]);\n const text = getElementsText(selectedElements);\n const addition: WritableClipboardContext = {\n text,\n type: WritableClipboardType.elements,\n elements: elements\n };\n clipboardContext = addOrCreateClipboardContext(clipboardContext, addition);\n }\n return buildFragment(clipboardContext, rectangle, operationType, originData);\n };\n\n board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n const selectedElements = getSelectedElements(board);\n if (clipboardData?.files?.length) {\n const acceptImageArray = acceptImageTypes.map(type => 'image/' + type);\n const canInsertionImage =\n !getElementOfFocusedImage(board) && !(selectedElements.length === 1 && board.isImageBindingAllowed(selectedElements[0]));\n if (acceptImageArray.includes(clipboardData.files[0].type) && canInsertionImage) {\n const imageFile = clipboardData.files[0];\n buildImage(board, imageFile, DEFAULT_IMAGE_WIDTH, imageItem => {\n DrawTransforms.insertImage(board, imageItem, targetPoint);\n });\n return;\n }\n }\n\n if (clipboardData?.elements?.length) {\n const drawElements = clipboardData.elements?.filter(value => PlaitDrawElement.isDrawElement(value)) as PlaitDrawElement[];\n if (clipboardData.elements && clipboardData.elements.length > 0 && drawElements.length > 0) {\n insertClipboardData(board, drawElements, targetPoint);\n }\n }\n\n if (clipboardData?.text) {\n if (!clipboardData.elements || clipboardData.elements.length === 0) {\n // (* ̄︶ ̄)\n const insertAsChildren = selectedElements.length === 1 && selectedElements[0].children;\n const insertAsFreeText = !insertAsChildren;\n if (insertAsFreeText) {\n DrawTransforms.insertText(board, targetPoint, clipboardData.text);\n return;\n }\n }\n }\n\n insertFragment(clipboardData, targetPoint, operationType);\n };\n\n return board;\n};\n\nexport const getBoundedArrowLineElements = (board: PlaitBoard, plaitShapes: PlaitShapeElement[]) => {\n const lines = getArrowLines(board);\n return lines.filter(line =>\n plaitShapes.find(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, touchStart } = board;\n\n let start: Point | null = null;\n\n let sourceElement: PlaitShapeElement | null;\n\n let lineShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitArrowLine | null = null;\n\n board.touchStart = (event: TouchEvent) => {\n const linePointers = getArrowLinePointers();\n const isLinePointer = PlaitBoard.isInPointer(board, linePointers);\n if (!PlaitBoard.isReadonly(board) && isLinePointer && isDrawingMode(board)) {\n return event.preventDefault();\n }\n touchStart(event);\n };\n\n board.pointerDown = (event: PointerEvent) => {\n const linePointers = getArrowLinePointers();\n const isLinePointer = PlaitBoard.isInPointer(board, linePointers);\n if (!PlaitBoard.isReadonly(board) && isLinePointer && isDrawingMode(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n start = point;\n const hitElement = getSnappingShape(board, point);\n if (hitElement) {\n sourceElement = hitElement;\n }\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, 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 // axis alignment relative to adjacent point, even when snapping to a shape\n const neighborPoint = handleIndex === 0 ? points[1] : points[points.length - 2];\n // TODO: need handle the neighbor point is not key point(it will moving along moving point)\n // such as below case\n // [\n // [\n // 341.2536906953894,\n // 83.94690212817761\n // ],\n // [\n // 492.8570148670465,\n // 43.86424319286277\n // ],\n // [\n // 492.8570148670465,\n // 175.99593084572632\n // ],\n // [\n // 661.8118177564218,\n // 175.99593084572632\n // ]\n // ]\n const alignedEndPoint = neighborPoint ? alignPoints(neighborPoint, resizeState.endPoint) : resizeState.endPoint;\n points[handleIndex] = alignedEndPoint;\n if (hitElement) {\n object.connection = getHitConnection(board, alignedEndPoint, 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 DrawTransforms.resizeArrowLine(board, { points, source, target }, resizeRef.path as Path);\n },\n afterResize: (resizeRef: ResizeRef<PlaitArrowLine, LineResizeHandle>) => {\n if (resizeRef.element.shape === ArrowLineShape.elbow) {\n const element = PlaitNode.get(board, resizeRef.path as Path);\n let points = element && [...element.points!];\n if (points.length > 2 && elbowNextRenderPoints && elbowSourcePoint && elbowTargetPoint) {\n const nextSourcePoint = elbowNextRenderPoints[0];\n const nextTargetPoint = elbowNextRenderPoints[elbowNextRenderPoints.length - 1];\n points.splice(0, 1, nextSourcePoint);\n points.splice(-1, 1, nextTargetPoint);\n points = simplifyOrthogonalPoints(points!);\n if (Point.isEquals(points[0], nextSourcePoint)) {\n points.splice(0, 1);\n }\n if (Point.isEquals(points[points.length - 1], nextTargetPoint)) {\n points.pop();\n }\n if (points.length === 1) {\n points = [];\n }\n points = [elbowSourcePoint, ...points, elbowTargetPoint];\n DrawTransforms.resizeArrowLine(board, { points }, resizeRef.path as Path);\n }\n }\n elbowLineIndex = null;\n elbowLineDeleteCount = null;\n elbowSourcePoint = null;\n elbowTargetPoint = null;\n elbowNextRenderPoints = null;\n }\n };\n\n withResize<PlaitArrowLine, LineResizeHandle>(board, options);\n\n return board;\n};\n","import {\n SNAPPING_STROKE_WIDTH,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n drawCircle,\n hasValidAngle,\n setAngleForG,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { ArrowLineShape, PlaitDrawElement } from '../../interfaces';\nimport { isResizingByCondition } from '@plait/common';\nimport { LineResizeHandle } from '../../utils/position/line';\nimport { drawBoundReaction, getHitShape, getSnappingRef } from '../../utils';\n\n/*\nPurpose: Visual feedback for snapping/binding arrow-line endpoints to shapes.\n- Active when using arrow-line pointers or resizing source/target handles.\n- Detects target shape under cursor and whether edge/connector snapping applies.\n- Draws bound outline/mask and a connector marker at the snap point.\n- Applies rotation to reaction graphics for angled (rotated) shapes.\nLifecycle: pointerMove → detect hit/snapping → render reaction → pointerUp cleanup.\n*/\nexport const withArrowLineBoundReaction = (board: PlaitBoard) => {\n const { pointerMove, pointerUp } = board;\n\n let boundShapeG: SVGGElement | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n boundShapeG?.remove();\n if (PlaitBoard.isReadonly(board)) {\n pointerMove(event);\n return;\n }\n const linePointers = Object.keys(ArrowLineShape);\n const isLinePointer = PlaitBoard.isInPointer(board, linePointers);\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const isLineResizing = isResizingByCondition<PlaitElement, LineResizeHandle>(board, (resizeRef) => {\n const { element, handle } = resizeRef;\n const isSourceOrTarget = handle === LineResizeHandle.target || handle === LineResizeHandle.source;\n return PlaitDrawElement.isArrowLine(element) && isSourceOrTarget;\n });\n if (isLinePointer || isLineResizing) {\n const hitElement = getHitShape(board, movingPoint);\n if (hitElement) {\n const ref = getSnappingRef(board, hitElement, movingPoint);\n const isSnapping = ref.isHitEdge || ref.isHitConnector;\n boundShapeG = drawBoundReaction(board, hitElement, { hasMask: isSnapping, hasConnector: true });\n if (isSnapping) {\n const circleG = drawCircle(PlaitBoard.getRoughSVG(board), ref.connectorPoint || ref.edgePoint, 6, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: SNAPPING_STROKE_WIDTH,\n fill: SELECTION_BORDER_COLOR,\n fillStyle: 'solid'\n });\n boundShapeG.appendChild(circleG);\n }\n if (hasValidAngle(hitElement)) {\n setAngleForG(boundShapeG, RectangleClient.getCenterPointByPoints(hitElement.points), hitElement.angle!);\n }\n PlaitBoard.getElementTopHost(board).append(boundShapeG);\n }\n }\n pointerMove(event);\n };\n\n board.pointerUp = (event) => {\n boundShapeG?.remove();\n boundShapeG = null;\n pointerUp(event);\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitNode,\n getHitElementByPoint,\n getI18nValue,\n getNearestPointBetweenPointAndSegments,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitArrowLine, PlaitDrawElement } from '../../interfaces';\nimport { Node } from 'slate';\nimport { buildText, getMemorizedLatest, getRatioByPoint, getTextManages } from '@plait/common';\nimport { DrawTransforms } from '../../transforms';\nimport { getArrowLinePoints } from '../../utils/arrow-line/arrow-line-basic';\nimport { getHitArrowLineTextIndex } from '../../utils/position/arrow-line';\nimport { isHitArrowLineText } from '../../utils/hit';\nimport { LINE_TEXT } from '../../constants/line';\nimport { DrawI18nKey } from '../../constants/default';\n\nexport const getDefaultLineText = (board: PlaitBoard) => {\n return getI18nValue(board, DrawI18nKey.lineText, LINE_TEXT);\n};\n\nexport const withArrowLineText = (board: PlaitBoard) => {\n const { dblClick } = board;\n\n board.dblClick = (event: MouseEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n const clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const hitTarget = getHitElementByPoint(board, clickPoint) as undefined | PlaitArrowLine;\n if (hitTarget && PlaitDrawElement.isArrowLine(hitTarget)) {\n const hitTargetPath = hitTarget && PlaitBoard.findPath(board, hitTarget);\n const points = getArrowLinePoints(board, hitTarget);\n const point = getNearestPointBetweenPointAndSegments(clickPoint, points);\n const texts = hitTarget.texts?.length ? [...hitTarget.texts] : [];\n const textIndex = getHitArrowLineTextIndex(board, hitTarget, clickPoint);\n const isHitText = isHitArrowLineText(board, hitTarget, clickPoint);\n if (isHitText) {\n editHandle(board, hitTarget, textIndex);\n } else {\n const defaultLineText = getDefaultLineText(board);\n const textMemory = getMemorizedLatest('arrow-line')?.text || {};\n const textElement = buildText(defaultLineText, undefined, textMemory);\n const ratio = getRatioByPoint(points, point);\n texts.push({\n text: textElement,\n position: ratio\n });\n DrawTransforms.setArrowLineTexts(board, hitTarget, texts);\n setTimeout(() => {\n if (hitTargetPath) {\n const newHitTarget = PlaitNode.get(board, hitTargetPath) as PlaitArrowLine;\n const textManages = getTextManages(newHitTarget);\n editHandle(board, newHitTarget, textManages.length - 1, true);\n }\n });\n }\n return;\n }\n }\n dblClick(event);\n };\n\n return board;\n};\n\nfunction editHandle(board: PlaitBoard, element: PlaitArrowLine, manageIndex: number, isFirstEdit: boolean = false) {\n const textManages = getTextManages(element);\n const textManage = textManages[manageIndex];\n textManage.edit(() => {\n const text = Node.string(textManage.getText());\n const defaultLineText = getDefaultLineText(board);\n const shouldRemove = !text || (isFirstEdit && text === defaultLineText);\n if (shouldRemove) {\n DrawTransforms.removeArrowLineText(board, element, manageIndex);\n }\n });\n}\n","import { PlaitBoard, PlaitPluginElementContext, OnContextChanged } from '@plait/core';\nimport { CommonElementFlavour, ImageGenerator } from '@plait/common';\nimport { PlaitImage } from './interfaces/image';\nimport { ArrowLineAutoCompleteGenerator } from './generators/arrow-line-auto-complete.generator';\n\nexport class ImageComponent extends CommonElementFlavour<PlaitImage, PlaitBoard> implements OnContextChanged<PlaitImage, PlaitBoard> {\n imageGenerator!: ImageGenerator<PlaitImage>;\n\n lineAutoCompleteGenerator!: ArrowLineAutoCompleteGenerator<PlaitImage>;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.imageGenerator = new ImageGenerator<PlaitImage>(this.board, {\n getRectangle: (element: PlaitImage) => {\n return {\n x: element.points[0][0],\n y: element.points[0][1],\n width: element.points[1][0] - element.points[0][0],\n height: element.points[1][1] - element.points[0][1]\n };\n },\n getImageItem: (element) => {\n return {\n url: element.url,\n width: element.points[1][0] - element.points[0][0],\n height: element.points[1][1] - element.points[0][1]\n };\n }\n });\n this.lineAutoCompleteGenerator = new ArrowLineAutoCompleteGenerator(this.board);\n this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);\n this.getRef().updateActiveSection = () => {\n this.imageGenerator.setFocus(this.element, this.selected);\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n };\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n this.imageGenerator.processDrawing(this.element, this.getElementG());\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitImage, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitImage, PlaitBoard>\n ) {\n if (value.element !== previous.element) {\n this.imageGenerator.updateImage(this.getElementG(), previous.element, value.element);\n this.imageGenerator.setFocus(this.element, this.selected);\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n } else {\n const hasSameSelected = value.selected === previous.selected;\n if (!hasSameSelected || value.selected) {\n this.imageGenerator.setFocus(this.element, this.selected);\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n }\n }\n\n destroy(): void {\n super.destroy();\n this.imageGenerator.destroy();\n this.lineAutoCompleteGenerator.destroy();\n }\n}\n","import {\n BoardTransforms,\n PRESS_AND_MOVE_BUFFER,\n PlaitBoard,\n PlaitOptionsBoard,\n PlaitPointerType,\n Point,\n RectangleClient,\n Transforms,\n addSelectedElement,\n clearSelectedElement,\n createG,\n distanceBetweenPointAndPoint,\n rotateAntiPointsByElement,\n rotatePointsByElement,\n temporaryDisableSelection,\n toActivePoint,\n toHostPoint,\n toScreenPointFromActivePoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement, PlaitGeometry, PlaitShapeElement, PlaitSwimlane } from '../../interfaces';\nimport { getElementShape } from '../../utils/shape';\nimport { getEngine } from '../../engines';\nimport { handleArrowLineCreating } from '../../utils/arrow-line/arrow-line-basic';\nimport { getSelectedDrawElements } from '../../utils/selected';\nimport { getAutoCompletePoints, getHitIndexOfAutoCompletePoint } from '../../utils/geometry';\nimport { insertElement } from '../../utils';\n\nexport const WithArrowLineAutoCompletePluginKey = 'plait-arrow-line-auto-complete-plugin-key';\n\nexport interface ArrowLineAutoCompleteOptions {\n afterComplete: (element: PlaitArrowLine) => {};\n}\n\nexport type PreCommitRef = { temporaryArrowLineElement: PlaitArrowLine; temporaryShapeElement: PlaitGeometry };\n\nexport const BOARD_TO_PRE_COMMIT = new WeakMap<PlaitBoard, PreCommitRef>();\n\n/*\nPurpose: Create arrow line via auto-complete drag from a shape edge.\n- On pointerDown at an auto-complete point, set elbow mode and capture source.\n- On drag (beyond buffer), choose nearest crossing on the source edge if available.\n- Rotate source point; build temporary elbow arrow while moving.\n- On release, insert the arrow and select; otherwise commit preview pair if present.\nLifecycle: pointerDown → pointerMove (create temp) → pointerUp insert/commit → reset.\n*/\nexport const withArrowLineAutoComplete = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp, touchMove } = board;\n\n let autoCompletePoint: Point | null = null;\n let lineShapeG: SVGGElement | null = null;\n let sourceElement: PlaitShapeElement | null;\n let temporaryElement: PlaitArrowLine | null;\n\n board.pointerDown = (event: PointerEvent) => {\n const selectedElements = getSelectedDrawElements(board);\n const targetElement = selectedElements.length === 1 && selectedElements[0];\n const activePoint = toActivePoint(board, event.x, event.y);\n if (!PlaitBoard.isReadonly(board) && targetElement && PlaitDrawElement.isShapeElement(targetElement)) {\n const points = getAutoCompletePoints(board, targetElement, true);\n const index = getHitIndexOfAutoCompletePoint(\n rotateAntiPointsByElement(board, activePoint, targetElement, true) || activePoint,\n points\n );\n const hitPoint = points[index];\n if (hitPoint) {\n temporaryDisableSelection(board as PlaitOptionsBoard);\n const screenPoint = toScreenPointFromActivePoint(board, hitPoint);\n autoCompletePoint = toViewBoxPoint(board, toHostPoint(board, screenPoint[0], screenPoint[1]));\n sourceElement = targetElement;\n BoardTransforms.updatePointerType(board, ArrowLineShape.elbow);\n }\n }\n pointerDown(event);\n };\n\n board.touchMove = (event: TouchEvent) => {\n if (autoCompletePoint && sourceElement) {\n return event.preventDefault();\n }\n touchMove(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n lineShapeG?.remove();\n lineShapeG = createG();\n let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (autoCompletePoint && sourceElement) {\n const distance = distanceBetweenPointAndPoint(\n ...(rotateAntiPointsByElement(board, movingPoint, sourceElement) || movingPoint),\n ...autoCompletePoint\n );\n if (distance > PRESS_AND_MOVE_BUFFER * 2) {\n const rectangle = RectangleClient.getRectangleByPoints(sourceElement.points);\n const shape = getElementShape(sourceElement);\n const engine = getEngine(shape);\n let sourcePoint = autoCompletePoint;\n if (engine.getNearestCrossingPoint) {\n const crossingPoint = engine.getNearestCrossingPoint(rectangle, autoCompletePoint);\n sourcePoint = crossingPoint;\n }\n // source point must be click point\n const rotatedSourcePoint = rotatePointsByElement(sourcePoint, sourceElement) || sourcePoint;\n temporaryElement = handleArrowLineCreating(\n board,\n ArrowLineShape.elbow,\n rotatedSourcePoint,\n movingPoint,\n sourceElement,\n lineShapeG\n );\n Transforms.addSelectionWithTemporaryElements(board, []);\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event) => {\n if (temporaryElement) {\n Transforms.insertNode(board, temporaryElement, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(board, temporaryElement);\n const afterComplete = (board as PlaitOptionsBoard).getPluginOptions<ArrowLineAutoCompleteOptions>(\n WithArrowLineAutoCompletePluginKey\n )?.afterComplete;\n afterComplete && afterComplete(temporaryElement);\n } else {\n const preCommitRef = BOARD_TO_PRE_COMMIT.get(board);\n if (preCommitRef) {\n Transforms.insertNode(board, preCommitRef.temporaryArrowLineElement, [board.children.length]);\n insertElement(board, preCommitRef.temporaryShapeElement);\n BOARD_TO_PRE_COMMIT.delete(board);\n }\n }\n if (autoCompletePoint) {\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n autoCompletePoint = null;\n }\n lineShapeG?.remove();\n lineShapeG = null;\n sourceElement = null;\n temporaryElement = null;\n globalPointerUp(event);\n };\n\n return board;\n};\n","import {\n CursorClass,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n rgbaToHEX,\n drawCircle,\n hasValidAngle,\n isSelectionMoving,\n rotateAntiPointsByElement,\n setAngleForG,\n toActivePoint,\n toActiveRectangleFromViewBoxRectangle,\n createG,\n rotatePointsByElement,\n isHorizontalDirection,\n Point\n} from '@plait/core';\nimport {\n createDefaultGeometry,\n createDefaultSwimlane,\n getAutoCompletePoints,\n getHitConnection,\n getHitIndexOfAutoCompletePoint,\n getSelectedDrawElements,\n handleArrowLineCreating\n} from '../../utils';\nimport { PRIMARY_COLOR, PlaitCommonElementRef, getDirectionByIndex, getXDistanceBetweenPoint, moveXOfPoint } from '@plait/common';\nimport { BOARD_TO_PRE_COMMIT } from './with-arrow-line-auto-complete';\nimport { LINE_AUTO_COMPLETE_HOVERED_DIAMETER, LINE_AUTO_COMPLETE_HOVERED_OPACITY } from '../../constants';\nimport { ArrowLineAutoCompleteGenerator } from '../../generators';\nimport { ArrowLineShape, PlaitArrowLine, PlaitDrawElement, PlaitGeometry, PlaitSwimlane, SwimlaneDrawSymbols } from '../../interfaces';\nimport { getGeometryGeneratorByShape } from '../../utils/shape';\n\nconst PREVIEW_ARROW_LINE_DISTANCE = 100;\n\n/*\nPurpose: Hover-driven auto-complete preview for arrow lines.\n- When hovering a selected shape’s auto-complete point, show a hint circle.\n- Offset a temporary shape and build an elbow arrow from the hit edge.\n- Rotate points by element angle; compute target connection; bind target id.\n- Store temporary arrow/shape for pre-commit; commit on click via auto-complete plugin.\nLifecycle: pointerMove (hit/preview) → pointerLeave/globalPointerUp cleanup.\n*/\nexport const withArrowLineAutoCompleteReaction = (board: PlaitBoard) => {\n const { pointerMove, pointerLeave, globalPointerUp } = board;\n let reactionG: SVGGElement | null = null;\n let temporaryArrowLineElement: PlaitArrowLine | null = null;\n let temporaryShapeElement: PlaitGeometry | PlaitSwimlane | null = null;\n let temporaryArrowLineG: SVGGElement | null = null;\n let temporaryShapeG: SVGGElement | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n reactionG?.remove();\n PlaitBoard.getBoardContainer(board).classList.remove(CursorClass.crosshair);\n const selectedElements = getSelectedDrawElements(board);\n temporaryArrowLineG?.remove();\n temporaryShapeG?.remove();\n const originElement = selectedElements.length === 1 && selectedElements[0];\n const activePoint = toActivePoint(board, event.x, event.y);\n if (!PlaitBoard.isReadonly(board) && !isSelectionMoving(board) && originElement && PlaitDrawElement.isShapeElement(originElement)) {\n const points = getAutoCompletePoints(board, originElement, true);\n const hitIndex = getHitIndexOfAutoCompletePoint(\n rotateAntiPointsByElement(board, activePoint, originElement, true) || activePoint,\n points\n );\n const hitPoint = points[hitIndex];\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(originElement);\n const lineAutoCompleteGenerator = ref.getGenerator<ArrowLineAutoCompleteGenerator>(ArrowLineAutoCompleteGenerator.key);\n lineAutoCompleteGenerator.recoverAutoCompleteG();\n if (hitPoint) {\n // function 1: dnd\n reactionG = drawCircle(PlaitBoard.getRoughSVG(board), hitPoint, LINE_AUTO_COMPLETE_HOVERED_DIAMETER, {\n stroke: 'none',\n fill: rgbaToHEX(PRIMARY_COLOR, LINE_AUTO_COMPLETE_HOVERED_OPACITY),\n fillStyle: 'solid'\n });\n PlaitBoard.getActiveHost(board).append(reactionG);\n PlaitBoard.getBoardContainer(board).classList.add(CursorClass.crosshair);\n if (hasValidAngle(originElement)) {\n const rectangle = board.getRectangle(originElement)!;\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n setAngleForG(reactionG, RectangleClient.getCenterPoint(activeRectangle), originElement.angle!);\n }\n // function 2: hover to preview and click to commit\n if (PlaitDrawElement.isGeometry(originElement) && !PlaitDrawElement.isText(originElement)) {\n const originRect = RectangleClient.getRectangleByPoints(originElement.points);\n let arrowLineStartPoint = RectangleClient.getEdgeCenterPoints(originRect)[hitIndex];\n const arrowLineDirection = getDirectionByIndex(hitIndex);\n let arrowLineEndPoint = moveXOfPoint(arrowLineStartPoint, PREVIEW_ARROW_LINE_DISTANCE, arrowLineDirection);\n const geometryGenerator = getGeometryGeneratorByShape(board, originElement.shape);\n const temporaryShapePoints = originElement.points.map((point) =>\n moveXOfPoint(\n point,\n PREVIEW_ARROW_LINE_DISTANCE +\n getXDistanceBetweenPoint(\n originElement.points[0],\n originElement.points[1],\n isHorizontalDirection(arrowLineDirection)\n ),\n arrowLineDirection\n )\n );\n temporaryArrowLineG = createG();\n temporaryShapeG = createG();\n temporaryArrowLineG.style.opacity = '0.6';\n temporaryShapeG.style.opacity = '0.6';\n\n temporaryShapeElement = createDefaultGeometry(board, temporaryShapePoints as [Point, Point], originElement.shape);\n temporaryShapeElement.angle = originElement.angle;\n temporaryShapeElement.fill = originElement.fill;\n temporaryShapeElement.strokeColor = originElement.strokeColor;\n temporaryShapeElement.strokeStyle = originElement.strokeStyle;\n temporaryShapeElement.strokeWidth = originElement.strokeWidth;\n temporaryShapeElement.groupId = originElement.groupId;\n\n const rotatedArrowLineStartPoint = rotatePointsByElement(arrowLineStartPoint, originElement) || arrowLineStartPoint;\n const rotatedArrowLineEndPoint = rotatePointsByElement(arrowLineEndPoint, temporaryShapeElement) || arrowLineEndPoint;\n temporaryArrowLineElement = handleArrowLineCreating(\n board,\n ArrowLineShape.elbow,\n rotatedArrowLineStartPoint,\n rotatedArrowLineEndPoint,\n originElement,\n temporaryArrowLineG\n );\n BOARD_TO_PRE_COMMIT.set(board, { temporaryArrowLineElement, temporaryShapeElement });\n const connectionInfo = getHitConnection(board, rotatedArrowLineEndPoint, temporaryShapeElement);\n temporaryArrowLineElement.target.boundId = temporaryShapeElement.id;\n temporaryArrowLineElement.target.connection = connectionInfo;\n geometryGenerator.processDrawing(temporaryShapeElement as PlaitGeometry, temporaryShapeG);\n PlaitBoard.getElementTopHost(board).append(temporaryShapeG);\n }\n return;\n }\n }\n BOARD_TO_PRE_COMMIT.delete(board);\n pointerMove(event);\n };\n\n board.pointerLeave = (pointer: PointerEvent) => {\n clearRef();\n pointerLeave(pointer);\n };\n\n const clearRef = () => {\n if (reactionG) {\n reactionG?.remove();\n PlaitBoard.getBoardContainer(board).classList.remove(CursorClass.crosshair);\n temporaryArrowLineG?.remove();\n temporaryShapeG?.remove();\n }\n if (BOARD_TO_PRE_COMMIT.get(board)) {\n BOARD_TO_PRE_COMMIT.delete(board);\n }\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n clearRef();\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitElement,\n Point,\n distanceBetweenPointAndSegments,\n getHitElementByPoint,\n getNearestPointBetweenPointAndSegments\n} from '@plait/core';\nimport { PlaitArrowLine, PlaitDrawElement } from '../../interfaces';\nimport { ResizeHandle, ResizeRef, ResizeState, WithResizeOptions, getRatioByPoint, getTextManages, withResize } from '@plait/common';\nimport { DrawTransforms } from '../../transforms';\nimport { getArrowLinePoints } from '../../utils/arrow-line/arrow-line-basic';\nimport { getHitArrowLineTextIndex } from '../../utils/position/arrow-line';\n\nexport const withArrowLineTextMove = (board: PlaitBoard) => {\n let textIndex = 0;\n const movableBuffer = 100;\n const options: WithResizeOptions<PlaitArrowLine> = {\n key: 'line-text',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n let result = null;\n const line = getHitElementByPoint(board, point, (element: PlaitElement) => {\n return PlaitDrawElement.isArrowLine(element);\n }) as undefined | PlaitArrowLine;\n if (line) {\n const index = getHitArrowLineTextIndex(board, line, point);\n const textManages = getTextManages(line);\n const textManage = textManages[index];\n if (index !== -1 && !textManage.isEditing) {\n textIndex = index;\n return { element: line, handle: ResizeHandle.e };\n }\n }\n return result;\n },\n onResize: (resizeRef: ResizeRef<PlaitArrowLine>, resizeState: ResizeState) => {\n const element = resizeRef.element;\n if (element) {\n const movingPoint = resizeState.endPoint;\n const points = getArrowLinePoints(board, element);\n const distance = distanceBetweenPointAndSegments(movingPoint, points);\n if (distance <= movableBuffer) {\n const point = getNearestPointBetweenPointAndSegments(movingPoint, points, false);\n const position = getRatioByPoint(points, point);\n const texts = [...element.texts];\n texts[textIndex] = {\n ...texts[textIndex],\n position\n };\n DrawTransforms.setArrowLineTexts(board, element, texts);\n }\n }\n }\n };\n\n withResize<PlaitArrowLine>(board, options);\n\n return board;\n};\n","import {\n MERGING,\n PlaitBoard,\n RectangleClient,\n Transforms,\n getRectangleByElements,\n getSelectedElements,\n getSelectionAngle,\n isMainPointer,\n isSelectionMoving,\n rotatePoints,\n throttleRAF,\n drawRectangle,\n ACTIVE_STROKE_WIDTH,\n SELECTION_BORDER_COLOR,\n setAngleForG,\n rotateElements,\n getAngleBetweenPoints,\n ROTATE_HANDLE_CLASS_NAME,\n SELECTION_RECTANGLE_CLASS_NAME,\n normalizeAngle,\n degreesToRadians,\n toActiveRectangleFromViewBoxRectangle,\n toActivePoint\n} from '@plait/core';\nimport { addRotating, removeRotating, drawRotateHandle, RotateRef } from '@plait/common';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getRotateHandleRectangle } from '../utils/position/geometry';\n\nexport const withDrawRotate = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp, afterChange, drawSelectionRectangle } = board;\n let rotateRef: RotateRef | null = null;\n let rotateHandleG: SVGGElement | null;\n let needCustomActiveRectangle = false;\n\n const canRotate = () => {\n const elements = getSelectedElements(board);\n return (\n elements.length > 0 &&\n elements.every(\n (el) =>\n (PlaitDrawElement.isDrawElement(el) && !PlaitDrawElement.isArrowLine(el)) ||\n PlaitDrawElement.isCustomGeometryElement(board, el)\n )\n );\n };\n\n board.pointerDown = (event: PointerEvent) => {\n if (!canRotate() || PlaitBoard.isReadonly(board) || PlaitBoard.hasBeenTextEditing(board) || !isMainPointer(event)) {\n pointerDown(event);\n return;\n }\n const activePoint = toActivePoint(board, event.x, event.y);\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const rectangle = getRectangleByElements(board, elements, false);\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n const handleRectangle = getRotateHandleRectangle(activeRectangle);\n const angle = getSelectionAngle(elements);\n const rotatedPoint = angle ? rotatePoints(activePoint, RectangleClient.getCenterPoint(activeRectangle), -angle) : activePoint;\n if (handleRectangle && RectangleClient.isHit(RectangleClient.getRectangleByPoints([rotatedPoint, rotatedPoint]), handleRectangle)) {\n rotateRef = {\n elements: [...elements],\n startPoint: activePoint\n };\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (rotateRef) {\n event.preventDefault();\n const isShift = !!event.shiftKey;\n addRotating(board, rotateRef);\n const endPoint = toActivePoint(board, event.x, event.y);\n const rectangle = getRectangleByElements(board, rotateRef.elements, false);\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n const selectionCenterPoint = RectangleClient.getCenterPoint(activeRectangle);\n if (!getSelectionAngle(rotateRef.elements) && rotateRef.elements.length > 1) {\n needCustomActiveRectangle = true;\n }\n\n throttleRAF(board, 'with-common-rotate', () => {\n if (rotateRef && rotateRef.startPoint) {\n let angle = getAngleBetweenPoints(rotateRef.startPoint, endPoint, selectionCenterPoint);\n const selectionAngle = getSelectionAngle(rotateRef.elements);\n angle = normalizeAngle(selectionAngle + angle);\n if (isShift) {\n angle += Math.PI / 12 / 2;\n angle -= angle % (Math.PI / 12);\n }\n\n let remainder = angle % (Math.PI / 2);\n if (Math.PI / 2 - remainder <= degreesToRadians(5)) {\n const snapAngle = Math.PI / 2 - remainder;\n angle += snapAngle;\n }\n\n if (remainder <= degreesToRadians(5)) {\n const snapAngle = -remainder;\n angle += snapAngle;\n }\n\n rotateRef.angle = normalizeAngle(angle - selectionAngle) || 0;\n rotateElements(board, rotateRef.elements, rotateRef.angle);\n MERGING.set(board, true);\n PlaitBoard.getBoardContainer(board).classList.add('element-rotating');\n }\n });\n return;\n }\n\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (needCustomActiveRectangle) {\n needCustomActiveRectangle = false;\n const selectedElements = getSelectedElements(board);\n Transforms.addSelectionWithTemporaryElements(board, selectedElements);\n }\n PlaitBoard.getBoardContainer(board).classList.remove('element-rotating');\n removeRotating(board);\n rotateRef = null;\n MERGING.set(board, false);\n };\n\n board.afterChange = () => {\n afterChange();\n if (rotateHandleG) {\n rotateHandleG.remove();\n rotateHandleG = null;\n }\n\n if (canRotate() && !isSelectionMoving(board)) {\n if (needCustomActiveRectangle && rotateRef) {\n const boundingRectangle = getRectangleByElements(board, rotateRef.elements, false);\n const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);\n rotateHandleG = drawRotateHandle(board, boundingActiveRectangle);\n rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);\n if (rotateRef.angle) {\n setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingActiveRectangle), rotateRef.angle);\n }\n } else {\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);\n rotateHandleG = drawRotateHandle(board, boundingActiveRectangle);\n rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);\n setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingActiveRectangle), getSelectionAngle(elements));\n }\n PlaitBoard.getActiveHost(board).append(rotateHandleG);\n }\n };\n\n board.drawSelectionRectangle = () => {\n if (needCustomActiveRectangle && rotateRef) {\n const rectangle = getRectangleByElements(board, rotateRef.elements, false);\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);\n const rectangleG = drawRectangle(board, RectangleClient.inflate(activeRectangle, ACTIVE_STROKE_WIDTH), {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH\n });\n rectangleG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n if (rotateRef.angle) {\n setAngleForG(rectangleG, RectangleClient.getCenterPoint(activeRectangle), rotateRef.angle);\n }\n return rectangleG;\n }\n return drawSelectionRectangle();\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitPluginElementContext,\n OnContextChanged,\n ACTIVE_STROKE_WIDTH,\n RectangleClient,\n setAngleForG,\n degreesToRadians\n} from '@plait/core';\nimport { ActiveGenerator, CommonElementFlavour, TextManageChangeData, createActiveGenerator, hasResizeHandle } from '@plait/common';\nimport { PlaitTable, PlaitTableBoard, PlaitTableCell, PlaitTableElement } from './interfaces/table';\nimport { DrawTextInfo, TextGenerator } from './generators/text.generator';\nimport { TableGenerator } from './generators/table.generator';\nimport { DrawTransforms } from './transforms';\nimport { getCellWithPoints, getTextManageByCell, isCellIncludeText } from './utils/table';\nimport {\n clearSelectedCells,\n getCellsRectangle,\n getSelectedCells,\n getStrokeWidthByElement,\n memorizeLatestText,\n setSelectedCells\n} from './utils';\nimport { getEngine } from './engines';\nimport { TableSymbols } from './interfaces';\nimport { getCellTextHeight, getHorizontalTextRectangle } from './engines/table/table';\nimport { ShapeDefaultSpace } from './constants';\nimport { ArrowLineAutoCompleteGenerator } from './generators/arrow-line-auto-complete.generator';\n\nexport class TableComponent<T extends PlaitTable> extends CommonElementFlavour<T, PlaitBoard> implements OnContextChanged<T, PlaitBoard> {\n activeGenerator!: ActiveGenerator<T>;\n\n tableGenerator!: TableGenerator<T>;\n\n textGenerator!: TextGenerator<T>;\n\n lineAutoCompleteGenerator!: ArrowLineAutoCompleteGenerator<PlaitTable>;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.activeGenerator = createActiveGenerator<T>(this.board, {\n getStrokeWidth: () => {\n return ACTIVE_STROKE_WIDTH;\n },\n getStrokeOpacity: () => {\n return 1;\n },\n getRectangle: (value: T) => {\n const cells = getSelectedCells(value);\n if (cells?.length) {\n return getCellsRectangle(this.board as PlaitTableBoard, this.element, cells);\n }\n return RectangleClient.getRectangleByPoints(value.points!);\n },\n hasResizeHandle: () => {\n const cells = getSelectedCells(this.element);\n if (cells?.length) {\n return false;\n }\n return hasResizeHandle(this.board, this.element);\n }\n });\n this.tableGenerator = new TableGenerator<T>(this.board);\n this.initializeTextManage();\n this.lineAutoCompleteGenerator = new ArrowLineAutoCompleteGenerator(this.board);\n this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);\n this.getRef().updateActiveSection = () => {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n };\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n this.draw();\n }\n\n draw() {\n this.tableGenerator.processDrawing(this.element, this.getElementG());\n this.textGenerator.draw(this.getElementG());\n this.rotateVerticalText();\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n\n rotateVerticalText() {\n const table = (this.board as PlaitTableBoard).buildTable(this.element);\n table.cells.forEach((item) => {\n if (PlaitTableElement.isVerticalText(item)) {\n const textManage = getTextManageByCell(this.board, item);\n if (textManage) {\n const engine = getEngine<PlaitTable>(TableSymbols.table);\n const rectangle = engine.getTextRectangle!(this.board, this.element, { id: item.id, board: this.board });\n textManage.g.classList.add('vertical-cell-text');\n setAngleForG(textManage.g, RectangleClient.getCenterPoint(rectangle), degreesToRadians(-90));\n }\n }\n });\n }\n\n getDrawShapeTexts(cells: PlaitTableCell[]): DrawTextInfo[] {\n return cells\n .filter((item) => isCellIncludeText(item))\n .map((item) => {\n return {\n id: item.id,\n text: item.text!,\n board: this.board\n };\n });\n }\n\n initializeTextManage() {\n const texts = this.getDrawShapeTexts(this.element.cells);\n this.textGenerator = new TextGenerator(this.board, this.element, texts, {\n onChange: (value: PlaitTable, data: TextManageChangeData, text: DrawTextInfo) => {\n const path = PlaitBoard.findPath(this.board, value);\n if (data.newText) {\n DrawTransforms.setTableText(this.board, path, text.id, data.newText, data.height);\n }\n data.operations && memorizeLatestText(value, data.operations);\n },\n getRenderRectangle: (value: PlaitTable, text: DrawTextInfo) => {\n const cell = getCellWithPoints(this.board, value, text.id);\n if (PlaitTableElement.isVerticalText(cell)) {\n const cellRectangle = RectangleClient.getRectangleByPoints(cell.points);\n const strokeWidth = getStrokeWidthByElement(cell);\n const width = cellRectangle.height - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const height = getCellTextHeight(this.board, cell, true);\n return {\n width: height,\n height: width > 0 ? width : 0,\n x: cellRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: cellRectangle.y + (cellRectangle.height - width) / 2\n };\n } else {\n return getHorizontalTextRectangle(this.board, cell);\n }\n }\n });\n this.textGenerator.initialize();\n }\n\n onContextChanged(value: PlaitPluginElementContext<T, PlaitBoard>, previous: PlaitPluginElementContext<T, PlaitBoard>) {\n if (value.element !== previous.element || value.hasThemeChanged) {\n const previousSelectedCells = getSelectedCells(previous.element);\n if (previousSelectedCells?.length) {\n clearSelectedCells(previous.element);\n setSelectedCells(value.element, previousSelectedCells);\n }\n this.tableGenerator.processDrawing(value.element, this.getElementG());\n this.activeGenerator.processDrawing(value.element, PlaitBoard.getActiveHost(this.board), { selected: this.selected });\n const previousTexts = this.getDrawShapeTexts(previous.element.cells);\n const currentTexts = this.getDrawShapeTexts(value.element.cells);\n this.textGenerator.update(value.element, previousTexts, currentTexts, this.getElementG());\n this.rotateVerticalText();\n } else {\n const hasSameSelected = value.selected === previous.selected;\n const currentSelectedCells = getSelectedCells(value.element);\n if (!hasSameSelected || currentSelectedCells?.length || value.selected) {\n this.activeGenerator.processDrawing(value.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n if (!this.selected) {\n clearSelectedCells(value.element);\n }\n }\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {\n selected: this.selected\n });\n }\n\n destroy(): void {\n super.destroy();\n this.activeGenerator.destroy();\n this.tableGenerator.destroy();\n this.textGenerator.destroy();\n this.lineAutoCompleteGenerator.destroy();\n }\n}\n","import {\n PlaitBoard,\n Point,\n RectangleClient,\n Transforms,\n isSelectedElement,\n getSelectedElements,\n hasValidAngle,\n} 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 {\n getResizeOriginPointAndHandlePoint,\n getResizeZoom,\n movePointByZoomAndOriginPoint\n} from './with-draw-resize';\nimport { getSnapResizingRef, getSnapResizingRefOptions } from '../utils/snap-resizing';\nimport { PlaitDrawElement } from '../interfaces';\nimport { isSingleSelectTable } from '../utils';\n\n// const debugKey = 'debug:plait:table:resize';\n// const debugGenerator = createDebugGenerator(debugKey);\n\ninterface TableResizeOptions extends ResizeOptions {\n cell: PlaitTableCellWithPoints;\n}\n\nconst MIN_CELL_SIZE = 20;\n\nexport function withTableResize(board: PlaitTableBoard) {\n let snapG: SVGGElement | null;\n\n const options: WithResizeOptions<PlaitBaseTable, ResizeHandle, TableResizeOptions> = {\n key: 'draw-table',\n canResize: () => {\n const selectedElements = getSelectedElements(board);\n return isSingleSelectTable(board) && !hasValidAngle(selectedElements[0]);\n },\n hitTest: (point: Point) => {\n const selectedElements = getSelectedElements(board);\n const hitElement = selectedElements[0];\n // debugGenerator.clear();\n if (hitElement && PlaitDrawElement.isElementByTable(hitElement)) {\n let rectangle = board.getRectangle(hitElement) as RectangleClient;\n // debugGenerator.drawRectangle(board, rectangle);\n // debugGenerator.drawCircles(board, [point], 5);\n let handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, hitElement.angle);\n if (handleRef) {\n const selectElement = isSelectedElement(board, hitElement);\n if ((selectElement && isSingleSelectTable(board)) || (!selectElement && !isCornerHandle(board, handleRef.handle))) {\n return {\n element: hitElement,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass,\n rectangle\n };\n }\n }\n const cells = getCellsWithPoints(board, hitElement);\n for (let i = 0; i < cells.length; i++) {\n rectangle = RectangleClient.getRectangleByPoints(cells[i].points);\n handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, 0);\n if (handleRef && !isCornerHandle(board, handleRef.handle)) {\n return {\n element: hitElement,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass,\n rectangle,\n options: {\n cell: cells[i]\n }\n };\n }\n }\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<PlaitBaseTable, ResizeHandle, TableResizeOptions>, resizeState: ResizeState) => {\n snapG?.remove();\n const path = PlaitBoard.findPath(board, resizeRef.element);\n if (resizeRef.options?.cell && resizeRef.rectangle) {\n const handleIndex = getIndexByResizeHandle(resizeRef.handle);\n const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle!);\n const resizePoints: [Point, Point] = [resizeState.startPoint, resizeState.endPoint];\n const { xZoom, yZoom } = getResizeZoom(resizePoints, originPoint, handlePoint, false, false);\n const originPoints = resizeRef.options?.cell.points;\n const targetPoints = originPoints.map((p) => {\n return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);\n }) as [Point, Point];\n const offsetX = targetPoints[1][0] - originPoints[1][0];\n const offsetY = targetPoints[1][1] - originPoints[1][1];\n const width = targetPoints[1][0] - targetPoints[0][0];\n const height = targetPoints[1][1] - targetPoints[0][1];\n if (offsetX !== 0 && width >= MIN_CELL_SIZE) {\n const { columns, points } = updateColumns(resizeRef.element, resizeRef.options?.cell.columnId, width, offsetX);\n Transforms.setNode(board, { columns, points }, path);\n } else if (offsetY !== 0 && height >= MIN_CELL_SIZE) {\n const { rows, points } = updateRows(resizeRef.element, resizeRef.options?.cell.rowId, height, offsetY);\n Transforms.setNode(board, { rows, points }, path);\n }\n } else {\n const isFromCorner = isCornerHandle(board, resizeRef.handle);\n const isAspectRatio = resizeState.isShift;\n const handleIndex = getIndexByResizeHandle(resizeRef.handle);\n const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle!);\n const resizeSnapRefOptions = getSnapResizingRefOptions(\n board,\n resizeRef,\n resizeState,\n {\n originPoint,\n handlePoint\n },\n isAspectRatio,\n isFromCorner\n );\n const resizeSnapRef = getSnapResizingRef(board, [resizeRef.element], resizeSnapRefOptions);\n snapG = resizeSnapRef.snapG;\n PlaitBoard.getElementTopHost(board).append(snapG);\n const points = resizeSnapRef.activePoints as [Point, Point];\n const originPoints = resizeRef.element.points;\n const originRect = RectangleClient.getRectangleByPoints(originPoints);\n const targetRect = RectangleClient.getRectangleByPoints(points);\n const offsetWidth = targetRect.width - originRect.width;\n const offsetHeight = targetRect.height - originRect.height;\n let columns = [...resizeRef.element.columns];\n let rows = [...resizeRef.element.rows];\n if (offsetWidth !== 0) {\n columns = columns.map((item) => {\n if (item.width) {\n return {\n ...item,\n width: item.width + offsetWidth * (item.width / originRect.width)\n };\n }\n return item;\n });\n }\n if (offsetHeight !== 0) {\n rows = rows.map((item) => {\n if (item.height) {\n return {\n ...item,\n height: item.height + offsetHeight * (item.height / originRect.height)\n };\n }\n return item;\n });\n }\n Transforms.setNode(board, { points: normalizeShapePoints(points), columns, rows }, path);\n }\n },\n afterResize: (resizeRef: ResizeRef<PlaitBaseTable, ResizeHandle, TableResizeOptions>) => {\n snapG?.remove();\n snapG = null;\n }\n };\n\n withResize<PlaitBaseTable, ResizeHandle, TableResizeOptions>(board, options);\n\n return board;\n}\n","import { TableComponent } from '../table.component';\nimport { PlaitBaseTable, PlaitTableBoard } from '../interfaces/table';\nimport {\n PlaitBoard,\n PlaitPluginElementContext,\n PlaitElement,\n RectangleClient,\n Selection,\n isLineHitRectangle,\n toViewBoxPoint,\n toHostPoint,\n getHitElementByPoint,\n getSelectedElements,\n PlaitPointerType,\n isDragging,\n isMainPointer,\n distanceBetweenPointAndPoint,\n HIT_DISTANCE_BUFFER\n} from '@plait/core';\nimport { editCell, getHitCell } from '../utils/table';\nimport { withTableResize } from './with-table-resize';\nimport { isVirtualKey, isDelete, isSpaceHotkey } from '@plait/common';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getSelectedCells, getSelectedTableElements, isHitEdgeOfShape, isSingleSelectTable, setSelectedCells } from '../utils';\nimport { TableEngine } from '../engines/table/table';\n\nexport const withTable = (board: PlaitBoard) => {\n const tableBoard = board as PlaitTableBoard;\n\n const { drawElement, getRectangle, isRectangleHit, isHit, isMovable, dblClick, keyDown, pointerUp } = tableBoard;\n\n tableBoard.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitDrawElement.isElementByTable(context.element)) {\n return TableComponent;\n }\n return drawElement(context);\n };\n\n tableBoard.isHit = (element, point, isStrict?: boolean) => {\n if (PlaitDrawElement.isElementByTable(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n const nearestPoint = TableEngine.getNearestPoint(client, point);\n const distance = distanceBetweenPointAndPoint(nearestPoint[0], nearestPoint[1], point[0], point[1]);\n return distance <= HIT_DISTANCE_BUFFER || RectangleClient.isPointInRectangle(client, point);\n }\n return isHit(element, point, isStrict);\n };\n\n tableBoard.getRectangle = (element: PlaitElement) => {\n if (PlaitDrawElement.isElementByTable(element)) {\n return RectangleClient.getRectangleByPoints(element.points);\n }\n return getRectangle(element);\n };\n\n tableBoard.isMovable = (element: PlaitElement) => {\n if (PlaitDrawElement.isElementByTable(element)) {\n return true;\n }\n\n return isMovable(element);\n };\n\n tableBoard.isRectangleHit = (element: PlaitElement, selection: Selection) => {\n if (PlaitDrawElement.isElementByTable(element)) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]);\n const client = RectangleClient.getRectangleByPoints(element.points);\n return isLineHitRectangle(RectangleClient.getCornerPoints(client), rangeRectangle);\n }\n return isRectangleHit(element, selection);\n };\n\n tableBoard.keyDown = (event: KeyboardEvent) => {\n const selectedElements = getSelectedElements(board);\n const isSingleSelection = selectedElements.length === 1;\n const targetElement = selectedElements[0];\n if (\n !PlaitBoard.isReadonly(board) &&\n !PlaitBoard.hasBeenTextEditing(tableBoard) &&\n !isVirtualKey(event) &&\n !isDelete(event) &&\n !isSpaceHotkey(event) &&\n isSingleSelection\n ) {\n event.preventDefault();\n if (PlaitDrawElement.isElementByTable(targetElement)) {\n const cells = getSelectedCells(targetElement);\n let cell = targetElement.cells.find((item) => item.text);\n if (cells?.length) {\n cell = cells.find((item) => item.text);\n }\n if (cell) {\n editCell(board, cell);\n return;\n }\n }\n }\n keyDown(event);\n };\n\n tableBoard.dblClick = (event: MouseEvent) => {\n event.preventDefault();\n if (!PlaitBoard.isReadonly(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const hitElement = getHitElementByPoint(board, point);\n if (hitElement && PlaitDrawElement.isElementByTable(hitElement)) {\n const hitCell = getHitCell(tableBoard, hitElement, point);\n if (hitCell && hitCell.text) {\n editCell(board, hitCell);\n return;\n }\n }\n }\n dblClick(event);\n };\n\n tableBoard.pointerUp = (event: PointerEvent) => {\n const isSetSelectionPointer =\n PlaitBoard.isPointer(tableBoard, PlaitPointerType.selection) || PlaitBoard.isPointer(tableBoard, PlaitPointerType.hand);\n const isSkip = !isMainPointer(event) || isDragging(tableBoard) || !isSetSelectionPointer;\n if (isSkip) {\n pointerUp(event);\n return;\n }\n if (isSingleSelectTable(tableBoard)) {\n const point = toViewBoxPoint(tableBoard, toHostPoint(tableBoard, event.x, event.y));\n const element = getSelectedTableElements(tableBoard)[0];\n const hitCell = getHitCell(tableBoard, element, point);\n if (hitCell && hitCell.text) {\n setSelectedCells(element, [hitCell]);\n }\n }\n pointerUp(event);\n };\n\n tableBoard.buildTable = (element: PlaitBaseTable) => {\n return element;\n };\n\n return withTableResize(tableBoard);\n};\n","import { PlaitBoard, Point, RectangleClient, createG, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { PlaitSwimlane, SwimlaneDrawSymbols } from '../interfaces';\nimport { insertElement } from '../utils';\nimport {\n normalizeShapePoints,\n isDndMode,\n isDrawingMode,\n getDirectionFactorByDirectionComponent,\n getUnitVectorByPointAndPoint,\n TextManage\n} from '@plait/common';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { getSnapResizingRef } from '../utils/snap-resizing';\nimport { TableGenerator } from '../generators/table.generator';\nimport { createDefaultSwimlane, getDefaultSwimlanePoints, isSwimlanePointers } from '../utils/swimlane';\nimport { getGeometryGeneratorByShape } from '../utils/shape';\nimport { DrawPointerType } from '../constants/pointer';\n\nexport interface FakeCreateTextRef {\n g: SVGGElement;\n textManage: TextManage;\n}\n\nconst isSwimlaneDndMode = (board: PlaitBoard) => {\n const isSwimlanePointer = isSwimlanePointers(board);\n const dndMode = isSwimlanePointer && isDndMode(board);\n return dndMode;\n};\n\nconst isSwimlaneDrawingMode = (board: PlaitBoard) => {\n const isSwimlanePointer = isSwimlanePointers(board);\n const drawingMode = isSwimlanePointer && isDrawingMode(board);\n return drawingMode;\n};\n\nexport const withSwimlaneCreateByDrag = (board: PlaitBoard) => {\n const { pointerMove, globalPointerUp, pointerUp } = board;\n\n let swimlaneG: SVGGElement | null = null;\n\n let temporaryElement: PlaitSwimlane | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n swimlaneG?.remove();\n swimlaneG = createG();\n const tableGenerator = new TableGenerator(board);\n const pointer = PlaitBoard.getPointer(board) as SwimlaneDrawSymbols;\n const dragMode = isSwimlaneDndMode(board);\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n\n if (dragMode) {\n const points = getDefaultSwimlanePoints(pointer, movingPoint);\n temporaryElement = createDefaultSwimlane(pointer, points);\n tableGenerator.processDrawing(temporaryElement, swimlaneG);\n PlaitBoard.getElementTopHost(board).append(swimlaneG);\n }\n\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n if (isSwimlaneDndMode(board) && temporaryElement) {\n return;\n }\n pointerUp(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (isSwimlaneDndMode(board) && temporaryElement) {\n insertElement(board, temporaryElement);\n }\n temporaryElement = null;\n swimlaneG?.remove();\n swimlaneG = null;\n globalPointerUp(event);\n };\n\n return board;\n};\n\nexport const withSwimlaneCreateByDrawing = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, pointerUp, keyDown, keyUp } = board;\n let start: Point | null = null;\n\n let swimlaneG: SVGGElement | null = null;\n\n let temporaryElement: PlaitSwimlane | null = null;\n\n let isShift = false;\n\n let snapG: SVGGElement | null;\n\n board.keyDown = (event: KeyboardEvent) => {\n isShift = isKeyHotkey('shift', event);\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n isShift = false;\n keyUp(event);\n };\n\n board.pointerDown = (event: PointerEvent) => {\n if (!PlaitBoard.isReadonly(board) && isSwimlaneDrawingMode(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n start = point;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n swimlaneG?.remove();\n swimlaneG = createG();\n const tableGenerator = new TableGenerator(board);\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as SwimlaneDrawSymbols;\n snapG?.remove();\n if (start && isSwimlaneDrawingMode(board)) {\n let points: [Point, Point] = normalizeShapePoints([start, movingPoint], isShift);\n const activeRectangle = RectangleClient.getRectangleByPoints(points);\n const [x, y] = getUnitVectorByPointAndPoint(start, movingPoint);\n const resizeSnapRef = getSnapResizingRef(board, [], {\n resizePoints: points,\n activeRectangle,\n directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],\n isAspectRatio: isShift,\n isFromCorner: true,\n isCreate: true\n });\n snapG = resizeSnapRef.snapG;\n PlaitBoard.getElementTopHost(board).append(snapG);\n points = normalizeShapePoints(resizeSnapRef.activePoints as [Point, Point], isShift);\n temporaryElement = createDefaultSwimlane(pointer, points);\n tableGenerator.processDrawing(temporaryElement, swimlaneG);\n PlaitBoard.getElementTopHost(board).append(swimlaneG);\n }\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n if (isSwimlaneDrawingMode(board) && start) {\n const targetPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const { width, height } = RectangleClient.getRectangleByPoints([start!, targetPoint]);\n if (Math.hypot(width, height) < 8) {\n const pointer = PlaitBoard.getPointer(board) as SwimlaneDrawSymbols;\n const points = getDefaultSwimlanePoints(pointer, targetPoint);\n temporaryElement = createDefaultSwimlane(pointer, points);\n }\n if (temporaryElement) {\n insertElement(board, temporaryElement);\n }\n snapG?.remove();\n swimlaneG?.remove();\n swimlaneG = null;\n start = null;\n temporaryElement = null;\n return;\n }\n pointerUp(event);\n };\n return board;\n};\n","import { PlaitPluginElementContext } from '@plait/core';\nimport { PlaitDrawElement, PlaitSwimlane } from '../interfaces';\nimport { buildSwimlaneTable } from '../utils/swimlane';\nimport { TableComponent } from '../table.component';\nimport { withSwimlaneCreateByDrag, withSwimlaneCreateByDrawing } from './with-swimlane-create';\nimport { PlaitBaseTable, PlaitTableBoard } from '../interfaces/table';\n\nexport const withSwimlane = (board: PlaitTableBoard) => {\n const { drawElement, buildTable, pointerUp } = board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitDrawElement.isSwimlane(context.element)) {\n return TableComponent;\n }\n return drawElement(context);\n };\n\n board.buildTable = (element: PlaitBaseTable) => {\n if (PlaitDrawElement.isSwimlane(element)) {\n return buildSwimlaneTable(element as PlaitSwimlane);\n }\n return buildTable(element);\n };\n\n return withSwimlaneCreateByDrawing(withSwimlaneCreateByDrag(board));\n};\n","import {\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n Point,\n Transforms,\n addSelectedElement,\n createG,\n distanceBetweenPointAndPoint,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitVectorLine, VectorLineShape, VectorLinePointerType } from '../interfaces';\nimport { DrawPointerType, LINE_HIT_GEOMETRY_BUFFER, getVectorLinePointers } from '../constants';\nimport { isDrawingMode } from '@plait/common';\nimport { vectorLineCreating } from '../utils';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport const withVectorLineCreateByDraw = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, dblClick, globalKeyDown } = board;\n\n let lineShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitVectorLine | null = null;\n\n let drawPoints: Point[] = [];\n\n const vectorLineComplete = () => {\n if (temporaryElement) {\n Transforms.insertNode(board, temporaryElement, [board.children.length]);\n }\n PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);\n lineShapeG?.remove();\n lineShapeG = null;\n temporaryElement = null;\n drawPoints = [];\n };\n\n board.pointerDown = (event: PointerEvent) => {\n const penPointers = getVectorLinePointers();\n const isVectorLinePointer = PlaitBoard.isInPointer(board, penPointers);\n if (!PlaitBoard.isReadonly(board) && isVectorLinePointer && isDrawingMode(board)) {\n let point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (drawPoints.length > 1) {\n const isClosed = distanceBetweenPointAndPoint(...point, ...drawPoints[0]) <= LINE_HIT_GEOMETRY_BUFFER;\n if (isClosed) {\n drawPoints.push(drawPoints[0]);\n vectorLineComplete();\n return;\n }\n }\n drawPoints.push(point);\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n lineShapeG?.remove();\n lineShapeG = createG();\n let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (pointer === VectorLinePointerType.vectorLine) {\n if (drawPoints.length > 0) {\n const distance = distanceBetweenPointAndPoint(...movingPoint, ...drawPoints[0]);\n if (distance <= LINE_HIT_GEOMETRY_BUFFER) {\n movingPoint = drawPoints[0];\n PlaitBoard.getBoardContainer(board).classList.add(`vector-line-closed`);\n } else {\n PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);\n }\n temporaryElement = vectorLineCreating(board, VectorLineShape.straight, drawPoints, movingPoint, lineShapeG);\n }\n }\n pointerMove(event);\n };\n\n board.dblClick = (event: MouseEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n if (temporaryElement) {\n vectorLineComplete();\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n return;\n }\n }\n dblClick(event);\n };\n\n board.globalKeyDown = (event: KeyboardEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n const isEsc = isKeyHotkey('esc', event);\n const isV = isKeyHotkey('v', event);\n if ((isEsc || isV) && temporaryElement) {\n vectorLineComplete();\n if (isV) {\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n }\n }\n }\n globalKeyDown(event);\n };\n\n return board;\n};\n","import { Path, PlaitBoard, Point, Transforms, distanceBetweenPointAndPoint } from '@plait/core';\nimport { ResizeRef, ResizeState, WithResizeOptions, withResize } from '@plait/common';\nimport { getSelectedVectorLineElements } from '../utils/selected';\nimport { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';\nimport { PlaitVectorLine } from '../interfaces';\nimport { LINE_HIT_GEOMETRY_BUFFER } from '../constants';\nimport { isClosedPoints } from '../utils';\n\nexport const withVectorLineResize = (board: PlaitBoard) => {\n const options: WithResizeOptions<PlaitVectorLine, LineResizeHandle> = {\n key: 'draw-vector-line',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n const selectedVectorLineElements = getSelectedVectorLineElements(board);\n if (selectedVectorLineElements.length > 0) {\n let result = null;\n selectedVectorLineElements.forEach(value => {\n const handleRef = getHitLineResizeHandleRef(board, value, point);\n if (handleRef) {\n result = {\n element: value,\n handle: handleRef.handle,\n handleIndex: handleRef.handleIndex\n };\n }\n });\n return result;\n }\n return null;\n },\n\n onResize: (resizeRef: ResizeRef<PlaitVectorLine, LineResizeHandle>, resizeState: ResizeState) => {\n let points: Point[] = [...resizeRef.element.points];\n let handleIndex = resizeRef.handleIndex!;\n if (resizeRef.handle === LineResizeHandle.source || resizeRef.handle === LineResizeHandle.target) {\n points[handleIndex] = resizeState.endPoint;\n if (isClosedPoints(resizeRef.element.points)) {\n points[points.length - 1] = resizeState.endPoint;\n } else {\n const targetPoint = resizeRef.handle === LineResizeHandle.source ? points[points.length - 1] : points[0];\n const distance = distanceBetweenPointAndPoint(...resizeState.endPoint, ...targetPoint);\n if (distance <= LINE_HIT_GEOMETRY_BUFFER) {\n points[handleIndex] = targetPoint;\n }\n }\n } else {\n if (resizeRef.handle === LineResizeHandle.addHandle) {\n points.splice(handleIndex + 1, 0, resizeState.endPoint);\n } else {\n points[handleIndex] = resizeState.endPoint;\n }\n }\n\n Transforms.setNode(board, { points }, resizeRef.path as Path);\n }\n };\n\n withResize<PlaitVectorLine, LineResizeHandle>(board, options);\n\n return board;\n};\n","import { PlaitBoard, PlaitElement, PlaitPluginElementContext, Point, RectangleClient, Selection, getSelectedElements } from '@plait/core';\nimport { GeometryComponent } from '../geometry.component';\nimport { ArrowLineComponent } from '../arrow-line.component';\nimport { VectorLineComponent } from '../vector-line.component';\nimport { PlaitDrawElement } from '../interfaces';\nimport { withDrawHotkey } from './with-draw-hotkey';\nimport { withGeometryCreateByDrawing, withGeometryCreateByDrag } from './with-geometry-create';\nimport { withDrawFragment } from './with-draw-fragment';\nimport { withArrowLineCreateByDraw } from './arrow-line/with-arrow-line-create';\nimport { withArrowLineResize } from './arrow-line/with-arrow-line-resize';\nimport { withArrowLineBoundReaction } from './arrow-line/with-arrow-line-bound-reaction';\nimport { withArrowLineText } from './arrow-line/with-arrow-line-text';\nimport { ImageComponent } from '../image.component';\nimport { withArrowLineAutoCompleteReaction } from './arrow-line/with-arrow-line-auto-complete-reaction';\nimport { withArrowLineAutoComplete } from './arrow-line/with-arrow-line-auto-complete';\nimport { withArrowLineTextMove } from './arrow-line/with-arrow-line-text-move';\nimport { withDrawResize } from './with-draw-resize';\nimport { getHitDrawElement, isHitDrawElement, isHitElementInside, isRectangleHitDrawElement } from '../utils/hit';\nimport { getArrowLinePoints, getArrowLineTextRectangle } from '../utils/arrow-line/arrow-line-basic';\nimport { withDrawRotate } from './with-draw-rotate';\nimport { withTable } from './with-table';\nimport { withSwimlane } from './with-swimlane';\nimport { withVectorLineCreateByDraw } from './with-vector-line-create';\nimport { getVectorLinePoints } from '../utils/vector-line';\nimport { withVectorLineResize } from './with-vector-line-resize';\n\nexport const withDraw = (board: PlaitBoard) => {\n const { drawElement, getRectangle, isRectangleHit, isHit, isInsidePoint, isMovable, isAlign, getRelatedFragment, getOneHitElement } =\n board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitDrawElement.isGeometry(context.element)) {\n if (PlaitDrawElement.isUML(context.element)) {\n return GeometryComponent;\n }\n return GeometryComponent;\n } else if (PlaitDrawElement.isArrowLine(context.element)) {\n return ArrowLineComponent;\n } else if (PlaitDrawElement.isVectorLine(context.element)) {\n return VectorLineComponent;\n } else if (PlaitDrawElement.isImage(context.element)) {\n return ImageComponent;\n }\n return drawElement(context);\n };\n\n board.getRectangle = (element: PlaitElement) => {\n if (PlaitDrawElement.isGeometry(element)) {\n return RectangleClient.getRectangleByPoints(element.points);\n }\n if (PlaitDrawElement.isArrowLine(element)) {\n const points = getArrowLinePoints(board, element);\n const lineTextRectangles = element.texts.map((text, index) => {\n const rectangle = getArrowLineTextRectangle(board, element, index);\n return rectangle;\n });\n const linePointsRectangle = RectangleClient.getRectangleByPoints(points);\n return RectangleClient.getBoundingRectangle([linePointsRectangle, ...lineTextRectangles]);\n }\n if (PlaitDrawElement.isVectorLine(element)) {\n const points = getVectorLinePoints(board, element);\n const linePointsRectangle = RectangleClient.getRectangleByPoints(points!);\n return RectangleClient.getBoundingRectangle([linePointsRectangle]);\n }\n if (PlaitDrawElement.isImage(element)) {\n return RectangleClient.getRectangleByPoints(element.points);\n }\n return getRectangle(element);\n };\n\n board.isRectangleHit = (element: PlaitElement, selection: Selection) => {\n const result = isRectangleHitDrawElement(board, element, selection);\n if (result !== null) {\n return result;\n }\n return isRectangleHit(element, selection);\n };\n\n board.isHit = (element, point, isStrict?: boolean) => {\n const result = isHitDrawElement(board, element, point, isStrict);\n if (result !== null) {\n return result;\n }\n return isHit(element, point, isStrict);\n };\n\n board.getOneHitElement = (elements) => {\n const isAllDrawElements = elements.every((item) => PlaitDrawElement.isDrawElement(item));\n if (isAllDrawElements) {\n return getHitDrawElement(board, elements as PlaitDrawElement[]);\n }\n return getOneHitElement(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 withVectorLineCreateByDraw(\n withArrowLineAutoCompleteReaction(\n withArrowLineBoundReaction(\n withVectorLineResize(\n withArrowLineResize(\n withArrowLineTextMove(\n withArrowLineText(\n withDrawRotate(\n withArrowLineCreateByDraw(\n withArrowLineAutoComplete(\n withGeometryCreateByDrag(\n withGeometryCreateByDrawing(withDrawFragment(withDrawHotkey(board)))\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getTextRectangle","debugKey","debugGenerator","getCenterPointsOnPolygon","basicBuildClipboard","basicInsertClipboard","heightRatio","getNearestPointBetweenPointAndRoundRectangle"],"mappings":"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"}