@plait/draw 0.51.2 → 0.51.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/generators/group.generator.mjs +20 -0
- package/esm2022/geometry.component.mjs +8 -4
- package/esm2022/group.component.mjs +47 -0
- package/esm2022/image.component.mjs +4 -4
- package/esm2022/line.component.mjs +4 -4
- package/esm2022/plugins/with-draw.mjs +9 -2
- package/esm2022/utils/hit.mjs +19 -8
- package/esm2022/utils/resize-align.mjs +3 -3
- package/fesm2022/plait-draw.mjs +98 -17
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/generators/group.generator.d.ts +6 -0
- package/group.component.d.ts +17 -0
- package/package.json +1 -1
- package/utils/memorize.d.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plait-draw.mjs","sources":["../../../packages/draw/src/interfaces/geometry.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/line.ts","../../../packages/draw/src/utils/line/line-resize.ts","../../../packages/draw/src/utils/line/elbow.ts","../../../packages/draw/src/utils/line/line-arrow.ts","../../../packages/draw/src/utils/shape.ts","../../../packages/draw/src/generators/line.generator.ts","../../../packages/draw/src/utils/position/geometry.ts","../../../packages/draw/src/utils/memorize.ts","../../../packages/draw/src/utils/line/line-basic.ts","../../../packages/draw/src/utils/selected.ts","../../../packages/draw/src/utils/position/line.ts","../../../packages/draw/src/utils/hit.ts","../../../packages/draw/src/utils/polygon.ts","../../../packages/draw/src/engines/basic-shapes/comment.ts","../../../packages/draw/src/engines/basic-shapes/polygon.ts","../../../packages/draw/src/engines/basic-shapes/cross.ts","../../../packages/draw/src/engines/basic-shapes/diamond.ts","../../../packages/draw/src/engines/basic-shapes/ellipse.ts","../../../packages/draw/src/engines/basic-shapes/hexagon.ts","../../../packages/draw/src/engines/basic-shapes/left-arrow.ts","../../../packages/draw/src/engines/basic-shapes/octagon.ts","../../../packages/draw/src/engines/basic-shapes/parallelogram.ts","../../../packages/draw/src/engines/basic-shapes/pentagon.ts","../../../packages/draw/src/engines/basic-shapes/pentagon-arrow.ts","../../../packages/draw/src/engines/basic-shapes/process-arrow.ts","../../../packages/draw/src/engines/basic-shapes/rectangle.ts","../../../packages/draw/src/engines/basic-shapes/right-arrow.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/index.ts","../../../packages/draw/src/utils/geometry.ts","../../../packages/draw/src/utils/style/stroke.ts","../../../packages/draw/src/utils/line/line-common.ts","../../../packages/draw/src/interfaces/line.ts","../../../packages/draw/src/interfaces/element.ts","../../../packages/draw/src/interfaces/index.ts","../../../packages/draw/src/generators/geometry-shape.generator.ts","../../../packages/draw/src/transforms/line.ts","../../../packages/draw/src/transforms/geometry.ts","../../../packages/draw/src/transforms/geometry-text.ts","../../../packages/draw/src/transforms/image.ts","../../../packages/draw/src/transforms/index.ts","../../../packages/draw/src/generators/line-auto-complete.generator.ts","../../../packages/draw/src/geometry.component.ts","../../../packages/draw/src/generators/line-active.generator.ts","../../../packages/draw/src/line.component.ts","../../../packages/draw/src/plugins/with-draw-hotkey.ts","../../../packages/draw/src/plugins/with-geometry-create.ts","../../../packages/draw/src/utils/clipboard.ts","../../../packages/draw/src/plugins/with-draw-fragment.ts","../../../packages/draw/src/plugins/with-line-create.ts","../../../packages/draw/src/utils/resize-align-reaction.ts","../../../packages/draw/src/utils/resize-align.ts","../../../packages/draw/src/plugins/with-draw-resize.ts","../../../packages/draw/src/plugins/with-geometry-resize.ts","../../../packages/draw/src/plugins/with-line-resize.ts","../../../packages/draw/src/plugins/with-line-bound-reaction.ts","../../../packages/draw/src/plugins/with-line-text.ts","../../../packages/draw/src/image.component.ts","../../../packages/draw/src/plugins/with-line-auto-complete-reaction.ts","../../../packages/draw/src/plugins/with-line-auto-complete.ts","../../../packages/draw/src/plugins/with-line-text-move.ts","../../../packages/draw/src/plugins/with-draw.ts","../../../packages/draw/src/plait-draw.ts"],"sourcesContent":["import { PlaitBoard, PlaitElement, Point, PointOfRectangle, RectangleClient, Vector } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { ParagraphElement } from '@plait/text';\nimport { StrokeStyle } from './element';\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}\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}\n\nexport type GeometryShapes = BasicShapes | FlowchartSymbols;\n\nexport interface PlaitGeometry extends PlaitElement {\n points: [Point, Point];\n type: 'geometry';\n shape: GeometryShapes;\n\n text: ParagraphElement;\n textHeight: number;\n\n // node style attributes\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n\n angle: number;\n opacity: number;\n}\n\nexport interface 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\nexport interface ShapeEngine {\n isInsidePoint: (rectangle: RectangleClient, point: Point) => boolean;\n getNearestPoint: (rectangle: RectangleClient, point: Point) => Point;\n getNearestCrossingPoint?: (rectangle: RectangleClient, point: Point) => Point;\n getConnectorPoints: (rectangle: RectangleClient) => Point[];\n getCornerPoints: (rectangle: RectangleClient) => Point[];\n getEdgeByConnectionPoint?: (rectangle: RectangleClient, point: PointOfRectangle) => [Point, Point] | null;\n getTangentVectorByConnectionPoint?: (rectangle: RectangleClient, point: PointOfRectangle) => Vector | null;\n draw: (board: PlaitBoard, rectangle: RectangleClient, options: Options) => SVGGElement;\n getTextRectangle?: (element: PlaitGeometry) => RectangleClient;\n}\n","import { ACTIVE_STROKE_WIDTH } from '@plait/core';\nimport { FlowchartSymbols } from '../interfaces';\n\nexport const ShapeDefaultSpace = {\n rectangleAndText: 4\n};\n\nexport const DefaultGeometryStyle = {\n strokeWidth: 2,\n defaultRadius: 4,\n strokeColor: '#000',\n fill: 'none'\n};\n\nexport const DefaultGeometryActiveStyle = {\n strokeWidth: ACTIVE_STROKE_WIDTH,\n selectionStrokeWidth: ACTIVE_STROKE_WIDTH\n};\n\nexport const DefaultBasicShapeProperty = {\n width: 100,\n height: 100,\n strokeColor: '#333',\n strokeWidth: 2\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 DefaultDecisionProperty = {\n width: 140,\n height: 70\n};\n\nexport const DefaultDataProperty = {\n width: 124,\n height: 60\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 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};\n\nexport const REACTION_MARGIN = -4;\n","import { BasicShapes, FlowchartSymbols, LineShape } from '../interfaces';\n\nexport type DrawPointerType = BasicShapes | LineShape | FlowchartSymbols;\n\nexport const getGeometryPointers = () => {\n return [...Object.keys(BasicShapes), ...Object.keys(FlowchartSymbols)];\n};\n\nexport const getBasicPointers = () => {\n return Object.keys(BasicShapes);\n};\n\nexport const getFlowchartPointers = () => {\n return Object.keys(FlowchartSymbols);\n};\n\nexport const getLinePointers = () => {\n return Object.keys(LineShape);\n};\n","export const DEFAULT_IMAGE_WIDTH = 1000;\n","import { ThemeColorMode } from '@plait/core';\n\nexport const DrawThemeColors = {\n [ThemeColorMode.default]: {\n strokeColor: '#333333',\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","export const DefaultLineStyle = {\n strokeWidth: 2,\n strokeColor: '#000'\n};\n\nexport const LINE_TEXT_SPACE = 4;\n\nexport const LINE_AUTO_COMPLETE_DIAMETER = 6;\n\nexport const LINE_AUTO_COMPLETE_OPACITY = 0.6;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_OPACITY = 0.8;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_DIAMETER = 10;\n\nexport const LINE_ALIGN_TOLERANCE = 3;\n","import { ElbowLineRouteOptions, ResizeState, generateElbowLineRoute, removeDuplicatePoints, simplifyOrthogonalPoints } from '@plait/common';\nimport { PlaitBoard, Point, RectangleClient, drawCircle } from '@plait/core';\nimport { LINE_ALIGN_TOLERANCE } from '../../constants/line';\nimport { getElbowLineRouteOptions, getLineHandleRefPair } from './line-common';\nimport { PlaitLine } from '../../interfaces';\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: PlaitLine,\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 = getLineHandleRefPair(board, element);\n const params = getElbowLineRouteOptions(board, element, handleRefPair);\n const keyPoints = removeDuplicatePoints(generateElbowLineRoute(params));\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: PlaitLine,\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 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 // const fakeRectangleG = PlaitBoard.getRoughSVG(board).rectangle(\n // fakeRectangle.x,\n // fakeRectangle.y,\n // fakeRectangle.width,\n // fakeRectangle.height,\n // { stroke: 'blue' }\n // );\n // PlaitBoard.getElementActiveHost(board).append(fakeRectangleG);\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, PlaitBoard, getElementById, RectangleClient, Vector } from '@plait/core';\nimport {\n getPoints,\n getPointByVector,\n removeDuplicatePoints,\n generateElbowLineRoute,\n simplifyOrthogonalPoints,\n isSourceAndTargetIntersect\n} from '@plait/common';\nimport { BasicShapes, LineHandleRefPair, PlaitGeometry, PlaitLine } from '../../interfaces';\nimport { createGeometryElement } from '../geometry';\nimport { getStrokeWidthByElement } from '../style/stroke';\nimport { getElbowLineRouteOptions, getLineHandleRefPair } from './line-common';\nimport { getMidKeyPoints, getMirrorDataPoints, hasIllegalElbowPoint } from './line-resize';\n\nexport const getElbowPoints = (board: PlaitBoard, element: PlaitLine) => {\n const handleRefPair = getLineHandleRefPair(board, element);\n const params = getElbowLineRouteOptions(board, element, handleRefPair);\n // console.log(params, 'params');\n const isIntersect = isSourceAndTargetIntersect(params);\n if (isIntersect) {\n return simplifyOrthogonalPoints(\n getPoints(\n handleRefPair.source.point,\n handleRefPair.source.direction,\n handleRefPair.target.point,\n handleRefPair.target.direction,\n 0\n )\n );\n }\n const keyPoints = removeDuplicatePoints(generateElbowLineRoute(params));\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(PlaitLine.getPoints(board, element));\n const midDataPoints = dataPoints.slice(1, -1);\n if (hasIllegalElbowPoint(midDataPoints)) {\n return simplifyOrthogonalPoints(keyPoints);\n }\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: PlaitLine) => {\n const options = getElbowLineRouteOptions(board, element);\n return [options.nextSourcePoint, options.nextTargetPoint];\n};\n\nexport const getSourceAndTargetRectangle = (board: PlaitBoard, element: PlaitLine, handleRefPair: LineHandleRefPair) => {\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 const sourceRectangle = RectangleClient.inflate(\n RectangleClient.getRectangleByPoints(sourceElement.points),\n getStrokeWidthByElement(sourceElement) * 2\n );\n const targetRectangle = RectangleClient.inflate(\n RectangleClient.getRectangleByPoints(targetElement.points),\n getStrokeWidthByElement(targetElement) * 2\n );\n return {\n sourceRectangle,\n targetRectangle\n };\n};\n\nconst createFakeElement = (startPoint: Point, vector: Vector) => {\n const point = getPointByVector(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: PlaitLine, 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 { Point, arrowPoints, createG, createPath, distanceBetweenPointAndPoint, drawLinearPath, rotate } from '@plait/core';\nimport { LineMarkerType, PlaitLine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getExtendPoint, getUnitVectorByPointAndPoint } from '@plait/common';\nimport { getStrokeWidthByElement } from '../style';\n\ninterface ArrowOptions {\n marker: LineMarkerType;\n source: Point;\n target: Point;\n isSource: boolean;\n}\nconst ARROW_LENGTH = 20;\n\nexport const drawLineArrow = (element: PlaitLine, points: Point[], options: Options) => {\n const arrowG = createG();\n if (PlaitLine.isSourceMark(element, LineMarkerType.none) && PlaitLine.isTargetMark(element, LineMarkerType.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 (!PlaitLine.isSourceMark(element, LineMarkerType.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 (!PlaitLine.isTargetMark(element, LineMarkerType.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: PlaitLine, arrowOptions: ArrowOptions, options: Options) => {\n const { marker, target, source, isSource } = arrowOptions;\n let targetArrow;\n switch (marker) {\n case LineMarkerType.openTriangle: {\n targetArrow = drawOpenTriangle(element, source, target, options);\n break;\n }\n case LineMarkerType.solidTriangle: {\n targetArrow = drawSolidTriangle(source, target, options);\n break;\n }\n case LineMarkerType.arrow: {\n targetArrow = drawArrow(element, source, target, options);\n break;\n }\n case LineMarkerType.sharpArrow: {\n targetArrow = drawSharpArrow(source, target, options);\n break;\n }\n case LineMarkerType.oneSideUp: {\n targetArrow = drawOneSideArrow(source, target, isSource ? 'down' : 'up', options);\n break;\n }\n case LineMarkerType.oneSideDown: {\n targetArrow = drawOneSideArrow(source, target, isSource ? 'up' : 'down', options);\n break;\n }\n case LineMarkerType.hollowTriangle: {\n targetArrow = drawHollowTriangleArrow(source, target, options);\n break;\n }\n case LineMarkerType.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: PlaitLine, 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: PlaitLine, 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 { BasicShapes, PlaitDrawElement, PlaitShape } from '../interfaces';\n\nexport const getShape = (value: PlaitShape) => {\n if (PlaitDrawElement.isImage(value)) {\n return BasicShapes.rectangle;\n }\n return value.shape;\n};\n","import { PlaitLine } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { drawLine } from '../utils/line/line-basic';\n\nexport interface ShapeData {}\n\nexport class LineShapeGenerator extends Generator<PlaitLine, ShapeData> {\n canDraw(element: PlaitLine, data: ShapeData): boolean {\n return true;\n }\n\n draw(element: PlaitLine, data: ShapeData) {\n let lineG: SVGGElement | undefined;\n lineG = drawLine(this.board, element);\n return lineG;\n }\n}\n","import { Ancestor, PlaitBoard, Point, RectangleClient, depthFirstRecursion, getIsRecursionFunc } from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry } from '../../interfaces';\nimport { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs, ResizeHandle } from '@plait/common';\nimport { getEngine } from '../../engines';\nimport { PlaitImage } from '../../interfaces/image';\nimport { getShape } from '../shape';\n\nexport const getHitRectangleResizeHandleRef = (board: PlaitBoard, rectangle: RectangleClient, point: Point) => {\n const resizeHandleRefs = getRectangleResizeHandleRefs(rectangle, RESIZE_HANDLE_DIAMETER);\n const result = resizeHandleRefs.find(resizeHandleRef => {\n return RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), resizeHandleRef.rectangle);\n });\n return result;\n};\n\nexport const getHitOutlineGeometry = (board: PlaitBoard, point: Point, offset: number = 0): PlaitGeometry | null => {\n let geometry: PlaitGeometry | PlaitImage | null = null;\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (PlaitDrawElement.isGeometry(node) || PlaitDrawElement.isImage(node)) {\n let client = RectangleClient.getRectangleByPoints(node.points);\n client = RectangleClient.getOutlineRectangle(client, offset);\n const shape = getShape(node);\n const isHit = getEngine(shape).isInsidePoint(client, point);\n if (isHit) {\n geometry = node;\n }\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return geometry;\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 } 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.isLine(element): {\n key = MemorizeKey.line;\n break;\n }\n }\n return key;\n};\n\nexport const getLineMemorizedLatest = () => {\n const properties = getMemorizedLatest(MemorizeKey.line);\n delete properties?.text;\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 {\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 = (element: PlaitDrawElement, 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 newProperties = (setNodeOperation as BaseSetNodeOperation).newProperties;\n textMemory = { ...textMemory, ...newProperties };\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 {\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} from '@plait/core';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { getPointOnPolyline, getPointByVector, removeDuplicatePoints, getExtendPoint, isSourceAndTargetIntersect } from '@plait/common';\nimport { LineHandle, LineMarkerType, LineShape, LineText, PlaitDrawElement, PlaitLine, PlaitShape } from '../../interfaces';\nimport { getNearestPoint } from '../geometry';\nimport { getLineDashByElement, getStrokeColorByElement, getStrokeWidthByElement } from '../style/stroke';\nimport { getEngine } from '../../engines';\nimport { getShape } from '../shape';\nimport { DefaultLineStyle, LINE_TEXT_SPACE } from '../../constants/line';\nimport { LineShapeGenerator } from '../../generators/line.generator';\nimport { REACTION_MARGIN } from '../../constants';\nimport { getHitOutlineGeometry } from '../position/geometry';\nimport { getLineMemorizedLatest } from '../memorize';\nimport { alignPoints } from './line-resize';\nimport { getElbowLineRouteOptions, getLineHandleRefPair } from './line-common';\nimport { getElbowPoints, getNextSourceAndTargetPoints } from './elbow';\nimport { drawLineArrow } from './line-arrow';\n\nexport const createLineElement = (\n shape: LineShape,\n points: [Point, Point],\n source: LineHandle,\n target: LineHandle,\n texts?: LineText[],\n options?: Pick<PlaitLine, 'strokeColor' | 'strokeWidth'>\n): PlaitLine => {\n return {\n id: idCreator(),\n type: 'line',\n shape,\n source,\n texts: texts ? texts : [],\n target,\n opacity: 1,\n points,\n ...options\n };\n};\n\nexport const getLinePoints = (board: PlaitBoard, element: PlaitLine) => {\n switch (element.shape) {\n case LineShape.elbow: {\n return getElbowPoints(board, element);\n }\n case LineShape.curve: {\n return getCurvePoints(board, element);\n }\n default: {\n const points = PlaitLine.getPoints(board, element);\n const handleRefPair = getLineHandleRefPair(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: PlaitLine) => {\n if (element.points.length === 2) {\n const handleRefPair = getLineHandleRefPair(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(getPointByVector(source.point, source.vector, offset));\n }\n if (targetBoundElement) {\n curvePoints.push(getPointByVector(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(getPointByVector(source.point, source.vector, offset));\n curvePoints.push(getPointByVector(target.point, target.vector, offset));\n }\n curvePoints.push(target.point);\n return pointsOnBezierCurves(curvePoints) as Point[];\n } else {\n let dataPoints = PlaitLine.getPoints(board, element);\n dataPoints = removeDuplicatePoints(dataPoints);\n const points = catmullRomFitting(dataPoints);\n return pointsOnBezierCurves(points) as Point[];\n }\n};\n\nexport function getMiddlePoints(board: PlaitBoard, element: PlaitLine) {\n const result: Point[] = [];\n const shape = element.shape;\n const hideBuffer = 10;\n if (shape === LineShape.straight) {\n const points = PlaitLine.getPoints(board, element);\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 === LineShape.curve) {\n const points = PlaitLine.getPoints(board, element);\n const pointsOnBezier = getCurvePoints(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 === LineShape.elbow) {\n const renderPoints = getElbowPoints(board, element);\n const options = getElbowLineRouteOptions(board, element);\n const isIntersect = isSourceAndTargetIntersect(options);\n if (!isIntersect) {\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\nexport const drawLine = (board: PlaitBoard, element: PlaitLine) => {\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(board, element);\n const strokeLineDash = getLineDashByElement(element);\n const options = { stroke: strokeColor, strokeWidth, strokeLineDash };\n const lineG = createG();\n let points = getLinePoints(board, element);\n let line;\n if (element.shape === LineShape.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 lineG.appendChild(line);\n const { mask, maskTargetFillRect } = drawMask(board, element, id);\n lineG.appendChild(mask);\n line.appendChild(maskTargetFillRect);\n const arrow = drawLineArrow(element, points, { stroke: strokeColor, strokeWidth });\n arrow && lineG.appendChild(arrow);\n return lineG;\n};\n\nexport const getConnectionByNearestPoint = (board: PlaitBoard, point: Point, hitElement: PlaitShape): Point => {\n let rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n let nearestPoint = getNearestPoint(hitElement, point);\n const hitConnector = getHitConnectorPoint(nearestPoint, hitElement, rectangle);\n nearestPoint = hitConnector ? hitConnector : nearestPoint;\n return [(nearestPoint[0] - rectangle.x) / rectangle.width, (nearestPoint[1] - rectangle.y) / rectangle.height];\n};\n\nexport const getHitConnectorPoint = (point: Point, hitElement: PlaitShape, rectangle: RectangleClient) => {\n const shape = getShape(hitElement);\n const connector = getEngine(shape).getConnectorPoints(rectangle);\n const points = RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(point, 10, 10));\n const pointRectangle = RectangleClient.getRectangleByPoints(points);\n return connector.find(point => {\n return RectangleClient.isHit(pointRectangle, RectangleClient.getRectangleByPoints([point, point]));\n });\n};\n\nexport const getLineTextRectangle = (board: PlaitBoard, element: PlaitLine, index: number): RectangleClient => {\n const text = element.texts[index];\n const elbowPoints = getLinePoints(board, element);\n const point = getPointOnPolyline(elbowPoints, text.position);\n return {\n x: point[0] - text.width! / 2,\n y: point[1] - text.height! / 2,\n width: text.width!,\n height: text.height!\n };\n};\n\nexport const getLines = (board: PlaitBoard) => {\n return findElements(board, {\n match: (element: PlaitElement) => PlaitDrawElement.isLine(element),\n recursion: (element: PlaitElement) => PlaitDrawElement.isDrawElement(element)\n }) as PlaitLine[];\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 handleLineCreating = (\n board: PlaitBoard,\n lineShape: LineShape,\n sourcePoint: Point,\n movingPoint: Point,\n sourceElement: PlaitShape | null,\n lineShapeG: SVGGElement\n) => {\n const hitElement = getHitOutlineGeometry(board, movingPoint, REACTION_MARGIN);\n const targetConnection = hitElement ? getConnectionByNearestPoint(board, movingPoint, hitElement) : undefined;\n const connection = sourceElement ? getConnectionByNearestPoint(board, sourcePoint, sourceElement) : undefined;\n const targetBoundId = hitElement ? hitElement.id : undefined;\n const lineGenerator = new LineShapeGenerator(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 = createLineElement(\n lineShape,\n [sourcePoint, movingPoint],\n { marker: sourceMarker || LineMarkerType.none, connection: connection, boundId: sourceElement?.id },\n { marker: targetMarker || LineMarkerType.arrow, connection: targetConnection, boundId: targetBoundId },\n [],\n {\n strokeWidth: DefaultLineStyle.strokeWidth,\n ...memorizedLatest\n }\n );\n const linePoints = getLinePoints(board, temporaryLineElement);\n const otherPoint = linePoints[0];\n temporaryLineElement.points[1] = alignPoints(otherPoint, movingPoint);\n lineGenerator.processDrawing(temporaryLineElement, lineShapeG);\n PlaitBoard.getElementActiveHost(board).append(lineShapeG);\n return temporaryLineElement;\n};\n\nfunction drawMask(board: PlaitBoard, element: PlaitLine, id: string) {\n const mask = createMask();\n mask.setAttribute('id', id);\n const points = getLinePoints(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 = getLineTextRectangle(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, getSelectedElements } from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\n\nexport const getSelectedDrawElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isDrawElement(value)) as PlaitDrawElement[];\n return selectedElements;\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 getSelectedLineElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isLine(value)) as PlaitLine[];\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","import { PlaitBoard, Point, RectangleClient, distanceBetweenPointAndSegments } from '@plait/core';\nimport { LineShape, PlaitLine } from '../../interfaces';\nimport { RESIZE_HANDLE_DIAMETER, getPointOnPolyline } from '@plait/common';\nimport { getLinePoints, getMiddlePoints } from '../line/line-basic';\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 = PlaitLine.getPoints(board, element);\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 !== LineShape.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\nexport const getHitLineTextIndex = (board: PlaitBoard, element: PlaitLine, point: Point) => {\n const texts = element.texts;\n if (!texts.length) return -1;\n\n const points = getLinePoints(board, element);\n return texts.findIndex(text => {\n const center = getPointOnPolyline(points, text.position);\n const rectangle = {\n x: center[0] - text.width! / 2,\n y: center[1] - text.height! / 2,\n width: text.width!,\n height: text.height!\n };\n return RectangleClient.isHit(rectangle, RectangleClient.getRectangleByPoints([point, point]));\n });\n};\n","import {\n PlaitElement,\n RectangleClient,\n Selection,\n PlaitBoard,\n isPolylineHitRectangle,\n Point,\n distanceBetweenPointAndSegments,\n distanceBetweenPointAndPoint,\n HIT_DISTANCE_BUFFER\n} from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { TRANSPARENT } from '@plait/common';\nimport { getTextRectangle } from './geometry';\nimport { getLinePoints } from './line/line-basic';\nimport { getFillByElement } from './style/stroke';\nimport { DefaultGeometryStyle } from '../constants/geometry';\nimport { getEngine } from '../engines';\nimport { getShape } from './shape';\nimport { getHitLineTextIndex } from './position/line';\n\nexport const isTextExceedingBounds = (geometry: PlaitGeometry) => {\n const client = RectangleClient.getRectangleByPoints(geometry.points);\n if (geometry.textHeight > client.height) {\n return true;\n }\n return false;\n};\n\nexport const isHitLineText = (board: PlaitBoard, element: PlaitLine, point: Point) => {\n return getHitLineTextIndex(board, element, point) !== -1;\n};\n\nexport const isHitPolyLine = (pathPoints: Point[], point: Point) => {\n const distance = distanceBetweenPointAndSegments(pathPoints, point);\n return distance <= HIT_DISTANCE_BUFFER;\n};\n\nexport const isHitLine = (board: PlaitBoard, element: PlaitLine, point: Point) => {\n const points = getLinePoints(board, element);\n const isHitText = isHitLineText(board, element, point);\n return isHitText || isHitPolyLine(points, point);\n};\n\nexport const isRectangleHitDrawElement = (board: PlaitBoard, element: PlaitElement, selection: Selection) => {\n const rangeRectangle = RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]);\n if (PlaitDrawElement.isGeometry(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n if (isTextExceedingBounds(element)) {\n const textClient = getTextRectangle(element);\n return RectangleClient.isHit(rangeRectangle, client) || RectangleClient.isHit(rangeRectangle, textClient);\n }\n return RectangleClient.isHit(rangeRectangle, client);\n }\n if (PlaitDrawElement.isImage(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n return RectangleClient.isHit(rangeRectangle, client);\n }\n if (PlaitDrawElement.isLine(element)) {\n const points = getLinePoints(board, element);\n return isPolylineHitRectangle(points, rangeRectangle);\n }\n return null;\n};\n\nexport const isHitDrawElement = (board: PlaitBoard, element: PlaitElement, point: Point) => {\n if (PlaitDrawElement.isGeometry(element)) {\n const fill = getFillByElement(board, element);\n const engine = getEngine(getShape(element));\n const rectangle = board.getRectangle(element);\n const nearestPoint = engine.getNearestPoint(rectangle!, point);\n const distance = distanceBetweenPointAndPoint(nearestPoint[0], nearestPoint[1], point[0], point[1]);\n const isHitEdge = distance <= HIT_DISTANCE_BUFFER;\n if (isHitEdge) {\n return isHitEdge;\n }\n // when shape equals text, fill is not allowed\n if (fill !== DefaultGeometryStyle.fill && fill !== TRANSPARENT && !PlaitDrawElement.isText(element)) {\n const isHitInside = engine.isInsidePoint(rectangle!, point);\n if (isHitInside) {\n return isHitInside;\n }\n } else {\n // if shape equals text, only check text rectangle\n if (PlaitDrawElement.isText(element)) {\n const textClient = getTextRectangle(element);\n let isHitText = RectangleClient.isPointInRectangle(textClient, point);\n return isHitText;\n }\n\n // check textRectangle of element\n const textClient = engine.getTextRectangle ? engine.getTextRectangle(element) : getTextRectangle(element);\n const isHitTextRectangle = RectangleClient.isPointInRectangle(textClient, point);\n if (isHitTextRectangle) {\n return isHitTextRectangle;\n }\n }\n }\n if (PlaitDrawElement.isImage(element)) {\n return isRectangleHitDrawElement(board, element, { anchor: point, focus: point });\n }\n\n if (PlaitDrawElement.isLine(element)) {\n return isHitLine(board, element, point);\n }\n return null;\n};\n\nexport const isHitElementInside = (board: PlaitBoard, element: PlaitElement, point: Point) => {\n if (PlaitDrawElement.isGeometry(element)) {\n const engine = getEngine(getShape(element));\n const rectangle = board.getRectangle(element);\n const isHitInside = engine.isInsidePoint(rectangle!, point);\n if (isHitInside) {\n return isHitInside;\n }\n\n if (engine.getTextRectangle) {\n const textClient = engine.getTextRectangle(element);\n const isHitTextRectangle = RectangleClient.isPointInRectangle(textClient, point);\n if (isHitTextRectangle) {\n return isHitTextRectangle;\n }\n }\n }\n if (PlaitDrawElement.isImage(element)) {\n return isRectangleHitDrawElement(board, element, { anchor: point, focus: point });\n }\n\n if (PlaitDrawElement.isLine(element)) {\n return isHitLine(board, element, point);\n }\n\n return null;\n};\n","import { getCrossingPointsBetweenPointAndSegment, isPointOnSegment } from '@plait/common';\nimport { Point } from '@plait/core';\n\nexport const getCenterPointsOnPolygon = (points: Point[]) => {\n const centerPoints: Point[] = [];\n for (let i = 0; i < points.length; i++) {\n let j = i == points.length - 1 ? 0 : i + 1;\n centerPoints.push([(points[i][0] + points[j][0]) / 2, (points[i][1] + points[j][1]) / 2]);\n }\n return centerPoints;\n};\n\nexport const getCrossingPointBetweenPointAndPolygon = (corners: Point[], point: Point) => {\n const result: Point[] = [];\n for (let index = 1; index <= corners.length; index++) {\n let start = corners[index - 1];\n let end = index === corners.length ? corners[0] : corners[index];\n const crossingPoint = getCrossingPointsBetweenPointAndSegment(point, start, end);\n result.push(...crossingPoint);\n }\n return result;\n};\n\nexport const getPolygonEdgeByConnectionPoint = (corners: Point[], point: Point) => {\n for (let index = 1; index <= corners.length; index++) {\n let start = corners[index - 1];\n let end = index === corners.length ? corners[0] : corners[index];\n if (isPointOnSegment(point, start, end)) {\n return [start, end] as [Point, Point];\n }\n }\n return null;\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nconst heightRatio = 3 / 4;\n\nexport const CommentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const points = getCommentPoints(rectangle);\n const rs = PlaitBoard.getRoughSVG(board);\n const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(polygon, 'round');\n return polygon;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const parallelogramPoints = getCommentPoints(rectangle);\n return isPointInPolygon(point, parallelogramPoints);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getCommentPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getCommentPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getCommentPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height * heightRatio - height) / 2\n };\n }\n};\n\nexport const getCommentPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + (rectangle.width * 3) / 5, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 2) / 5, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height * heightRatio]\n ];\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n distanceBetweenPointAndPoint,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getCrossingPointBetweenPointAndPolygon, getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport interface CreateOptions {\n getPolygonPoints: (rectangle: RectangleClient) => Point[];\n getConnectorPoints?: (rectangle: RectangleClient) => Point[];\n getTextRectangle?: (element: PlaitGeometry) => RectangleClient;\n}\n\nexport function createPolygonEngine(options: CreateOptions): ShapeEngine {\n const getPoints = options.getPolygonPoints;\n const engine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const points = getPoints(rectangle);\n const rs = PlaitBoard.getRoughSVG(board);\n const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(polygon, 'round');\n return polygon;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const points = getPoints(rectangle);\n return isPointInPolygon(point, points);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getPoints(rectangle));\n },\n getNearestCrossingPoint(rectangle: RectangleClient, point: Point) {\n const corners = getPoints(rectangle);\n const crossingPoints = getCrossingPointBetweenPointAndPolygon(corners, point);\n let nearestPoint = crossingPoints[0];\n let nearestDistance = distanceBetweenPointAndPoint(point[0], point[1], nearestPoint[0], nearestPoint[1]);\n crossingPoints\n .filter((v, index) => index > 0)\n .forEach(crossingPoint => {\n let distance = distanceBetweenPointAndPoint(point[0], point[1], crossingPoint[0], crossingPoint[1]);\n if (distance < nearestDistance) {\n nearestDistance = distance;\n nearestPoint = crossingPoint;\n }\n });\n\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n if (options.getConnectorPoints) {\n return options.getConnectorPoints(rectangle);\n }\n return getPoints(rectangle);\n }\n };\n if (options.getTextRectangle) {\n engine.getTextRectangle = options.getTextRectangle;\n }\n return engine;\n}\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\nexport const getCrossPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height / 4]\n ];\n};\n\nexport const CrossEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getCrossPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width / 2;\n rectangle.x += width / 4;\n return rectangle;\n }\n});\n","import { RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils/geometry';\n\nexport const DiamondEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: RectangleClient.getEdgeCenterPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n rectangle.width = rectangle.width / 2;\n rectangle.x += rectangle.width / 2;\n return rectangle;\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getVectorFromPointAndSlope,\n isPointInEllipse\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getTextRectangle } from '../../utils';\n\nexport const EllipseEngine: 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 return rs.ellipse(centerPoint[0], centerPoint[1], rectangle.width, rectangle.height, { ...options, fillStyle: 'solid' });\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n return isPointInEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n return getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const a = rectangle.width / 2;\n const b = rectangle.height / 2;\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return vector;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n};\n\nexport function getNearestPointBetweenPointAndEllipse(point: Point, center: Point, rx: number, ry: number, rotation: number = 0): Point {\n const rectangleClient = {\n x: center[0] - rx,\n y: center[1] - ry,\n height: ry * 2,\n width: rx * 2\n };\n // https://stackoverflow.com/a/46007540/232122\n const px = Math.abs(point[0] - rectangleClient.x - rectangleClient.width / 2);\n const py = Math.abs(point[1] - rectangleClient.y - rectangleClient.height / 2);\n\n let tx = 0.707;\n let ty = 0.707;\n\n const a = Math.abs(rectangleClient.width) / 2;\n const b = Math.abs(rectangleClient.height) / 2;\n\n [0, 1, 2, 3].forEach(x => {\n const xx = a * tx;\n const yy = b * ty;\n\n const ex = ((a * a - b * b) * tx ** 3) / a;\n const ey = ((b * b - a * a) * ty ** 3) / b;\n\n const rx = xx - ex;\n const ry = yy - ey;\n\n const qx = px - ex;\n const qy = py - ey;\n\n const r = Math.hypot(ry, rx);\n const q = Math.hypot(qy, qx);\n\n tx = Math.min(1, Math.max(0, ((qx * r) / q + ex) / a));\n ty = Math.min(1, Math.max(0, ((qy * r) / q + ey) / b));\n const t = Math.hypot(ty, tx);\n tx /= t;\n ty /= t;\n });\n const signX = point[0] > center[0] ? 1 : -1;\n const signY = point[1] > center[1] ? 1 : -1;\n\n return [center[0] + a * tx * signX, center[1] + b * ty * signY];\n}\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getHexagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n};\n\nexport const HexagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getHexagonPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getLeftArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width * 0.32, rectangle.y],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.8],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.8],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height]\n ];\n};\n\nexport const LeftArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getLeftArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width * (1 - 0.32);\n rectangle.x += width * 0.32;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getOctagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + (rectangle.width * 3) / 10, rectangle.y],\n [rectangle.x + (rectangle.width * 7) / 10, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 3) / 10],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 7) / 10],\n [rectangle.x + (rectangle.width * 7) / 10, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 3) / 10, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + (rectangle.height * 7) / 10],\n [rectangle.x, rectangle.y + (rectangle.height * 3) / 10]\n ];\n};\n\nexport const OctagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getOctagonPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\n\nexport const getParallelogramPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\nexport const ParallelogramEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getParallelogramPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getParallelogramPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width / 2;\n rectangle.x += width / 4;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getPentagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 2) / 5],\n [rectangle.x + (rectangle.width * 4) / 5, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 5, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + (rectangle.height * 2) / 5]\n ];\n};\n\nexport const PentagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPentagonPoints,\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 3) / 5;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 5,\n y: elementRectangle.y + elementRectangle.height / 5 + ((elementRectangle.height * 4) / 5 - height) / 2\n };\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getPentagonArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 5, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 3) / 5, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const PentagonArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPentagonArrowPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n rectangle.width = (rectangle.width * 3) / 5;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getProcessArrowPoints = (rectangle: RectangleClient): Point[] => {\n const wider = rectangle.width > rectangle.height / 2;\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height],\n [rectangle.x + (wider ? rectangle.height / 2 : rectangle.width), rectangle.y + rectangle.height / 2]\n ];\n};\n\nexport const ProcessArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getProcessArrowPoints,\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const width = rectangle.width;\n rectangle.width = elementRectangle.height / 2;\n rectangle.x += elementRectangle.height / 2;\n return rectangle;\n }\n});\n","import { PlaitBoard, Point, PointOfRectangle, RectangleClient, drawRectangle, getNearestPointBetweenPointAndSegments } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport const RectangleEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRectangle(board, rectangle, { ...options, fillStyle: 'solid' });\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getRightArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height * 0.8],\n [rectangle.x, rectangle.y + rectangle.height * 0.8]\n ];\n};\n\nexport const RightArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getRightArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n rectangle.width = rectangle.width * 0.68;\n return rectangle;\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getNearestPointBetweenPointAndSegments,\n isPointInRoundRectangle\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getNearestPointBetweenPointAndEllipse } from './ellipse';\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} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { getRoundRectangleRadius } from './round-rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\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 return 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 },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const points: Point[] = [\n [rectangle.x + rectangle.width / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height * 3) / 4]\n ];\n rectangle.height = (rectangle.height * 3) / 4;\n return isPointInPolygon(point, points) || isPointInRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getRoundCommentPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getRoundCommentPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getRoundCommentPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height * heightRatio - height) / 2\n };\n }\n};\n\nexport const getRoundCommentPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height * heightRatio]\n ];\n};\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getTextRectangle } from '../../utils/geometry';\n\nexport const getTrapezoidPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width * 0.15, rectangle.y],\n [rectangle.x + rectangle.width * 0.85, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TrapezoidEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTrapezoidPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n const points = getTrapezoidPoints(rectangle);\n return getCenterPointsOnPolygon(points);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getStrokeWidthByElement } from '../../utils/style';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\n\nexport const getTrianglePoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TriangleEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTrianglePoints,\n getConnectorPoints(rectangle: RectangleClient) {\n const cornerPoints = getTrianglePoints(rectangle);\n const lineCenterPoints = getCenterPointsOnPolygon(cornerPoints);\n return [...lineCenterPoints, ...cornerPoints];\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 2) / 3;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + (elementRectangle.height * 3) / 5 + ((elementRectangle.height * 2) / 5 - height) / 2\n };\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\n\nexport const getTwoWayArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + rectangle.height / 5],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + rectangle.height / 5],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + (rectangle.height * 4) / 5],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + (rectangle.height * 4) / 5],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TwoWayArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTwoWayArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getStarPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height * 75) / 91],\n [rectangle.x + (rectangle.width * 18.61) / 96, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 24.2235871) / 96, rectangle.y + (rectangle.height * 57.7254249) / 91],\n [rectangle.x, rectangle.y + (rectangle.height * 34.5491503) / 91],\n [rectangle.x + (rectangle.width * 33.3053687) / 96, rectangle.y + (rectangle.height * 29.7745751) / 91],\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + (rectangle.width * 62.6946313) / 96, rectangle.y + (rectangle.height * 29.7745751) / 91],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 34.5491503) / 91],\n [rectangle.x + (rectangle.width * 71.7764129) / 96, rectangle.y + (rectangle.height * 57.7254249) / 91],\n [rectangle.x + (rectangle.width * 77.3892626) / 96, rectangle.y + rectangle.height]\n ];\n};\n\nexport const StarEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getStarPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const points = getStarPoints(rectangle);\n return [points[1], points[3], points[5], points[7], points[9]];\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = originWidth / 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 4,\n y: elementRectangle.y + (elementRectangle.height * 1) / 5 + ((elementRectangle.height * 4) / 5 - height) / 2\n };\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInRoundRectangle\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getNearestPointBetweenPointAndEllipse } from '../basic-shapes/ellipse';\n\nexport const TerminalEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n rectangle.x,\n rectangle.y,\n rectangle.x + rectangle.width,\n rectangle.y + rectangle.height,\n { ...options, fillStyle: 'solid' },\n false,\n getStartEndRadius(rectangle)\n );\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n return isPointInRoundRectangle(point, rectangle, getStartEndRadius(rectangle));\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndRoundRectangle(point, rectangle, getStartEndRadius(rectangle));\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const radius = getStartEndRadius(rectangle);\n const center = getBoundCenterOfRoundRectangle(rectangle, radius, connectionPoint);\n if (center) {\n const point = [connectionPoint[0] - center[0], -(connectionPoint[1] - center[1])];\n const a = radius;\n const b = radius;\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n return getVectorFromPointAndSlope(point[0], point[1], slope);\n }\n return null;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n\nexport const getStartEndRadius = (rectangle: RectangleClient) => {\n return Math.min(rectangle.width / 2, rectangle.height / 2);\n};\n\nexport function getNearestPointBetweenPointAndRoundRectangle(point: Point, rectangle: RectangleClient, radius: number) {\n let result: Point | null = null;\n let boundCenter: Point | null = getBoundCenterOfRoundRectangle(rectangle, radius, point);\n if (boundCenter) {\n result = getNearestPointBetweenPointAndEllipse(point, boundCenter, radius, radius);\n } else {\n const cornerPoints = RectangleClient.getCornerPoints(rectangle);\n result = getNearestPointBetweenPointAndSegments(point, cornerPoints);\n }\n return result;\n}\n\nexport function getBoundCenterOfRoundRectangle(rectangle: RectangleClient, radius: number, point: Point) {\n const { x, y, width, height } = rectangle;\n let center: Point | null = null;\n const inLeftTop = point[0] >= x && point[0] <= x + radius && point[1] >= y && point[1] <= y + radius;\n if (inLeftTop) {\n center = [x + radius, y + radius];\n }\n const inLeftBottom = point[0] >= x && point[0] <= x + radius && point[1] >= y + height - radius && point[1] <= y + height;\n if (inLeftBottom) {\n center = [x + radius, y + height - radius];\n }\n const inRightTop = point[0] >= x + width - radius && point[0] <= x + width && point[1] >= y && point[1] <= y + radius;\n if (inRightTop) {\n center = [x + width - radius, y + radius];\n }\n const inRightBottom =\n point[0] >= x + width - radius && point[0] <= x + width && point[1] >= y + height - radius && point[1] <= y + height;\n if (inRightBottom) {\n center = [x + width - radius, y + height - radius];\n }\n return center;\n}\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils/style/stroke';\n\nexport const getManualInputPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const ManualInputEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getManualInputPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getManualInputPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + elementRectangle.height / 4 + ((elementRectangle.height * 3) / 4 - height) / 2\n };\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getPreparationPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 6, rectangle.y],\n [rectangle.x + (rectangle.width * 5) / 6, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 5) / 6, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 6, rectangle.y + rectangle.height]\n ];\n};\n\nexport const PreparationEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPreparationPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 2) / 3;\n rectangle.x += width / 6;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\n\nexport const getManualLoopPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + (rectangle.width * 7) / 8, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 8, rectangle.y + rectangle.height]\n ];\n};\nexport const ManualLoopEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getManualLoopPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getManualLoopPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\n\nexport const getMergePoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height]\n ];\n};\n\nexport const MergeEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getMergePoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getMergePoints(rectangle);\n const lineCenterPoints = getCenterPointsOnPolygon(cornerPoints);\n return [...lineCenterPoints, ...cornerPoints];\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 2) / 3;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + ((elementRectangle.height * 2) / 3 - height) / 2\n };\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getNearestPointBetweenPointAndEllipse } from '../basic-shapes/ellipse';\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} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getNearestPointBetweenPointAndEllipse } from '../basic-shapes/ellipse';\nimport { getTextRectangle } from '../../utils';\n\nexport const StoredDataEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x + rectangle.width / 10} ${rectangle.y} L${rectangle.x + rectangle.width} ${rectangle.y} A ${rectangle.width /\n 10} ${rectangle.height / 2}, 0, 0, 0,${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height} L${rectangle.x +\n rectangle.width / 10} ${rectangle.y + rectangle.height}A ${rectangle.width / 10} ${rectangle.height /\n 2}, 0, 0, 1,${rectangle.x + rectangle.width / 10} ${rectangle.y}`,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n //split shape to rectangle and a half ellipse\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n const isInRectangle = RectangleClient.isHit(\n {\n ...rectangle,\n x: rectangle.x + rectangle.width / 10,\n width: (rectangle.width * 9) / 10\n },\n rangeRectangle\n );\n\n const isInFrontEllipse = isPointInEllipse(\n point,\n [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\n\n const notInBackEllipse = !isPointInEllipse(\n point,\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\n return (isInRectangle && notInBackEllipse) || isInFrontEllipse;\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[0] < rectangle.x + rectangle.width / 10) {\n const centerPoint = [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 10, rectangle.height / 2);\n if (nearestPoint[0] > centerPoint[0]) {\n nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n }\n return nearestPoint;\n }\n if (nearestPoint[0] > rectangle.x + (rectangle.width * 9) / 10) {\n const centerPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 10, rectangle.height / 2);\n if (nearestPoint[0] > centerPoint[0]) {\n nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n }\n return nearestPoint;\n }\n return nearestPoint;\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n let centerPoint = [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2];\n let a = rectangle.width / 10;\n let b = rectangle.height / 2;\n const isBackEllipse = connectionPoint[0] > rectangle.x + (rectangle.width * 9) / 10 && connectionPoint[1] > rectangle.y;\n if (isBackEllipse) {\n centerPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2];\n }\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return isBackEllipse ? (vector.map(num => -num) as Vector) : vector;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + (rectangle.width * 9) / 10, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n};\n","import { BasicShapes, FlowchartSymbols, GeometryShapes, ShapeEngine } 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 { RectangleEngine } from './basic-shapes/rectangle';\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';\n\nexport const ShapeEngineMap: Record<GeometryShapes, ShapeEngine> = {\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 [FlowchartSymbols.process]: RectangleEngine,\n [FlowchartSymbols.decision]: DiamondEngine,\n [FlowchartSymbols.connector]: EllipseEngine,\n [FlowchartSymbols.data]: ParallelogramEngine,\n [FlowchartSymbols.terminal]: TerminalEngine,\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};\n\nexport const getEngine = (shape: GeometryShapes) => {\n return ShapeEngineMap[shape];\n};\n","import {\n ACTIVE_STROKE_WIDTH,\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n Point,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n SELECTION_FILL_COLOR,\n ThemeColorMode,\n Transforms,\n Vector,\n addSelectedElement,\n clearSelectedElement,\n createG,\n drawCircle,\n idCreator\n} from '@plait/core';\nimport { GeometryShapes, BasicShapes, PlaitGeometry, FlowchartSymbols } from '../interfaces/geometry';\nimport { Alignment, CustomText, DEFAULT_FONT_SIZE, buildText, getTextSize } from '@plait/text';\nimport { Element } from 'slate';\nimport {\n DefaultBasicShapeProperty,\n DefaultFlowchartPropertyMap,\n DefaultTextProperty,\n DrawPointerType,\n DrawThemeColors,\n ShapeDefaultSpace,\n getFlowchartPointers\n} from '../constants';\nimport { RESIZE_HANDLE_DIAMETER } from '@plait/common';\nimport { getStrokeWidthByElement } from './style/stroke';\nimport { Options } from 'roughjs/bin/core';\nimport { getEngine } from '../engines';\nimport { getShape } from './shape';\nimport { createLineElement } from './line/line-basic';\nimport { LineMarkerType, LineShape, PlaitShape } from '../interfaces';\nimport { DefaultLineStyle } from '../constants/line';\nimport { getMemorizedLatestByPointer, memorizeLatestShape } from './memorize';\n\nexport type GeometryStyleOptions = Pick<PlaitGeometry, 'fill' | 'strokeColor' | 'strokeWidth'>;\n\nexport type TextProperties = Partial<CustomText> & { align?: Alignment; textHeight?: number };\n\nexport const createGeometryElement = (\n shape: GeometryShapes,\n points: [Point, Point],\n text: string | Element,\n options: GeometryStyleOptions = {},\n textProperties: TextProperties = {}\n): PlaitGeometry => {\n let textOptions = {};\n let alignment: undefined | Alignment = Alignment.center;\n let textHeight = DefaultTextProperty.height;\n if (shape === BasicShapes.text) {\n textOptions = { autoSize: true };\n alignment = undefined;\n }\n textProperties = { ...textProperties };\n textProperties?.align && (alignment = textProperties?.align);\n textProperties?.textHeight && (textHeight = textProperties?.textHeight);\n delete textProperties?.align;\n delete textProperties?.textHeight;\n return {\n id: idCreator(),\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n textHeight,\n text: buildText(text, alignment, textProperties),\n points,\n ...textOptions,\n ...options\n };\n};\n\nexport const getTextRectangle = (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n};\n\nexport const drawBoundMask = (board: PlaitBoard, element: PlaitGeometry) => {\n const G = createG();\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const activeRectangle = RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH);\n const shape = getShape(element);\n const maskG = drawGeometry(board, activeRectangle, shape, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n G.appendChild(maskG);\n const connectorPoints = getEngine(shape).getConnectorPoints(activeRectangle);\n connectorPoints.forEach(point => {\n const circleG = drawCircle(PlaitBoard.getRoughSVG(board), point, 6, {\n stroke: '#999999',\n strokeWidth: 1,\n fill: '#FFF',\n fillStyle: 'solid'\n });\n G.appendChild(circleG);\n });\n\n return G;\n};\n\nexport const drawGeometry = (board: PlaitBoard, outerRectangle: RectangleClient, shape: GeometryShapes, options: Options) => {\n return getEngine(shape).draw(board, outerRectangle, options);\n};\n\nexport const getNearestPoint = (element: PlaitShape, point: Point) => {\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const shape = getShape(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 createDefaultFlowchart = (point: Point) => {\n const decisionProperty = getDefaultFlowchartProperty(FlowchartSymbols.decision);\n const processProperty = getDefaultFlowchartProperty(FlowchartSymbols.process);\n const terminalProperty = getDefaultFlowchartProperty(FlowchartSymbols.terminal);\n\n const options = {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n };\n\n const lineOptions = {\n strokeWidth: DefaultLineStyle.strokeWidth\n };\n const startElement = createGeometryElement(\n FlowchartSymbols.terminal,\n getDefaultGeometryPoints(FlowchartSymbols.terminal, point),\n '开始',\n options\n );\n\n const processPoint1: Point = [point[0], point[1] + terminalProperty.height / 2 + 55 + processProperty.height / 2];\n const processElement1 = createGeometryElement(\n FlowchartSymbols.process,\n getDefaultGeometryPoints(FlowchartSymbols.process, processPoint1),\n '过程',\n options\n );\n\n const decisionPoint: Point = [processPoint1[0], processPoint1[1] + processProperty.height / 2 + 55 + decisionProperty.height / 2];\n const decisionElement = createGeometryElement(\n FlowchartSymbols.decision,\n getDefaultGeometryPoints(FlowchartSymbols.decision, decisionPoint),\n '过程',\n options\n );\n\n const processPoint2: Point = [decisionPoint[0] + decisionProperty.width / 2 + 75 + processProperty.width / 2, decisionPoint[1]];\n const processElement2 = createGeometryElement(\n FlowchartSymbols.process,\n getDefaultGeometryPoints(FlowchartSymbols.process, processPoint2),\n '过程',\n options\n );\n\n const endPoint: Point = [decisionPoint[0], decisionPoint[1] + decisionProperty.height / 2 + 95 + terminalProperty.height / 2];\n const endElement = createGeometryElement(\n FlowchartSymbols.terminal,\n getDefaultGeometryPoints(FlowchartSymbols.terminal, endPoint),\n '结束',\n options\n );\n\n const line1 = createLineElement(\n LineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: LineMarkerType.none, connection: [0.5, 1], boundId: startElement.id },\n { marker: LineMarkerType.arrow, connection: [0.5, 0], boundId: processElement1.id },\n [],\n lineOptions\n );\n\n const line2 = createLineElement(\n LineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: LineMarkerType.none, connection: [0.5, 1], boundId: processElement1.id },\n { marker: LineMarkerType.arrow, connection: [0.5, 0], boundId: decisionElement.id },\n [],\n lineOptions\n );\n\n const line3 = createLineElement(\n LineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: LineMarkerType.none, connection: [0.5, 1], boundId: decisionElement.id },\n { marker: LineMarkerType.arrow, connection: [0.5, 0], boundId: endElement.id },\n [\n {\n text: buildText('是'),\n position: 0.5,\n width: 14,\n height: 20\n }\n ],\n lineOptions\n );\n\n const line4 = createLineElement(\n LineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: LineMarkerType.none, connection: [1, 0.5], boundId: decisionElement.id },\n { marker: LineMarkerType.arrow, connection: [0, 0.5], boundId: processElement2.id },\n [\n {\n text: buildText('否'),\n position: 0.5,\n width: 14,\n height: 20\n }\n ],\n lineOptions\n );\n\n const line5 = createLineElement(\n LineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: LineMarkerType.none, connection: [0.5, 1], boundId: processElement2.id },\n { marker: LineMarkerType.arrow, connection: [1, 0.5], boundId: endElement.id },\n [],\n lineOptions\n );\n\n return [startElement, processElement1, decisionElement, processElement2, endElement, line1, line2, line3, line4, line5];\n};\n\nexport const getAutoCompletePoints = (element: PlaitShape) => {\n const AutoCompleteMargin = (12 + RESIZE_HANDLE_DIAMETER / 2) * 2;\n let rectangle = RectangleClient.getRectangleByPoints(element.points);\n rectangle = RectangleClient.inflate(rectangle, AutoCompleteMargin);\n return RectangleClient.getEdgeCenterPoints(rectangle);\n};\n\nexport const getHitIndexOfAutoCompletePoint = (movingPoint: Point, points: Point[]) => {\n return points.findIndex(point => {\n const movingRectangle = RectangleClient.getRectangleByPoints([movingPoint]);\n let rectangle = RectangleClient.getRectangleByPoints([point]);\n rectangle = RectangleClient.inflate(rectangle, RESIZE_HANDLE_DIAMETER);\n return RectangleClient.isHit(movingRectangle, rectangle);\n });\n};\n\nexport const getDrawDefaultStrokeColor = (theme: ThemeColorMode) => {\n return DrawThemeColors[theme].strokeColor;\n};\n\nexport const getFlowchartDefaultFill = (theme: ThemeColorMode) => {\n return DrawThemeColors[theme].fill;\n};\n\nexport const getTextShapeProperty = (board: PlaitBoard, text: string | Element = DefaultTextProperty.text, fontSize?: number | string) => {\n fontSize = fontSize ? Number(fontSize) : DEFAULT_FONT_SIZE;\n const textSize = getTextSize(board, text, Infinity, { fontSize });\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(\n RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height)\n );\n};\n\nexport const getDefaultGeometryProperty = (pointer: DrawPointerType) => {\n const isFlowChart = getFlowchartPointers().includes(pointer);\n if (isFlowChart) {\n return getDefaultFlowchartProperty(pointer as FlowchartSymbols);\n } else {\n return DefaultBasicShapeProperty;\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(\n RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height)\n );\n};\n\nexport const insertElement = (board: PlaitBoard, element: PlaitGeometry) => {\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 createTextElement = (\n board: PlaitBoard,\n points: [Point, Point],\n text: string | Element = DefaultTextProperty.text,\n textHeight?: number\n) => {\n const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n textHeight = textHeight ? textHeight : RectangleClient.getRectangleByPoints(points).height;\n return createGeometryElement(BasicShapes.text, points, text, memorizedLatest.geometryProperties as GeometryStyleOptions, {\n ...memorizedLatest.textProperties,\n textHeight\n });\n};\n\nexport const createDefaultGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n const textHeight = getTextShapeProperty(board, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']).height;\n return createGeometryElement(\n shape,\n points,\n '',\n {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth,\n ...(memorizedLatest.geometryProperties as GeometryStyleOptions)\n },\n { ...memorizedLatest.textProperties, textHeight }\n );\n};\n","import { PlaitDrawElement, PlaitGeometry, PlaitLine, StrokeStyle } from '../../interfaces';\nimport { DefaultGeometryStyle } from '../../constants';\nimport { PlaitBoard } from '@plait/core';\nimport { getDrawDefaultStrokeColor, getFlowchartDefaultFill } from '../geometry';\n\nexport const getStrokeWidthByElement = (element: PlaitGeometry | PlaitLine) => {\n if (PlaitDrawElement.isText(element)) {\n return 0;\n }\n const strokeWidth = element.strokeWidth || DefaultGeometryStyle.strokeWidth;\n return strokeWidth;\n};\n\nexport const getStrokeColorByElement = (board: PlaitBoard, element: PlaitGeometry | PlaitLine) => {\n const defaultColor = getDrawDefaultStrokeColor(board.theme.themeColorMode);\n const strokeColor = element.strokeColor || defaultColor;\n return strokeColor;\n};\n\nexport const getFillByElement = (board: PlaitBoard, element: PlaitGeometry | PlaitLine) => {\n const defaultFill = PlaitDrawElement.isFlowchart(element)\n ? getFlowchartDefaultFill(board.theme.themeColorMode)\n : DefaultGeometryStyle.fill;\n const fill = element.fill || defaultFill;\n return fill;\n};\n\nexport const getLineDashByElement = (element: PlaitGeometry | PlaitLine) => {\n return element.strokeStyle === 'dashed' ? [8, 8 + getStrokeWidthByElement(element)] : undefined;\n};\n\nexport const getStrokeStyleByElement = (element: PlaitGeometry | PlaitLine) => {\n return element.strokeStyle || StrokeStyle.solid;\n};\n","import { Point, PlaitBoard, getElementById, RectangleClient, PointOfRectangle, Direction, Vector } from '@plait/core';\nimport {\n getDirectionFactor,\n rotateVectorAnti90,\n getDirectionByVector,\n getOppositeDirection,\n getDirectionByPointOfRectangle,\n getSourceAndTargetOuterRectangle,\n getNextPoint\n} from '@plait/common';\nimport { BasicShapes, LineHandleKey, LineHandleRef, LineHandleRefPair, LineMarkerType, PlaitGeometry, PlaitLine } from '../../interfaces';\nimport { getStrokeWidthByElement } from '../style/stroke';\nimport { getEngine } from '../../engines';\nimport { getShape } from '../shape';\nimport { getSourceAndTargetRectangle } from './elbow';\n\nexport const getLineHandleRefPair = (board: PlaitBoard, element: PlaitLine): LineHandleRefPair => {\n const strokeWidth = getStrokeWidthByElement(element);\n const sourceBoundElement = element.source.boundId ? getElementById<PlaitGeometry>(board, element.source.boundId) : undefined;\n const targetBoundElement = element.target.boundId ? getElementById<PlaitGeometry>(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: LineHandleRef = {\n key: LineHandleKey.source,\n point: sourcePoint,\n direction: sourceDirection,\n vector: [sourceFactor.x, sourceFactor.y]\n };\n const targetHandleRef: LineHandleRef = {\n key: LineHandleKey.target,\n point: targetPoint,\n direction: targetDirection,\n vector: [targetFactor.x, targetFactor.y]\n };\n if (sourceBoundElement) {\n const connectionOffset = PlaitLine.isSourceMarkOrTargetMark(element, LineMarkerType.none, LineHandleKey.source) ? 0 : strokeWidth;\n const sourceVector = getVectorByConnection(sourceBoundElement, element.source.connection!);\n const direction = getDirectionByVector(sourceVector);\n sourceDirection = direction ? direction : sourceDirection;\n sourcePoint = getConnectionPoint(sourceBoundElement, element.source.connection!, sourceDirection, connectionOffset);\n sourceHandleRef.boundElement = sourceBoundElement;\n sourceHandleRef.direction = sourceDirection;\n sourceHandleRef.point = sourcePoint;\n sourceHandleRef.vector = sourceVector;\n }\n if (targetBoundElement) {\n const connectionOffset = PlaitLine.isSourceMarkOrTargetMark(element, LineMarkerType.none, LineHandleKey.target) ? 0 : strokeWidth;\n const targetVector = getVectorByConnection(targetBoundElement, element.target.connection!);\n const direction = getDirectionByVector(targetVector);\n targetDirection = direction ? direction : targetDirection;\n targetPoint = getConnectionPoint(targetBoundElement, element.target.connection!, targetDirection, connectionOffset);\n targetHandleRef.boundElement = targetBoundElement;\n targetHandleRef.direction = targetDirection;\n targetHandleRef.point = targetPoint;\n targetHandleRef.vector = targetVector;\n }\n return { source: sourceHandleRef, target: targetHandleRef };\n};\n\nexport const getConnectionPoint = (geometry: PlaitGeometry, 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: PlaitGeometry, connection: PointOfRectangle): Vector => {\n const rectangle = RectangleClient.getRectangleByPoints(boundElement.points);\n const shape = getShape(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: PlaitLine, handleRefPair?: LineHandleRefPair) => {\n handleRefPair = handleRefPair ?? getLineHandleRefPair(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","import { Direction, PlaitBoard, PlaitElement, Point, PointOfRectangle, Vector, getElementById } from '@plait/core';\nimport { Element } from 'slate';\nimport { PlaitGeometry } from './geometry';\nimport { StrokeStyle } from './element';\nimport { PlaitImage } from '../interfaces/image';\nimport { getConnectionPoint } from '../utils/line/line-common';\n\nexport enum LineMarkerType {\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 LineShape {\n straight = 'straight',\n curve = 'curve',\n elbow = 'elbow'\n}\n\nexport enum LineHandleKey {\n source = 'source',\n target = 'target'\n}\n\nexport interface LineText {\n text: Element;\n // Percentage of positioning based on line length\n position: number;\n width: number;\n height: number;\n}\n\nexport interface LineHandle {\n // The id of the bounded element\n boundId?: string;\n connection?: PointOfRectangle;\n marker: LineMarkerType;\n}\n\nexport interface LineHandleRef {\n key: LineHandleKey;\n direction: Direction;\n point: PointOfRectangle;\n vector: Vector;\n boundElement?: PlaitGeometry;\n}\n\nexport interface LineHandleRefPair {\n source: LineHandleRef;\n target: LineHandleRef;\n}\n\nexport interface PlaitLine extends PlaitElement {\n type: 'line';\n shape: LineShape;\n points: Point[];\n\n source: LineHandle;\n target: LineHandle;\n\n texts: LineText[];\n\n // node style attributes\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n\n opacity: number;\n}\n\nexport interface PlaitStraightLine extends PlaitLine {\n shape: LineShape.straight;\n}\n\nexport interface PlaitCurveLine extends PlaitLine {\n shape: LineShape.curve;\n}\n\nexport interface PlaitElbowLine extends PlaitLine {\n shape: LineShape.elbow;\n}\n\nexport const PlaitLine = {\n isSourceMarkOrTargetMark(line: PlaitLine, markType: LineMarkerType, handleKey: LineHandleKey) {\n if (handleKey === LineHandleKey.source) {\n return line.source.marker === markType;\n } else {\n return line.target.marker === markType;\n }\n },\n isSourceMark(line: PlaitLine, markType: LineMarkerType) {\n return PlaitLine.isSourceMarkOrTargetMark(line, markType, LineHandleKey.source);\n },\n isTargetMark(line: PlaitLine, markType: LineMarkerType) {\n return PlaitLine.isSourceMarkOrTargetMark(line, markType, LineHandleKey.target);\n },\n isBoundElementOfSource(line: PlaitLine, element: PlaitGeometry | PlaitImage) {\n return line.source.boundId === element.id;\n },\n isBoundElementOfTarget(line: PlaitLine, element: PlaitGeometry | PlaitImage) {\n return line.target.boundId === element.id;\n },\n getPoints(board: PlaitBoard, line: PlaitLine) {\n let sourcePoint = line.source.boundId\n ? getConnectionPoint(getElementById<PlaitGeometry>(board, line.source.boundId)!, line.source.connection!)\n : line.points[0];\n let targetPoint = line.target.boundId\n ? getConnectionPoint(getElementById<PlaitGeometry>(board, line.target.boundId)!, line.target.connection!)\n : line.points[line.points.length - 1];\n const restPoints = line.points.length > 2 ? line.points.slice(1, line.points.length - 1) : [];\n return [sourcePoint, ...restPoints, targetPoint];\n }\n};\n","export enum StrokeStyle {\n solid = 'solid',\n dashed = 'dashed'\n}\n\nexport enum MemorizeKey {\n basicShape = 'basicShape',\n flowchart = 'flowchart',\n text = 'text',\n line = 'line'\n}\n","import { BasicShapes, FlowchartSymbols, PlaitGeometry } from './geometry';\nimport { PlaitImage } from './image';\nimport { PlaitLine } from './line';\nimport { PlaitText } from './text';\n\nexport * from './line';\nexport * from './geometry';\nexport * from './text';\nexport * from './element';\n\nexport type PlaitDrawElement = PlaitGeometry | PlaitLine | PlaitImage;\n\nexport type PlaitShape = PlaitGeometry | PlaitImage;\n\nexport const PlaitDrawElement = {\n isGeometry: (value: any): value is PlaitGeometry => {\n return value.type === 'geometry';\n },\n isLine: (value: any): value is PlaitLine => {\n return value.type === 'line';\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 isDrawElement: (value: any): value is PlaitDrawElement => {\n if (PlaitDrawElement.isGeometry(value) || PlaitDrawElement.isLine(value) || PlaitDrawElement.isImage(value)) {\n return true;\n } else {\n return false;\n }\n },\n isShape: (value: any): value is PlaitShape => {\n return PlaitDrawElement.isImage(value) || PlaitDrawElement.isGeometry(value);\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};\n","import { BasicShapes, PlaitGeometry } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { getFillByElement, getLineDashByElement, getStrokeColorByElement, getStrokeWidthByElement } from '../utils/style/stroke';\nimport { drawGeometry } from '../utils';\nimport { RectangleClient } from '@plait/core';\n\nexport interface ShapeData {}\n\nexport class GeometryShapeGenerator extends Generator<PlaitGeometry, ShapeData> {\n canDraw(element: PlaitGeometry, data: ShapeData): boolean {\n return true;\n }\n\n draw(element: PlaitGeometry, data: ShapeData) {\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const shape = element.shape;\n if (shape === BasicShapes.text) {\n return;\n }\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(this.board, element);\n const fill = getFillByElement(this.board, element);\n const strokeLineDash = getLineDashByElement(element);\n return drawGeometry(this.board, RectangleClient.inflate(rectangle, -strokeWidth), shape, {\n stroke: strokeColor,\n strokeWidth,\n fill,\n strokeLineDash\n });\n }\n}\n","import { Path, PlaitBoard, PlaitElement, PointOfRectangle, Transforms, findElements } from '@plait/core';\nimport {\n LineHandle,\n LineHandleKey,\n LineMarkerType,\n LineShape,\n LineText,\n MemorizeKey,\n PlaitDrawElement,\n PlaitGeometry,\n PlaitLine\n} from '../interfaces';\nimport { memorizeLatest } from '@plait/common';\nimport { getSelectedLineElements } from '../utils/selected';\nimport { getConnectionByNearestPoint, getLinePoints } from '../utils/line/line-basic';\n\nexport const resizeLine = (board: PlaitBoard, options: Partial<PlaitLine>, path: Path) => {\n Transforms.setNode(board, options, path);\n};\n\nexport const setLineTexts = (board: PlaitBoard, element: PlaitLine, texts: LineText[]) => {\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, { texts }, path);\n};\n\nexport const removeLineText = (board: PlaitBoard, element: PlaitLine, 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 setLineMark = (board: PlaitBoard, handleKey: LineHandleKey, marker: LineMarkerType) => {\n memorizeLatest(MemorizeKey.line, handleKey, marker);\n const selectedElements = getSelectedLineElements(board);\n selectedElements.forEach((element: PlaitLine) => {\n const path = PlaitBoard.findPath(board, element);\n let handle = handleKey === LineHandleKey.source ? element.source : element.target;\n handle = { ...handle, marker };\n Transforms.setNode(board, { [handleKey]: handle }, path);\n });\n};\n\nexport const setLineShape = (board: PlaitBoard, newProperties: Partial<PlaitLine>) => {\n const elements = getSelectedLineElements(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 collectLineUpdatedRefsByGeometry = (\n board: PlaitBoard,\n geometry: PlaitGeometry,\n refs: { property: Partial<PlaitLine>; path: Path }[]\n) => {\n const lines = findElements(board, {\n match: (element: PlaitElement) => {\n if (PlaitDrawElement.isLine(element)) {\n return element.source.boundId === geometry.id || element.target.boundId === geometry.id;\n }\n return false;\n },\n recursion: element => true\n }) as PlaitLine[];\n if (lines.length) {\n lines.forEach(line => {\n const isSourceBound = line.source.boundId === geometry.id;\n const handle = isSourceBound ? 'source' : 'target';\n const object = { ...line[handle] };\n const linePoints = getLinePoints(board, line);\n const point = isSourceBound ? linePoints[0] : linePoints[linePoints.length - 1];\n object.connection = getConnectionByNearestPoint(board, point, geometry);\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\nexport const connectLineToGeometry = (board: PlaitBoard, lineElement: PlaitLine, handle: LineHandleKey, geometryElement: PlaitGeometry) => {\n const linePoints = PlaitLine.getPoints(board, lineElement);\n const point = handle === LineHandleKey.source ? linePoints[0] : linePoints[linePoints.length - 1];\n const connection: PointOfRectangle = getConnectionByNearestPoint(board, point, geometryElement);\n if (connection) {\n let source: LineHandle = lineElement.source;\n let target: LineHandle = lineElement.target;\n if (handle === LineHandleKey.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 resizeLine(board, { source, target }, path);\n }\n};\n","import { PlaitBoard, Transforms, Point, Path, PlaitNode, getSelectedElements, Vector, Direction, RectangleClient } from '@plait/core';\nimport { PlaitDrawElement, GeometryShapes, PlaitText, PlaitLine, FlowchartSymbols, BasicShapes } from '../interfaces';\nimport { createDefaultGeometry, createTextElement, getMemorizedLatestByPointer, getTextShapeProperty, insertElement } from '../utils';\nimport { Element } from 'slate';\nimport { getDirectionByVector, getPointByVector, normalizeShapePoints } from '@plait/common';\nimport { DrawTransforms } from '.';\nimport { collectLineUpdatedRefsByGeometry } from './line';\nimport { DefaultBasicShapeProperty, DefaultFlowchartPropertyMap } from '../constants';\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 insertGeometryByVector = (board: PlaitBoard, point: Point, shape: GeometryShapes, vector: Vector) => {\n const shapeProperty = DefaultFlowchartPropertyMap[shape as FlowchartSymbols] || DefaultBasicShapeProperty;\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 = getPointByVector(point, vector, offset);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(vectorPoint, shapeProperty.width, shapeProperty.height)\n );\n return insertGeometry(board, points, shape);\n }\n return null;\n};\n\nexport const insertText = (board: PlaitBoard, point: Point, text: string | Element) => {\n const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n const property = getTextShapeProperty(board, text, memorizedLatest.textProperties['font-size']);\n const points: [Point, Point] = [point, [point[0] + property.width, point[1] + property.height]];\n const newElement = createTextElement(board, points, text);\n insertElement(board, newElement);\n};\n\nexport const resizeGeometry = (board: PlaitBoard, points: [Point, Point], textHeight: number, path: Path) => {\n const normalizePoints = normalizeShapePoints(points);\n const element = PlaitNode.get(board, path);\n const newHeight = textHeight / board.viewport.zoom;\n const newProperties = { points: normalizePoints, textHeight: newHeight };\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<PlaitLine>; 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 collectLineUpdatedRefsByGeometry(board, { ...item, shape }, refs);\n }\n });\n if (refs.length) {\n refs.forEach(ref => {\n DrawTransforms.resizeLine(board, ref.property, ref.path);\n });\n }\n};\n","import { PlaitBoard, Point, Transforms } from '@plait/core';\nimport { Element } from 'slate';\nimport { PlaitGeometry, PlaitText } from '../interfaces';\nimport { ShapeDefaultSpace } from '../constants';\nimport { AlignEditor, Alignment } from '@plait/text';\nimport { getFirstTextEditor } from '@plait/common';\n\nconst normalizePoints = (board: PlaitBoard, element: PlaitGeometry, width: number, textHeight: number) => {\n let points = element.points;\n let autoSize = (element as PlaitText).autoSize;\n const defaultSpace = ShapeDefaultSpace.rectangleAndText;\n\n if (autoSize) {\n const editor = getFirstTextEditor(element);\n if (AlignEditor.isActive(editor, Alignment.right)) {\n points = [\n [points[1][0] - (width + defaultSpace * 2), points[0][1]],\n [points[1][0], points[0][1] + textHeight]\n ];\n } else if (AlignEditor.isActive(editor, Alignment.center)) {\n const oldWidth = Math.abs(points[0][0] - points[1][0]);\n const offset = (width - oldWidth) / 2;\n points = [\n [points[0][0] - offset - defaultSpace, points[0][1]],\n [points[1][0] + offset + defaultSpace, points[0][1] + textHeight]\n ];\n } else {\n points = [points[0], [points[0][0] + width + defaultSpace * 2, points[0][1] + textHeight]];\n }\n }\n\n return { points };\n};\n\nexport const setText = (board: PlaitBoard, element: PlaitGeometry, text: Element, width: number, textHeight: number) => {\n const newElement = {\n text,\n textHeight,\n ...normalizePoints(board, element, width, textHeight)\n };\n\n const path = board.children.findIndex(child => child === element);\n\n Transforms.setNode(board, newElement, [path]);\n};\n\nexport const setTextSize = (board: PlaitBoard, element: PlaitGeometry, textWidth: number, textHeight: number) => {\n if ((element as PlaitText).autoSize) {\n const newElement = {\n textHeight,\n ...normalizePoints(board, element, textWidth, textHeight)\n };\n const isPointsEqual =\n Point.isEquals(element.points[0], newElement.points[0]) && Point.isEquals(element.points[1], newElement.points[1]);\n const isTextHeightEqual = Math.round(textHeight) === Math.round(element.textHeight);\n if (!isPointsEqual || !isTextHeightEqual) {\n const path = board.children.findIndex(child => child === element);\n Transforms.setNode(board, newElement, [path]);\n }\n }\n};\n","import { CommonImageItem } from '@plait/common';\nimport { PlaitBoard, Point, Transforms, idCreator, toHostPoint, toViewBoxPoint } from '@plait/core';\n\nexport const insertImage = (board: PlaitBoard, imageItem: CommonImageItem, startPoint?: Point) => {\n const { width, height, url } = imageItem;\n const viewportWidth = PlaitBoard.getComponent(board).nativeElement.clientWidth;\n const viewportHeight = PlaitBoard.getComponent(board).nativeElement.clientHeight;\n const point = toViewBoxPoint(board, toHostPoint(board, viewportWidth / 2, viewportHeight / 2));\n const points: Point[] = startPoint\n ? [startPoint, [startPoint[0] + width, startPoint[1] + height]]\n : [\n [point[0] - width / 2, point[1] - height / 2],\n [point[0] + width / 2, point[1] + height / 2]\n ];\n const imageElement = {\n id: idCreator(),\n type: 'image',\n points,\n url\n };\n Transforms.insertNode(board, imageElement, [board.children.length]);\n Transforms.addSelectionWithTemporaryElements(board, [imageElement]);\n};\n","import { insertText, insertGeometry, resizeGeometry, switchGeometryShape, insertGeometryByVector } from './geometry';\nimport { setText, setTextSize } from './geometry-text';\nimport { insertImage } from './image';\nimport { connectLineToGeometry, removeLineText, resizeLine, setLineMark, setLineShape, setLineTexts } from './line';\n\nexport const DrawTransforms = {\n setText,\n insertGeometry,\n resizeGeometry,\n insertText,\n setTextSize,\n resizeLine,\n setLineTexts,\n removeLineText,\n setLineMark,\n setLineShape,\n insertImage,\n switchGeometryShape,\n connectLineToGeometry,\n insertGeometryByVector\n};\n","import { PlaitBoard, RgbaToHEX, createG, drawCircle, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { PlaitGeometry, PlaitShape } 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 LineAutoCompleteGenerator extends Generator<PlaitShape, ActiveGeneratorExtraData> {\n autoCompleteG!: SVGGElement;\n hoverElement: SVGGElement | null = null;\n\n constructor(public board: PlaitBoard) {\n super(board);\n }\n\n canDraw(element: PlaitShape, 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: PlaitGeometry, data: ActiveGeneratorExtraData): SVGGElement {\n this.autoCompleteG = createG();\n const middlePoints = getAutoCompletePoints(element);\n middlePoints.forEach((point, index) => {\n const circle = drawCircle(PlaitBoard.getRoughSVG(this.board), point, LINE_AUTO_COMPLETE_DIAMETER, {\n stroke: 'none',\n fill: RgbaToHEX(PRIMARY_COLOR, LINE_AUTO_COMPLETE_OPACITY),\n fillStyle: 'solid'\n });\n circle.classList.add(`line-auto-complete-${index}`);\n this.autoCompleteG.appendChild(circle);\n });\n return this.autoCompleteG;\n }\n\n removeAutoCompleteG(index: number) {\n this.hoverElement = this.autoCompleteG.querySelector(`.line-auto-complete-${index}`);\n this.hoverElement!.style.visibility = 'hidden';\n }\n\n recoverAutoCompleteG() {\n if (this.hoverElement) {\n this.hoverElement.style.visibility = 'visible';\n this.hoverElement = null;\n }\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';\nimport {\n PlaitBoard,\n PlaitPluginElementContext,\n OnContextChanged,\n isSelectionMoving,\n getSelectedElements,\n PlaitOptionsBoard,\n ACTIVE_STROKE_WIDTH,\n RectangleClient\n} from '@plait/core';\nimport { Subject } from 'rxjs';\nimport { PlaitGeometry } from './interfaces/geometry';\nimport { GeometryShapeGenerator } from './generators/geometry-shape.generator';\nimport { TextManage, TextManageRef } from '@plait/text';\nimport { DrawTransforms } from './transforms';\nimport { getTextRectangle } from './utils/geometry';\nimport { ActiveGenerator, WithTextPluginKey, WithTextOptions, CommonPluginElement } from '@plait/common';\nimport { GeometryThreshold } from './constants/geometry';\nimport { PlaitDrawElement, PlaitText } from './interfaces';\nimport { getEngine } from './engines';\nimport { LineAutoCompleteGenerator } from './generators/line-auto-complete.generator';\nimport { memorizeLatestText } from './utils';\n\n@Component({\n selector: 'plait-draw-geometry',\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class GeometryComponent extends CommonPluginElement<PlaitGeometry, PlaitBoard>\n implements OnInit, OnDestroy, OnContextChanged<PlaitGeometry, PlaitBoard> {\n destroy$ = new Subject<void>();\n\n activeGenerator!: ActiveGenerator<PlaitGeometry>;\n\n lineAutoCompleteGenerator!: LineAutoCompleteGenerator;\n\n shapeGenerator!: GeometryShapeGenerator;\n\n get textManage() {\n return this.getTextManages()[0];\n }\n\n constructor(private viewContainerRef: ViewContainerRef, protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n initializeGenerator() {\n this.activeGenerator = new ActiveGenerator<PlaitGeometry>(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: PlaitGeometry) => {\n return RectangleClient.getRectangleByPoints(element.points);\n },\n hasResizeHandle: () => {\n const selectedElements = getSelectedElements(this.board);\n if (PlaitBoard.hasBeenTextEditing(this.board) && PlaitDrawElement.isText(this.element)) {\n return false;\n }\n return selectedElements.length === 1 && !isSelectionMoving(this.board);\n }\n });\n this.lineAutoCompleteGenerator = new LineAutoCompleteGenerator(this.board);\n this.shapeGenerator = new GeometryShapeGenerator(this.board);\n this.initializeTextManage();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.initializeGenerator();\n this.shapeGenerator.processDrawing(this.element, this.g);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n this.drawText();\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitGeometry, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitGeometry, PlaitBoard>\n ) {\n const isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n if (value.element !== previous.element || isChangeTheme) {\n this.shapeGenerator.processDrawing(this.element, this.g);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n this.updateText();\n } else {\n const hasSameSelected = value.selected === previous.selected;\n const hasSameHandleState = this.activeGenerator.options.hasResizeHandle() === this.activeGenerator.hasResizeHandle;\n if (!hasSameSelected || !hasSameHandleState) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n }\n }\n }\n\n editText() {\n this.textManage.edit();\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n }\n\n drawText() {\n this.textManage.draw(this.element.text);\n this.g.append(this.textManage.g);\n }\n\n updateText() {\n this.textManage.updateText(this.element.text);\n this.textManage.updateRectangle();\n }\n\n initializeTextManage() {\n const plugins = ((this.board as PlaitOptionsBoard).getPluginOptions<WithTextOptions>(WithTextPluginKey) || {}).textPlugins;\n\n const manage = new TextManage(this.board, this.viewContainerRef, {\n getRectangle: () => {\n const getRectangle = getEngine(this.element.shape).getTextRectangle;\n if (getRectangle) {\n return getRectangle(this.element);\n }\n return getTextRectangle(this.element);\n },\n onValueChangeHandle: (textManageRef: TextManageRef) => {\n const height = textManageRef.height / this.board.viewport.zoom;\n const width = textManageRef.width / this.board.viewport.zoom;\n if (textManageRef.newValue) {\n DrawTransforms.setText(this.board, this.element, textManageRef.newValue, width, height);\n } else {\n DrawTransforms.setTextSize(this.board, this.element, width, height);\n }\n textManageRef.operations && memorizeLatestText(this.element, textManageRef.operations);\n },\n getMaxWidth: () => {\n let width = getTextRectangle(this.element).width;\n const getRectangle = getEngine(this.element.shape).getTextRectangle;\n if (getRectangle) {\n width = getRectangle(this.element).width;\n }\n return (this.element as PlaitText)?.autoSize ? GeometryThreshold.defaultTextMaxWidth : width;\n },\n textPlugins: plugins\n });\n this.initializeTextManages([manage]);\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.textManage.destroy();\n this.destroy$.next();\n this.destroy$.complete();\n this.activeGenerator.destroy();\n this.lineAutoCompleteGenerator.destroy();\n }\n}\n","import { Point, createG, drawRectangle, getSelectedElements } from '@plait/core';\nimport { LineShape, PlaitLine } from '../interfaces';\nimport { Generator, PRIMARY_COLOR, drawFillPrimaryHandle, drawPrimaryHandle } from '@plait/common';\nimport { getMiddlePoints } from '../utils/line/line-basic';\nimport { DefaultGeometryActiveStyle } from '../constants';\nimport { getNextRenderPoints } from '../utils/line/elbow';\nimport { isUpdatedHandleIndex } from '../utils/line';\nimport { getHitPointIndex } from '../utils/position/line';\n\nexport interface ActiveData {\n selected: boolean;\n linePoints: Point[];\n}\n\nexport class LineActiveGenerator extends Generator<PlaitLine, ActiveData> {\n onlySelectedCurrentLine = false;\n\n canDraw(element: PlaitLine, data: ActiveData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: PlaitLine, data: ActiveData): SVGGElement {\n const activeG = createG();\n const selectedElements = getSelectedElements(this.board);\n this.onlySelectedCurrentLine = selectedElements.length === 1;\n if (this.onlySelectedCurrentLine) {\n activeG.classList.add('active');\n activeG.classList.add('line-handle');\n const points = PlaitLine.getPoints(this.board, element);\n let updatePoints = [...points];\n let elbowNextRenderPoints: Point[] = [];\n if (element.shape === LineShape.elbow) {\n updatePoints = points.slice(0, 1).concat(points.slice(-1));\n elbowNextRenderPoints = getNextRenderPoints(this.board, element, data.linePoints);\n }\n updatePoints.forEach(point => {\n const updateHandle = drawPrimaryHandle(this.board, point);\n activeG.appendChild(updateHandle);\n });\n const middlePoints = getMiddlePoints(this.board, element);\n for (let i = 0; i < middlePoints.length; i++) {\n const point = middlePoints[i];\n if (element.shape === LineShape.elbow && elbowNextRenderPoints.length) {\n const handleIndex = getHitPointIndex(middlePoints, point);\n const isUpdateHandleIndex = isUpdatedHandleIndex(this.board, element, [...points], elbowNextRenderPoints, handleIndex);\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 } else {\n const activeRectangle = this.board.getRectangle(element);\n if (activeRectangle) {\n let opacity = '0.5';\n if (activeRectangle.height === 0 || activeRectangle.width === 0) {\n opacity = '0.8';\n }\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: DefaultGeometryActiveStyle.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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';\nimport { PlaitBoard, PlaitPluginElementContext, OnContextChanged, getElementById, isSelectionMoving } from '@plait/core';\nimport { Subject } from 'rxjs';\nimport { LineText, PlaitGeometry, PlaitLine } from './interfaces';\nimport { TextManage, TextManageRef } from '@plait/text';\nimport { LineShapeGenerator } from './generators/line.generator';\nimport { LineActiveGenerator } from './generators/line-active.generator';\nimport { DrawTransforms } from './transforms';\nimport { GeometryThreshold } from './constants';\nimport { CommonPluginElement } from '@plait/common';\nimport { getLinePoints, getLineTextRectangle } from './utils/line/line-basic';\nimport { memorizeLatestText } from './utils/memorize';\n\ninterface BoundedElements {\n source?: PlaitGeometry;\n target?: PlaitGeometry;\n}\n\n@Component({\n selector: 'plait-draw-line',\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class LineComponent extends CommonPluginElement<PlaitLine, PlaitBoard>\n implements OnInit, OnDestroy, OnContextChanged<PlaitLine, PlaitBoard> {\n destroy$ = new Subject<void>();\n\n shapeGenerator!: LineShapeGenerator;\n\n activeGenerator!: LineActiveGenerator;\n\n boundedElements: BoundedElements = {};\n\n constructor(private viewContainerRef: ViewContainerRef, protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n initializeGenerator() {\n this.shapeGenerator = new LineShapeGenerator(this.board);\n this.activeGenerator = new LineActiveGenerator(this.board);\n this.initializeTextManagesByElement();\n }\n\n ngOnInit(): void {\n this.initializeGenerator();\n this.shapeGenerator.processDrawing(this.element, this.g);\n const linePoints = getLinePoints(this.board, this.element);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n super.ngOnInit();\n this.boundedElements = this.getBoundedElements();\n this.drawText();\n\n // const points = this.element.points;\n // points.forEach((p, index) => {\n // if (index === 0) {\n // return;\n // }\n // if (index === points.length - 1) {\n // return;\n // }\n // const dataPointG = PlaitBoard.getRoughSVG(this.board).circle(p[0], p[1], 8 * index, {\n // stroke: '#f08c02',\n // fill: '#f08c02',\n // fillStyle: 'solid'\n // });\n // PlaitBoard.getElementActiveHost(this.board).append(dataPointG);\n // });\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(value: PlaitPluginElementContext<PlaitLine, PlaitBoard>, previous: PlaitPluginElementContext<PlaitLine, PlaitBoard>) {\n const boundedElements = this.getBoundedElements();\n const isBoundedElementsChanged =\n boundedElements.source !== this.boundedElements.source || boundedElements.target !== this.boundedElements.target;\n this.boundedElements = boundedElements;\n const isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n const linePoints = getLinePoints(this.board, this.element);\n if (value.element !== previous.element || isChangeTheme) {\n this.shapeGenerator.processDrawing(this.element, this.g);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n this.updateText(previous.element.texts, value.element.texts);\n this.updateTextRectangle();\n } else {\n const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate();\n if (needUpdate) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n }\n }\n if (isBoundedElementsChanged) {\n this.shapeGenerator.processDrawing(this.element, this.g);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n this.updateTextRectangle();\n return;\n }\n }\n\n initializeTextManagesByElement() {\n if (this.element.texts?.length) {\n const textManages: TextManage[] = [];\n this.element.texts.forEach((text, index) => {\n const manage = this.createTextManage(text, index);\n textManages.push(manage);\n });\n this.initializeTextManages(textManages);\n }\n }\n\n drawText() {\n if (this.element.texts?.length) {\n this.getTextManages().forEach((manage, index) => {\n manage.draw(this.element.texts![index].text);\n this.g.append(manage.g);\n });\n }\n }\n\n createTextManage(text: LineText, index: number) {\n return new TextManage(this.board, this.viewContainerRef, {\n getRectangle: () => {\n return getLineTextRectangle(this.board, this.element, index);\n },\n onValueChangeHandle: (textManageRef: TextManageRef) => {\n const height = textManageRef.height / this.board.viewport.zoom;\n const width = textManageRef.width / this.board.viewport.zoom;\n const texts = [...this.element.texts];\n texts.splice(index, 1, {\n text: textManageRef.newValue ? textManageRef.newValue : this.element.texts[index].text,\n position: this.element.texts[index].position,\n width,\n height\n });\n DrawTransforms.setLineTexts(this.board, this.element, texts);\n textManageRef.operations && memorizeLatestText(this.element, textManageRef.operations);\n },\n getMaxWidth: () => GeometryThreshold.defaultTextMaxWidth\n });\n }\n\n updateText(previousTexts: LineText[], currentTexts: LineText[]) {\n if (previousTexts === currentTexts) return;\n const previousTextsLength = previousTexts.length;\n const currentTextsLength = currentTexts.length;\n const textManages = this.getTextManages();\n if (currentTextsLength === previousTextsLength) {\n for (let i = 0; i < previousTextsLength; i++) {\n if (previousTexts[i].text !== currentTexts[i].text) {\n textManages[i].updateText(currentTexts[i].text);\n }\n }\n } else {\n this.destroyTextManages();\n this.initializeTextManagesByElement();\n this.drawText();\n }\n }\n\n updateTextRectangle() {\n const textManages = this.getTextManages();\n textManages.forEach(manage => {\n manage.updateRectangle();\n });\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.activeGenerator.destroy();\n this.destroy$.next();\n this.destroy$.complete();\n this.destroyTextManages();\n }\n}\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { isVirtualKey, isSpaceHotkey, isDelete } from '@plait/common';\nimport { GeometryComponent } from '../geometry.component';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getSelectedGeometryElements } 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 (PlaitElement.getComponent(targetElement) as GeometryComponent).editText();\n return;\n }\n\n keyDown(event);\n };\n\n board.dblClick = (event: MouseEvent) => {\n event.preventDefault();\n const geometries = getSelectedGeometryElements(board);\n if (!PlaitBoard.isReadonly(board) && geometries.length === 1) {\n const component = PlaitElement.getComponent(geometries[0]) as GeometryComponent;\n component.editText();\n }\n dblClick(event);\n };\n return board;\n};\n","import { PlaitBoard, Point, RectangleClient, createG, preventTouchMove, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { BasicShapes, GeometryShapes, PlaitGeometry } from '../interfaces';\nimport { GeometryShapeGenerator } from '../generators/geometry-shape.generator';\nimport {\n createDefaultGeometry,\n createTextElement,\n getDefaultGeometryPoints,\n getTextShapeProperty,\n getMemorizedLatestByPointer,\n getTextRectangle,\n insertElement\n} from '../utils';\nimport { DefaultTextProperty, DrawPointerType, getGeometryPointers } from '../constants';\nimport { normalizeShapePoints, isDndMode, isDrawingMode } from '@plait/common';\nimport { TextManage } from '@plait/text';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { NgZone } from '@angular/core';\n\nexport interface FakeCreateTextRef {\n g: SVGGElement;\n textManage: TextManage;\n}\n\nexport const withGeometryCreateByDrag = (board: PlaitBoard) => {\n const { pointerMove, globalPointerUp } = board;\n\n let geometryShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitGeometry | null = null;\n\n let fakeCreateTextRef: FakeCreateTextRef | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n geometryShapeG?.remove();\n geometryShapeG = createG();\n\n const geometryGenerator = new GeometryShapeGenerator(board);\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\n if (dragMode) {\n const memorizedLatest = getMemorizedLatestByPointer(pointer);\n if (pointer === BasicShapes.text) {\n const property = getTextShapeProperty(board, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(movingPoint, property.width, property.height)\n );\n temporaryElement = createTextElement(board, points);\n if (!fakeCreateTextRef) {\n const textManage = new TextManage(board, PlaitBoard.getComponent(board).viewContainerRef, {\n getRectangle: () => {\n return getTextRectangle(temporaryElement!);\n }\n });\n PlaitBoard.getComponent(board)\n .viewContainerRef.injector.get(NgZone)\n .run(() => {\n textManage.draw(temporaryElement!.text);\n });\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, geometryShapeG);\n PlaitBoard.getElementActiveHost(board).append(geometryShapeG);\n }\n }\n\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n const dragMode = isGeometryPointer && isDndMode(board);\n\n if (dragMode && temporaryElement) {\n insertElement(board, temporaryElement);\n fakeCreateTextRef?.textManage.destroy();\n fakeCreateTextRef?.g.remove();\n fakeCreateTextRef = null;\n }\n\n geometryShapeG?.remove();\n geometryShapeG = null;\n preventTouchMove(board, event, false);\n\n globalPointerUp(event);\n };\n\n return board;\n};\n\nexport const withGeometryCreateByDrawing = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, pointerUp, keyDown, keyUp } = board;\n let start: Point | null = null;\n\n let geometryShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitGeometry | null = null;\n\n let isShift = false;\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 const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n if (!PlaitBoard.isReadonly(board) && isGeometryPointer && isDrawingMode(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n start = point;\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n preventTouchMove(board, event, true);\n if (pointer === BasicShapes.text) {\n const memorizedLatest = getMemorizedLatestByPointer(pointer);\n const property = getTextShapeProperty(board, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(point, property.width, property.height)\n );\n const textElement = createTextElement(board, points);\n insertElement(board, textElement);\n start = null;\n }\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n geometryShapeG?.remove();\n geometryShapeG = createG();\n const geometryGenerator = new GeometryShapeGenerator(board);\n const drawMode = !!start;\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (drawMode && pointer !== BasicShapes.text) {\n const points = normalizeShapePoints([start!, movingPoint], isShift);\n temporaryElement = createDefaultGeometry(board, points, pointer as GeometryShapes);\n geometryGenerator.processDrawing(temporaryElement, geometryShapeG);\n PlaitBoard.getElementActiveHost(board).append(geometryShapeG);\n }\n\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n const isDrawMode = !!start;\n if (isDrawMode) {\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) === 0) {\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 }\n if (temporaryElement) {\n insertElement(board, temporaryElement);\n }\n\n geometryShapeG?.remove();\n geometryShapeG = null;\n start = null;\n temporaryElement = null;\n preventTouchMove(board, event, false);\n pointerUp(event);\n };\n\n return board;\n};\n","import { PlaitBoard, Point, Transforms, getElementById, idCreator } from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\nimport { getConnectionPoint } from './line/line-common';\n\nexport const buildClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n return elements.map(element => {\n if (PlaitDrawElement.isGeometry(element) || PlaitDrawElement.isImage(element)) {\n const points = element.points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);\n return { ...element, points } as PlaitGeometry;\n }\n if (PlaitDrawElement.isLine(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 PlaitLine;\n }\n return element;\n });\n};\n\nexport const insertClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n const lines = elements.filter(value => PlaitDrawElement.isLine(value)) as PlaitLine[];\n const geometries = elements.filter(value => PlaitDrawElement.isGeometry(value) || PlaitDrawElement.isImage(value)) as (\n | PlaitImage\n | PlaitGeometry\n )[];\n\n geometries.forEach(element => {\n const sourceLines: PlaitLine[] = [];\n const targetLines: PlaitLine[] = [];\n lines.forEach(line => {\n if (PlaitLine.isBoundElementOfSource(line, element)) {\n sourceLines.push(line);\n }\n if (PlaitLine.isBoundElementOfTarget(line, element)) {\n targetLines.push(line);\n }\n });\n element.id = idCreator();\n\n // update lines\n sourceLines.forEach(sourceLine => (sourceLine.source.boundId = element.id));\n targetLines.forEach(targetLine => (targetLine.target.boundId = element.id));\n\n element.points = element.points.map(point => [startPoint[0] + point[0], startPoint[1] + point[1]]) as [Point, Point];\n Transforms.insertNode(board, element, [board.children.length]);\n });\n lines.forEach(element => {\n element.id = idCreator();\n element.points = element.points.map(point => [startPoint[0] + point[0], startPoint[1] + point[1]]) as [Point, Point];\n Transforms.insertNode(board, element, [board.children.length]);\n });\n Transforms.addSelectionWithTemporaryElements(board, elements);\n};\n","import {\n ClipboardData,\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n WritableClipboardContext,\n WritableClipboardType,\n addClipboardContext,\n createClipboardContext,\n getSelectedElements\n} from '@plait/core';\nimport { getSelectedDrawElements } from '../utils/selected';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine, PlaitShape } from '../interfaces';\nimport { buildClipboardData, insertClipboardData } from '../utils/clipboard';\nimport { DrawTransforms } from '../transforms';\nimport { getLines } from '../utils/line/line-basic';\nimport { PlaitImage } from '../interfaces/image';\nimport { acceptImageTypes, buildImage, getElementOfFocusedImage, getElementsText, getFirstTextEditor } from '@plait/common';\nimport { DEFAULT_IMAGE_WIDTH } from '../constants';\n\nexport const withDrawFragment = (baseBoard: PlaitBoard) => {\n const board = baseBoard as PlaitBoard;\n const { getDeletedFragment, setFragment, 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 lineElements = drawElements.filter(value => PlaitDrawElement.isLine(value)) as PlaitLine[];\n const imageElements = drawElements.filter(value => PlaitDrawElement.isImage(value)) as PlaitImage[];\n\n const boundLineElements = [\n ...getBoundedLineElements(board, geometryElements),\n ...getBoundedLineElements(board, imageElements)\n ].filter(line => !lineElements.includes(line));\n data.push(\n ...[\n ...geometryElements,\n ...lineElements,\n ...imageElements,\n ...boundLineElements.filter(line => !lineElements.includes(line))\n ]\n );\n }\n return getDeletedFragment(data);\n };\n\n board.setFragment = (\n data: DataTransfer | null,\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n type: 'copy' | 'cut'\n ) => {\n const targetDrawElements = getSelectedDrawElements(board);\n let boundLineElements: PlaitLine[] = [];\n if (targetDrawElements.length) {\n if (type === 'cut') {\n const geometryElements = targetDrawElements.filter(value => PlaitDrawElement.isGeometry(value)) as PlaitGeometry[];\n const lineElements = targetDrawElements.filter(value => PlaitDrawElement.isLine(value)) as PlaitLine[];\n boundLineElements = getBoundedLineElements(board, geometryElements).filter(line => !lineElements.includes(line));\n }\n const selectedElements = [...targetDrawElements, ...boundLineElements];\n const elements = buildClipboardData(board, selectedElements, rectangle ? [rectangle.x, rectangle.y] : [0, 0]);\n const text = getElementsText(selectedElements);\n if (!clipboardContext) {\n clipboardContext = createClipboardContext(WritableClipboardType.elements, elements, text);\n } else {\n clipboardContext = addClipboardContext(clipboardContext, {\n text,\n type: WritableClipboardType.elements,\n data: elements\n });\n }\n }\n setFragment(data, clipboardContext, rectangle, type);\n };\n\n board.insertFragment = (data: DataTransfer | null, clipboardData: ClipboardData | null, targetPoint: Point) => {\n const selectedElements = getSelectedElements(board);\n\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(data, clipboardData, targetPoint);\n };\n\n return board;\n};\n\nexport const getBoundedLineElements = (board: PlaitBoard, plaitShapes: PlaitShape[]) => {\n const lines = getLines(board);\n return lines.filter(line =>\n plaitShapes.find(shape => PlaitLine.isBoundElementOfSource(line, shape) || PlaitLine.isBoundElementOfTarget(line, shape))\n );\n};\n","import {\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n Point,\n Transforms,\n addSelectedElement,\n clearSelectedElement,\n createG,\n preventTouchMove,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { LineShape, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { REACTION_MARGIN, getLinePointers } from '../constants';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { isDrawingMode } from '@plait/common';\nimport { handleLineCreating } from '../utils/line/line-basic';\n\nexport const withLineCreateByDraw = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n\n let start: Point | null = null;\n\n let sourceElement: PlaitGeometry | null;\n\n let lineShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitLine | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n const linePointers = getLinePointers();\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 = getHitOutlineGeometry(board, point, REACTION_MARGIN);\n if (hitElement) {\n sourceElement = hitElement;\n }\n preventTouchMove(board, event, true);\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n lineShapeG?.remove();\n lineShapeG = createG();\n let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (start) {\n const lineShape = PlaitBoard.getPointer(board) as LineShape;\n temporaryElement = handleLineCreating(board, lineShape, start, movingPoint, sourceElement, lineShapeG);\n }\n\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (temporaryElement) {\n Transforms.insertNode(board, temporaryElement, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(board, temporaryElement);\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n }\n lineShapeG?.remove();\n lineShapeG = null;\n sourceElement = null;\n start = null;\n temporaryElement = null;\n preventTouchMove(board, event, false);\n globalPointerUp(event);\n };\n\n return board;\n};\n","import { ResizeState } from '@plait/common';\nimport {\n DirectionFactors,\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n createG,\n findElements\n} from '@plait/core';\nimport { getResizeZoom, movePointByZoomAndOriginPoint } from '../plugins/with-draw-resize';\n\nexport interface ResizeAlignDelta {\n deltaX: number;\n deltaY: number;\n}\n\nexport interface AlignLineRef extends ResizeAlignDelta {\n xZoom: number;\n yZoom: number;\n activePoints: Point[];\n}\n\nexport interface ResizeAlignRef extends AlignLineRef {\n alignG: SVGGElement;\n}\n\nexport interface ResizeAlignOptions {\n resizeState: ResizeState;\n resizeOriginPoints: Point[];\n activeRectangle: RectangleClient;\n directionFactors: DirectionFactors;\n originPoint: Point;\n handlePoint: Point;\n isFromCorner: boolean;\n isAspectRatio: boolean;\n}\n\ntype TripleAlignAxis = [number, number, number];\n\ntype DrawAlignLineRef = {\n axis: number;\n isHorizontal: boolean;\n alignRectangles: RectangleClient[];\n};\n\nconst ALIGN_TOLERANCE = 2;\n\nconst EQUAL_SPACING = 10;\n\nconst ALIGN_SPACING = 24;\n\nexport class ResizeAlignReaction {\n alignRectangles: RectangleClient[];\n\n constructor(private board: PlaitBoard, private activeElements: PlaitElement[]) {\n this.alignRectangles = this.getAlignRectangle();\n }\n\n getAlignRectangle() {\n const elements = findElements(this.board, {\n match: element => this.board.isAlign(element) && !this.activeElements.some(item => item.id === element.id),\n recursion: () => false,\n isReverse: false\n });\n return elements.map(item => this.board.getRectangle(item)!);\n }\n\n getAlignLineRef(resizeAlignDelta: ResizeAlignDelta, resizeAlignOptions: ResizeAlignOptions): AlignLineRef {\n const { deltaX, deltaY } = resizeAlignDelta;\n const { resizeState, originPoint, handlePoint, isFromCorner, isAspectRatio, resizeOriginPoints } = resizeAlignOptions;\n const newResizeState: ResizeState = {\n ...resizeState,\n endPoint: [resizeState.endPoint[0] + deltaX, resizeState.endPoint[1] + deltaY]\n };\n const { xZoom, yZoom } = getResizeZoom(newResizeState, originPoint, handlePoint, isFromCorner, isAspectRatio);\n const activePoints = resizeOriginPoints.map(p => {\n return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);\n }) as [Point, Point];\n\n return {\n deltaX,\n deltaY,\n xZoom,\n yZoom,\n activePoints\n };\n }\n\n getEqualLineDelta(resizeAlignOptions: ResizeAlignOptions) {\n let equalLineDelta: ResizeAlignDelta = {\n deltaX: 0,\n deltaY: 0\n };\n const { isAspectRatio, activeRectangle } = resizeAlignOptions;\n const widthAlignRectangle = this.alignRectangles.find(item => Math.abs(item.width - activeRectangle.width) < ALIGN_TOLERANCE);\n if (widthAlignRectangle) {\n const deltaWidth = widthAlignRectangle.width - activeRectangle.width;\n equalLineDelta.deltaX = deltaWidth * resizeAlignOptions.directionFactors[0];\n if (isAspectRatio) {\n const deltaHeight = deltaWidth / (activeRectangle.width / activeRectangle.height);\n equalLineDelta.deltaY = deltaHeight * resizeAlignOptions.directionFactors[1];\n return equalLineDelta;\n }\n }\n const heightAlignRectangle = this.alignRectangles.find(item => Math.abs(item.height - activeRectangle.height) < ALIGN_TOLERANCE);\n if (heightAlignRectangle) {\n const deltaHeight = heightAlignRectangle.height - activeRectangle.height;\n equalLineDelta.deltaY = deltaHeight * resizeAlignOptions.directionFactors[1];\n if (isAspectRatio) {\n const deltaWidth = deltaHeight * (activeRectangle.width / activeRectangle.height);\n equalLineDelta.deltaX = deltaWidth * resizeAlignOptions.directionFactors[0];\n return equalLineDelta;\n }\n }\n return equalLineDelta;\n }\n\n drawEqualLines(activePoints: Point[], resizeAlignOptions: ResizeAlignOptions) {\n let widthEqualPoints = [];\n let heightEqualPoints = [];\n\n const drawHorizontalLine = resizeAlignOptions.directionFactors[0] !== 0 || resizeAlignOptions.isAspectRatio;\n const drawVerticalLine = resizeAlignOptions.directionFactors[1] !== 0 || resizeAlignOptions.isAspectRatio;\n\n const activeRectangle = RectangleClient.getRectangleByPoints(activePoints);\n for (let alignRectangle of this.alignRectangles) {\n if (activeRectangle.width === alignRectangle.width && drawHorizontalLine) {\n widthEqualPoints.push(getEqualLinePoints(alignRectangle, true));\n }\n if (activeRectangle.height === alignRectangle.height && drawVerticalLine) {\n heightEqualPoints.push(getEqualLinePoints(alignRectangle, false));\n }\n }\n if (widthEqualPoints.length && drawHorizontalLine) {\n widthEqualPoints.push(getEqualLinePoints(activeRectangle, true));\n }\n if (heightEqualPoints.length && drawVerticalLine) {\n heightEqualPoints.push(getEqualLinePoints(activeRectangle, false));\n }\n\n const equalLinePoints = [...widthEqualPoints, ...heightEqualPoints];\n return drawEqualLines(this.board, equalLinePoints);\n }\n\n getAlignLineDelta(resizeAlignOptions: ResizeAlignOptions) {\n let alignLineDelta: ResizeAlignDelta = {\n deltaX: 0,\n deltaY: 0\n };\n const { isAspectRatio, activeRectangle, directionFactors } = resizeAlignOptions;\n const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;\n const drawVertical = directionFactors[1] !== 0 || isAspectRatio;\n\n if (drawHorizontal) {\n const xAlignAxis = getTripleAlignAxis(activeRectangle, true);\n const alignX = directionFactors[0] === -1 ? xAlignAxis[0] : xAlignAxis[2];\n const deltaX = getMinAlignDelta(this.alignRectangles, alignX, true);\n if (Math.abs(deltaX) < ALIGN_TOLERANCE) {\n alignLineDelta.deltaX = deltaX;\n if (alignLineDelta.deltaX !== 0 && isAspectRatio) {\n alignLineDelta.deltaY = alignLineDelta.deltaX / (activeRectangle.width / activeRectangle.height);\n return alignLineDelta;\n }\n }\n }\n\n if (drawVertical) {\n const yAlignAxis = getTripleAlignAxis(activeRectangle, false);\n const alignY = directionFactors[1] === -1 ? yAlignAxis[0] : yAlignAxis[2];\n const deltaY = getMinAlignDelta(this.alignRectangles, alignY, false);\n if (Math.abs(deltaY) < ALIGN_TOLERANCE) {\n alignLineDelta.deltaY = deltaY;\n if (alignLineDelta.deltaY !== 0 && isAspectRatio) {\n alignLineDelta.deltaX = alignLineDelta.deltaY * (activeRectangle.width / activeRectangle.height);\n return alignLineDelta;\n }\n }\n }\n\n return alignLineDelta;\n }\n\n drawAlignLines(activePoints: Point[], resizeAlignOptions: ResizeAlignOptions) {\n let alignLinePoints: [Point, Point][] = [];\n const activeRectangle = RectangleClient.getRectangleByPoints(activePoints);\n const alignAxisX = getTripleAlignAxis(activeRectangle, true);\n const alignAxisY = getTripleAlignAxis(activeRectangle, false);\n const alignLineRefs: DrawAlignLineRef[] = [\n {\n axis: alignAxisX[0],\n isHorizontal: true,\n alignRectangles: []\n },\n {\n axis: alignAxisX[2],\n isHorizontal: true,\n alignRectangles: []\n },\n {\n axis: alignAxisY[0],\n isHorizontal: false,\n alignRectangles: []\n },\n {\n axis: alignAxisY[2],\n isHorizontal: false,\n alignRectangles: []\n }\n ];\n const setAlignLine = (axis: number, alignRectangle: RectangleClient, isHorizontal: boolean) => {\n const boundingRectangle = RectangleClient.inflate(\n RectangleClient.getBoundingRectangle([activeRectangle, alignRectangle]),\n ALIGN_SPACING\n );\n if (isHorizontal) {\n const pointStart = [axis, boundingRectangle.y] as Point;\n const pointEnd = [axis, boundingRectangle.y + boundingRectangle.height] as Point;\n alignLinePoints.push([pointStart, pointEnd]);\n } else {\n const pointStart = [boundingRectangle.x, axis] as Point;\n const pointEnd = [boundingRectangle.x + boundingRectangle.width, axis] as Point;\n alignLinePoints.push([pointStart, pointEnd]);\n }\n };\n\n const { isAspectRatio, directionFactors } = resizeAlignOptions;\n const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;\n const drawVertical = directionFactors[1] !== 0 || isAspectRatio;\n\n for (let index = 0; index < this.alignRectangles.length; index++) {\n const element = this.alignRectangles[index];\n if (isAlign(alignLineRefs[0].axis, element, alignLineRefs[0].isHorizontal)) {\n alignLineRefs[0].alignRectangles.push(element);\n }\n if (isAlign(alignLineRefs[1].axis, element, alignLineRefs[1].isHorizontal)) {\n alignLineRefs[1].alignRectangles.push(element);\n }\n if (isAlign(alignLineRefs[2].axis, element, alignLineRefs[2].isHorizontal)) {\n alignLineRefs[2].alignRectangles.push(element);\n }\n if (isAlign(alignLineRefs[3].axis, element, alignLineRefs[3].isHorizontal)) {\n alignLineRefs[3].alignRectangles.push(element);\n }\n }\n\n if (drawHorizontal && alignLineRefs[0].alignRectangles.length) {\n const leftRectangle =\n alignLineRefs[0].alignRectangles.length === 1\n ? alignLineRefs[0].alignRectangles[0]\n : getNearestAlignRectangle(alignLineRefs[0].alignRectangles, activeRectangle);\n setAlignLine(alignLineRefs[0].axis, leftRectangle, alignLineRefs[0].isHorizontal);\n }\n\n if (drawHorizontal && alignLineRefs[1].alignRectangles.length) {\n const rightRectangle =\n alignLineRefs[1].alignRectangles.length === 1\n ? alignLineRefs[1].alignRectangles[0]\n : getNearestAlignRectangle(alignLineRefs[1].alignRectangles, activeRectangle);\n setAlignLine(alignLineRefs[1].axis, rightRectangle, alignLineRefs[1].isHorizontal);\n }\n\n if (drawVertical && alignLineRefs[2].alignRectangles.length) {\n const topRectangle =\n alignLineRefs[2].alignRectangles.length === 1\n ? alignLineRefs[2].alignRectangles[0]\n : getNearestAlignRectangle(alignLineRefs[2].alignRectangles, activeRectangle);\n setAlignLine(alignLineRefs[2].axis, topRectangle, alignLineRefs[2].isHorizontal);\n }\n\n if (drawVertical && alignLineRefs[3].alignRectangles.length) {\n const bottomRectangle =\n alignLineRefs[3].alignRectangles.length === 1\n ? alignLineRefs[3].alignRectangles[0]\n : getNearestAlignRectangle(alignLineRefs[3].alignRectangles, activeRectangle);\n setAlignLine(alignLineRefs[3].axis, bottomRectangle, alignLineRefs[3].isHorizontal);\n }\n\n return drawAlignLines(this.board, alignLinePoints);\n }\n\n handleResizeAlign(resizeAlignOptions: ResizeAlignOptions): ResizeAlignRef {\n const alignG = createG();\n let alignLineDelta = this.getEqualLineDelta(resizeAlignOptions);\n if (alignLineDelta.deltaX === 0 && alignLineDelta.deltaY === 0) {\n alignLineDelta = this.getAlignLineDelta(resizeAlignOptions);\n }\n const equalLineRef = this.getAlignLineRef(alignLineDelta, resizeAlignOptions);\n const equalLinesG = this.drawEqualLines(equalLineRef.activePoints, resizeAlignOptions);\n const alignLinesG = this.drawAlignLines(equalLineRef.activePoints, resizeAlignOptions);\n alignG.append(equalLinesG, alignLinesG);\n return { ...equalLineRef, alignG };\n }\n}\n\nfunction getBarPoint(point: Point, isHorizontal: boolean) {\n return isHorizontal\n ? [\n [point[0], point[1] - 4],\n [point[0], point[1] + 4]\n ]\n : [\n [point[0] - 4, point[1]],\n [point[0] + 4, point[1]]\n ];\n}\n\nfunction getEqualLinePoints(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 drawEqualLines(board: PlaitBoard, lines: Point[][]) {\n const g = createG();\n lines.forEach(line => {\n if (!line.length) return;\n const yAlign = PlaitBoard.getRoughSVG(board).line(line[0][0], line[0][1], line[1][0], line[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(yAlign);\n line.forEach(point => {\n const barPoint = getBarPoint(point, !!Point.isHorizontal(line[0], line[1]));\n const bar = PlaitBoard.getRoughSVG(board).line(barPoint[0][0], barPoint[0][1], barPoint[1][0], barPoint[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(bar);\n });\n });\n return g;\n}\n\nfunction drawAlignLines(board: PlaitBoard, lines: [Point, Point][]) {\n const g = createG();\n lines.forEach(points => {\n if (!points.length) return;\n const xAlign = PlaitBoard.getRoughSVG(board).line(points[0][0], points[0][1], points[1][0], points[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n strokeLineDash: [4, 4]\n });\n g.appendChild(xAlign);\n });\n return g;\n}\n\nexport const getTripleAlignAxis = (rectangle: RectangleClient, isHorizontal: boolean): TripleAlignAxis => {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n return [rectangle[axis], rectangle[axis] + rectangle[side] / 2, rectangle[axis] + rectangle[side]];\n};\n\nexport const isAlign = (axis: number, rectangle: RectangleClient, isHorizontal: boolean) => {\n const alignAxis = getTripleAlignAxis(rectangle, isHorizontal);\n return alignAxis.includes(axis);\n};\n\nexport const getClosestDelta = (axis: number, rectangle: RectangleClient, isHorizontal: boolean) => {\n const alignAxis = getTripleAlignAxis(rectangle, isHorizontal);\n const deltas = alignAxis.map(item => item - axis);\n const absDeltas = deltas.map(item => Math.abs(item));\n const index = absDeltas.indexOf(Math.min(...absDeltas));\n return deltas[index];\n};\n\nfunction getMinAlignDelta(alignRectangles: RectangleClient[], axis: number, isHorizontal: boolean) {\n let delta = ALIGN_TOLERANCE;\n\n alignRectangles.forEach(item => {\n const distance = getClosestDelta(axis, item, isHorizontal);\n if (Math.abs(distance) < Math.abs(delta)) {\n delta = distance;\n }\n });\n return delta;\n}\n\nfunction getNearestAlignRectangle(alignRectangles: RectangleClient[], activeRectangle: RectangleClient) {\n let minDistance = Infinity;\n let nearestRectangle = alignRectangles[0];\n\n alignRectangles.forEach(item => {\n const distance = Math.sqrt(Math.pow(activeRectangle.x - item.x, 2) + Math.pow(activeRectangle.y - item.y, 2));\n if (distance < minDistance) {\n minDistance = distance;\n nearestRectangle = item;\n }\n });\n return nearestRectangle;\n}\n","import { PlaitBoard, Point, RectangleClient, getRectangleByElements, PlaitElement, DirectionFactor } from '@plait/core';\nimport { getResizeZoom, movePointByZoomAndOriginPoint } from '../plugins/with-draw-resize';\nimport { ResizeRef, ResizeState, getDirectionFactorByVectorComponent, getUnitVectorByPointAndPoint } from '@plait/common';\nimport { PlaitDrawElement } from '../interfaces';\nimport { ResizeAlignReaction, ResizeAlignRef } from './resize-align-reaction';\n\nexport function getResizeAlignRef(\n board: PlaitBoard,\n resizeRef: ResizeRef<PlaitDrawElement | PlaitDrawElement[]>,\n resizeState: ResizeState,\n resizeOriginPointAndHandlePoint: {\n originPoint: Point;\n handlePoint: Point;\n },\n isAspectRatio: boolean,\n isFromCorner: boolean\n): ResizeAlignRef {\n const { originPoint, handlePoint } = resizeOriginPointAndHandlePoint;\n const { xZoom, yZoom } = getResizeZoom(resizeState, originPoint, handlePoint, isFromCorner, isAspectRatio);\n\n let activeElements: PlaitElement[];\n let resizeOriginPoints: Point[] = [];\n if (Array.isArray(resizeRef.element)) {\n activeElements = resizeRef.element;\n const rectangle = getRectangleByElements(board, resizeRef.element, false);\n resizeOriginPoints = RectangleClient.getPoints(rectangle);\n } else {\n activeElements = [resizeRef.element];\n resizeOriginPoints = resizeRef.element.points;\n }\n\n const points = resizeOriginPoints.map(p => {\n return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);\n }) as [Point, Point];\n const activeRectangle = RectangleClient.getRectangleByPoints(points);\n\n const resizeAlignReaction = new ResizeAlignReaction(board, activeElements);\n const resizeHandlePoint = movePointByZoomAndOriginPoint(handlePoint, originPoint, xZoom, yZoom);\n const [x, y] = getUnitVectorByPointAndPoint(originPoint, resizeHandlePoint);\n\n return resizeAlignReaction.handleResizeAlign({\n resizeState,\n resizeOriginPoints,\n activeRectangle,\n originPoint,\n handlePoint,\n directionFactors: [getDirectionFactorByVectorComponent(x), getDirectionFactorByVectorComponent(y)],\n isAspectRatio,\n isFromCorner\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} from '@plait/common';\nimport { PlaitBoard, Point, RectangleClient, Transforms, createG, getRectangleByElements, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { PlaitDrawElement } from '../interfaces';\nimport { DrawTransforms } from '../transforms';\nimport { getHitRectangleResizeHandleRef } from '../utils/position/geometry';\nimport { getResizeAlignRef } from '../utils/resize-align';\n\nexport function withDrawResize(board: PlaitBoard) {\n const { afterChange } = board;\n let alignG: SVGGElement | null;\n let handleG: SVGGElement | null;\n\n const canResize = () => {\n const elements = getSelectedElements(board);\n return elements.length > 1 && elements.every(el => PlaitDrawElement.isDrawElement(el));\n }\n\n const options: WithResizeOptions<PlaitDrawElement[]> = {\n key: 'draw-elements',\n canResize,\n hitTest: (point: Point) => {\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n const handleRef = getHitRectangleResizeHandleRef(board, boundingRectangle, point);\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 alignG?.remove();\n const isFromCorner = isCornerHandle(board, resizeRef.handle);\n const isAspectRatio = resizeState.isShift || isFromCorner;\n const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, resizeRef);\n\n const resizeAlignRef = getResizeAlignRef(\n board,\n resizeRef,\n resizeState,\n {\n originPoint,\n handlePoint\n },\n isAspectRatio,\n isFromCorner\n );\n alignG = resizeAlignRef.alignG;\n PlaitBoard.getElementActiveHost(board).append(alignG);\n resizeRef.element.forEach(target => {\n const path = PlaitBoard.findPath(board, target);\n let points = target.points.map(p => {\n return movePointByZoomAndOriginPoint(p, originPoint, resizeAlignRef.xZoom, resizeAlignRef.yZoom);\n });\n\n if (PlaitDrawElement.isGeometry(target)) {\n const { height: textHeight } = getFirstTextManage(target).getSize();\n DrawTransforms.resizeGeometry(board, points as [Point, Point], textHeight, path);\n } else if (PlaitDrawElement.isLine(target)) {\n Transforms.setNode(board, { points }, path);\n } else if (PlaitDrawElement.isImage(target)) {\n if (isAspectRatio) {\n Transforms.setNode(board, { points }, path);\n } else {\n // The image element does not follow the resize, but moves based on the center point.\n const targetRectangle = RectangleClient.getRectangleByPoints(target.points);\n const centerPoint = RectangleClient.getCenterPoint(targetRectangle);\n const newCenterPoint = movePointByZoomAndOriginPoint(\n centerPoint,\n originPoint,\n resizeAlignRef.xZoom,\n resizeAlignRef.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 alignG?.remove();\n alignG = null;\n }\n };\n\n withResize<PlaitDrawElement[]>(board, options);\n\n board.afterChange = () => {\n afterChange();\n if (handleG) {\n handleG.remove();\n handleG = null;\n }\n if (canResize() && !isSelectionMoving(board)) {\n handleG = createG();\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n const corners = RectangleClient.getCornerPoints(boundingRectangle);\n corners.forEach((corner) => {\n const g = drawHandle(board, corner);\n handleG && handleG.append(g);\n });\n PlaitBoard.getElementActiveHost(board).append(handleG);\n }\n };\n\n return board;\n}\n\nexport const getResizeOriginPointAndHandlePoint = (board: PlaitBoard, resizeRef: ResizeRef<PlaitDrawElement | PlaitDrawElement[]>) => {\n const handleIndex = getIndexByResizeHandle(resizeRef.handle);\n const symmetricHandleIndex = getSymmetricHandleIndex(board, handleIndex);\n const originPoint = getResizeHandlePointByIndex(resizeRef.rectangle as RectangleClient, symmetricHandleIndex);\n const handlePoint = getResizeHandlePointByIndex(resizeRef.rectangle as RectangleClient, handleIndex);\n return {\n originPoint,\n handlePoint\n };\n};\n\nexport const getResizeZoom = (\n resizeState: ResizeState,\n resizeOriginPoint: Point,\n resizeHandlePoint: Point,\n isFromCorner: boolean,\n isAspectRatio: boolean\n) => {\n const startPoint = resizeState.startPoint;\n const endPoint = resizeState.endPoint;\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","import { Path, PlaitBoard, PlaitElement, Point, RectangleClient, Transforms, getSelectedElements } from '@plait/core';\nimport { PlaitGeometry } from '../interfaces/geometry';\nimport {\n ResizeRef,\n ResizeState,\n WithResizeOptions,\n getFirstTextManage,\n isCornerHandle,\n normalizeShapePoints,\n withResize\n} from '@plait/common';\nimport { getSelectedGeometryElements, getSelectedImageElements } from '../utils/selected';\nimport { DrawTransforms } from '../transforms';\nimport { GeometryComponent } from '../geometry.component';\nimport { PlaitImage } from '../interfaces/image';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getHitRectangleResizeHandleRef } from '../utils/position/geometry';\nimport { getResizeOriginPointAndHandlePoint, getResizeZoom, movePointByZoomAndOriginPoint } from './with-draw-resize';\nimport { getResizeAlignRef } from '../utils/resize-align';\n\nexport const withGeometryResize = (board: PlaitBoard) => {\n let alignG: SVGGElement | null;\n const options: WithResizeOptions<PlaitGeometry | PlaitImage> = {\n key: 'draw-geometry',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n const selectedElements = [...getSelectedGeometryElements(board), ...getSelectedImageElements(board)];\n if (selectedElements.length !== 1 || getSelectedElements(board).length !== 1) {\n return null;\n }\n const target = selectedElements[0];\n const targetComponent = PlaitElement.getComponent(selectedElements[0]) as GeometryComponent;\n if (targetComponent.activeGenerator.hasResizeHandle) {\n const rectangle = board.getRectangle(target) as RectangleClient;\n const handleRef = getHitRectangleResizeHandleRef(board, rectangle, point);\n if (handleRef) {\n return {\n element: target,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass,\n rectangle\n };\n }\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<PlaitGeometry | PlaitImage>, resizeState: ResizeState) => {\n alignG?.remove();\n const isFromCorner = isCornerHandle(board, resizeRef.handle);\n const isAspectRatio = resizeState.isShift || PlaitDrawElement.isImage(resizeRef.element);\n const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, resizeRef);\n\n const resizeAlignRef = getResizeAlignRef(\n board,\n resizeRef,\n resizeState,\n {\n originPoint,\n handlePoint\n },\n isAspectRatio,\n isFromCorner\n );\n alignG = resizeAlignRef.alignG;\n PlaitBoard.getElementActiveHost(board).append(alignG);\n let points = resizeAlignRef.activePoints as [Point, Point];\n if (PlaitDrawElement.isGeometry(resizeRef.element)) {\n const { height: textHeight } = getFirstTextManage(resizeRef.element).getSize();\n DrawTransforms.resizeGeometry(board, points, textHeight, resizeRef.path as Path);\n } else {\n points = normalizeShapePoints(points);\n Transforms.setNode(board, { points }, resizeRef.path as Path);\n }\n },\n afterResize: (resizeRef: ResizeRef<PlaitGeometry | PlaitImage>) => {\n alignG?.remove();\n alignG = null;\n }\n };\n\n withResize<PlaitGeometry | PlaitImage>(board, options);\n\n return board;\n};\n","import { Path, PlaitBoard, PlaitNode, Point } from '@plait/core';\nimport { ResizeRef, ResizeState, WithResizeOptions, isSourceAndTargetIntersect, simplifyOrthogonalPoints, withResize } from '@plait/common';\nimport { getSelectedLineElements } from '../utils/selected';\nimport { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { LineHandle, LineShape, PlaitLine } from '../interfaces';\nimport { DrawTransforms } from '../transforms';\nimport { REACTION_MARGIN } from '../constants';\nimport { getElbowPoints, getNextRenderPoints } from '../utils/line/elbow';\nimport {\n alignElbowSegment,\n alignPoints,\n getIndexAndDeleteCountByKeyPoint,\n getResizedPreviousAndNextPoint,\n hasIllegalElbowPoint\n} from '../utils/line/line-resize';\nimport { getConnectionByNearestPoint, getLinePoints } from '../utils/line/line-basic';\nimport { getElbowLineRouteOptions } from '../utils/line';\n\nexport const withLineResize = (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<PlaitLine, LineResizeHandle> = {\n key: 'draw-line',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n const selectedLineElements = getSelectedLineElements(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<PlaitLine, LineResizeHandle>) => {\n if (\n resizeRef.element.shape === LineShape.elbow &&\n resizeRef.handle !== LineResizeHandle.source &&\n resizeRef.handle !== LineResizeHandle.target\n ) {\n const params = getElbowLineRouteOptions(board, resizeRef.element);\n const isIntersect = isSourceAndTargetIntersect(params);\n if (isIntersect) {\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<PlaitLine, LineResizeHandle>, resizeState: ResizeState) => {\n let points: Point[] = [...resizeRef.element.points];\n let source: LineHandle = { ...resizeRef.element.source };\n let target: LineHandle = { ...resizeRef.element.target };\n let handleIndex = resizeRef.handleIndex!;\n const hitElement = getHitOutlineGeometry(board, resizeState.endPoint, REACTION_MARGIN);\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 = getConnectionByNearestPoint(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 === LineShape.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 = getLinePoints(board, resizeRef.element);\n const newPoints = [...points];\n newPoints[0] = drawPoints[0];\n newPoints[newPoints.length - 1] = drawPoints[drawPoints.length - 1];\n if (resizeRef.element.shape !== LineShape.elbow) {\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.resizeLine(board, { points, source, target }, resizeRef.path as Path);\n },\n afterResize: (resizeRef: ResizeRef<PlaitLine, LineResizeHandle>) => {\n if (resizeRef.element.shape === LineShape.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.resizeLine(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<PlaitLine, LineResizeHandle>(board, options);\n\n return board;\n};\n","import {\n ACTIVE_STROKE_WIDTH,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n drawCircle,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { LineShape, PlaitDrawElement } from '../interfaces';\nimport { isResizingByCondition } from '@plait/common';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { LineResizeHandle } from '../utils/position/line';\nimport { drawBoundMask, getNearestPoint } from '../utils/geometry';\nimport { getHitConnectorPoint } from '../utils/line/line-basic';\n\nexport const withLineBoundReaction = (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(LineShape);\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.isLine(element) && isSourceOrTarget;\n });\n if (isLinePointer || isLineResizing) {\n const hitElement = getHitOutlineGeometry(board, movingPoint, -4);\n if (hitElement) {\n boundShapeG = drawBoundMask(board, hitElement);\n let nearestPoint = getNearestPoint(hitElement, movingPoint);\n const rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n const activeRectangle = RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH);\n const hitConnector = getHitConnectorPoint(nearestPoint, hitElement, activeRectangle);\n nearestPoint = hitConnector ? hitConnector : nearestPoint;\n const circleG = drawCircle(PlaitBoard.getRoughSVG(board), nearestPoint, 6, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n fill: SELECTION_BORDER_COLOR,\n fillStyle: 'solid'\n });\n boundShapeG.appendChild(circleG);\n PlaitBoard.getElementActiveHost(board).append(boundShapeG);\n }\n }\n pointerMove(event);\n };\n\n board.pointerUp = event => {\n boundShapeG?.remove();\n boundShapeG = null;\n pointerUp(event);\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitElement,\n getHitElementByPoint,\n getNearestPointBetweenPointAndSegments,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitDrawElement, PlaitLine } from '../interfaces';\nimport { Node } from 'slate';\nimport { getRatioByPoint } from '@plait/common';\nimport { buildText } from '@plait/text';\nimport { LineComponent } from '../line.component';\nimport { DrawTransforms } from '../transforms';\nimport { getLinePoints } from '../utils/line/line-basic';\nimport { getHitLineTextIndex } from '../utils/position/line';\nimport { isHitLineText } from '../utils/hit';\n\nexport const withLineText = (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, (element: PlaitElement) => {\n return PlaitDrawElement.isLine(element);\n }) as undefined | PlaitLine;\n if (hitTarget) {\n const points = getLinePoints(board, hitTarget);\n const point = getNearestPointBetweenPointAndSegments(clickPoint, points);\n const texts = hitTarget.texts?.length ? [...hitTarget.texts] : [];\n const textIndex = getHitLineTextIndex(board, hitTarget, clickPoint);\n const isHitText = isHitLineText(board, hitTarget, clickPoint);\n if (isHitText) {\n editHandle(board, hitTarget, textIndex);\n } else {\n const ratio = getRatioByPoint(points, point);\n texts.push({\n text: buildText('文本'),\n position: ratio,\n width: 28,\n height: 20\n });\n DrawTransforms.setLineTexts(board, hitTarget, texts);\n setTimeout(() => {\n const hitComponent = PlaitElement.getComponent(hitTarget) as LineComponent;\n editHandle(board, hitTarget, hitComponent.getTextManages().length - 1, true);\n });\n }\n }\n }\n dblClick(event);\n };\n\n return board;\n};\n\nfunction editHandle(board: PlaitBoard, element: PlaitLine, manageIndex: number, isFirstEdit: boolean = false) {\n const hitComponent = PlaitElement.getComponent(element) as LineComponent;\n const textManage = hitComponent.getTextManages()[manageIndex];\n const originText = textManage.componentRef.instance.children;\n\n textManage.edit((origin, descendant) => {\n const text = Node.string(descendant[0]);\n const shouldRemove = (isFirstEdit && originText === descendant) || !text;\n if (shouldRemove) {\n DrawTransforms.removeLineText(board, element, manageIndex);\n }\n });\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';\nimport { PlaitBoard, PlaitPluginElementContext, OnContextChanged, isSelectionMoving, getSelectedElements } from '@plait/core';\nimport { Subject } from 'rxjs';\nimport { CommonPluginElement, ImageGenerator } from '@plait/common';\nimport { PlaitImage } from './interfaces/image';\nimport { LineAutoCompleteGenerator } from './generators/line-auto-complete.generator';\n\n@Component({\n selector: 'plait-draw-geometry',\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class ImageComponent extends CommonPluginElement<PlaitImage, PlaitBoard>\n implements OnInit, OnDestroy, OnContextChanged<PlaitImage, PlaitBoard> {\n destroy$ = new Subject<void>();\n\n get activeGenerator() {\n return this.imageGenerator.componentRef.instance.activeGenerator;\n }\n\n imageGenerator!: ImageGenerator<PlaitImage>;\n\n lineAutoCompleteGenerator!: LineAutoCompleteGenerator;\n\n constructor(private viewContainerRef: ViewContainerRef, protected cdr: ChangeDetectorRef) {\n super(cdr);\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 LineAutoCompleteGenerator(this.board);\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.initializeGenerator();\n this.imageGenerator.processDrawing(this.element, this.g, this.viewContainerRef);\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitImage, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitImage, PlaitBoard>\n ) {\n if (value.element !== previous.element) {\n this.imageGenerator.updateImage(this.g, previous.element, value.element);\n this.imageGenerator.componentRef.instance.isFocus = this.selected;\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n } else {\n const hasSameSelected = value.selected === previous.selected;\n const hasSameHandleState = this.activeGenerator.options.hasResizeHandle() === this.activeGenerator.hasResizeHandle;\n if (!hasSameSelected || !hasSameHandleState) {\n this.imageGenerator.componentRef.instance.isFocus = this.selected;\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n }\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n this.imageGenerator.destroy();\n this.lineAutoCompleteGenerator.destroy();\n }\n}\n","import { CursorClass, PlaitBoard, PlaitElement, RgbaToHEX, drawCircle, isSelectionMoving, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getAutoCompletePoints, getHitIndexOfAutoCompletePoint, getSelectedDrawElements } from '../utils';\nimport { GeometryComponent } from '../geometry.component';\nimport { PRIMARY_COLOR } from '@plait/common';\nimport { LINE_AUTO_COMPLETE_HOVERED_DIAMETER, LINE_AUTO_COMPLETE_HOVERED_OPACITY } from '../constants/line';\n\nexport const withLineAutoCompleteReaction = (board: PlaitBoard) => {\n const { pointerMove } = board;\n let reactionG: SVGGElement | null = null;\n board.pointerMove = (event: PointerEvent) => {\n reactionG?.remove();\n PlaitBoard.getBoardContainer(board).classList.remove(CursorClass.crosshair);\n const selectedElements = getSelectedDrawElements(board);\n const targetElement = selectedElements.length === 1 && selectedElements[0];\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (!PlaitBoard.isReadonly(board) && !isSelectionMoving(board) && targetElement && PlaitDrawElement.isShape(targetElement)) {\n const points = getAutoCompletePoints(targetElement);\n const hitIndex = getHitIndexOfAutoCompletePoint(movingPoint, points);\n const hitPoint = points[hitIndex];\n const component = PlaitElement.getComponent(targetElement) as GeometryComponent;\n component.lineAutoCompleteGenerator!.recoverAutoCompleteG();\n if (hitPoint) {\n component.lineAutoCompleteGenerator!.removeAutoCompleteG(hitIndex);\n reactionG = drawCircle(PlaitBoard.getRoughSVG(board), hitPoint, LINE_AUTO_COMPLETE_HOVERED_DIAMETER, {\n stroke: 'none',\n fill: RgbaToHEX(PRIMARY_COLOR, LINE_AUTO_COMPLETE_HOVERED_OPACITY),\n fillStyle: 'solid'\n });\n PlaitBoard.getElementActiveHost(board).append(reactionG);\n PlaitBoard.getBoardContainer(board).classList.add(CursorClass.crosshair);\n }\n }\n pointerMove(event);\n };\n\n return board;\n};\n","import {\n BoardTransforms,\n PRESS_AND_MOVE_BUFFER,\n PlaitBoard,\n PlaitOptionsBoard,\n PlaitPointerType,\n Point,\n RectangleClient,\n Transforms,\n addSelectedElement,\n clearSelectedElement,\n createG,\n distanceBetweenPointAndPoint,\n temporaryDisableSelection,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { LineShape, PlaitDrawElement, PlaitLine, PlaitShape } from '../interfaces';\nimport { getShape } from '../utils/shape';\nimport { getEngine } from '../engines';\nimport { handleLineCreating } from '../utils/line/line-basic';\nimport { getSelectedDrawElements } from '../utils/selected';\nimport { getAutoCompletePoints, getHitIndexOfAutoCompletePoint } from '../utils/geometry';\n\nexport const WithLineAutoCompletePluginKey = 'plait-line-auto-complete-plugin-key';\n\nexport interface LineAutoCompleteOptions {\n afterComplete: (element: PlaitLine) => {};\n}\n\nexport const withLineAutoComplete = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n\n let startPoint: Point | null = null;\n let lineShapeG: SVGGElement | null = null;\n let sourceElement: PlaitShape | null;\n let temporaryElement: PlaitLine | null;\n\n board.pointerDown = (event: PointerEvent) => {\n const selectedElements = getSelectedDrawElements(board);\n const targetElement = selectedElements.length === 1 && selectedElements[0];\n const clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (!PlaitBoard.isReadonly(board) && targetElement && PlaitDrawElement.isShape(targetElement)) {\n const points = getAutoCompletePoints(targetElement);\n const index = getHitIndexOfAutoCompletePoint(clickPoint, points);\n const hitPoint = points[index];\n if (hitPoint) {\n temporaryDisableSelection(board as PlaitOptionsBoard);\n startPoint = hitPoint;\n sourceElement = targetElement;\n BoardTransforms.updatePointerType(board, LineShape.elbow);\n }\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n lineShapeG?.remove();\n lineShapeG = createG();\n let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (startPoint && sourceElement) {\n const distance = distanceBetweenPointAndPoint(...movingPoint, ...startPoint);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n const rectangle = RectangleClient.getRectangleByPoints(sourceElement.points);\n const shape = getShape(sourceElement);\n const engine = getEngine(shape);\n let sourcePoint = startPoint;\n if (engine.getNearestCrossingPoint) {\n const crossingPoint = engine.getNearestCrossingPoint(rectangle, startPoint);\n sourcePoint = crossingPoint;\n }\n temporaryElement = handleLineCreating(board, LineShape.elbow, sourcePoint, movingPoint, sourceElement, lineShapeG);\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<LineAutoCompleteOptions>(WithLineAutoCompletePluginKey)\n ?.afterComplete;\n afterComplete && afterComplete(temporaryElement);\n }\n if (startPoint) {\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n startPoint = null;\n }\n lineShapeG?.remove();\n lineShapeG = null;\n sourceElement = null;\n temporaryElement = null;\n globalPointerUp(event);\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitElement,\n Point,\n distanceBetweenPointAndSegments,\n getHitElementByPoint,\n getNearestPointBetweenPointAndSegments\n} from '@plait/core';\nimport { PlaitDrawElement, PlaitLine } from '../interfaces';\nimport { ResizeHandle, ResizeRef, ResizeState, WithResizeOptions, getRatioByPoint, withResize } from '@plait/common';\nimport { DrawTransforms } from '../transforms';\nimport { LineComponent } from '../line.component';\nimport { getLinePoints } from '../utils/line/line-basic';\nimport { getHitLineTextIndex } from '../utils/position/line';\n\nexport const withLineTextMove = (board: PlaitBoard) => {\n let textIndex = 0;\n const movableBuffer = 100;\n const options: WithResizeOptions<PlaitLine> = {\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.isLine(element);\n }) as undefined | PlaitLine;\n if (line) {\n const index = getHitLineTextIndex(board, line, point);\n const hitComponent = PlaitElement.getComponent(line) as LineComponent;\n const textManage = hitComponent.getTextManages()[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<PlaitLine>, resizeState: ResizeState) => {\n const element = resizeRef.element;\n if (element) {\n const movingPoint = resizeState.endPoint;\n const points = getLinePoints(board, element);\n const distance = distanceBetweenPointAndSegments(points, movingPoint);\n if (distance <= movableBuffer) {\n const point = getNearestPointBetweenPointAndSegments(movingPoint, points, false);\n const position = getRatioByPoint(points, point);\n const texts = [...element.texts];\n texts[textIndex] = {\n ...texts[textIndex],\n position\n };\n DrawTransforms.setLineTexts(board, element, texts);\n }\n }\n }\n };\n\n withResize<PlaitLine>(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 { LineComponent } from '../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 { withLineCreateByDraw } from './with-line-create';\nimport { withGeometryResize } from './with-geometry-resize';\nimport { withLineResize } from './with-line-resize';\nimport { withLineBoundReaction } from './with-line-bound-reaction';\nimport { withLineText } from './with-line-text';\nimport { ImageComponent } from '../image.component';\nimport { withLineAutoCompleteReaction } from './with-line-auto-complete-reaction';\nimport { withLineAutoComplete } from './with-line-auto-complete';\nimport { withLineTextMove } from './with-line-text-move';\nimport { withDrawResize } from './with-draw-resize';\nimport { isHitDrawElement, isHitElementInside, isRectangleHitDrawElement } from '../utils/hit';\nimport { getLinePoints, getLineTextRectangle } from '../utils/line/line-basic';\n\nexport const withDraw = (board: PlaitBoard) => {\n const { drawElement, getRectangle, isRectangleHit, isHit, isInsidePoint, isMovable, isAlign, getRelatedFragment } = board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitDrawElement.isGeometry(context.element)) {\n return GeometryComponent;\n } else if (PlaitDrawElement.isLine(context.element)) {\n return LineComponent;\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.isLine(element)) {\n const points = getLinePoints(board, element);\n const lineTextRectangles = element.texts.map((text, index) => {\n const rectangle = getLineTextRectangle(board, element, index);\n return rectangle;\n });\n const linePointsRectangle = RectangleClient.getRectangleByPoints(points);\n return RectangleClient.getBoundingRectangle([linePointsRectangle, ...lineTextRectangles]);\n }\n if (PlaitDrawElement.isImage(element)) {\n return RectangleClient.getRectangleByPoints(element.points);\n }\n return getRectangle(element);\n };\n\n board.isRectangleHit = (element: PlaitElement, selection: Selection) => {\n const result = isRectangleHitDrawElement(board, element, selection);\n if (result !== null) {\n return result;\n }\n return isRectangleHit(element, selection);\n };\n\n board.isHit = (element, point) => {\n const result = isHitDrawElement(board, element, point);\n if (result !== null) {\n return result;\n }\n return isHit(element, point);\n };\n\n board.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.isLine(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[]) => {\n const selectedElements = getSelectedElements(board);\n const lineElements = board.children.filter(element => PlaitDrawElement.isLine(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]);\n };\n\n return withDrawResize(\n withLineTextMove(\n withLineAutoCompleteReaction(\n withLineText(\n withLineBoundReaction(\n withLineResize(\n withGeometryResize(\n withLineCreateByDraw(\n withLineAutoComplete(\n withGeometryCreateByDrag(withGeometryCreateByDrawing(withDrawFragment(withDrawHotkey(board))))\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":["getCenterPointsOnPolygon","heightRatio","getNearestPointBetweenPointAndRoundRectangle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plait-draw.mjs","sources":["../../../packages/draw/src/interfaces/geometry.ts","../../../packages/draw/src/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/line.ts","../../../packages/draw/src/utils/line/line-resize.ts","../../../packages/draw/src/utils/line/elbow.ts","../../../packages/draw/src/utils/line/line-arrow.ts","../../../packages/draw/src/utils/shape.ts","../../../packages/draw/src/generators/line.generator.ts","../../../packages/draw/src/utils/position/geometry.ts","../../../packages/draw/src/utils/memorize.ts","../../../packages/draw/src/utils/line/line-basic.ts","../../../packages/draw/src/utils/selected.ts","../../../packages/draw/src/utils/position/line.ts","../../../packages/draw/src/utils/hit.ts","../../../packages/draw/src/utils/polygon.ts","../../../packages/draw/src/engines/basic-shapes/comment.ts","../../../packages/draw/src/engines/basic-shapes/polygon.ts","../../../packages/draw/src/engines/basic-shapes/cross.ts","../../../packages/draw/src/engines/basic-shapes/diamond.ts","../../../packages/draw/src/engines/basic-shapes/ellipse.ts","../../../packages/draw/src/engines/basic-shapes/hexagon.ts","../../../packages/draw/src/engines/basic-shapes/left-arrow.ts","../../../packages/draw/src/engines/basic-shapes/octagon.ts","../../../packages/draw/src/engines/basic-shapes/parallelogram.ts","../../../packages/draw/src/engines/basic-shapes/pentagon.ts","../../../packages/draw/src/engines/basic-shapes/pentagon-arrow.ts","../../../packages/draw/src/engines/basic-shapes/process-arrow.ts","../../../packages/draw/src/engines/basic-shapes/rectangle.ts","../../../packages/draw/src/engines/basic-shapes/right-arrow.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/index.ts","../../../packages/draw/src/utils/geometry.ts","../../../packages/draw/src/utils/style/stroke.ts","../../../packages/draw/src/utils/line/line-common.ts","../../../packages/draw/src/interfaces/line.ts","../../../packages/draw/src/interfaces/element.ts","../../../packages/draw/src/interfaces/index.ts","../../../packages/draw/src/generators/geometry-shape.generator.ts","../../../packages/draw/src/transforms/line.ts","../../../packages/draw/src/transforms/geometry.ts","../../../packages/draw/src/transforms/geometry-text.ts","../../../packages/draw/src/transforms/image.ts","../../../packages/draw/src/transforms/index.ts","../../../packages/draw/src/generators/line-auto-complete.generator.ts","../../../packages/draw/src/geometry.component.ts","../../../packages/draw/src/generators/line-active.generator.ts","../../../packages/draw/src/line.component.ts","../../../packages/draw/src/plugins/with-draw-hotkey.ts","../../../packages/draw/src/plugins/with-geometry-create.ts","../../../packages/draw/src/utils/clipboard.ts","../../../packages/draw/src/plugins/with-draw-fragment.ts","../../../packages/draw/src/plugins/with-line-create.ts","../../../packages/draw/src/utils/resize-align-reaction.ts","../../../packages/draw/src/utils/resize-align.ts","../../../packages/draw/src/plugins/with-draw-resize.ts","../../../packages/draw/src/plugins/with-geometry-resize.ts","../../../packages/draw/src/plugins/with-line-resize.ts","../../../packages/draw/src/plugins/with-line-bound-reaction.ts","../../../packages/draw/src/plugins/with-line-text.ts","../../../packages/draw/src/image.component.ts","../../../packages/draw/src/plugins/with-line-auto-complete-reaction.ts","../../../packages/draw/src/plugins/with-line-auto-complete.ts","../../../packages/draw/src/plugins/with-line-text-move.ts","../../../packages/draw/src/generators/group.generator.ts","../../../packages/draw/src/group.component.ts","../../../packages/draw/src/plugins/with-draw.ts","../../../packages/draw/src/plait-draw.ts"],"sourcesContent":["import { PlaitBoard, PlaitElement, Point, PointOfRectangle, RectangleClient, Vector } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { ParagraphElement } from '@plait/text';\nimport { StrokeStyle } from './element';\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}\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}\n\nexport type GeometryShapes = BasicShapes | FlowchartSymbols;\n\nexport interface PlaitGeometry extends PlaitElement {\n points: [Point, Point];\n type: 'geometry';\n shape: GeometryShapes;\n\n text: ParagraphElement;\n textHeight: number;\n\n // node style attributes\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n\n angle: number;\n opacity: number;\n}\n\nexport interface 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\nexport interface ShapeEngine {\n isInsidePoint: (rectangle: RectangleClient, point: Point) => boolean;\n getNearestPoint: (rectangle: RectangleClient, point: Point) => Point;\n getNearestCrossingPoint?: (rectangle: RectangleClient, point: Point) => Point;\n getConnectorPoints: (rectangle: RectangleClient) => Point[];\n getCornerPoints: (rectangle: RectangleClient) => Point[];\n getEdgeByConnectionPoint?: (rectangle: RectangleClient, point: PointOfRectangle) => [Point, Point] | null;\n getTangentVectorByConnectionPoint?: (rectangle: RectangleClient, point: PointOfRectangle) => Vector | null;\n draw: (board: PlaitBoard, rectangle: RectangleClient, options: Options) => SVGGElement;\n getTextRectangle?: (element: PlaitGeometry) => RectangleClient;\n}\n","import { ACTIVE_STROKE_WIDTH } from '@plait/core';\nimport { FlowchartSymbols } from '../interfaces';\n\nexport const ShapeDefaultSpace = {\n rectangleAndText: 4\n};\n\nexport const DefaultGeometryStyle = {\n strokeWidth: 2,\n defaultRadius: 4,\n strokeColor: '#000',\n fill: 'none'\n};\n\nexport const DefaultGeometryActiveStyle = {\n strokeWidth: ACTIVE_STROKE_WIDTH,\n selectionStrokeWidth: ACTIVE_STROKE_WIDTH\n};\n\nexport const DefaultBasicShapeProperty = {\n width: 100,\n height: 100,\n strokeColor: '#333',\n strokeWidth: 2\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 DefaultDecisionProperty = {\n width: 140,\n height: 70\n};\n\nexport const DefaultDataProperty = {\n width: 124,\n height: 60\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 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};\n\nexport const REACTION_MARGIN = -4;\n","import { BasicShapes, FlowchartSymbols, LineShape } from '../interfaces';\n\nexport type DrawPointerType = BasicShapes | LineShape | FlowchartSymbols;\n\nexport const getGeometryPointers = () => {\n return [...Object.keys(BasicShapes), ...Object.keys(FlowchartSymbols)];\n};\n\nexport const getBasicPointers = () => {\n return Object.keys(BasicShapes);\n};\n\nexport const getFlowchartPointers = () => {\n return Object.keys(FlowchartSymbols);\n};\n\nexport const getLinePointers = () => {\n return Object.keys(LineShape);\n};\n","export const DEFAULT_IMAGE_WIDTH = 1000;\n","import { ThemeColorMode } from '@plait/core';\n\nexport const DrawThemeColors = {\n [ThemeColorMode.default]: {\n strokeColor: '#333333',\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","export const DefaultLineStyle = {\n strokeWidth: 2,\n strokeColor: '#000'\n};\n\nexport const LINE_TEXT_SPACE = 4;\n\nexport const LINE_AUTO_COMPLETE_DIAMETER = 6;\n\nexport const LINE_AUTO_COMPLETE_OPACITY = 0.6;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_OPACITY = 0.8;\n\nexport const LINE_AUTO_COMPLETE_HOVERED_DIAMETER = 10;\n\nexport const LINE_ALIGN_TOLERANCE = 3;\n","import { ElbowLineRouteOptions, ResizeState, generateElbowLineRoute, removeDuplicatePoints, simplifyOrthogonalPoints } from '@plait/common';\nimport { PlaitBoard, Point, RectangleClient, drawCircle } from '@plait/core';\nimport { LINE_ALIGN_TOLERANCE } from '../../constants/line';\nimport { getElbowLineRouteOptions, getLineHandleRefPair } from './line-common';\nimport { PlaitLine } from '../../interfaces';\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: PlaitLine,\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 = getLineHandleRefPair(board, element);\n const params = getElbowLineRouteOptions(board, element, handleRefPair);\n const keyPoints = removeDuplicatePoints(generateElbowLineRoute(params));\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: PlaitLine,\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 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 // const fakeRectangleG = PlaitBoard.getRoughSVG(board).rectangle(\n // fakeRectangle.x,\n // fakeRectangle.y,\n // fakeRectangle.width,\n // fakeRectangle.height,\n // { stroke: 'blue' }\n // );\n // PlaitBoard.getElementActiveHost(board).append(fakeRectangleG);\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, PlaitBoard, getElementById, RectangleClient, Vector } from '@plait/core';\nimport {\n getPoints,\n getPointByVector,\n removeDuplicatePoints,\n generateElbowLineRoute,\n simplifyOrthogonalPoints,\n isSourceAndTargetIntersect\n} from '@plait/common';\nimport { BasicShapes, LineHandleRefPair, PlaitGeometry, PlaitLine } from '../../interfaces';\nimport { createGeometryElement } from '../geometry';\nimport { getStrokeWidthByElement } from '../style/stroke';\nimport { getElbowLineRouteOptions, getLineHandleRefPair } from './line-common';\nimport { getMidKeyPoints, getMirrorDataPoints, hasIllegalElbowPoint } from './line-resize';\n\nexport const getElbowPoints = (board: PlaitBoard, element: PlaitLine) => {\n const handleRefPair = getLineHandleRefPair(board, element);\n const params = getElbowLineRouteOptions(board, element, handleRefPair);\n // console.log(params, 'params');\n const isIntersect = isSourceAndTargetIntersect(params);\n if (isIntersect) {\n return simplifyOrthogonalPoints(\n getPoints(\n handleRefPair.source.point,\n handleRefPair.source.direction,\n handleRefPair.target.point,\n handleRefPair.target.direction,\n 0\n )\n );\n }\n const keyPoints = removeDuplicatePoints(generateElbowLineRoute(params));\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(PlaitLine.getPoints(board, element));\n const midDataPoints = dataPoints.slice(1, -1);\n if (hasIllegalElbowPoint(midDataPoints)) {\n return simplifyOrthogonalPoints(keyPoints);\n }\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: PlaitLine) => {\n const options = getElbowLineRouteOptions(board, element);\n return [options.nextSourcePoint, options.nextTargetPoint];\n};\n\nexport const getSourceAndTargetRectangle = (board: PlaitBoard, element: PlaitLine, handleRefPair: LineHandleRefPair) => {\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 const sourceRectangle = RectangleClient.inflate(\n RectangleClient.getRectangleByPoints(sourceElement.points),\n getStrokeWidthByElement(sourceElement) * 2\n );\n const targetRectangle = RectangleClient.inflate(\n RectangleClient.getRectangleByPoints(targetElement.points),\n getStrokeWidthByElement(targetElement) * 2\n );\n return {\n sourceRectangle,\n targetRectangle\n };\n};\n\nconst createFakeElement = (startPoint: Point, vector: Vector) => {\n const point = getPointByVector(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: PlaitLine, 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 { Point, arrowPoints, createG, createPath, distanceBetweenPointAndPoint, drawLinearPath, rotate } from '@plait/core';\nimport { LineMarkerType, PlaitLine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getExtendPoint, getUnitVectorByPointAndPoint } from '@plait/common';\nimport { getStrokeWidthByElement } from '../style';\n\ninterface ArrowOptions {\n marker: LineMarkerType;\n source: Point;\n target: Point;\n isSource: boolean;\n}\nconst ARROW_LENGTH = 20;\n\nexport const drawLineArrow = (element: PlaitLine, points: Point[], options: Options) => {\n const arrowG = createG();\n if (PlaitLine.isSourceMark(element, LineMarkerType.none) && PlaitLine.isTargetMark(element, LineMarkerType.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 (!PlaitLine.isSourceMark(element, LineMarkerType.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 (!PlaitLine.isTargetMark(element, LineMarkerType.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: PlaitLine, arrowOptions: ArrowOptions, options: Options) => {\n const { marker, target, source, isSource } = arrowOptions;\n let targetArrow;\n switch (marker) {\n case LineMarkerType.openTriangle: {\n targetArrow = drawOpenTriangle(element, source, target, options);\n break;\n }\n case LineMarkerType.solidTriangle: {\n targetArrow = drawSolidTriangle(source, target, options);\n break;\n }\n case LineMarkerType.arrow: {\n targetArrow = drawArrow(element, source, target, options);\n break;\n }\n case LineMarkerType.sharpArrow: {\n targetArrow = drawSharpArrow(source, target, options);\n break;\n }\n case LineMarkerType.oneSideUp: {\n targetArrow = drawOneSideArrow(source, target, isSource ? 'down' : 'up', options);\n break;\n }\n case LineMarkerType.oneSideDown: {\n targetArrow = drawOneSideArrow(source, target, isSource ? 'up' : 'down', options);\n break;\n }\n case LineMarkerType.hollowTriangle: {\n targetArrow = drawHollowTriangleArrow(source, target, options);\n break;\n }\n case LineMarkerType.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: PlaitLine, 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: PlaitLine, 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 { BasicShapes, PlaitDrawElement, PlaitShape } from '../interfaces';\n\nexport const getShape = (value: PlaitShape) => {\n if (PlaitDrawElement.isImage(value)) {\n return BasicShapes.rectangle;\n }\n return value.shape;\n};\n","import { PlaitLine } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { drawLine } from '../utils/line/line-basic';\n\nexport interface ShapeData {}\n\nexport class LineShapeGenerator extends Generator<PlaitLine, ShapeData> {\n canDraw(element: PlaitLine, data: ShapeData): boolean {\n return true;\n }\n\n draw(element: PlaitLine, data: ShapeData) {\n let lineG: SVGGElement | undefined;\n lineG = drawLine(this.board, element);\n return lineG;\n }\n}\n","import { Ancestor, PlaitBoard, Point, RectangleClient, depthFirstRecursion, getIsRecursionFunc } from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry } from '../../interfaces';\nimport { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs, ResizeHandle } from '@plait/common';\nimport { getEngine } from '../../engines';\nimport { PlaitImage } from '../../interfaces/image';\nimport { getShape } from '../shape';\n\nexport const getHitRectangleResizeHandleRef = (board: PlaitBoard, rectangle: RectangleClient, point: Point) => {\n const resizeHandleRefs = getRectangleResizeHandleRefs(rectangle, RESIZE_HANDLE_DIAMETER);\n const result = resizeHandleRefs.find(resizeHandleRef => {\n return RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), resizeHandleRef.rectangle);\n });\n return result;\n};\n\nexport const getHitOutlineGeometry = (board: PlaitBoard, point: Point, offset: number = 0): PlaitGeometry | null => {\n let geometry: PlaitGeometry | PlaitImage | null = null;\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (PlaitDrawElement.isGeometry(node) || PlaitDrawElement.isImage(node)) {\n let client = RectangleClient.getRectangleByPoints(node.points);\n client = RectangleClient.getOutlineRectangle(client, offset);\n const shape = getShape(node);\n const isHit = getEngine(shape).isInsidePoint(client, point);\n if (isHit) {\n geometry = node;\n }\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return geometry;\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 } 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.isLine(element): {\n key = MemorizeKey.line;\n break;\n }\n }\n return key;\n};\n\nexport const getLineMemorizedLatest = () => {\n const properties = getMemorizedLatest(MemorizeKey.line);\n delete properties?.text;\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 {\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 = (element: PlaitDrawElement, 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 newProperties = (setNodeOperation as BaseSetNodeOperation).newProperties;\n textMemory = { ...textMemory, ...newProperties };\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 {\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} from '@plait/core';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { getPointOnPolyline, getPointByVector, removeDuplicatePoints, getExtendPoint, isSourceAndTargetIntersect } from '@plait/common';\nimport { LineHandle, LineMarkerType, LineShape, LineText, PlaitDrawElement, PlaitLine, PlaitShape } from '../../interfaces';\nimport { getNearestPoint } from '../geometry';\nimport { getLineDashByElement, getStrokeColorByElement, getStrokeWidthByElement } from '../style/stroke';\nimport { getEngine } from '../../engines';\nimport { getShape } from '../shape';\nimport { DefaultLineStyle, LINE_TEXT_SPACE } from '../../constants/line';\nimport { LineShapeGenerator } from '../../generators/line.generator';\nimport { REACTION_MARGIN } from '../../constants';\nimport { getHitOutlineGeometry } from '../position/geometry';\nimport { getLineMemorizedLatest } from '../memorize';\nimport { alignPoints } from './line-resize';\nimport { getElbowLineRouteOptions, getLineHandleRefPair } from './line-common';\nimport { getElbowPoints, getNextSourceAndTargetPoints } from './elbow';\nimport { drawLineArrow } from './line-arrow';\n\nexport const createLineElement = (\n shape: LineShape,\n points: [Point, Point],\n source: LineHandle,\n target: LineHandle,\n texts?: LineText[],\n options?: Pick<PlaitLine, 'strokeColor' | 'strokeWidth'>\n): PlaitLine => {\n return {\n id: idCreator(),\n type: 'line',\n shape,\n source,\n texts: texts ? texts : [],\n target,\n opacity: 1,\n points,\n ...options\n };\n};\n\nexport const getLinePoints = (board: PlaitBoard, element: PlaitLine) => {\n switch (element.shape) {\n case LineShape.elbow: {\n return getElbowPoints(board, element);\n }\n case LineShape.curve: {\n return getCurvePoints(board, element);\n }\n default: {\n const points = PlaitLine.getPoints(board, element);\n const handleRefPair = getLineHandleRefPair(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: PlaitLine) => {\n if (element.points.length === 2) {\n const handleRefPair = getLineHandleRefPair(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(getPointByVector(source.point, source.vector, offset));\n }\n if (targetBoundElement) {\n curvePoints.push(getPointByVector(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(getPointByVector(source.point, source.vector, offset));\n curvePoints.push(getPointByVector(target.point, target.vector, offset));\n }\n curvePoints.push(target.point);\n return pointsOnBezierCurves(curvePoints) as Point[];\n } else {\n let dataPoints = PlaitLine.getPoints(board, element);\n dataPoints = removeDuplicatePoints(dataPoints);\n const points = catmullRomFitting(dataPoints);\n return pointsOnBezierCurves(points) as Point[];\n }\n};\n\nexport function getMiddlePoints(board: PlaitBoard, element: PlaitLine) {\n const result: Point[] = [];\n const shape = element.shape;\n const hideBuffer = 10;\n if (shape === LineShape.straight) {\n const points = PlaitLine.getPoints(board, element);\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 === LineShape.curve) {\n const points = PlaitLine.getPoints(board, element);\n const pointsOnBezier = getCurvePoints(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 === LineShape.elbow) {\n const renderPoints = getElbowPoints(board, element);\n const options = getElbowLineRouteOptions(board, element);\n const isIntersect = isSourceAndTargetIntersect(options);\n if (!isIntersect) {\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\nexport const drawLine = (board: PlaitBoard, element: PlaitLine) => {\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(board, element);\n const strokeLineDash = getLineDashByElement(element);\n const options = { stroke: strokeColor, strokeWidth, strokeLineDash };\n const lineG = createG();\n let points = getLinePoints(board, element);\n let line;\n if (element.shape === LineShape.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 lineG.appendChild(line);\n const { mask, maskTargetFillRect } = drawMask(board, element, id);\n lineG.appendChild(mask);\n line.appendChild(maskTargetFillRect);\n const arrow = drawLineArrow(element, points, { stroke: strokeColor, strokeWidth });\n arrow && lineG.appendChild(arrow);\n return lineG;\n};\n\nexport const getConnectionByNearestPoint = (board: PlaitBoard, point: Point, hitElement: PlaitShape): Point => {\n let rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n let nearestPoint = getNearestPoint(hitElement, point);\n const hitConnector = getHitConnectorPoint(nearestPoint, hitElement, rectangle);\n nearestPoint = hitConnector ? hitConnector : nearestPoint;\n return [(nearestPoint[0] - rectangle.x) / rectangle.width, (nearestPoint[1] - rectangle.y) / rectangle.height];\n};\n\nexport const getHitConnectorPoint = (point: Point, hitElement: PlaitShape, rectangle: RectangleClient) => {\n const shape = getShape(hitElement);\n const connector = getEngine(shape).getConnectorPoints(rectangle);\n const points = RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(point, 10, 10));\n const pointRectangle = RectangleClient.getRectangleByPoints(points);\n return connector.find(point => {\n return RectangleClient.isHit(pointRectangle, RectangleClient.getRectangleByPoints([point, point]));\n });\n};\n\nexport const getLineTextRectangle = (board: PlaitBoard, element: PlaitLine, index: number): RectangleClient => {\n const text = element.texts[index];\n const elbowPoints = getLinePoints(board, element);\n const point = getPointOnPolyline(elbowPoints, text.position);\n return {\n x: point[0] - text.width! / 2,\n y: point[1] - text.height! / 2,\n width: text.width!,\n height: text.height!\n };\n};\n\nexport const getLines = (board: PlaitBoard) => {\n return findElements(board, {\n match: (element: PlaitElement) => PlaitDrawElement.isLine(element),\n recursion: (element: PlaitElement) => PlaitDrawElement.isDrawElement(element)\n }) as PlaitLine[];\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 handleLineCreating = (\n board: PlaitBoard,\n lineShape: LineShape,\n sourcePoint: Point,\n movingPoint: Point,\n sourceElement: PlaitShape | null,\n lineShapeG: SVGGElement\n) => {\n const hitElement = getHitOutlineGeometry(board, movingPoint, REACTION_MARGIN);\n const targetConnection = hitElement ? getConnectionByNearestPoint(board, movingPoint, hitElement) : undefined;\n const connection = sourceElement ? getConnectionByNearestPoint(board, sourcePoint, sourceElement) : undefined;\n const targetBoundId = hitElement ? hitElement.id : undefined;\n const lineGenerator = new LineShapeGenerator(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 = createLineElement(\n lineShape,\n [sourcePoint, movingPoint],\n { marker: sourceMarker || LineMarkerType.none, connection: connection, boundId: sourceElement?.id },\n { marker: targetMarker || LineMarkerType.arrow, connection: targetConnection, boundId: targetBoundId },\n [],\n {\n strokeWidth: DefaultLineStyle.strokeWidth,\n ...memorizedLatest\n }\n );\n const linePoints = getLinePoints(board, temporaryLineElement);\n const otherPoint = linePoints[0];\n temporaryLineElement.points[1] = alignPoints(otherPoint, movingPoint);\n lineGenerator.processDrawing(temporaryLineElement, lineShapeG);\n PlaitBoard.getElementActiveHost(board).append(lineShapeG);\n return temporaryLineElement;\n};\n\nfunction drawMask(board: PlaitBoard, element: PlaitLine, id: string) {\n const mask = createMask();\n mask.setAttribute('id', id);\n const points = getLinePoints(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 = getLineTextRectangle(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, getSelectedElements } from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\n\nexport const getSelectedDrawElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isDrawElement(value)) as PlaitDrawElement[];\n return selectedElements;\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 getSelectedLineElements = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(value => PlaitDrawElement.isLine(value)) as PlaitLine[];\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","import { PlaitBoard, Point, RectangleClient, distanceBetweenPointAndSegments } from '@plait/core';\nimport { LineShape, PlaitLine } from '../../interfaces';\nimport { RESIZE_HANDLE_DIAMETER, getPointOnPolyline } from '@plait/common';\nimport { getLinePoints, getMiddlePoints } from '../line/line-basic';\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 = PlaitLine.getPoints(board, element);\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 !== LineShape.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\nexport const getHitLineTextIndex = (board: PlaitBoard, element: PlaitLine, point: Point) => {\n const texts = element.texts;\n if (!texts.length) return -1;\n\n const points = getLinePoints(board, element);\n return texts.findIndex(text => {\n const center = getPointOnPolyline(points, text.position);\n const rectangle = {\n x: center[0] - text.width! / 2,\n y: center[1] - text.height! / 2,\n width: text.width!,\n height: text.height!\n };\n return RectangleClient.isHit(rectangle, RectangleClient.getRectangleByPoints([point, point]));\n });\n};\n","import {\n PlaitElement,\n RectangleClient,\n Selection,\n PlaitBoard,\n isPolylineHitRectangle,\n Point,\n distanceBetweenPointAndSegments,\n distanceBetweenPointAndPoint,\n HIT_DISTANCE_BUFFER,\n rotate\n} from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { TRANSPARENT, rotatePoints } from '@plait/common';\nimport { getTextRectangle } from './geometry';\nimport { getLinePoints } from './line/line-basic';\nimport { getFillByElement } from './style/stroke';\nimport { DefaultGeometryStyle } from '../constants/geometry';\nimport { getEngine } from '../engines';\nimport { getShape } from './shape';\nimport { getHitLineTextIndex } from './position/line';\n\nexport const isTextExceedingBounds = (geometry: PlaitGeometry) => {\n const client = RectangleClient.getRectangleByPoints(geometry.points);\n if (geometry.textHeight > client.height) {\n return true;\n }\n return false;\n};\n\nexport const isHitLineText = (board: PlaitBoard, element: PlaitLine, point: Point) => {\n return getHitLineTextIndex(board, element, point) !== -1;\n};\n\nexport const isHitPolyLine = (pathPoints: Point[], point: Point) => {\n const distance = distanceBetweenPointAndSegments(pathPoints, point);\n return distance <= HIT_DISTANCE_BUFFER;\n};\n\nexport const isHitLine = (board: PlaitBoard, element: PlaitLine, point: Point) => {\n const points = getLinePoints(board, element);\n const isHitText = isHitLineText(board, element, point);\n return isHitText || isHitPolyLine(points, point);\n};\n\nexport const isRectangleHitDrawElement = (board: PlaitBoard, element: PlaitElement, selection: Selection) => {\n const rangeRectangle = RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]);\n if (PlaitDrawElement.isGeometry(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n const centerPoint = RectangleClient.getCenterPoint(client);\n let rotatedCornerPoints = rotatePoints(RectangleClient.getCornerPoints(client), centerPoint, element.angle);\n if (isTextExceedingBounds(element)) {\n const textClient = getTextRectangle(element);\n rotatedCornerPoints = rotatePoints(RectangleClient.getCornerPoints(textClient), centerPoint, element.angle);\n }\n return isPolylineHitRectangle(rotatedCornerPoints, rangeRectangle);\n }\n\n if (PlaitDrawElement.isImage(element)) {\n const client = RectangleClient.getRectangleByPoints(element.points);\n const rotatedCornerPoints = rotatePoints(\n RectangleClient.getCornerPoints(client),\n RectangleClient.getCenterPoint(client),\n element.angle\n );\n return isPolylineHitRectangle(rotatedCornerPoints, client);\n }\n\n if (PlaitDrawElement.isLine(element)) {\n const points = getLinePoints(board, element);\n return isPolylineHitRectangle(points, rangeRectangle);\n }\n return null;\n};\n\nexport const isHitDrawElement = (board: PlaitBoard, element: PlaitElement, point: Point) => {\n const rectangle = board.getRectangle(element);\n const centerPoint = RectangleClient.getCenterPoint(rectangle!);\n if (element.angle) {\n point = rotate(point[0], point[1], centerPoint[0], centerPoint[1], -element.angle) as Point;\n }\n if (PlaitDrawElement.isGeometry(element)) {\n const fill = getFillByElement(board, element);\n const engine = getEngine(getShape(element));\n const nearestPoint = engine.getNearestPoint(rectangle!, point);\n const distance = distanceBetweenPointAndPoint(nearestPoint[0], nearestPoint[1], point[0], point[1]);\n const isHitEdge = distance <= HIT_DISTANCE_BUFFER;\n if (isHitEdge) {\n return isHitEdge;\n }\n // when shape equals text, fill is not allowed\n if (fill !== DefaultGeometryStyle.fill && fill !== TRANSPARENT && !PlaitDrawElement.isText(element)) {\n const isHitInside = engine.isInsidePoint(rectangle!, point);\n if (isHitInside) {\n return isHitInside;\n }\n } else {\n // if shape equals text, only check text rectangle\n if (PlaitDrawElement.isText(element)) {\n const textClient = getTextRectangle(element);\n let isHitText = RectangleClient.isPointInRectangle(textClient, point);\n return isHitText;\n }\n\n // check textRectangle of element\n const textClient = engine.getTextRectangle ? engine.getTextRectangle(element) : getTextRectangle(element);\n const isHitTextRectangle = RectangleClient.isPointInRectangle(textClient, point);\n if (isHitTextRectangle) {\n return isHitTextRectangle;\n }\n }\n }\n if (PlaitDrawElement.isImage(element)) {\n return isRectangleHitDrawElement(board, element, { anchor: point, focus: point });\n }\n\n if (PlaitDrawElement.isLine(element)) {\n return isHitLine(board, element, point);\n }\n return null;\n};\n\nexport const isHitElementInside = (board: PlaitBoard, element: PlaitElement, point: Point) => {\n const rectangle = board.getRectangle(element);\n const centerPoint = RectangleClient.getCenterPoint(rectangle!);\n if (element.angle) {\n point = rotate(point[0], point[1], centerPoint[0], centerPoint[1], -element.angle) as Point;\n }\n if (PlaitDrawElement.isGeometry(element)) {\n const engine = getEngine(getShape(element));\n const isHitInside = engine.isInsidePoint(rectangle!, point);\n if (isHitInside) {\n return isHitInside;\n }\n\n if (engine.getTextRectangle) {\n const textClient = engine.getTextRectangle(element);\n const isHitTextRectangle = RectangleClient.isPointInRectangle(textClient, point);\n if (isHitTextRectangle) {\n return isHitTextRectangle;\n }\n }\n }\n if (PlaitDrawElement.isImage(element)) {\n return isRectangleHitDrawElement(board, element, { anchor: point, focus: point });\n }\n\n if (PlaitDrawElement.isLine(element)) {\n return isHitLine(board, element, point);\n }\n\n return null;\n};\n","import { getCrossingPointsBetweenPointAndSegment, isPointOnSegment } from '@plait/common';\nimport { Point } from '@plait/core';\n\nexport const getCenterPointsOnPolygon = (points: Point[]) => {\n const centerPoints: Point[] = [];\n for (let i = 0; i < points.length; i++) {\n let j = i == points.length - 1 ? 0 : i + 1;\n centerPoints.push([(points[i][0] + points[j][0]) / 2, (points[i][1] + points[j][1]) / 2]);\n }\n return centerPoints;\n};\n\nexport const getCrossingPointBetweenPointAndPolygon = (corners: Point[], point: Point) => {\n const result: Point[] = [];\n for (let index = 1; index <= corners.length; index++) {\n let start = corners[index - 1];\n let end = index === corners.length ? corners[0] : corners[index];\n const crossingPoint = getCrossingPointsBetweenPointAndSegment(point, start, end);\n result.push(...crossingPoint);\n }\n return result;\n};\n\nexport const getPolygonEdgeByConnectionPoint = (corners: Point[], point: Point) => {\n for (let index = 1; index <= corners.length; index++) {\n let start = corners[index - 1];\n let end = index === corners.length ? corners[0] : corners[index];\n if (isPointOnSegment(point, start, end)) {\n return [start, end] as [Point, Point];\n }\n }\n return null;\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nconst heightRatio = 3 / 4;\n\nexport const CommentEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const points = getCommentPoints(rectangle);\n const rs = PlaitBoard.getRoughSVG(board);\n const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(polygon, 'round');\n return polygon;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const parallelogramPoints = getCommentPoints(rectangle);\n return isPointInPolygon(point, parallelogramPoints);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getCommentPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getCommentPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getCommentPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height * heightRatio - height) / 2\n };\n }\n};\n\nexport const getCommentPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + (rectangle.width * 3) / 5, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 2) / 5, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height * heightRatio]\n ];\n};\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n distanceBetweenPointAndPoint,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getCrossingPointBetweenPointAndPolygon, getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport interface CreateOptions {\n getPolygonPoints: (rectangle: RectangleClient) => Point[];\n getConnectorPoints?: (rectangle: RectangleClient) => Point[];\n getTextRectangle?: (element: PlaitGeometry) => RectangleClient;\n}\n\nexport function createPolygonEngine(options: CreateOptions): ShapeEngine {\n const getPoints = options.getPolygonPoints;\n const engine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const points = getPoints(rectangle);\n const rs = PlaitBoard.getRoughSVG(board);\n const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });\n setStrokeLinecap(polygon, 'round');\n return polygon;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const points = getPoints(rectangle);\n return isPointInPolygon(point, points);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getPoints(rectangle));\n },\n getNearestCrossingPoint(rectangle: RectangleClient, point: Point) {\n const corners = getPoints(rectangle);\n const crossingPoints = getCrossingPointBetweenPointAndPolygon(corners, point);\n let nearestPoint = crossingPoints[0];\n let nearestDistance = distanceBetweenPointAndPoint(point[0], point[1], nearestPoint[0], nearestPoint[1]);\n crossingPoints\n .filter((v, index) => index > 0)\n .forEach(crossingPoint => {\n let distance = distanceBetweenPointAndPoint(point[0], point[1], crossingPoint[0], crossingPoint[1]);\n if (distance < nearestDistance) {\n nearestDistance = distance;\n nearestPoint = crossingPoint;\n }\n });\n\n return nearestPoint;\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n if (options.getConnectorPoints) {\n return options.getConnectorPoints(rectangle);\n }\n return getPoints(rectangle);\n }\n };\n if (options.getTextRectangle) {\n engine.getTextRectangle = options.getTextRectangle;\n }\n return engine;\n}\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\nexport const getCrossPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height / 4]\n ];\n};\n\nexport const CrossEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getCrossPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width / 2;\n rectangle.x += width / 4;\n return rectangle;\n }\n});\n","import { RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils/geometry';\n\nexport const DiamondEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: RectangleClient.getEdgeCenterPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n rectangle.width = rectangle.width / 2;\n rectangle.x += rectangle.width / 2;\n return rectangle;\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getVectorFromPointAndSlope,\n isPointInEllipse\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getTextRectangle } from '../../utils';\n\nexport const EllipseEngine: 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 return rs.ellipse(centerPoint[0], centerPoint[1], rectangle.width, rectangle.height, { ...options, fillStyle: 'solid' });\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n return isPointInEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n return getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const centerPoint: Point = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const a = rectangle.width / 2;\n const b = rectangle.height / 2;\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return vector;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n};\n\nexport function getNearestPointBetweenPointAndEllipse(point: Point, center: Point, rx: number, ry: number, rotation: number = 0): Point {\n const rectangleClient = {\n x: center[0] - rx,\n y: center[1] - ry,\n height: ry * 2,\n width: rx * 2\n };\n // https://stackoverflow.com/a/46007540/232122\n const px = Math.abs(point[0] - rectangleClient.x - rectangleClient.width / 2);\n const py = Math.abs(point[1] - rectangleClient.y - rectangleClient.height / 2);\n\n let tx = 0.707;\n let ty = 0.707;\n\n const a = Math.abs(rectangleClient.width) / 2;\n const b = Math.abs(rectangleClient.height) / 2;\n\n [0, 1, 2, 3].forEach(x => {\n const xx = a * tx;\n const yy = b * ty;\n\n const ex = ((a * a - b * b) * tx ** 3) / a;\n const ey = ((b * b - a * a) * ty ** 3) / b;\n\n const rx = xx - ex;\n const ry = yy - ey;\n\n const qx = px - ex;\n const qy = py - ey;\n\n const r = Math.hypot(ry, rx);\n const q = Math.hypot(qy, qx);\n\n tx = Math.min(1, Math.max(0, ((qx * r) / q + ex) / a));\n ty = Math.min(1, Math.max(0, ((qy * r) / q + ey) / b));\n const t = Math.hypot(ty, tx);\n tx /= t;\n ty /= t;\n });\n const signX = point[0] > center[0] ? 1 : -1;\n const signY = point[1] > center[1] ? 1 : -1;\n\n return [center[0] + a * tx * signX, center[1] + b * ty * signY];\n}\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getHexagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n};\n\nexport const HexagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getHexagonPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getLeftArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width * 0.32, rectangle.y],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.8],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.8],\n [rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height]\n ];\n};\n\nexport const LeftArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getLeftArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width * (1 - 0.32);\n rectangle.x += width * 0.32;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getOctagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + (rectangle.width * 3) / 10, rectangle.y],\n [rectangle.x + (rectangle.width * 7) / 10, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 3) / 10],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 7) / 10],\n [rectangle.x + (rectangle.width * 7) / 10, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 3) / 10, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + (rectangle.height * 7) / 10],\n [rectangle.x, rectangle.y + (rectangle.height * 3) / 10]\n ];\n};\n\nexport const OctagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getOctagonPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\n\nexport const getParallelogramPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 4, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\nexport const ParallelogramEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getParallelogramPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getParallelogramPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = rectangle.width / 2;\n rectangle.x += width / 4;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getPentagonPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 2) / 5],\n [rectangle.x + (rectangle.width * 4) / 5, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 5, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + (rectangle.height * 2) / 5]\n ];\n};\n\nexport const PentagonEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPentagonPoints,\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 3) / 5;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 5,\n y: elementRectangle.y + elementRectangle.height / 5 + ((elementRectangle.height * 4) / 5 - height) / 2\n };\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getPentagonArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + (rectangle.width * 3) / 5, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 3) / 5, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const PentagonArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPentagonArrowPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n rectangle.width = (rectangle.width * 3) / 5;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getProcessArrowPoints = (rectangle: RectangleClient): Point[] => {\n const wider = rectangle.width > rectangle.height / 2;\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (wider ? rectangle.width - rectangle.height / 2 : 0), rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height],\n [rectangle.x + (wider ? rectangle.height / 2 : rectangle.width), rectangle.y + rectangle.height / 2]\n ];\n};\n\nexport const ProcessArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getProcessArrowPoints,\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const width = rectangle.width;\n rectangle.width = elementRectangle.height / 2;\n rectangle.x += elementRectangle.height / 2;\n return rectangle;\n }\n});\n","import { PlaitBoard, Point, PointOfRectangle, RectangleClient, drawRectangle, getNearestPointBetweenPointAndSegments } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\n\nexport const RectangleEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRectangle(board, rectangle, { ...options, fillStyle: 'solid' });\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n return RectangleClient.isHit(rectangle, rangeRectangle);\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getRightArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height * 0.2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width * 0.68, rectangle.y + rectangle.height * 0.8],\n [rectangle.x, rectangle.y + rectangle.height * 0.8]\n ];\n};\n\nexport const RightArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getRightArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n rectangle.width = rectangle.width * 0.68;\n return rectangle;\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getNearestPointBetweenPointAndSegments,\n isPointInRoundRectangle\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getNearestPointBetweenPointAndEllipse } from './ellipse';\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} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { getRoundRectangleRadius } from './round-rectangle';\nimport { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';\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 return 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 },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n const points: Point[] = [\n [rectangle.x + rectangle.width / 4, rectangle.y + (rectangle.height * 3) / 4],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height * 3) / 4]\n ];\n rectangle.height = (rectangle.height * 3) / 4;\n return isPointInPolygon(point, points) || isPointInRoundRectangle(point, rectangle, getRoundRectangleRadius(rectangle));\n },\n getCornerPoints(rectangle: RectangleClient) {\n return getRoundCommentPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndSegments(point, getRoundCommentPoints(rectangle));\n },\n getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getRoundCommentPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getPolygonEdgeByConnectionPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height * heightRatio - height) / 2\n };\n }\n};\n\nexport const getRoundCommentPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height * heightRatio],\n [rectangle.x, rectangle.y + rectangle.height * heightRatio]\n ];\n};\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getTextRectangle } from '../../utils/geometry';\n\nexport const getTrapezoidPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width * 0.15, rectangle.y],\n [rectangle.x + rectangle.width * 0.85, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TrapezoidEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTrapezoidPoints,\n getConnectorPoints(rectangle: RectangleClient) {\n const points = getTrapezoidPoints(rectangle);\n return getCenterPointsOnPolygon(points);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getStrokeWidthByElement } from '../../utils/style';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\n\nexport const getTrianglePoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TriangleEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTrianglePoints,\n getConnectorPoints(rectangle: RectangleClient) {\n const cornerPoints = getTrianglePoints(rectangle);\n const lineCenterPoints = getCenterPointsOnPolygon(cornerPoints);\n return [...lineCenterPoints, ...cornerPoints];\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 2) / 3;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + (elementRectangle.height * 3) / 5 + ((elementRectangle.height * 2) / 5 - height) / 2\n };\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\n\nexport const getTwoWayArrowPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + rectangle.height / 5],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + rectangle.height / 5],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 17) / 25, rectangle.y + (rectangle.height * 4) / 5],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + (rectangle.height * 4) / 5],\n [rectangle.x + (rectangle.width * 8) / 25, rectangle.y + rectangle.height]\n ];\n};\n\nexport const TwoWayArrowEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getTwoWayArrowPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]\n ];\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from './polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\n\nexport const getStarPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height * 75) / 91],\n [rectangle.x + (rectangle.width * 18.61) / 96, rectangle.y + rectangle.height],\n [rectangle.x + (rectangle.width * 24.2235871) / 96, rectangle.y + (rectangle.height * 57.7254249) / 91],\n [rectangle.x, rectangle.y + (rectangle.height * 34.5491503) / 91],\n [rectangle.x + (rectangle.width * 33.3053687) / 96, rectangle.y + (rectangle.height * 29.7745751) / 91],\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + (rectangle.width * 62.6946313) / 96, rectangle.y + (rectangle.height * 29.7745751) / 91],\n [rectangle.x + rectangle.width, rectangle.y + (rectangle.height * 34.5491503) / 91],\n [rectangle.x + (rectangle.width * 71.7764129) / 96, rectangle.y + (rectangle.height * 57.7254249) / 91],\n [rectangle.x + (rectangle.width * 77.3892626) / 96, rectangle.y + rectangle.height]\n ];\n};\n\nexport const StarEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getStarPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const points = getStarPoints(rectangle);\n return [points[1], points[3], points[5], points[7], points[9]];\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = originWidth / 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 4,\n y: elementRectangle.y + (elementRectangle.height * 1) / 5 + ((elementRectangle.height * 4) / 5 - height) / 2\n };\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n drawRoundRectangle,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInRoundRectangle\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getNearestPointBetweenPointAndEllipse } from '../basic-shapes/ellipse';\n\nexport const TerminalEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n rectangle.x,\n rectangle.y,\n rectangle.x + rectangle.width,\n rectangle.y + rectangle.height,\n { ...options, fillStyle: 'solid' },\n false,\n getStartEndRadius(rectangle)\n );\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n return isPointInRoundRectangle(point, rectangle, getStartEndRadius(rectangle));\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n return getNearestPointBetweenPointAndRoundRectangle(point, rectangle, getStartEndRadius(rectangle));\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n const radius = getStartEndRadius(rectangle);\n const center = getBoundCenterOfRoundRectangle(rectangle, radius, connectionPoint);\n if (center) {\n const point = [connectionPoint[0] - center[0], -(connectionPoint[1] - center[1])];\n const a = radius;\n const b = radius;\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n return getVectorFromPointAndSlope(point[0], point[1], slope);\n }\n return null;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n }\n};\n\nexport const getStartEndRadius = (rectangle: RectangleClient) => {\n return Math.min(rectangle.width / 2, rectangle.height / 2);\n};\n\nexport function getNearestPointBetweenPointAndRoundRectangle(point: Point, rectangle: RectangleClient, radius: number) {\n let result: Point | null = null;\n let boundCenter: Point | null = getBoundCenterOfRoundRectangle(rectangle, radius, point);\n if (boundCenter) {\n result = getNearestPointBetweenPointAndEllipse(point, boundCenter, radius, radius);\n } else {\n const cornerPoints = RectangleClient.getCornerPoints(rectangle);\n result = getNearestPointBetweenPointAndSegments(point, cornerPoints);\n }\n return result;\n}\n\nexport function getBoundCenterOfRoundRectangle(rectangle: RectangleClient, radius: number, point: Point) {\n const { x, y, width, height } = rectangle;\n let center: Point | null = null;\n const inLeftTop = point[0] >= x && point[0] <= x + radius && point[1] >= y && point[1] <= y + radius;\n if (inLeftTop) {\n center = [x + radius, y + radius];\n }\n const inLeftBottom = point[0] >= x && point[0] <= x + radius && point[1] >= y + height - radius && point[1] <= y + height;\n if (inLeftBottom) {\n center = [x + radius, y + height - radius];\n }\n const inRightTop = point[0] >= x + width - radius && point[0] <= x + width && point[1] >= y && point[1] <= y + radius;\n if (inRightTop) {\n center = [x + width - radius, y + radius];\n }\n const inRightBottom =\n point[0] >= x + width - radius && point[0] <= x + width && point[1] >= y + height - radius && point[1] <= y + height;\n if (inRightBottom) {\n center = [x + width - radius, y + height - radius];\n }\n return center;\n}\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\nimport { getStrokeWidthByElement } from '../../utils/style/stroke';\n\nexport const getManualInputPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 4],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ];\n};\n\nexport const ManualInputEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getManualInputPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getManualInputPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle: (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + elementRectangle.height / 4 + ((elementRectangle.height * 3) / 4 - height) / 2\n };\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getTextRectangle } from '../../utils';\n\nexport const getPreparationPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 6, rectangle.y],\n [rectangle.x + (rectangle.width * 5) / 6, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + (rectangle.width * 5) / 6, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 6, rectangle.y + rectangle.height]\n ];\n};\n\nexport const PreparationEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getPreparationPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 2) / 3;\n rectangle.x += width / 6;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\n\nexport const getManualLoopPoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + (rectangle.width * 7) / 8, rectangle.y + rectangle.height],\n [rectangle.x + rectangle.width / 8, rectangle.y + rectangle.height]\n ];\n};\nexport const ManualLoopEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getManualLoopPoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getManualLoopPoints(rectangle);\n return getCenterPointsOnPolygon(cornerPoints);\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n});\n","import { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getCenterPointsOnPolygon } from '../../utils/polygon';\n\nexport const getMergePoints = (rectangle: RectangleClient): Point[] => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height]\n ];\n};\n\nexport const MergeEngine: ShapeEngine = createPolygonEngine({\n getPolygonPoints: getMergePoints,\n getConnectorPoints: (rectangle: RectangleClient) => {\n const cornerPoints = getMergePoints(rectangle);\n const lineCenterPoints = getCenterPointsOnPolygon(cornerPoints);\n return [...lineCenterPoints, ...cornerPoints];\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const originWidth = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n const width = (originWidth * 2) / 3;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + originWidth / 6,\n y: elementRectangle.y + ((elementRectangle.height * 2) / 3 - height) / 2\n };\n }\n});\n","import {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getEllipseTangentSlope,\n getNearestPointBetweenPointAndSegments,\n getVectorFromPointAndSlope,\n isPointInEllipse,\n setStrokeLinecap\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getNearestPointBetweenPointAndEllipse } from '../basic-shapes/ellipse';\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} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\nimport { getNearestPointBetweenPointAndEllipse } from '../basic-shapes/ellipse';\nimport { getTextRectangle } from '../../utils';\n\nexport const StoredDataEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n const rs = PlaitBoard.getRoughSVG(board);\n const shape = rs.path(\n `M${rectangle.x + rectangle.width / 10} ${rectangle.y} L${rectangle.x + rectangle.width} ${rectangle.y} A ${rectangle.width /\n 10} ${rectangle.height / 2}, 0, 0, 0,${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height} L${rectangle.x +\n rectangle.width / 10} ${rectangle.y + rectangle.height}A ${rectangle.width / 10} ${rectangle.height /\n 2}, 0, 0, 1,${rectangle.x + rectangle.width / 10} ${rectangle.y}`,\n { ...options, fillStyle: 'solid' }\n );\n setStrokeLinecap(shape, 'round');\n return shape;\n },\n isInsidePoint(rectangle: RectangleClient, point: Point) {\n //split shape to rectangle and a half ellipse\n const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);\n const isInRectangle = RectangleClient.isHit(\n {\n ...rectangle,\n x: rectangle.x + rectangle.width / 10,\n width: (rectangle.width * 9) / 10\n },\n rangeRectangle\n );\n\n const isInFrontEllipse = isPointInEllipse(\n point,\n [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\n\n const notInBackEllipse = !isPointInEllipse(\n point,\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\n return (isInRectangle && notInBackEllipse) || isInFrontEllipse;\n },\n getCornerPoints(rectangle: RectangleClient) {\n return RectangleClient.getCornerPoints(rectangle);\n },\n getNearestPoint(rectangle: RectangleClient, point: Point) {\n const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));\n if (nearestPoint[0] < rectangle.x + rectangle.width / 10) {\n const centerPoint = [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 10, rectangle.height / 2);\n if (nearestPoint[0] > centerPoint[0]) {\n nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n }\n return nearestPoint;\n }\n if (nearestPoint[0] > rectangle.x + (rectangle.width * 9) / 10) {\n const centerPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2] as Point;\n const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 10, rectangle.height / 2);\n if (nearestPoint[0] > centerPoint[0]) {\n nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];\n }\n return nearestPoint;\n }\n return nearestPoint;\n },\n getTangentVectorByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle) {\n const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n let centerPoint = [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2];\n let a = rectangle.width / 10;\n let b = rectangle.height / 2;\n const isBackEllipse = connectionPoint[0] > rectangle.x + (rectangle.width * 9) / 10 && connectionPoint[1] > rectangle.y;\n if (isBackEllipse) {\n centerPoint = [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2];\n }\n const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];\n const slope = getEllipseTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorFromPointAndSlope(point[0], point[1], slope);\n return isBackEllipse ? (vector.map(num => -num) as Vector) : vector;\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + (rectangle.width * 9) / 10, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ];\n },\n getTextRectangle(element: PlaitGeometry) {\n const rectangle = getTextRectangle(element);\n const width = rectangle.width;\n rectangle.width = (rectangle.width * 3) / 4;\n rectangle.x += width / 8;\n return rectangle;\n }\n};\n","import { BasicShapes, FlowchartSymbols, GeometryShapes, ShapeEngine } 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 { RectangleEngine } from './basic-shapes/rectangle';\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';\n\nexport const ShapeEngineMap: Record<GeometryShapes, ShapeEngine> = {\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 [FlowchartSymbols.process]: RectangleEngine,\n [FlowchartSymbols.decision]: DiamondEngine,\n [FlowchartSymbols.connector]: EllipseEngine,\n [FlowchartSymbols.data]: ParallelogramEngine,\n [FlowchartSymbols.terminal]: TerminalEngine,\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};\n\nexport const getEngine = (shape: GeometryShapes) => {\n return ShapeEngineMap[shape];\n};\n","import {\n ACTIVE_STROKE_WIDTH,\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n Point,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n SELECTION_FILL_COLOR,\n ThemeColorMode,\n Transforms,\n Vector,\n addSelectedElement,\n clearSelectedElement,\n createG,\n drawCircle,\n idCreator\n} from '@plait/core';\nimport { GeometryShapes, BasicShapes, PlaitGeometry, FlowchartSymbols } from '../interfaces/geometry';\nimport { Alignment, CustomText, DEFAULT_FONT_SIZE, buildText, getTextSize } from '@plait/text';\nimport { Element } from 'slate';\nimport {\n DefaultBasicShapeProperty,\n DefaultFlowchartPropertyMap,\n DefaultTextProperty,\n DrawPointerType,\n DrawThemeColors,\n ShapeDefaultSpace,\n getFlowchartPointers\n} from '../constants';\nimport { RESIZE_HANDLE_DIAMETER } from '@plait/common';\nimport { getStrokeWidthByElement } from './style/stroke';\nimport { Options } from 'roughjs/bin/core';\nimport { getEngine } from '../engines';\nimport { getShape } from './shape';\nimport { createLineElement } from './line/line-basic';\nimport { LineMarkerType, LineShape, PlaitShape } from '../interfaces';\nimport { DefaultLineStyle } from '../constants/line';\nimport { getMemorizedLatestByPointer, memorizeLatestShape } from './memorize';\n\nexport type GeometryStyleOptions = Pick<PlaitGeometry, 'fill' | 'strokeColor' | 'strokeWidth'>;\n\nexport type TextProperties = Partial<CustomText> & { align?: Alignment; textHeight?: number };\n\nexport const createGeometryElement = (\n shape: GeometryShapes,\n points: [Point, Point],\n text: string | Element,\n options: GeometryStyleOptions = {},\n textProperties: TextProperties = {}\n): PlaitGeometry => {\n let textOptions = {};\n let alignment: undefined | Alignment = Alignment.center;\n let textHeight = DefaultTextProperty.height;\n if (shape === BasicShapes.text) {\n textOptions = { autoSize: true };\n alignment = undefined;\n }\n textProperties = { ...textProperties };\n textProperties?.align && (alignment = textProperties?.align);\n textProperties?.textHeight && (textHeight = textProperties?.textHeight);\n delete textProperties?.align;\n delete textProperties?.textHeight;\n return {\n id: idCreator(),\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n textHeight,\n text: buildText(text, alignment, textProperties),\n points,\n ...textOptions,\n ...options\n };\n};\n\nexport const getTextRectangle = (element: PlaitGeometry) => {\n const elementRectangle = RectangleClient.getRectangleByPoints(element.points!);\n const strokeWidth = getStrokeWidthByElement(element);\n const height = element.textHeight;\n const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;\n return {\n height,\n width: width > 0 ? width : 0,\n x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,\n y: elementRectangle.y + (elementRectangle.height - height) / 2\n };\n};\n\nexport const drawBoundMask = (board: PlaitBoard, element: PlaitGeometry) => {\n const G = createG();\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const activeRectangle = RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH);\n const shape = getShape(element);\n const maskG = drawGeometry(board, activeRectangle, shape, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n G.appendChild(maskG);\n const connectorPoints = getEngine(shape).getConnectorPoints(activeRectangle);\n connectorPoints.forEach(point => {\n const circleG = drawCircle(PlaitBoard.getRoughSVG(board), point, 6, {\n stroke: '#999999',\n strokeWidth: 1,\n fill: '#FFF',\n fillStyle: 'solid'\n });\n G.appendChild(circleG);\n });\n\n return G;\n};\n\nexport const drawGeometry = (board: PlaitBoard, outerRectangle: RectangleClient, shape: GeometryShapes, options: Options) => {\n return getEngine(shape).draw(board, outerRectangle, options);\n};\n\nexport const getNearestPoint = (element: PlaitShape, point: Point) => {\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const shape = getShape(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 createDefaultFlowchart = (point: Point) => {\n const decisionProperty = getDefaultFlowchartProperty(FlowchartSymbols.decision);\n const processProperty = getDefaultFlowchartProperty(FlowchartSymbols.process);\n const terminalProperty = getDefaultFlowchartProperty(FlowchartSymbols.terminal);\n\n const options = {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n };\n\n const lineOptions = {\n strokeWidth: DefaultLineStyle.strokeWidth\n };\n const startElement = createGeometryElement(\n FlowchartSymbols.terminal,\n getDefaultGeometryPoints(FlowchartSymbols.terminal, point),\n '开始',\n options\n );\n\n const processPoint1: Point = [point[0], point[1] + terminalProperty.height / 2 + 55 + processProperty.height / 2];\n const processElement1 = createGeometryElement(\n FlowchartSymbols.process,\n getDefaultGeometryPoints(FlowchartSymbols.process, processPoint1),\n '过程',\n options\n );\n\n const decisionPoint: Point = [processPoint1[0], processPoint1[1] + processProperty.height / 2 + 55 + decisionProperty.height / 2];\n const decisionElement = createGeometryElement(\n FlowchartSymbols.decision,\n getDefaultGeometryPoints(FlowchartSymbols.decision, decisionPoint),\n '过程',\n options\n );\n\n const processPoint2: Point = [decisionPoint[0] + decisionProperty.width / 2 + 75 + processProperty.width / 2, decisionPoint[1]];\n const processElement2 = createGeometryElement(\n FlowchartSymbols.process,\n getDefaultGeometryPoints(FlowchartSymbols.process, processPoint2),\n '过程',\n options\n );\n\n const endPoint: Point = [decisionPoint[0], decisionPoint[1] + decisionProperty.height / 2 + 95 + terminalProperty.height / 2];\n const endElement = createGeometryElement(\n FlowchartSymbols.terminal,\n getDefaultGeometryPoints(FlowchartSymbols.terminal, endPoint),\n '结束',\n options\n );\n\n const line1 = createLineElement(\n LineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: LineMarkerType.none, connection: [0.5, 1], boundId: startElement.id },\n { marker: LineMarkerType.arrow, connection: [0.5, 0], boundId: processElement1.id },\n [],\n lineOptions\n );\n\n const line2 = createLineElement(\n LineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: LineMarkerType.none, connection: [0.5, 1], boundId: processElement1.id },\n { marker: LineMarkerType.arrow, connection: [0.5, 0], boundId: decisionElement.id },\n [],\n lineOptions\n );\n\n const line3 = createLineElement(\n LineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: LineMarkerType.none, connection: [0.5, 1], boundId: decisionElement.id },\n { marker: LineMarkerType.arrow, connection: [0.5, 0], boundId: endElement.id },\n [\n {\n text: buildText('是'),\n position: 0.5,\n width: 14,\n height: 20\n }\n ],\n lineOptions\n );\n\n const line4 = createLineElement(\n LineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: LineMarkerType.none, connection: [1, 0.5], boundId: decisionElement.id },\n { marker: LineMarkerType.arrow, connection: [0, 0.5], boundId: processElement2.id },\n [\n {\n text: buildText('否'),\n position: 0.5,\n width: 14,\n height: 20\n }\n ],\n lineOptions\n );\n\n const line5 = createLineElement(\n LineShape.elbow,\n [\n [0, 0],\n [0, 0]\n ],\n { marker: LineMarkerType.none, connection: [0.5, 1], boundId: processElement2.id },\n { marker: LineMarkerType.arrow, connection: [1, 0.5], boundId: endElement.id },\n [],\n lineOptions\n );\n\n return [startElement, processElement1, decisionElement, processElement2, endElement, line1, line2, line3, line4, line5];\n};\n\nexport const getAutoCompletePoints = (element: PlaitShape) => {\n const AutoCompleteMargin = (12 + RESIZE_HANDLE_DIAMETER / 2) * 2;\n let rectangle = RectangleClient.getRectangleByPoints(element.points);\n rectangle = RectangleClient.inflate(rectangle, AutoCompleteMargin);\n return RectangleClient.getEdgeCenterPoints(rectangle);\n};\n\nexport const getHitIndexOfAutoCompletePoint = (movingPoint: Point, points: Point[]) => {\n return points.findIndex(point => {\n const movingRectangle = RectangleClient.getRectangleByPoints([movingPoint]);\n let rectangle = RectangleClient.getRectangleByPoints([point]);\n rectangle = RectangleClient.inflate(rectangle, RESIZE_HANDLE_DIAMETER);\n return RectangleClient.isHit(movingRectangle, rectangle);\n });\n};\n\nexport const getDrawDefaultStrokeColor = (theme: ThemeColorMode) => {\n return DrawThemeColors[theme].strokeColor;\n};\n\nexport const getFlowchartDefaultFill = (theme: ThemeColorMode) => {\n return DrawThemeColors[theme].fill;\n};\n\nexport const getTextShapeProperty = (board: PlaitBoard, text: string | Element = DefaultTextProperty.text, fontSize?: number | string) => {\n fontSize = fontSize ? Number(fontSize) : DEFAULT_FONT_SIZE;\n const textSize = getTextSize(board, text, Infinity, { fontSize });\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(\n RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height)\n );\n};\n\nexport const getDefaultGeometryProperty = (pointer: DrawPointerType) => {\n const isFlowChart = getFlowchartPointers().includes(pointer);\n if (isFlowChart) {\n return getDefaultFlowchartProperty(pointer as FlowchartSymbols);\n } else {\n return DefaultBasicShapeProperty;\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(\n RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height)\n );\n};\n\nexport const insertElement = (board: PlaitBoard, element: PlaitGeometry) => {\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 createTextElement = (\n board: PlaitBoard,\n points: [Point, Point],\n text: string | Element = DefaultTextProperty.text,\n textHeight?: number\n) => {\n const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n textHeight = textHeight ? textHeight : RectangleClient.getRectangleByPoints(points).height;\n return createGeometryElement(BasicShapes.text, points, text, memorizedLatest.geometryProperties as GeometryStyleOptions, {\n ...memorizedLatest.textProperties,\n textHeight\n });\n};\n\nexport const createDefaultGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n const memorizedLatest = getMemorizedLatestByPointer(shape);\n const textHeight = getTextShapeProperty(board, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']).height;\n return createGeometryElement(\n shape,\n points,\n '',\n {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth,\n ...(memorizedLatest.geometryProperties as GeometryStyleOptions)\n },\n { ...memorizedLatest.textProperties, textHeight }\n );\n};\n","import { PlaitDrawElement, PlaitGeometry, PlaitLine, StrokeStyle } from '../../interfaces';\nimport { DefaultGeometryStyle } from '../../constants';\nimport { PlaitBoard } from '@plait/core';\nimport { getDrawDefaultStrokeColor, getFlowchartDefaultFill } from '../geometry';\n\nexport const getStrokeWidthByElement = (element: PlaitGeometry | PlaitLine) => {\n if (PlaitDrawElement.isText(element)) {\n return 0;\n }\n const strokeWidth = element.strokeWidth || DefaultGeometryStyle.strokeWidth;\n return strokeWidth;\n};\n\nexport const getStrokeColorByElement = (board: PlaitBoard, element: PlaitGeometry | PlaitLine) => {\n const defaultColor = getDrawDefaultStrokeColor(board.theme.themeColorMode);\n const strokeColor = element.strokeColor || defaultColor;\n return strokeColor;\n};\n\nexport const getFillByElement = (board: PlaitBoard, element: PlaitGeometry | PlaitLine) => {\n const defaultFill = PlaitDrawElement.isFlowchart(element)\n ? getFlowchartDefaultFill(board.theme.themeColorMode)\n : DefaultGeometryStyle.fill;\n const fill = element.fill || defaultFill;\n return fill;\n};\n\nexport const getLineDashByElement = (element: PlaitGeometry | PlaitLine) => {\n return element.strokeStyle === 'dashed' ? [8, 8 + getStrokeWidthByElement(element)] : undefined;\n};\n\nexport const getStrokeStyleByElement = (element: PlaitGeometry | PlaitLine) => {\n return element.strokeStyle || StrokeStyle.solid;\n};\n","import { Point, PlaitBoard, getElementById, RectangleClient, PointOfRectangle, Direction, Vector } from '@plait/core';\nimport {\n getDirectionFactor,\n rotateVectorAnti90,\n getDirectionByVector,\n getOppositeDirection,\n getDirectionByPointOfRectangle,\n getSourceAndTargetOuterRectangle,\n getNextPoint\n} from '@plait/common';\nimport { BasicShapes, LineHandleKey, LineHandleRef, LineHandleRefPair, LineMarkerType, PlaitGeometry, PlaitLine } from '../../interfaces';\nimport { getStrokeWidthByElement } from '../style/stroke';\nimport { getEngine } from '../../engines';\nimport { getShape } from '../shape';\nimport { getSourceAndTargetRectangle } from './elbow';\n\nexport const getLineHandleRefPair = (board: PlaitBoard, element: PlaitLine): LineHandleRefPair => {\n const strokeWidth = getStrokeWidthByElement(element);\n const sourceBoundElement = element.source.boundId ? getElementById<PlaitGeometry>(board, element.source.boundId) : undefined;\n const targetBoundElement = element.target.boundId ? getElementById<PlaitGeometry>(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: LineHandleRef = {\n key: LineHandleKey.source,\n point: sourcePoint,\n direction: sourceDirection,\n vector: [sourceFactor.x, sourceFactor.y]\n };\n const targetHandleRef: LineHandleRef = {\n key: LineHandleKey.target,\n point: targetPoint,\n direction: targetDirection,\n vector: [targetFactor.x, targetFactor.y]\n };\n if (sourceBoundElement) {\n const connectionOffset = PlaitLine.isSourceMarkOrTargetMark(element, LineMarkerType.none, LineHandleKey.source) ? 0 : strokeWidth;\n const sourceVector = getVectorByConnection(sourceBoundElement, element.source.connection!);\n const direction = getDirectionByVector(sourceVector);\n sourceDirection = direction ? direction : sourceDirection;\n sourcePoint = getConnectionPoint(sourceBoundElement, element.source.connection!, sourceDirection, connectionOffset);\n sourceHandleRef.boundElement = sourceBoundElement;\n sourceHandleRef.direction = sourceDirection;\n sourceHandleRef.point = sourcePoint;\n sourceHandleRef.vector = sourceVector;\n }\n if (targetBoundElement) {\n const connectionOffset = PlaitLine.isSourceMarkOrTargetMark(element, LineMarkerType.none, LineHandleKey.target) ? 0 : strokeWidth;\n const targetVector = getVectorByConnection(targetBoundElement, element.target.connection!);\n const direction = getDirectionByVector(targetVector);\n targetDirection = direction ? direction : targetDirection;\n targetPoint = getConnectionPoint(targetBoundElement, element.target.connection!, targetDirection, connectionOffset);\n targetHandleRef.boundElement = targetBoundElement;\n targetHandleRef.direction = targetDirection;\n targetHandleRef.point = targetPoint;\n targetHandleRef.vector = targetVector;\n }\n return { source: sourceHandleRef, target: targetHandleRef };\n};\n\nexport const getConnectionPoint = (geometry: PlaitGeometry, 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: PlaitGeometry, connection: PointOfRectangle): Vector => {\n const rectangle = RectangleClient.getRectangleByPoints(boundElement.points);\n const shape = getShape(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: PlaitLine, handleRefPair?: LineHandleRefPair) => {\n handleRefPair = handleRefPair ?? getLineHandleRefPair(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","import { Direction, PlaitBoard, PlaitElement, Point, PointOfRectangle, Vector, getElementById } from '@plait/core';\nimport { Element } from 'slate';\nimport { PlaitGeometry } from './geometry';\nimport { StrokeStyle } from './element';\nimport { PlaitImage } from '../interfaces/image';\nimport { getConnectionPoint } from '../utils/line/line-common';\n\nexport enum LineMarkerType {\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 LineShape {\n straight = 'straight',\n curve = 'curve',\n elbow = 'elbow'\n}\n\nexport enum LineHandleKey {\n source = 'source',\n target = 'target'\n}\n\nexport interface LineText {\n text: Element;\n // Percentage of positioning based on line length\n position: number;\n width: number;\n height: number;\n}\n\nexport interface LineHandle {\n // The id of the bounded element\n boundId?: string;\n connection?: PointOfRectangle;\n marker: LineMarkerType;\n}\n\nexport interface LineHandleRef {\n key: LineHandleKey;\n direction: Direction;\n point: PointOfRectangle;\n vector: Vector;\n boundElement?: PlaitGeometry;\n}\n\nexport interface LineHandleRefPair {\n source: LineHandleRef;\n target: LineHandleRef;\n}\n\nexport interface PlaitLine extends PlaitElement {\n type: 'line';\n shape: LineShape;\n points: Point[];\n\n source: LineHandle;\n target: LineHandle;\n\n texts: LineText[];\n\n // node style attributes\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n\n opacity: number;\n}\n\nexport interface PlaitStraightLine extends PlaitLine {\n shape: LineShape.straight;\n}\n\nexport interface PlaitCurveLine extends PlaitLine {\n shape: LineShape.curve;\n}\n\nexport interface PlaitElbowLine extends PlaitLine {\n shape: LineShape.elbow;\n}\n\nexport const PlaitLine = {\n isSourceMarkOrTargetMark(line: PlaitLine, markType: LineMarkerType, handleKey: LineHandleKey) {\n if (handleKey === LineHandleKey.source) {\n return line.source.marker === markType;\n } else {\n return line.target.marker === markType;\n }\n },\n isSourceMark(line: PlaitLine, markType: LineMarkerType) {\n return PlaitLine.isSourceMarkOrTargetMark(line, markType, LineHandleKey.source);\n },\n isTargetMark(line: PlaitLine, markType: LineMarkerType) {\n return PlaitLine.isSourceMarkOrTargetMark(line, markType, LineHandleKey.target);\n },\n isBoundElementOfSource(line: PlaitLine, element: PlaitGeometry | PlaitImage) {\n return line.source.boundId === element.id;\n },\n isBoundElementOfTarget(line: PlaitLine, element: PlaitGeometry | PlaitImage) {\n return line.target.boundId === element.id;\n },\n getPoints(board: PlaitBoard, line: PlaitLine) {\n let sourcePoint = line.source.boundId\n ? getConnectionPoint(getElementById<PlaitGeometry>(board, line.source.boundId)!, line.source.connection!)\n : line.points[0];\n let targetPoint = line.target.boundId\n ? getConnectionPoint(getElementById<PlaitGeometry>(board, line.target.boundId)!, line.target.connection!)\n : line.points[line.points.length - 1];\n const restPoints = line.points.length > 2 ? line.points.slice(1, line.points.length - 1) : [];\n return [sourcePoint, ...restPoints, targetPoint];\n }\n};\n","export enum StrokeStyle {\n solid = 'solid',\n dashed = 'dashed'\n}\n\nexport enum MemorizeKey {\n basicShape = 'basicShape',\n flowchart = 'flowchart',\n text = 'text',\n line = 'line'\n}\n","import { BasicShapes, FlowchartSymbols, PlaitGeometry } from './geometry';\nimport { PlaitImage } from './image';\nimport { PlaitLine } from './line';\nimport { PlaitText } from './text';\n\nexport * from './line';\nexport * from './geometry';\nexport * from './text';\nexport * from './element';\n\nexport type PlaitDrawElement = PlaitGeometry | PlaitLine | PlaitImage;\n\nexport type PlaitShape = PlaitGeometry | PlaitImage;\n\nexport const PlaitDrawElement = {\n isGeometry: (value: any): value is PlaitGeometry => {\n return value.type === 'geometry';\n },\n isLine: (value: any): value is PlaitLine => {\n return value.type === 'line';\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 isDrawElement: (value: any): value is PlaitDrawElement => {\n if (PlaitDrawElement.isGeometry(value) || PlaitDrawElement.isLine(value) || PlaitDrawElement.isImage(value)) {\n return true;\n } else {\n return false;\n }\n },\n isShape: (value: any): value is PlaitShape => {\n return PlaitDrawElement.isImage(value) || PlaitDrawElement.isGeometry(value);\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};\n","import { BasicShapes, PlaitGeometry } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { getFillByElement, getLineDashByElement, getStrokeColorByElement, getStrokeWidthByElement } from '../utils/style/stroke';\nimport { drawGeometry } from '../utils';\nimport { RectangleClient } from '@plait/core';\n\nexport interface ShapeData {}\n\nexport class GeometryShapeGenerator extends Generator<PlaitGeometry, ShapeData> {\n canDraw(element: PlaitGeometry, data: ShapeData): boolean {\n return true;\n }\n\n draw(element: PlaitGeometry, data: ShapeData) {\n const rectangle = RectangleClient.getRectangleByPoints(element.points);\n const shape = element.shape;\n if (shape === BasicShapes.text) {\n return;\n }\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(this.board, element);\n const fill = getFillByElement(this.board, element);\n const strokeLineDash = getLineDashByElement(element);\n return drawGeometry(this.board, RectangleClient.inflate(rectangle, -strokeWidth), shape, {\n stroke: strokeColor,\n strokeWidth,\n fill,\n strokeLineDash\n });\n }\n}\n","import { Path, PlaitBoard, PlaitElement, PointOfRectangle, Transforms, findElements } from '@plait/core';\nimport {\n LineHandle,\n LineHandleKey,\n LineMarkerType,\n LineShape,\n LineText,\n MemorizeKey,\n PlaitDrawElement,\n PlaitGeometry,\n PlaitLine\n} from '../interfaces';\nimport { memorizeLatest } from '@plait/common';\nimport { getSelectedLineElements } from '../utils/selected';\nimport { getConnectionByNearestPoint, getLinePoints } from '../utils/line/line-basic';\n\nexport const resizeLine = (board: PlaitBoard, options: Partial<PlaitLine>, path: Path) => {\n Transforms.setNode(board, options, path);\n};\n\nexport const setLineTexts = (board: PlaitBoard, element: PlaitLine, texts: LineText[]) => {\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, { texts }, path);\n};\n\nexport const removeLineText = (board: PlaitBoard, element: PlaitLine, 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 setLineMark = (board: PlaitBoard, handleKey: LineHandleKey, marker: LineMarkerType) => {\n memorizeLatest(MemorizeKey.line, handleKey, marker);\n const selectedElements = getSelectedLineElements(board);\n selectedElements.forEach((element: PlaitLine) => {\n const path = PlaitBoard.findPath(board, element);\n let handle = handleKey === LineHandleKey.source ? element.source : element.target;\n handle = { ...handle, marker };\n Transforms.setNode(board, { [handleKey]: handle }, path);\n });\n};\n\nexport const setLineShape = (board: PlaitBoard, newProperties: Partial<PlaitLine>) => {\n const elements = getSelectedLineElements(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 collectLineUpdatedRefsByGeometry = (\n board: PlaitBoard,\n geometry: PlaitGeometry,\n refs: { property: Partial<PlaitLine>; path: Path }[]\n) => {\n const lines = findElements(board, {\n match: (element: PlaitElement) => {\n if (PlaitDrawElement.isLine(element)) {\n return element.source.boundId === geometry.id || element.target.boundId === geometry.id;\n }\n return false;\n },\n recursion: element => true\n }) as PlaitLine[];\n if (lines.length) {\n lines.forEach(line => {\n const isSourceBound = line.source.boundId === geometry.id;\n const handle = isSourceBound ? 'source' : 'target';\n const object = { ...line[handle] };\n const linePoints = getLinePoints(board, line);\n const point = isSourceBound ? linePoints[0] : linePoints[linePoints.length - 1];\n object.connection = getConnectionByNearestPoint(board, point, geometry);\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\nexport const connectLineToGeometry = (board: PlaitBoard, lineElement: PlaitLine, handle: LineHandleKey, geometryElement: PlaitGeometry) => {\n const linePoints = PlaitLine.getPoints(board, lineElement);\n const point = handle === LineHandleKey.source ? linePoints[0] : linePoints[linePoints.length - 1];\n const connection: PointOfRectangle = getConnectionByNearestPoint(board, point, geometryElement);\n if (connection) {\n let source: LineHandle = lineElement.source;\n let target: LineHandle = lineElement.target;\n if (handle === LineHandleKey.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 resizeLine(board, { source, target }, path);\n }\n};\n","import { PlaitBoard, Transforms, Point, Path, PlaitNode, getSelectedElements, Vector, Direction, RectangleClient } from '@plait/core';\nimport { PlaitDrawElement, GeometryShapes, PlaitText, PlaitLine, FlowchartSymbols, BasicShapes } from '../interfaces';\nimport { createDefaultGeometry, createTextElement, getMemorizedLatestByPointer, getTextShapeProperty, insertElement } from '../utils';\nimport { Element } from 'slate';\nimport { getDirectionByVector, getPointByVector, normalizeShapePoints } from '@plait/common';\nimport { DrawTransforms } from '.';\nimport { collectLineUpdatedRefsByGeometry } from './line';\nimport { DefaultBasicShapeProperty, DefaultFlowchartPropertyMap } from '../constants';\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 insertGeometryByVector = (board: PlaitBoard, point: Point, shape: GeometryShapes, vector: Vector) => {\n const shapeProperty = DefaultFlowchartPropertyMap[shape as FlowchartSymbols] || DefaultBasicShapeProperty;\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 = getPointByVector(point, vector, offset);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(vectorPoint, shapeProperty.width, shapeProperty.height)\n );\n return insertGeometry(board, points, shape);\n }\n return null;\n};\n\nexport const insertText = (board: PlaitBoard, point: Point, text: string | Element) => {\n const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);\n const property = getTextShapeProperty(board, text, memorizedLatest.textProperties['font-size']);\n const points: [Point, Point] = [point, [point[0] + property.width, point[1] + property.height]];\n const newElement = createTextElement(board, points, text);\n insertElement(board, newElement);\n};\n\nexport const resizeGeometry = (board: PlaitBoard, points: [Point, Point], textHeight: number, path: Path) => {\n const normalizePoints = normalizeShapePoints(points);\n const element = PlaitNode.get(board, path);\n const newHeight = textHeight / board.viewport.zoom;\n const newProperties = { points: normalizePoints, textHeight: newHeight };\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<PlaitLine>; 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 collectLineUpdatedRefsByGeometry(board, { ...item, shape }, refs);\n }\n });\n if (refs.length) {\n refs.forEach(ref => {\n DrawTransforms.resizeLine(board, ref.property, ref.path);\n });\n }\n};\n","import { PlaitBoard, Point, Transforms } from '@plait/core';\nimport { Element } from 'slate';\nimport { PlaitGeometry, PlaitText } from '../interfaces';\nimport { ShapeDefaultSpace } from '../constants';\nimport { AlignEditor, Alignment } from '@plait/text';\nimport { getFirstTextEditor } from '@plait/common';\n\nconst normalizePoints = (board: PlaitBoard, element: PlaitGeometry, width: number, textHeight: number) => {\n let points = element.points;\n let autoSize = (element as PlaitText).autoSize;\n const defaultSpace = ShapeDefaultSpace.rectangleAndText;\n\n if (autoSize) {\n const editor = getFirstTextEditor(element);\n if (AlignEditor.isActive(editor, Alignment.right)) {\n points = [\n [points[1][0] - (width + defaultSpace * 2), points[0][1]],\n [points[1][0], points[0][1] + textHeight]\n ];\n } else if (AlignEditor.isActive(editor, Alignment.center)) {\n const oldWidth = Math.abs(points[0][0] - points[1][0]);\n const offset = (width - oldWidth) / 2;\n points = [\n [points[0][0] - offset - defaultSpace, points[0][1]],\n [points[1][0] + offset + defaultSpace, points[0][1] + textHeight]\n ];\n } else {\n points = [points[0], [points[0][0] + width + defaultSpace * 2, points[0][1] + textHeight]];\n }\n }\n\n return { points };\n};\n\nexport const setText = (board: PlaitBoard, element: PlaitGeometry, text: Element, width: number, textHeight: number) => {\n const newElement = {\n text,\n textHeight,\n ...normalizePoints(board, element, width, textHeight)\n };\n\n const path = board.children.findIndex(child => child === element);\n\n Transforms.setNode(board, newElement, [path]);\n};\n\nexport const setTextSize = (board: PlaitBoard, element: PlaitGeometry, textWidth: number, textHeight: number) => {\n if ((element as PlaitText).autoSize) {\n const newElement = {\n textHeight,\n ...normalizePoints(board, element, textWidth, textHeight)\n };\n const isPointsEqual =\n Point.isEquals(element.points[0], newElement.points[0]) && Point.isEquals(element.points[1], newElement.points[1]);\n const isTextHeightEqual = Math.round(textHeight) === Math.round(element.textHeight);\n if (!isPointsEqual || !isTextHeightEqual) {\n const path = board.children.findIndex(child => child === element);\n Transforms.setNode(board, newElement, [path]);\n }\n }\n};\n","import { CommonImageItem } from '@plait/common';\nimport { PlaitBoard, Point, Transforms, idCreator, toHostPoint, toViewBoxPoint } from '@plait/core';\n\nexport const insertImage = (board: PlaitBoard, imageItem: CommonImageItem, startPoint?: Point) => {\n const { width, height, url } = imageItem;\n const viewportWidth = PlaitBoard.getComponent(board).nativeElement.clientWidth;\n const viewportHeight = PlaitBoard.getComponent(board).nativeElement.clientHeight;\n const point = toViewBoxPoint(board, toHostPoint(board, viewportWidth / 2, viewportHeight / 2));\n const points: Point[] = startPoint\n ? [startPoint, [startPoint[0] + width, startPoint[1] + height]]\n : [\n [point[0] - width / 2, point[1] - height / 2],\n [point[0] + width / 2, point[1] + height / 2]\n ];\n const imageElement = {\n id: idCreator(),\n type: 'image',\n points,\n url\n };\n Transforms.insertNode(board, imageElement, [board.children.length]);\n Transforms.addSelectionWithTemporaryElements(board, [imageElement]);\n};\n","import { insertText, insertGeometry, resizeGeometry, switchGeometryShape, insertGeometryByVector } from './geometry';\nimport { setText, setTextSize } from './geometry-text';\nimport { insertImage } from './image';\nimport { connectLineToGeometry, removeLineText, resizeLine, setLineMark, setLineShape, setLineTexts } from './line';\n\nexport const DrawTransforms = {\n setText,\n insertGeometry,\n resizeGeometry,\n insertText,\n setTextSize,\n resizeLine,\n setLineTexts,\n removeLineText,\n setLineMark,\n setLineShape,\n insertImage,\n switchGeometryShape,\n connectLineToGeometry,\n insertGeometryByVector\n};\n","import { PlaitBoard, RgbaToHEX, createG, drawCircle, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { PlaitGeometry, PlaitShape } 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 LineAutoCompleteGenerator extends Generator<PlaitShape, ActiveGeneratorExtraData> {\n autoCompleteG!: SVGGElement;\n hoverElement: SVGGElement | null = null;\n\n constructor(public board: PlaitBoard) {\n super(board);\n }\n\n canDraw(element: PlaitShape, 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: PlaitGeometry, data: ActiveGeneratorExtraData): SVGGElement {\n this.autoCompleteG = createG();\n const middlePoints = getAutoCompletePoints(element);\n middlePoints.forEach((point, index) => {\n const circle = drawCircle(PlaitBoard.getRoughSVG(this.board), point, LINE_AUTO_COMPLETE_DIAMETER, {\n stroke: 'none',\n fill: RgbaToHEX(PRIMARY_COLOR, LINE_AUTO_COMPLETE_OPACITY),\n fillStyle: 'solid'\n });\n circle.classList.add(`line-auto-complete-${index}`);\n this.autoCompleteG.appendChild(circle);\n });\n return this.autoCompleteG;\n }\n\n removeAutoCompleteG(index: number) {\n this.hoverElement = this.autoCompleteG.querySelector(`.line-auto-complete-${index}`);\n this.hoverElement!.style.visibility = 'hidden';\n }\n\n recoverAutoCompleteG() {\n if (this.hoverElement) {\n this.hoverElement.style.visibility = 'visible';\n this.hoverElement = null;\n }\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';\nimport {\n PlaitBoard,\n PlaitPluginElementContext,\n OnContextChanged,\n isSelectionMoving,\n getSelectedElements,\n PlaitOptionsBoard,\n ACTIVE_STROKE_WIDTH,\n RectangleClient\n} from '@plait/core';\nimport { Subject } from 'rxjs';\nimport { PlaitGeometry } from './interfaces/geometry';\nimport { GeometryShapeGenerator } from './generators/geometry-shape.generator';\nimport { TextManage, TextManageRef } from '@plait/text';\nimport { DrawTransforms } from './transforms';\nimport { getTextRectangle } from './utils/geometry';\nimport { ActiveGenerator, WithTextPluginKey, WithTextOptions, CommonPluginElement } from '@plait/common';\nimport { GeometryThreshold } from './constants/geometry';\nimport { PlaitDrawElement, PlaitText } from './interfaces';\nimport { getEngine } from './engines';\nimport { LineAutoCompleteGenerator } from './generators/line-auto-complete.generator';\nimport { memorizeLatestText } from './utils';\n\n@Component({\n selector: 'plait-draw-geometry',\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class GeometryComponent extends CommonPluginElement<PlaitGeometry, PlaitBoard>\n implements OnInit, OnDestroy, OnContextChanged<PlaitGeometry, PlaitBoard> {\n destroy$ = new Subject<void>();\n\n activeGenerator!: ActiveGenerator<PlaitGeometry>;\n\n lineAutoCompleteGenerator!: LineAutoCompleteGenerator;\n\n shapeGenerator!: GeometryShapeGenerator;\n\n get textManage() {\n return this.getTextManages()[0];\n }\n\n constructor(private viewContainerRef: ViewContainerRef, protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n initializeGenerator() {\n this.activeGenerator = new ActiveGenerator<PlaitGeometry>(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: PlaitGeometry) => {\n return RectangleClient.getRectangleByPoints(element.points);\n },\n hasResizeHandle: () => {\n const selectedElements = getSelectedElements(this.board);\n if (PlaitBoard.hasBeenTextEditing(this.board) && PlaitDrawElement.isText(this.element)) {\n return false;\n }\n return selectedElements.length === 1 && !isSelectionMoving(this.board);\n }\n });\n this.lineAutoCompleteGenerator = new LineAutoCompleteGenerator(this.board);\n this.shapeGenerator = new GeometryShapeGenerator(this.board);\n this.initializeTextManage();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.initializeGenerator();\n this.shapeGenerator.processDrawing(this.element, this.g);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n this.drawText();\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitGeometry, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitGeometry, PlaitBoard>\n ) {\n const isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n if (value.element !== previous.element || isChangeTheme) {\n this.shapeGenerator.processDrawing(this.element, this.g);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n this.updateText();\n } else {\n const hasSameSelected = value.selected === previous.selected;\n const hasSameHandleState = this.activeGenerator.options.hasResizeHandle() === this.activeGenerator.hasResizeHandle;\n if (!hasSameSelected || !hasSameHandleState) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n }\n }\n }\n\n editText() {\n this.textManage.edit();\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n }\n\n drawText() {\n this.textManage.draw(this.element.text);\n this.g.append(this.textManage.g);\n const centerPoint = RectangleClient.getCenterPoint(this.board.getRectangle(this.element)!);\n this.textManage.updateAngle(centerPoint, this.element.angle);\n }\n\n updateText() {\n this.textManage.updateText(this.element.text);\n this.textManage.updateRectangle();\n const centerPoint = RectangleClient.getCenterPoint(this.board.getRectangle(this.element)!);\n this.textManage.updateAngle(centerPoint, this.element.angle);\n }\n\n initializeTextManage() {\n const plugins = ((this.board as PlaitOptionsBoard).getPluginOptions<WithTextOptions>(WithTextPluginKey) || {}).textPlugins;\n\n const manage = new TextManage(this.board, this.viewContainerRef, {\n getRectangle: () => {\n const getRectangle = getEngine(this.element.shape).getTextRectangle;\n if (getRectangle) {\n return getRectangle(this.element);\n }\n return getTextRectangle(this.element);\n },\n onValueChangeHandle: (textManageRef: TextManageRef) => {\n const height = textManageRef.height / this.board.viewport.zoom;\n const width = textManageRef.width / this.board.viewport.zoom;\n if (textManageRef.newValue) {\n DrawTransforms.setText(this.board, this.element, textManageRef.newValue, width, height);\n } else {\n DrawTransforms.setTextSize(this.board, this.element, width, height);\n }\n textManageRef.operations && memorizeLatestText(this.element, textManageRef.operations);\n },\n getMaxWidth: () => {\n let width = getTextRectangle(this.element).width;\n const getRectangle = getEngine(this.element.shape).getTextRectangle;\n if (getRectangle) {\n width = getRectangle(this.element).width;\n }\n return (this.element as PlaitText)?.autoSize ? GeometryThreshold.defaultTextMaxWidth : width;\n },\n textPlugins: plugins\n });\n this.initializeTextManages([manage]);\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.textManage.destroy();\n this.destroy$.next();\n this.destroy$.complete();\n this.activeGenerator.destroy();\n this.lineAutoCompleteGenerator.destroy();\n }\n}\n","import { Point, createG, drawRectangle, getSelectedElements } from '@plait/core';\nimport { LineShape, PlaitLine } from '../interfaces';\nimport { Generator, PRIMARY_COLOR, drawFillPrimaryHandle, drawPrimaryHandle } from '@plait/common';\nimport { getMiddlePoints } from '../utils/line/line-basic';\nimport { DefaultGeometryActiveStyle } from '../constants';\nimport { getNextRenderPoints } from '../utils/line/elbow';\nimport { isUpdatedHandleIndex } from '../utils/line';\nimport { getHitPointIndex } from '../utils/position/line';\n\nexport interface ActiveData {\n selected: boolean;\n linePoints: Point[];\n}\n\nexport class LineActiveGenerator extends Generator<PlaitLine, ActiveData> {\n onlySelectedCurrentLine = false;\n\n canDraw(element: PlaitLine, data: ActiveData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: PlaitLine, data: ActiveData): SVGGElement {\n const activeG = createG();\n const selectedElements = getSelectedElements(this.board);\n this.onlySelectedCurrentLine = selectedElements.length === 1;\n if (this.onlySelectedCurrentLine) {\n activeG.classList.add('active');\n activeG.classList.add('line-handle');\n const points = PlaitLine.getPoints(this.board, element);\n let updatePoints = [...points];\n let elbowNextRenderPoints: Point[] = [];\n if (element.shape === LineShape.elbow) {\n updatePoints = points.slice(0, 1).concat(points.slice(-1));\n elbowNextRenderPoints = getNextRenderPoints(this.board, element, data.linePoints);\n }\n updatePoints.forEach(point => {\n const updateHandle = drawPrimaryHandle(this.board, point);\n activeG.appendChild(updateHandle);\n });\n const middlePoints = getMiddlePoints(this.board, element);\n for (let i = 0; i < middlePoints.length; i++) {\n const point = middlePoints[i];\n if (element.shape === LineShape.elbow && elbowNextRenderPoints.length) {\n const handleIndex = getHitPointIndex(middlePoints, point);\n const isUpdateHandleIndex = isUpdatedHandleIndex(this.board, element, [...points], elbowNextRenderPoints, handleIndex);\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 } else {\n const activeRectangle = this.board.getRectangle(element);\n if (activeRectangle) {\n let opacity = '0.5';\n if (activeRectangle.height === 0 || activeRectangle.width === 0) {\n opacity = '0.8';\n }\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: DefaultGeometryActiveStyle.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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';\nimport { PlaitBoard, PlaitPluginElementContext, OnContextChanged, getElementById, isSelectionMoving } from '@plait/core';\nimport { Subject } from 'rxjs';\nimport { LineText, PlaitGeometry, PlaitLine } from './interfaces';\nimport { TextManage, TextManageRef } from '@plait/text';\nimport { LineShapeGenerator } from './generators/line.generator';\nimport { LineActiveGenerator } from './generators/line-active.generator';\nimport { DrawTransforms } from './transforms';\nimport { GeometryThreshold } from './constants';\nimport { CommonPluginElement } from '@plait/common';\nimport { getLinePoints, getLineTextRectangle } from './utils/line/line-basic';\nimport { memorizeLatestText } from './utils/memorize';\n\ninterface BoundedElements {\n source?: PlaitGeometry;\n target?: PlaitGeometry;\n}\n\n@Component({\n selector: 'plait-draw-line',\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class LineComponent extends CommonPluginElement<PlaitLine, PlaitBoard>\n implements OnInit, OnDestroy, OnContextChanged<PlaitLine, PlaitBoard> {\n destroy$ = new Subject<void>();\n\n shapeGenerator!: LineShapeGenerator;\n\n activeGenerator!: LineActiveGenerator;\n\n boundedElements: BoundedElements = {};\n\n constructor(private viewContainerRef: ViewContainerRef, protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n initializeGenerator() {\n this.shapeGenerator = new LineShapeGenerator(this.board);\n this.activeGenerator = new LineActiveGenerator(this.board);\n this.initializeTextManagesByElement();\n }\n\n ngOnInit(): void {\n this.initializeGenerator();\n this.shapeGenerator.processDrawing(this.element, this.g);\n const linePoints = getLinePoints(this.board, this.element);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n super.ngOnInit();\n this.boundedElements = this.getBoundedElements();\n this.drawText();\n\n // const points = this.element.points;\n // points.forEach((p, index) => {\n // if (index === 0) {\n // return;\n // }\n // if (index === points.length - 1) {\n // return;\n // }\n // const dataPointG = PlaitBoard.getRoughSVG(this.board).circle(p[0], p[1], 8 * index, {\n // stroke: '#f08c02',\n // fill: '#f08c02',\n // fillStyle: 'solid'\n // });\n // PlaitBoard.getElementActiveHost(this.board).append(dataPointG);\n // });\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(value: PlaitPluginElementContext<PlaitLine, PlaitBoard>, previous: PlaitPluginElementContext<PlaitLine, PlaitBoard>) {\n const boundedElements = this.getBoundedElements();\n const isBoundedElementsChanged =\n boundedElements.source !== this.boundedElements.source || boundedElements.target !== this.boundedElements.target;\n this.boundedElements = boundedElements;\n const isChangeTheme = this.board.operations.find(op => op.type === 'set_theme');\n const linePoints = getLinePoints(this.board, this.element);\n if (value.element !== previous.element || isChangeTheme) {\n this.shapeGenerator.processDrawing(this.element, this.g);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n this.updateText(previous.element.texts, value.element.texts);\n this.updateTextRectangle();\n } else {\n const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate();\n if (needUpdate) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n }\n }\n if (isBoundedElementsChanged) {\n this.shapeGenerator.processDrawing(this.element, this.g);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected,\n linePoints\n });\n this.updateTextRectangle();\n return;\n }\n }\n\n initializeTextManagesByElement() {\n if (this.element.texts?.length) {\n const textManages: TextManage[] = [];\n this.element.texts.forEach((text, index) => {\n const manage = this.createTextManage(text, index);\n textManages.push(manage);\n });\n this.initializeTextManages(textManages);\n }\n }\n\n drawText() {\n if (this.element.texts?.length) {\n this.getTextManages().forEach((manage, index) => {\n manage.draw(this.element.texts![index].text);\n this.g.append(manage.g);\n });\n }\n }\n\n createTextManage(text: LineText, index: number) {\n return new TextManage(this.board, this.viewContainerRef, {\n getRectangle: () => {\n return getLineTextRectangle(this.board, this.element, index);\n },\n onValueChangeHandle: (textManageRef: TextManageRef) => {\n const height = textManageRef.height / this.board.viewport.zoom;\n const width = textManageRef.width / this.board.viewport.zoom;\n const texts = [...this.element.texts];\n texts.splice(index, 1, {\n text: textManageRef.newValue ? textManageRef.newValue : this.element.texts[index].text,\n position: this.element.texts[index].position,\n width,\n height\n });\n DrawTransforms.setLineTexts(this.board, this.element, texts);\n textManageRef.operations && memorizeLatestText(this.element, textManageRef.operations);\n },\n getMaxWidth: () => GeometryThreshold.defaultTextMaxWidth\n });\n }\n\n updateText(previousTexts: LineText[], currentTexts: LineText[]) {\n if (previousTexts === currentTexts) return;\n const previousTextsLength = previousTexts.length;\n const currentTextsLength = currentTexts.length;\n const textManages = this.getTextManages();\n if (currentTextsLength === previousTextsLength) {\n for (let i = 0; i < previousTextsLength; i++) {\n if (previousTexts[i].text !== currentTexts[i].text) {\n textManages[i].updateText(currentTexts[i].text);\n }\n }\n } else {\n this.destroyTextManages();\n this.initializeTextManagesByElement();\n this.drawText();\n }\n }\n\n updateTextRectangle() {\n const textManages = this.getTextManages();\n textManages.forEach(manage => {\n manage.updateRectangle();\n });\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.activeGenerator.destroy();\n this.destroy$.next();\n this.destroy$.complete();\n this.destroyTextManages();\n }\n}\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { isVirtualKey, isSpaceHotkey, isDelete } from '@plait/common';\nimport { GeometryComponent } from '../geometry.component';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getSelectedGeometryElements } 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 (PlaitElement.getComponent(targetElement) as GeometryComponent).editText();\n return;\n }\n\n keyDown(event);\n };\n\n board.dblClick = (event: MouseEvent) => {\n event.preventDefault();\n const geometries = getSelectedGeometryElements(board);\n if (!PlaitBoard.isReadonly(board) && geometries.length === 1) {\n const component = PlaitElement.getComponent(geometries[0]) as GeometryComponent;\n component.editText();\n }\n dblClick(event);\n };\n return board;\n};\n","import { PlaitBoard, Point, RectangleClient, createG, preventTouchMove, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { BasicShapes, GeometryShapes, PlaitGeometry } from '../interfaces';\nimport { GeometryShapeGenerator } from '../generators/geometry-shape.generator';\nimport {\n createDefaultGeometry,\n createTextElement,\n getDefaultGeometryPoints,\n getTextShapeProperty,\n getMemorizedLatestByPointer,\n getTextRectangle,\n insertElement\n} from '../utils';\nimport { DefaultTextProperty, DrawPointerType, getGeometryPointers } from '../constants';\nimport { normalizeShapePoints, isDndMode, isDrawingMode } from '@plait/common';\nimport { TextManage } from '@plait/text';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { NgZone } from '@angular/core';\n\nexport interface FakeCreateTextRef {\n g: SVGGElement;\n textManage: TextManage;\n}\n\nexport const withGeometryCreateByDrag = (board: PlaitBoard) => {\n const { pointerMove, globalPointerUp } = board;\n\n let geometryShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitGeometry | null = null;\n\n let fakeCreateTextRef: FakeCreateTextRef | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n geometryShapeG?.remove();\n geometryShapeG = createG();\n\n const geometryGenerator = new GeometryShapeGenerator(board);\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\n if (dragMode) {\n const memorizedLatest = getMemorizedLatestByPointer(pointer);\n if (pointer === BasicShapes.text) {\n const property = getTextShapeProperty(board, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(movingPoint, property.width, property.height)\n );\n temporaryElement = createTextElement(board, points);\n if (!fakeCreateTextRef) {\n const textManage = new TextManage(board, PlaitBoard.getComponent(board).viewContainerRef, {\n getRectangle: () => {\n return getTextRectangle(temporaryElement!);\n }\n });\n PlaitBoard.getComponent(board)\n .viewContainerRef.injector.get(NgZone)\n .run(() => {\n textManage.draw(temporaryElement!.text);\n });\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, geometryShapeG);\n PlaitBoard.getElementActiveHost(board).append(geometryShapeG);\n }\n }\n\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n const dragMode = isGeometryPointer && isDndMode(board);\n\n if (dragMode && temporaryElement) {\n insertElement(board, temporaryElement);\n fakeCreateTextRef?.textManage.destroy();\n fakeCreateTextRef?.g.remove();\n fakeCreateTextRef = null;\n }\n\n geometryShapeG?.remove();\n geometryShapeG = null;\n preventTouchMove(board, event, false);\n\n globalPointerUp(event);\n };\n\n return board;\n};\n\nexport const withGeometryCreateByDrawing = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, pointerUp, keyDown, keyUp } = board;\n let start: Point | null = null;\n\n let geometryShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitGeometry | null = null;\n\n let isShift = false;\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 const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n if (!PlaitBoard.isReadonly(board) && isGeometryPointer && isDrawingMode(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n start = point;\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n preventTouchMove(board, event, true);\n if (pointer === BasicShapes.text) {\n const memorizedLatest = getMemorizedLatestByPointer(pointer);\n const property = getTextShapeProperty(board, DefaultTextProperty.text, memorizedLatest.textProperties['font-size']);\n const points = RectangleClient.getPoints(\n RectangleClient.getRectangleByCenterPoint(point, property.width, property.height)\n );\n const textElement = createTextElement(board, points);\n insertElement(board, textElement);\n start = null;\n }\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n geometryShapeG?.remove();\n geometryShapeG = createG();\n const geometryGenerator = new GeometryShapeGenerator(board);\n const drawMode = !!start;\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (drawMode && pointer !== BasicShapes.text) {\n const points = normalizeShapePoints([start!, movingPoint], isShift);\n temporaryElement = createDefaultGeometry(board, points, pointer as GeometryShapes);\n geometryGenerator.processDrawing(temporaryElement, geometryShapeG);\n PlaitBoard.getElementActiveHost(board).append(geometryShapeG);\n }\n\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n const isDrawMode = !!start;\n if (isDrawMode) {\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) === 0) {\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 }\n if (temporaryElement) {\n insertElement(board, temporaryElement);\n }\n\n geometryShapeG?.remove();\n geometryShapeG = null;\n start = null;\n temporaryElement = null;\n preventTouchMove(board, event, false);\n pointerUp(event);\n };\n\n return board;\n};\n","import { PlaitBoard, Point, Transforms, getElementById, idCreator } from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\nimport { getConnectionPoint } from './line/line-common';\n\nexport const buildClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n return elements.map(element => {\n if (PlaitDrawElement.isGeometry(element) || PlaitDrawElement.isImage(element)) {\n const points = element.points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);\n return { ...element, points } as PlaitGeometry;\n }\n if (PlaitDrawElement.isLine(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 PlaitLine;\n }\n return element;\n });\n};\n\nexport const insertClipboardData = (board: PlaitBoard, elements: PlaitDrawElement[], startPoint: Point) => {\n const lines = elements.filter(value => PlaitDrawElement.isLine(value)) as PlaitLine[];\n const geometries = elements.filter(value => PlaitDrawElement.isGeometry(value) || PlaitDrawElement.isImage(value)) as (\n | PlaitImage\n | PlaitGeometry\n )[];\n\n geometries.forEach(element => {\n const sourceLines: PlaitLine[] = [];\n const targetLines: PlaitLine[] = [];\n lines.forEach(line => {\n if (PlaitLine.isBoundElementOfSource(line, element)) {\n sourceLines.push(line);\n }\n if (PlaitLine.isBoundElementOfTarget(line, element)) {\n targetLines.push(line);\n }\n });\n element.id = idCreator();\n\n // update lines\n sourceLines.forEach(sourceLine => (sourceLine.source.boundId = element.id));\n targetLines.forEach(targetLine => (targetLine.target.boundId = element.id));\n\n element.points = element.points.map(point => [startPoint[0] + point[0], startPoint[1] + point[1]]) as [Point, Point];\n Transforms.insertNode(board, element, [board.children.length]);\n });\n lines.forEach(element => {\n element.id = idCreator();\n element.points = element.points.map(point => [startPoint[0] + point[0], startPoint[1] + point[1]]) as [Point, Point];\n Transforms.insertNode(board, element, [board.children.length]);\n });\n Transforms.addSelectionWithTemporaryElements(board, elements);\n};\n","import {\n ClipboardData,\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n WritableClipboardContext,\n WritableClipboardType,\n addClipboardContext,\n createClipboardContext,\n getSelectedElements\n} from '@plait/core';\nimport { getSelectedDrawElements } from '../utils/selected';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine, PlaitShape } from '../interfaces';\nimport { buildClipboardData, insertClipboardData } from '../utils/clipboard';\nimport { DrawTransforms } from '../transforms';\nimport { getLines } from '../utils/line/line-basic';\nimport { PlaitImage } from '../interfaces/image';\nimport { acceptImageTypes, buildImage, getElementOfFocusedImage, getElementsText, getFirstTextEditor } from '@plait/common';\nimport { DEFAULT_IMAGE_WIDTH } from '../constants';\n\nexport const withDrawFragment = (baseBoard: PlaitBoard) => {\n const board = baseBoard as PlaitBoard;\n const { getDeletedFragment, setFragment, 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 lineElements = drawElements.filter(value => PlaitDrawElement.isLine(value)) as PlaitLine[];\n const imageElements = drawElements.filter(value => PlaitDrawElement.isImage(value)) as PlaitImage[];\n\n const boundLineElements = [\n ...getBoundedLineElements(board, geometryElements),\n ...getBoundedLineElements(board, imageElements)\n ].filter(line => !lineElements.includes(line));\n data.push(\n ...[\n ...geometryElements,\n ...lineElements,\n ...imageElements,\n ...boundLineElements.filter(line => !lineElements.includes(line))\n ]\n );\n }\n return getDeletedFragment(data);\n };\n\n board.setFragment = (\n data: DataTransfer | null,\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n type: 'copy' | 'cut'\n ) => {\n const targetDrawElements = getSelectedDrawElements(board);\n let boundLineElements: PlaitLine[] = [];\n if (targetDrawElements.length) {\n if (type === 'cut') {\n const geometryElements = targetDrawElements.filter(value => PlaitDrawElement.isGeometry(value)) as PlaitGeometry[];\n const lineElements = targetDrawElements.filter(value => PlaitDrawElement.isLine(value)) as PlaitLine[];\n boundLineElements = getBoundedLineElements(board, geometryElements).filter(line => !lineElements.includes(line));\n }\n const selectedElements = [...targetDrawElements, ...boundLineElements];\n const elements = buildClipboardData(board, selectedElements, rectangle ? [rectangle.x, rectangle.y] : [0, 0]);\n const text = getElementsText(selectedElements);\n if (!clipboardContext) {\n clipboardContext = createClipboardContext(WritableClipboardType.elements, elements, text);\n } else {\n clipboardContext = addClipboardContext(clipboardContext, {\n text,\n type: WritableClipboardType.elements,\n data: elements\n });\n }\n }\n setFragment(data, clipboardContext, rectangle, type);\n };\n\n board.insertFragment = (data: DataTransfer | null, clipboardData: ClipboardData | null, targetPoint: Point) => {\n const selectedElements = getSelectedElements(board);\n\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(data, clipboardData, targetPoint);\n };\n\n return board;\n};\n\nexport const getBoundedLineElements = (board: PlaitBoard, plaitShapes: PlaitShape[]) => {\n const lines = getLines(board);\n return lines.filter(line =>\n plaitShapes.find(shape => PlaitLine.isBoundElementOfSource(line, shape) || PlaitLine.isBoundElementOfTarget(line, shape))\n );\n};\n","import {\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n Point,\n Transforms,\n addSelectedElement,\n clearSelectedElement,\n createG,\n preventTouchMove,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { LineShape, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { REACTION_MARGIN, getLinePointers } from '../constants';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { isDrawingMode } from '@plait/common';\nimport { handleLineCreating } from '../utils/line/line-basic';\n\nexport const withLineCreateByDraw = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n\n let start: Point | null = null;\n\n let sourceElement: PlaitGeometry | null;\n\n let lineShapeG: SVGGElement | null = null;\n\n let temporaryElement: PlaitLine | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n const linePointers = getLinePointers();\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 = getHitOutlineGeometry(board, point, REACTION_MARGIN);\n if (hitElement) {\n sourceElement = hitElement;\n }\n preventTouchMove(board, event, true);\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n lineShapeG?.remove();\n lineShapeG = createG();\n let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (start) {\n const lineShape = PlaitBoard.getPointer(board) as LineShape;\n temporaryElement = handleLineCreating(board, lineShape, start, movingPoint, sourceElement, lineShapeG);\n }\n\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (temporaryElement) {\n Transforms.insertNode(board, temporaryElement, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(board, temporaryElement);\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n }\n lineShapeG?.remove();\n lineShapeG = null;\n sourceElement = null;\n start = null;\n temporaryElement = null;\n preventTouchMove(board, event, false);\n globalPointerUp(event);\n };\n\n return board;\n};\n","import { ResizeState } from '@plait/common';\nimport {\n DirectionFactors,\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n createG,\n findElements\n} from '@plait/core';\nimport { getResizeZoom, movePointByZoomAndOriginPoint } from '../plugins/with-draw-resize';\n\nexport interface ResizeAlignDelta {\n deltaX: number;\n deltaY: number;\n}\n\nexport interface AlignLineRef extends ResizeAlignDelta {\n xZoom: number;\n yZoom: number;\n activePoints: Point[];\n}\n\nexport interface ResizeAlignRef extends AlignLineRef {\n alignG: SVGGElement;\n}\n\nexport interface ResizeAlignOptions {\n resizeState: ResizeState;\n resizeOriginPoints: Point[];\n activeRectangle: RectangleClient;\n directionFactors: DirectionFactors;\n originPoint: Point;\n handlePoint: Point;\n isFromCorner: boolean;\n isAspectRatio: boolean;\n}\n\ntype TripleAlignAxis = [number, number, number];\n\ntype DrawAlignLineRef = {\n axis: number;\n isHorizontal: boolean;\n alignRectangles: RectangleClient[];\n};\n\nconst ALIGN_TOLERANCE = 2;\n\nconst EQUAL_SPACING = 10;\n\nconst ALIGN_SPACING = 24;\n\nexport class ResizeAlignReaction {\n alignRectangles: RectangleClient[];\n\n constructor(private board: PlaitBoard, private activeElements: PlaitElement[]) {\n this.alignRectangles = this.getAlignRectangle();\n }\n\n getAlignRectangle() {\n const elements = findElements(this.board, {\n match: element => this.board.isAlign(element) && !this.activeElements.some(item => item.id === element.id),\n recursion: () => false,\n isReverse: false\n });\n return elements.map(item => this.board.getRectangle(item)!);\n }\n\n getAlignLineRef(resizeAlignDelta: ResizeAlignDelta, resizeAlignOptions: ResizeAlignOptions): AlignLineRef {\n const { deltaX, deltaY } = resizeAlignDelta;\n const { resizeState, originPoint, handlePoint, isFromCorner, isAspectRatio, resizeOriginPoints } = resizeAlignOptions;\n const newResizeState: ResizeState = {\n ...resizeState,\n endPoint: [resizeState.endPoint[0] + deltaX, resizeState.endPoint[1] + deltaY]\n };\n const { xZoom, yZoom } = getResizeZoom(newResizeState, originPoint, handlePoint, isFromCorner, isAspectRatio);\n const activePoints = resizeOriginPoints.map(p => {\n return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);\n }) as [Point, Point];\n\n return {\n deltaX,\n deltaY,\n xZoom,\n yZoom,\n activePoints\n };\n }\n\n getEqualLineDelta(resizeAlignOptions: ResizeAlignOptions) {\n let equalLineDelta: ResizeAlignDelta = {\n deltaX: 0,\n deltaY: 0\n };\n const { isAspectRatio, activeRectangle } = resizeAlignOptions;\n const widthAlignRectangle = this.alignRectangles.find(item => Math.abs(item.width - activeRectangle.width) < ALIGN_TOLERANCE);\n if (widthAlignRectangle) {\n const deltaWidth = widthAlignRectangle.width - activeRectangle.width;\n equalLineDelta.deltaX = deltaWidth * resizeAlignOptions.directionFactors[0];\n if (isAspectRatio) {\n const deltaHeight = deltaWidth / (activeRectangle.width / activeRectangle.height);\n equalLineDelta.deltaY = deltaHeight * resizeAlignOptions.directionFactors[1];\n return equalLineDelta;\n }\n }\n const heightAlignRectangle = this.alignRectangles.find(item => Math.abs(item.height - activeRectangle.height) < ALIGN_TOLERANCE);\n if (heightAlignRectangle) {\n const deltaHeight = heightAlignRectangle.height - activeRectangle.height;\n equalLineDelta.deltaY = deltaHeight * resizeAlignOptions.directionFactors[1];\n if (isAspectRatio) {\n const deltaWidth = deltaHeight * (activeRectangle.width / activeRectangle.height);\n equalLineDelta.deltaX = deltaWidth * resizeAlignOptions.directionFactors[0];\n return equalLineDelta;\n }\n }\n return equalLineDelta;\n }\n\n drawEqualLines(activePoints: Point[], resizeAlignOptions: ResizeAlignOptions) {\n let widthEqualPoints = [];\n let heightEqualPoints = [];\n\n const drawHorizontalLine = resizeAlignOptions.directionFactors[0] !== 0 || resizeAlignOptions.isAspectRatio;\n const drawVerticalLine = resizeAlignOptions.directionFactors[1] !== 0 || resizeAlignOptions.isAspectRatio;\n\n const activeRectangle = RectangleClient.getRectangleByPoints(activePoints);\n for (let alignRectangle of this.alignRectangles) {\n if (activeRectangle.width === alignRectangle.width && drawHorizontalLine) {\n widthEqualPoints.push(getEqualLinePoints(alignRectangle, true));\n }\n if (activeRectangle.height === alignRectangle.height && drawVerticalLine) {\n heightEqualPoints.push(getEqualLinePoints(alignRectangle, false));\n }\n }\n if (widthEqualPoints.length && drawHorizontalLine) {\n widthEqualPoints.push(getEqualLinePoints(activeRectangle, true));\n }\n if (heightEqualPoints.length && drawVerticalLine) {\n heightEqualPoints.push(getEqualLinePoints(activeRectangle, false));\n }\n\n const equalLinePoints = [...widthEqualPoints, ...heightEqualPoints];\n return drawEqualLines(this.board, equalLinePoints);\n }\n\n getAlignLineDelta(resizeAlignOptions: ResizeAlignOptions) {\n let alignLineDelta: ResizeAlignDelta = {\n deltaX: 0,\n deltaY: 0\n };\n const { isAspectRatio, activeRectangle, directionFactors } = resizeAlignOptions;\n const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;\n const drawVertical = directionFactors[1] !== 0 || isAspectRatio;\n\n if (drawHorizontal) {\n const xAlignAxis = getTripleAlignAxis(activeRectangle, true);\n const alignX = directionFactors[0] === -1 ? xAlignAxis[0] : xAlignAxis[2];\n const deltaX = getMinAlignDelta(this.alignRectangles, alignX, true);\n if (Math.abs(deltaX) < ALIGN_TOLERANCE) {\n alignLineDelta.deltaX = deltaX;\n if (alignLineDelta.deltaX !== 0 && isAspectRatio) {\n alignLineDelta.deltaY = alignLineDelta.deltaX / (activeRectangle.width / activeRectangle.height);\n return alignLineDelta;\n }\n }\n }\n\n if (drawVertical) {\n const yAlignAxis = getTripleAlignAxis(activeRectangle, false);\n const alignY = directionFactors[1] === -1 ? yAlignAxis[0] : yAlignAxis[2];\n const deltaY = getMinAlignDelta(this.alignRectangles, alignY, false);\n if (Math.abs(deltaY) < ALIGN_TOLERANCE) {\n alignLineDelta.deltaY = deltaY;\n if (alignLineDelta.deltaY !== 0 && isAspectRatio) {\n alignLineDelta.deltaX = alignLineDelta.deltaY * (activeRectangle.width / activeRectangle.height);\n return alignLineDelta;\n }\n }\n }\n\n return alignLineDelta;\n }\n\n drawAlignLines(activePoints: Point[], resizeAlignOptions: ResizeAlignOptions) {\n let alignLinePoints: [Point, Point][] = [];\n const activeRectangle = RectangleClient.getRectangleByPoints(activePoints);\n const alignAxisX = getTripleAlignAxis(activeRectangle, true);\n const alignAxisY = getTripleAlignAxis(activeRectangle, false);\n const alignLineRefs: DrawAlignLineRef[] = [\n {\n axis: alignAxisX[0],\n isHorizontal: true,\n alignRectangles: []\n },\n {\n axis: alignAxisX[2],\n isHorizontal: true,\n alignRectangles: []\n },\n {\n axis: alignAxisY[0],\n isHorizontal: false,\n alignRectangles: []\n },\n {\n axis: alignAxisY[2],\n isHorizontal: false,\n alignRectangles: []\n }\n ];\n const setAlignLine = (axis: number, alignRectangle: RectangleClient, isHorizontal: boolean) => {\n const boundingRectangle = RectangleClient.inflate(\n RectangleClient.getBoundingRectangle([activeRectangle, alignRectangle]),\n ALIGN_SPACING\n );\n if (isHorizontal) {\n const pointStart = [axis, boundingRectangle.y] as Point;\n const pointEnd = [axis, boundingRectangle.y + boundingRectangle.height] as Point;\n alignLinePoints.push([pointStart, pointEnd]);\n } else {\n const pointStart = [boundingRectangle.x, axis] as Point;\n const pointEnd = [boundingRectangle.x + boundingRectangle.width, axis] as Point;\n alignLinePoints.push([pointStart, pointEnd]);\n }\n };\n\n const { isAspectRatio, directionFactors } = resizeAlignOptions;\n const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;\n const drawVertical = directionFactors[1] !== 0 || isAspectRatio;\n\n for (let index = 0; index < this.alignRectangles.length; index++) {\n const element = this.alignRectangles[index];\n if (isAlign(alignLineRefs[0].axis, element, alignLineRefs[0].isHorizontal)) {\n alignLineRefs[0].alignRectangles.push(element);\n }\n if (isAlign(alignLineRefs[1].axis, element, alignLineRefs[1].isHorizontal)) {\n alignLineRefs[1].alignRectangles.push(element);\n }\n if (isAlign(alignLineRefs[2].axis, element, alignLineRefs[2].isHorizontal)) {\n alignLineRefs[2].alignRectangles.push(element);\n }\n if (isAlign(alignLineRefs[3].axis, element, alignLineRefs[3].isHorizontal)) {\n alignLineRefs[3].alignRectangles.push(element);\n }\n }\n\n if (drawHorizontal && alignLineRefs[0].alignRectangles.length) {\n const leftRectangle =\n alignLineRefs[0].alignRectangles.length === 1\n ? alignLineRefs[0].alignRectangles[0]\n : getNearestAlignRectangle(alignLineRefs[0].alignRectangles, activeRectangle);\n setAlignLine(alignLineRefs[0].axis, leftRectangle, alignLineRefs[0].isHorizontal);\n }\n\n if (drawHorizontal && alignLineRefs[1].alignRectangles.length) {\n const rightRectangle =\n alignLineRefs[1].alignRectangles.length === 1\n ? alignLineRefs[1].alignRectangles[0]\n : getNearestAlignRectangle(alignLineRefs[1].alignRectangles, activeRectangle);\n setAlignLine(alignLineRefs[1].axis, rightRectangle, alignLineRefs[1].isHorizontal);\n }\n\n if (drawVertical && alignLineRefs[2].alignRectangles.length) {\n const topRectangle =\n alignLineRefs[2].alignRectangles.length === 1\n ? alignLineRefs[2].alignRectangles[0]\n : getNearestAlignRectangle(alignLineRefs[2].alignRectangles, activeRectangle);\n setAlignLine(alignLineRefs[2].axis, topRectangle, alignLineRefs[2].isHorizontal);\n }\n\n if (drawVertical && alignLineRefs[3].alignRectangles.length) {\n const bottomRectangle =\n alignLineRefs[3].alignRectangles.length === 1\n ? alignLineRefs[3].alignRectangles[0]\n : getNearestAlignRectangle(alignLineRefs[3].alignRectangles, activeRectangle);\n setAlignLine(alignLineRefs[3].axis, bottomRectangle, alignLineRefs[3].isHorizontal);\n }\n\n return drawAlignLines(this.board, alignLinePoints);\n }\n\n handleResizeAlign(resizeAlignOptions: ResizeAlignOptions): ResizeAlignRef {\n const alignG = createG();\n let alignLineDelta = this.getEqualLineDelta(resizeAlignOptions);\n if (alignLineDelta.deltaX === 0 && alignLineDelta.deltaY === 0) {\n alignLineDelta = this.getAlignLineDelta(resizeAlignOptions);\n }\n const equalLineRef = this.getAlignLineRef(alignLineDelta, resizeAlignOptions);\n const equalLinesG = this.drawEqualLines(equalLineRef.activePoints, resizeAlignOptions);\n const alignLinesG = this.drawAlignLines(equalLineRef.activePoints, resizeAlignOptions);\n alignG.append(equalLinesG, alignLinesG);\n return { ...equalLineRef, alignG };\n }\n}\n\nfunction getBarPoint(point: Point, isHorizontal: boolean) {\n return isHorizontal\n ? [\n [point[0], point[1] - 4],\n [point[0], point[1] + 4]\n ]\n : [\n [point[0] - 4, point[1]],\n [point[0] + 4, point[1]]\n ];\n}\n\nfunction getEqualLinePoints(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 drawEqualLines(board: PlaitBoard, lines: Point[][]) {\n const g = createG();\n lines.forEach(line => {\n if (!line.length) return;\n const yAlign = PlaitBoard.getRoughSVG(board).line(line[0][0], line[0][1], line[1][0], line[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(yAlign);\n line.forEach(point => {\n const barPoint = getBarPoint(point, !!Point.isHorizontal(line[0], line[1]));\n const bar = PlaitBoard.getRoughSVG(board).line(barPoint[0][0], barPoint[0][1], barPoint[1][0], barPoint[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(bar);\n });\n });\n return g;\n}\n\nfunction drawAlignLines(board: PlaitBoard, lines: [Point, Point][]) {\n const g = createG();\n lines.forEach(points => {\n if (!points.length) return;\n const xAlign = PlaitBoard.getRoughSVG(board).line(points[0][0], points[0][1], points[1][0], points[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n strokeLineDash: [4, 4]\n });\n g.appendChild(xAlign);\n });\n return g;\n}\n\nexport const getTripleAlignAxis = (rectangle: RectangleClient, isHorizontal: boolean): TripleAlignAxis => {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n return [rectangle[axis], rectangle[axis] + rectangle[side] / 2, rectangle[axis] + rectangle[side]];\n};\n\nexport const isAlign = (axis: number, rectangle: RectangleClient, isHorizontal: boolean) => {\n const alignAxis = getTripleAlignAxis(rectangle, isHorizontal);\n return alignAxis.includes(axis);\n};\n\nexport const getClosestDelta = (axis: number, rectangle: RectangleClient, isHorizontal: boolean) => {\n const alignAxis = getTripleAlignAxis(rectangle, isHorizontal);\n const deltas = alignAxis.map(item => item - axis);\n const absDeltas = deltas.map(item => Math.abs(item));\n const index = absDeltas.indexOf(Math.min(...absDeltas));\n return deltas[index];\n};\n\nfunction getMinAlignDelta(alignRectangles: RectangleClient[], axis: number, isHorizontal: boolean) {\n let delta = ALIGN_TOLERANCE;\n\n alignRectangles.forEach(item => {\n const distance = getClosestDelta(axis, item, isHorizontal);\n if (Math.abs(distance) < Math.abs(delta)) {\n delta = distance;\n }\n });\n return delta;\n}\n\nfunction getNearestAlignRectangle(alignRectangles: RectangleClient[], activeRectangle: RectangleClient) {\n let minDistance = Infinity;\n let nearestRectangle = alignRectangles[0];\n\n alignRectangles.forEach(item => {\n const distance = Math.sqrt(Math.pow(activeRectangle.x - item.x, 2) + Math.pow(activeRectangle.y - item.y, 2));\n if (distance < minDistance) {\n minDistance = distance;\n nearestRectangle = item;\n }\n });\n return nearestRectangle;\n}\n","import { PlaitBoard, Point, RectangleClient, getRectangleByElements, PlaitElement, DirectionFactor } from '@plait/core';\nimport { getResizeZoom, movePointByZoomAndOriginPoint } from '../plugins/with-draw-resize';\nimport { ResizeRef, ResizeState, getDirectionFactorByDirectionComponent, getUnitVectorByPointAndPoint } from '@plait/common';\nimport { PlaitDrawElement } from '../interfaces';\nimport { ResizeAlignReaction, ResizeAlignRef } from './resize-align-reaction';\n\nexport function getResizeAlignRef(\n board: PlaitBoard,\n resizeRef: ResizeRef<PlaitDrawElement | PlaitDrawElement[]>,\n resizeState: ResizeState,\n resizeOriginPointAndHandlePoint: {\n originPoint: Point;\n handlePoint: Point;\n },\n isAspectRatio: boolean,\n isFromCorner: boolean\n): ResizeAlignRef {\n const { originPoint, handlePoint } = resizeOriginPointAndHandlePoint;\n const { xZoom, yZoom } = getResizeZoom(resizeState, originPoint, handlePoint, isFromCorner, isAspectRatio);\n\n let activeElements: PlaitElement[];\n let resizeOriginPoints: Point[] = [];\n if (Array.isArray(resizeRef.element)) {\n activeElements = resizeRef.element;\n const rectangle = getRectangleByElements(board, resizeRef.element, false);\n resizeOriginPoints = RectangleClient.getPoints(rectangle);\n } else {\n activeElements = [resizeRef.element];\n resizeOriginPoints = resizeRef.element.points;\n }\n\n const points = resizeOriginPoints.map(p => {\n return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);\n }) as [Point, Point];\n const activeRectangle = RectangleClient.getRectangleByPoints(points);\n\n const resizeAlignReaction = new ResizeAlignReaction(board, activeElements);\n const resizeHandlePoint = movePointByZoomAndOriginPoint(handlePoint, originPoint, xZoom, yZoom);\n const [x, y] = getUnitVectorByPointAndPoint(originPoint, resizeHandlePoint);\n\n return resizeAlignReaction.handleResizeAlign({\n resizeState,\n resizeOriginPoints,\n activeRectangle,\n originPoint,\n handlePoint,\n directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],\n isAspectRatio,\n isFromCorner\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} from '@plait/common';\nimport { PlaitBoard, Point, RectangleClient, Transforms, createG, getRectangleByElements, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { PlaitDrawElement } from '../interfaces';\nimport { DrawTransforms } from '../transforms';\nimport { getHitRectangleResizeHandleRef } from '../utils/position/geometry';\nimport { getResizeAlignRef } from '../utils/resize-align';\n\nexport function withDrawResize(board: PlaitBoard) {\n const { afterChange } = board;\n let alignG: SVGGElement | null;\n let handleG: SVGGElement | null;\n\n const canResize = () => {\n const elements = getSelectedElements(board);\n return elements.length > 1 && elements.every(el => PlaitDrawElement.isDrawElement(el));\n }\n\n const options: WithResizeOptions<PlaitDrawElement[]> = {\n key: 'draw-elements',\n canResize,\n hitTest: (point: Point) => {\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n const handleRef = getHitRectangleResizeHandleRef(board, boundingRectangle, point);\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 alignG?.remove();\n const isFromCorner = isCornerHandle(board, resizeRef.handle);\n const isAspectRatio = resizeState.isShift || isFromCorner;\n const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, resizeRef);\n\n const resizeAlignRef = getResizeAlignRef(\n board,\n resizeRef,\n resizeState,\n {\n originPoint,\n handlePoint\n },\n isAspectRatio,\n isFromCorner\n );\n alignG = resizeAlignRef.alignG;\n PlaitBoard.getElementActiveHost(board).append(alignG);\n resizeRef.element.forEach(target => {\n const path = PlaitBoard.findPath(board, target);\n let points = target.points.map(p => {\n return movePointByZoomAndOriginPoint(p, originPoint, resizeAlignRef.xZoom, resizeAlignRef.yZoom);\n });\n\n if (PlaitDrawElement.isGeometry(target)) {\n const { height: textHeight } = getFirstTextManage(target).getSize();\n DrawTransforms.resizeGeometry(board, points as [Point, Point], textHeight, path);\n } else if (PlaitDrawElement.isLine(target)) {\n Transforms.setNode(board, { points }, path);\n } else if (PlaitDrawElement.isImage(target)) {\n if (isAspectRatio) {\n Transforms.setNode(board, { points }, path);\n } else {\n // The image element does not follow the resize, but moves based on the center point.\n const targetRectangle = RectangleClient.getRectangleByPoints(target.points);\n const centerPoint = RectangleClient.getCenterPoint(targetRectangle);\n const newCenterPoint = movePointByZoomAndOriginPoint(\n centerPoint,\n originPoint,\n resizeAlignRef.xZoom,\n resizeAlignRef.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 alignG?.remove();\n alignG = null;\n }\n };\n\n withResize<PlaitDrawElement[]>(board, options);\n\n board.afterChange = () => {\n afterChange();\n if (handleG) {\n handleG.remove();\n handleG = null;\n }\n if (canResize() && !isSelectionMoving(board)) {\n handleG = createG();\n const elements = getSelectedElements(board) as PlaitDrawElement[];\n const boundingRectangle = getRectangleByElements(board, elements, false);\n const corners = RectangleClient.getCornerPoints(boundingRectangle);\n corners.forEach((corner) => {\n const g = drawHandle(board, corner);\n handleG && handleG.append(g);\n });\n PlaitBoard.getElementActiveHost(board).append(handleG);\n }\n };\n\n return board;\n}\n\nexport const getResizeOriginPointAndHandlePoint = (board: PlaitBoard, resizeRef: ResizeRef<PlaitDrawElement | PlaitDrawElement[]>) => {\n const handleIndex = getIndexByResizeHandle(resizeRef.handle);\n const symmetricHandleIndex = getSymmetricHandleIndex(board, handleIndex);\n const originPoint = getResizeHandlePointByIndex(resizeRef.rectangle as RectangleClient, symmetricHandleIndex);\n const handlePoint = getResizeHandlePointByIndex(resizeRef.rectangle as RectangleClient, handleIndex);\n return {\n originPoint,\n handlePoint\n };\n};\n\nexport const getResizeZoom = (\n resizeState: ResizeState,\n resizeOriginPoint: Point,\n resizeHandlePoint: Point,\n isFromCorner: boolean,\n isAspectRatio: boolean\n) => {\n const startPoint = resizeState.startPoint;\n const endPoint = resizeState.endPoint;\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","import { Path, PlaitBoard, PlaitElement, Point, RectangleClient, Transforms, getSelectedElements } from '@plait/core';\nimport { PlaitGeometry } from '../interfaces/geometry';\nimport {\n ResizeRef,\n ResizeState,\n WithResizeOptions,\n getFirstTextManage,\n isCornerHandle,\n normalizeShapePoints,\n withResize\n} from '@plait/common';\nimport { getSelectedGeometryElements, getSelectedImageElements } from '../utils/selected';\nimport { DrawTransforms } from '../transforms';\nimport { GeometryComponent } from '../geometry.component';\nimport { PlaitImage } from '../interfaces/image';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getHitRectangleResizeHandleRef } from '../utils/position/geometry';\nimport { getResizeOriginPointAndHandlePoint, getResizeZoom, movePointByZoomAndOriginPoint } from './with-draw-resize';\nimport { getResizeAlignRef } from '../utils/resize-align';\n\nexport const withGeometryResize = (board: PlaitBoard) => {\n let alignG: SVGGElement | null;\n const options: WithResizeOptions<PlaitGeometry | PlaitImage> = {\n key: 'draw-geometry',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n const selectedElements = [...getSelectedGeometryElements(board), ...getSelectedImageElements(board)];\n if (selectedElements.length !== 1 || getSelectedElements(board).length !== 1) {\n return null;\n }\n const target = selectedElements[0];\n const targetComponent = PlaitElement.getComponent(selectedElements[0]) as GeometryComponent;\n if (targetComponent.activeGenerator.hasResizeHandle) {\n const rectangle = board.getRectangle(target) as RectangleClient;\n const handleRef = getHitRectangleResizeHandleRef(board, rectangle, point);\n if (handleRef) {\n return {\n element: target,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass,\n rectangle\n };\n }\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<PlaitGeometry | PlaitImage>, resizeState: ResizeState) => {\n alignG?.remove();\n const isFromCorner = isCornerHandle(board, resizeRef.handle);\n const isAspectRatio = resizeState.isShift || PlaitDrawElement.isImage(resizeRef.element);\n const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, resizeRef);\n\n const resizeAlignRef = getResizeAlignRef(\n board,\n resizeRef,\n resizeState,\n {\n originPoint,\n handlePoint\n },\n isAspectRatio,\n isFromCorner\n );\n alignG = resizeAlignRef.alignG;\n PlaitBoard.getElementActiveHost(board).append(alignG);\n let points = resizeAlignRef.activePoints as [Point, Point];\n if (PlaitDrawElement.isGeometry(resizeRef.element)) {\n const { height: textHeight } = getFirstTextManage(resizeRef.element).getSize();\n DrawTransforms.resizeGeometry(board, points, textHeight, resizeRef.path as Path);\n } else {\n points = normalizeShapePoints(points);\n Transforms.setNode(board, { points }, resizeRef.path as Path);\n }\n },\n afterResize: (resizeRef: ResizeRef<PlaitGeometry | PlaitImage>) => {\n alignG?.remove();\n alignG = null;\n }\n };\n\n withResize<PlaitGeometry | PlaitImage>(board, options);\n\n return board;\n};\n","import { Path, PlaitBoard, PlaitNode, Point } from '@plait/core';\nimport { ResizeRef, ResizeState, WithResizeOptions, isSourceAndTargetIntersect, simplifyOrthogonalPoints, withResize } from '@plait/common';\nimport { getSelectedLineElements } from '../utils/selected';\nimport { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { LineHandle, LineShape, PlaitLine } from '../interfaces';\nimport { DrawTransforms } from '../transforms';\nimport { REACTION_MARGIN } from '../constants';\nimport { getElbowPoints, getNextRenderPoints } from '../utils/line/elbow';\nimport {\n alignElbowSegment,\n alignPoints,\n getIndexAndDeleteCountByKeyPoint,\n getResizedPreviousAndNextPoint,\n hasIllegalElbowPoint\n} from '../utils/line/line-resize';\nimport { getConnectionByNearestPoint, getLinePoints } from '../utils/line/line-basic';\nimport { getElbowLineRouteOptions } from '../utils/line';\n\nexport const withLineResize = (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<PlaitLine, LineResizeHandle> = {\n key: 'draw-line',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n const selectedLineElements = getSelectedLineElements(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<PlaitLine, LineResizeHandle>) => {\n if (\n resizeRef.element.shape === LineShape.elbow &&\n resizeRef.handle !== LineResizeHandle.source &&\n resizeRef.handle !== LineResizeHandle.target\n ) {\n const params = getElbowLineRouteOptions(board, resizeRef.element);\n const isIntersect = isSourceAndTargetIntersect(params);\n if (isIntersect) {\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<PlaitLine, LineResizeHandle>, resizeState: ResizeState) => {\n let points: Point[] = [...resizeRef.element.points];\n let source: LineHandle = { ...resizeRef.element.source };\n let target: LineHandle = { ...resizeRef.element.target };\n let handleIndex = resizeRef.handleIndex!;\n const hitElement = getHitOutlineGeometry(board, resizeState.endPoint, REACTION_MARGIN);\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 = getConnectionByNearestPoint(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 === LineShape.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 = getLinePoints(board, resizeRef.element);\n const newPoints = [...points];\n newPoints[0] = drawPoints[0];\n newPoints[newPoints.length - 1] = drawPoints[drawPoints.length - 1];\n if (resizeRef.element.shape !== LineShape.elbow) {\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.resizeLine(board, { points, source, target }, resizeRef.path as Path);\n },\n afterResize: (resizeRef: ResizeRef<PlaitLine, LineResizeHandle>) => {\n if (resizeRef.element.shape === LineShape.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.resizeLine(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<PlaitLine, LineResizeHandle>(board, options);\n\n return board;\n};\n","import {\n ACTIVE_STROKE_WIDTH,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n drawCircle,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { LineShape, PlaitDrawElement } from '../interfaces';\nimport { isResizingByCondition } from '@plait/common';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { LineResizeHandle } from '../utils/position/line';\nimport { drawBoundMask, getNearestPoint } from '../utils/geometry';\nimport { getHitConnectorPoint } from '../utils/line/line-basic';\n\nexport const withLineBoundReaction = (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(LineShape);\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.isLine(element) && isSourceOrTarget;\n });\n if (isLinePointer || isLineResizing) {\n const hitElement = getHitOutlineGeometry(board, movingPoint, -4);\n if (hitElement) {\n boundShapeG = drawBoundMask(board, hitElement);\n let nearestPoint = getNearestPoint(hitElement, movingPoint);\n const rectangle = RectangleClient.getRectangleByPoints(hitElement.points);\n const activeRectangle = RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH);\n const hitConnector = getHitConnectorPoint(nearestPoint, hitElement, activeRectangle);\n nearestPoint = hitConnector ? hitConnector : nearestPoint;\n const circleG = drawCircle(PlaitBoard.getRoughSVG(board), nearestPoint, 6, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n fill: SELECTION_BORDER_COLOR,\n fillStyle: 'solid'\n });\n boundShapeG.appendChild(circleG);\n PlaitBoard.getElementActiveHost(board).append(boundShapeG);\n }\n }\n pointerMove(event);\n };\n\n board.pointerUp = event => {\n boundShapeG?.remove();\n boundShapeG = null;\n pointerUp(event);\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitElement,\n getHitElementByPoint,\n getNearestPointBetweenPointAndSegments,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitDrawElement, PlaitLine } from '../interfaces';\nimport { Node } from 'slate';\nimport { getRatioByPoint } from '@plait/common';\nimport { buildText } from '@plait/text';\nimport { LineComponent } from '../line.component';\nimport { DrawTransforms } from '../transforms';\nimport { getLinePoints } from '../utils/line/line-basic';\nimport { getHitLineTextIndex } from '../utils/position/line';\nimport { isHitLineText } from '../utils/hit';\n\nexport const withLineText = (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, (element: PlaitElement) => {\n return PlaitDrawElement.isLine(element);\n }) as undefined | PlaitLine;\n if (hitTarget) {\n const points = getLinePoints(board, hitTarget);\n const point = getNearestPointBetweenPointAndSegments(clickPoint, points);\n const texts = hitTarget.texts?.length ? [...hitTarget.texts] : [];\n const textIndex = getHitLineTextIndex(board, hitTarget, clickPoint);\n const isHitText = isHitLineText(board, hitTarget, clickPoint);\n if (isHitText) {\n editHandle(board, hitTarget, textIndex);\n } else {\n const ratio = getRatioByPoint(points, point);\n texts.push({\n text: buildText('文本'),\n position: ratio,\n width: 28,\n height: 20\n });\n DrawTransforms.setLineTexts(board, hitTarget, texts);\n setTimeout(() => {\n const hitComponent = PlaitElement.getComponent(hitTarget) as LineComponent;\n editHandle(board, hitTarget, hitComponent.getTextManages().length - 1, true);\n });\n }\n }\n }\n dblClick(event);\n };\n\n return board;\n};\n\nfunction editHandle(board: PlaitBoard, element: PlaitLine, manageIndex: number, isFirstEdit: boolean = false) {\n const hitComponent = PlaitElement.getComponent(element) as LineComponent;\n const textManage = hitComponent.getTextManages()[manageIndex];\n const originText = textManage.componentRef.instance.children;\n\n textManage.edit((origin, descendant) => {\n const text = Node.string(descendant[0]);\n const shouldRemove = (isFirstEdit && originText === descendant) || !text;\n if (shouldRemove) {\n DrawTransforms.removeLineText(board, element, manageIndex);\n }\n });\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';\nimport { PlaitBoard, PlaitPluginElementContext, OnContextChanged, isSelectionMoving, getSelectedElements } from '@plait/core';\nimport { Subject } from 'rxjs';\nimport { CommonPluginElement, ImageGenerator } from '@plait/common';\nimport { PlaitImage } from './interfaces/image';\nimport { LineAutoCompleteGenerator } from './generators/line-auto-complete.generator';\n\n@Component({\n selector: 'plait-draw-geometry',\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class ImageComponent extends CommonPluginElement<PlaitImage, PlaitBoard>\n implements OnInit, OnDestroy, OnContextChanged<PlaitImage, PlaitBoard> {\n destroy$ = new Subject<void>();\n\n get activeGenerator() {\n return this.imageGenerator.componentRef.instance.activeGenerator;\n }\n\n imageGenerator!: ImageGenerator<PlaitImage>;\n\n lineAutoCompleteGenerator!: LineAutoCompleteGenerator;\n\n constructor(private viewContainerRef: ViewContainerRef, protected cdr: ChangeDetectorRef) {\n super(cdr);\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 LineAutoCompleteGenerator(this.board);\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.initializeGenerator();\n this.imageGenerator.processDrawing(this.element, this.g, this.viewContainerRef);\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitImage, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitImage, PlaitBoard>\n ) {\n if (value.element !== previous.element) {\n this.imageGenerator.updateImage(this.g, previous.element, value.element);\n this.imageGenerator.componentRef.instance.isFocus = this.selected;\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n } else {\n const hasSameSelected = value.selected === previous.selected;\n const hasSameHandleState = this.activeGenerator.options.hasResizeHandle() === this.activeGenerator.hasResizeHandle;\n if (!hasSameSelected || !hasSameHandleState) {\n this.imageGenerator.componentRef.instance.isFocus = this.selected;\n this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n }\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n this.imageGenerator.destroy();\n this.lineAutoCompleteGenerator.destroy();\n }\n}\n","import { CursorClass, PlaitBoard, PlaitElement, RgbaToHEX, drawCircle, isSelectionMoving, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getAutoCompletePoints, getHitIndexOfAutoCompletePoint, getSelectedDrawElements } from '../utils';\nimport { GeometryComponent } from '../geometry.component';\nimport { PRIMARY_COLOR } from '@plait/common';\nimport { LINE_AUTO_COMPLETE_HOVERED_DIAMETER, LINE_AUTO_COMPLETE_HOVERED_OPACITY } from '../constants/line';\n\nexport const withLineAutoCompleteReaction = (board: PlaitBoard) => {\n const { pointerMove } = board;\n let reactionG: SVGGElement | null = null;\n board.pointerMove = (event: PointerEvent) => {\n reactionG?.remove();\n PlaitBoard.getBoardContainer(board).classList.remove(CursorClass.crosshair);\n const selectedElements = getSelectedDrawElements(board);\n const targetElement = selectedElements.length === 1 && selectedElements[0];\n const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (!PlaitBoard.isReadonly(board) && !isSelectionMoving(board) && targetElement && PlaitDrawElement.isShape(targetElement)) {\n const points = getAutoCompletePoints(targetElement);\n const hitIndex = getHitIndexOfAutoCompletePoint(movingPoint, points);\n const hitPoint = points[hitIndex];\n const component = PlaitElement.getComponent(targetElement) as GeometryComponent;\n component.lineAutoCompleteGenerator!.recoverAutoCompleteG();\n if (hitPoint) {\n component.lineAutoCompleteGenerator!.removeAutoCompleteG(hitIndex);\n reactionG = drawCircle(PlaitBoard.getRoughSVG(board), hitPoint, LINE_AUTO_COMPLETE_HOVERED_DIAMETER, {\n stroke: 'none',\n fill: RgbaToHEX(PRIMARY_COLOR, LINE_AUTO_COMPLETE_HOVERED_OPACITY),\n fillStyle: 'solid'\n });\n PlaitBoard.getElementActiveHost(board).append(reactionG);\n PlaitBoard.getBoardContainer(board).classList.add(CursorClass.crosshair);\n }\n }\n pointerMove(event);\n };\n\n return board;\n};\n","import {\n BoardTransforms,\n PRESS_AND_MOVE_BUFFER,\n PlaitBoard,\n PlaitOptionsBoard,\n PlaitPointerType,\n Point,\n RectangleClient,\n Transforms,\n addSelectedElement,\n clearSelectedElement,\n createG,\n distanceBetweenPointAndPoint,\n temporaryDisableSelection,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { LineShape, PlaitDrawElement, PlaitLine, PlaitShape } from '../interfaces';\nimport { getShape } from '../utils/shape';\nimport { getEngine } from '../engines';\nimport { handleLineCreating } from '../utils/line/line-basic';\nimport { getSelectedDrawElements } from '../utils/selected';\nimport { getAutoCompletePoints, getHitIndexOfAutoCompletePoint } from '../utils/geometry';\n\nexport const WithLineAutoCompletePluginKey = 'plait-line-auto-complete-plugin-key';\n\nexport interface LineAutoCompleteOptions {\n afterComplete: (element: PlaitLine) => {};\n}\n\nexport const withLineAutoComplete = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n\n let startPoint: Point | null = null;\n let lineShapeG: SVGGElement | null = null;\n let sourceElement: PlaitShape | null;\n let temporaryElement: PlaitLine | null;\n\n board.pointerDown = (event: PointerEvent) => {\n const selectedElements = getSelectedDrawElements(board);\n const targetElement = selectedElements.length === 1 && selectedElements[0];\n const clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (!PlaitBoard.isReadonly(board) && targetElement && PlaitDrawElement.isShape(targetElement)) {\n const points = getAutoCompletePoints(targetElement);\n const index = getHitIndexOfAutoCompletePoint(clickPoint, points);\n const hitPoint = points[index];\n if (hitPoint) {\n temporaryDisableSelection(board as PlaitOptionsBoard);\n startPoint = hitPoint;\n sourceElement = targetElement;\n BoardTransforms.updatePointerType(board, LineShape.elbow);\n }\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n lineShapeG?.remove();\n lineShapeG = createG();\n let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n if (startPoint && sourceElement) {\n const distance = distanceBetweenPointAndPoint(...movingPoint, ...startPoint);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n const rectangle = RectangleClient.getRectangleByPoints(sourceElement.points);\n const shape = getShape(sourceElement);\n const engine = getEngine(shape);\n let sourcePoint = startPoint;\n if (engine.getNearestCrossingPoint) {\n const crossingPoint = engine.getNearestCrossingPoint(rectangle, startPoint);\n sourcePoint = crossingPoint;\n }\n temporaryElement = handleLineCreating(board, LineShape.elbow, sourcePoint, movingPoint, sourceElement, lineShapeG);\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<LineAutoCompleteOptions>(WithLineAutoCompletePluginKey)\n ?.afterComplete;\n afterComplete && afterComplete(temporaryElement);\n }\n if (startPoint) {\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n startPoint = null;\n }\n lineShapeG?.remove();\n lineShapeG = null;\n sourceElement = null;\n temporaryElement = null;\n globalPointerUp(event);\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitElement,\n Point,\n distanceBetweenPointAndSegments,\n getHitElementByPoint,\n getNearestPointBetweenPointAndSegments\n} from '@plait/core';\nimport { PlaitDrawElement, PlaitLine } from '../interfaces';\nimport { ResizeHandle, ResizeRef, ResizeState, WithResizeOptions, getRatioByPoint, withResize } from '@plait/common';\nimport { DrawTransforms } from '../transforms';\nimport { LineComponent } from '../line.component';\nimport { getLinePoints } from '../utils/line/line-basic';\nimport { getHitLineTextIndex } from '../utils/position/line';\n\nexport const withLineTextMove = (board: PlaitBoard) => {\n let textIndex = 0;\n const movableBuffer = 100;\n const options: WithResizeOptions<PlaitLine> = {\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.isLine(element);\n }) as undefined | PlaitLine;\n if (line) {\n const index = getHitLineTextIndex(board, line, point);\n const hitComponent = PlaitElement.getComponent(line) as LineComponent;\n const textManage = hitComponent.getTextManages()[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<PlaitLine>, resizeState: ResizeState) => {\n const element = resizeRef.element;\n if (element) {\n const movingPoint = resizeState.endPoint;\n const points = getLinePoints(board, element);\n const distance = distanceBetweenPointAndSegments(points, movingPoint);\n if (distance <= movableBuffer) {\n const point = getNearestPointBetweenPointAndSegments(movingPoint, points, false);\n const position = getRatioByPoint(points, point);\n const texts = [...element.texts];\n texts[textIndex] = {\n ...texts[textIndex],\n position\n };\n DrawTransforms.setLineTexts(board, element, texts);\n }\n }\n }\n };\n\n withResize<PlaitLine>(board, options);\n\n return board;\n};\n","import { Generator } from '@plait/common';\nimport { ACTIVE_STROKE_WIDTH, PlaitGroup, drawRectangle, getRectangleByGroup } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\n\nexport class GroupGenerator extends Generator<PlaitGroup> {\n canDraw(element: PlaitGroup): boolean {\n return true;\n }\n\n draw(element: PlaitGroup, partialSelected: boolean) {\n const options: Options = {\n stroke: '',\n strokeWidth: ACTIVE_STROKE_WIDTH,\n strokeLineDash: [5]\n };\n if (partialSelected) {\n options.stroke = '#999';\n }\n const rectangle = getRectangleByGroup(this.board, element, true);\n return drawRectangle(this.board, rectangle, options);\n }\n}\n","import { OnInit, OnDestroy, ViewContainerRef, ChangeDetectorRef, ChangeDetectionStrategy, Component } from '@angular/core';\nimport { ActiveGenerator, CommonPluginElement } from '@plait/common';\nimport {\n OnContextChanged,\n PlaitBoard,\n PlaitGroup,\n PlaitPluginElementContext,\n getElementsInGroup,\n getRectangleByGroup,\n isSelectedElementOrGroup,\n isSelectionMoving\n} from '@plait/core';\nimport { GroupGenerator } from './generators/group.generator';\n\n@Component({\n selector: 'plait-group',\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class GroupComponent extends CommonPluginElement<PlaitGroup, PlaitBoard>\n implements OnInit, OnDestroy, OnContextChanged<PlaitGroup, PlaitBoard> {\n constructor(private viewContainerRef: ViewContainerRef, protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n activeGenerator!: ActiveGenerator<PlaitGroup>;\n\n groupGenerator!: GroupGenerator;\n\n initializeGenerator() {\n this.activeGenerator = new ActiveGenerator<PlaitGroup>(this.board, {\n getRectangle: (element: PlaitGroup) => {\n return getRectangleByGroup(this.board, element);\n },\n getStrokeWidth: () => 0,\n getStrokeOpacity: () => 0,\n hasResizeHandle: () => {\n return !isSelectionMoving(this.board);\n }\n });\n this.groupGenerator = new GroupGenerator(this.board);\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.initializeGenerator();\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitGroup, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitGroup, PlaitBoard>\n ) {\n const elementsInGroup = getElementsInGroup(this.board, value.element, false, true);\n const isPartialSelectGroup =\n elementsInGroup.some(item => isSelectedElementOrGroup(this.board, item)) &&\n !elementsInGroup.every(item => isSelectedElementOrGroup(this.board, item));\n this.groupGenerator.processDrawing(value.element, this.g, isPartialSelectGroup);\n }\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitGroupElement,\n PlaitPluginElementContext,\n Point,\n RectangleClient,\n Selection,\n getRectangleByGroup,\n getSelectedElements\n} from '@plait/core';\nimport { GeometryComponent } from '../geometry.component';\nimport { LineComponent } from '../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 { withLineCreateByDraw } from './with-line-create';\nimport { withGeometryResize } from './with-geometry-resize';\nimport { withLineResize } from './with-line-resize';\nimport { withLineBoundReaction } from './with-line-bound-reaction';\nimport { withLineText } from './with-line-text';\nimport { ImageComponent } from '../image.component';\nimport { withLineAutoCompleteReaction } from './with-line-auto-complete-reaction';\nimport { withLineAutoComplete } from './with-line-auto-complete';\nimport { withLineTextMove } from './with-line-text-move';\nimport { withDrawResize } from './with-draw-resize';\nimport { isHitDrawElement, isHitElementInside, isRectangleHitDrawElement } from '../utils/hit';\nimport { getLinePoints, getLineTextRectangle } from '../utils/line/line-basic';\nimport { GroupComponent } from '../group.component';\n\nexport const withDraw = (board: PlaitBoard) => {\n const { drawElement, getRectangle, isRectangleHit, isHit, isInsidePoint, isMovable, isAlign, getRelatedFragment } = board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitDrawElement.isGeometry(context.element)) {\n return GeometryComponent;\n } else if (PlaitDrawElement.isLine(context.element)) {\n return LineComponent;\n } else if (PlaitDrawElement.isImage(context.element)) {\n return ImageComponent;\n } else if (PlaitGroupElement.isGroup(context.element)) {\n return GroupComponent;\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.isLine(element)) {\n const points = getLinePoints(board, element);\n const lineTextRectangles = element.texts.map((text, index) => {\n const rectangle = getLineTextRectangle(board, element, index);\n return rectangle;\n });\n const linePointsRectangle = RectangleClient.getRectangleByPoints(points);\n return RectangleClient.getBoundingRectangle([linePointsRectangle, ...lineTextRectangles]);\n }\n if (PlaitDrawElement.isImage(element)) {\n return RectangleClient.getRectangleByPoints(element.points);\n }\n if (PlaitGroupElement.isGroup(element)) {\n return getRectangleByGroup(board, element);\n }\n return getRectangle(element);\n };\n\n board.isRectangleHit = (element: PlaitElement, selection: Selection) => {\n const result = isRectangleHitDrawElement(board, element, selection);\n if (result !== null) {\n return result;\n }\n return isRectangleHit(element, selection);\n };\n\n board.isHit = (element, point) => {\n const result = isHitDrawElement(board, element, point);\n if (result !== null) {\n return result;\n }\n return isHit(element, point);\n };\n\n board.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.isLine(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[]) => {\n const selectedElements = getSelectedElements(board);\n const lineElements = board.children.filter(element => PlaitDrawElement.isLine(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]);\n };\n\n return withDrawResize(\n withLineTextMove(\n withLineAutoCompleteReaction(\n withLineText(\n withLineBoundReaction(\n withLineResize(\n withGeometryResize(\n withLineCreateByDraw(\n withLineAutoComplete(\n withGeometryCreateByDrag(withGeometryCreateByDrawing(withDrawFragment(withDrawHotkey(board))))\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":["getCenterPointsOnPolygon","heightRatio","getNearestPointBetweenPointAndRoundRectangle"],"mappings":"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"}
|