@plait/draw 0.32.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/constants/geometry.d.ts +1 -0
  2. package/constants/index.d.ts +1 -0
  3. package/constants/theme.d.ts +26 -0
  4. package/esm2022/constants/geometry.mjs +2 -1
  5. package/esm2022/constants/index.mjs +2 -1
  6. package/esm2022/constants/theme.mjs +28 -0
  7. package/esm2022/generators/auto-complete.generator.mjs +44 -0
  8. package/esm2022/generators/geometry-shape.generator.mjs +4 -4
  9. package/esm2022/generators/line-active.generator.mjs +2 -2
  10. package/esm2022/generators/line.generator.mjs +2 -2
  11. package/esm2022/geometry.component.mjs +14 -8
  12. package/esm2022/image.component.mjs +2 -2
  13. package/esm2022/interfaces/element.mjs +7 -1
  14. package/esm2022/interfaces/index.mjs +3 -3
  15. package/esm2022/line.component.mjs +10 -9
  16. package/esm2022/plugins/with-auto-complete-reaction.mjs +35 -0
  17. package/esm2022/plugins/with-auto-complete.mjs +61 -0
  18. package/esm2022/plugins/with-draw.mjs +10 -6
  19. package/esm2022/plugins/with-geometry-create.mjs +3 -6
  20. package/esm2022/plugins/with-line-create.mjs +9 -24
  21. package/esm2022/plugins/with-line-resize.mjs +7 -16
  22. package/esm2022/transforms/common.mjs +33 -0
  23. package/esm2022/transforms/geometry.mjs +6 -3
  24. package/esm2022/transforms/index.mjs +9 -3
  25. package/esm2022/transforms/line.mjs +4 -2
  26. package/esm2022/utils/geometry.mjs +24 -11
  27. package/esm2022/utils/hit.mjs +2 -2
  28. package/esm2022/utils/line.mjs +38 -11
  29. package/esm2022/utils/style/stroke.mjs +10 -5
  30. package/fesm2022/plait-draw.mjs +354 -124
  31. package/fesm2022/plait-draw.mjs.map +1 -1
  32. package/generators/auto-complete.generator.d.ts +13 -0
  33. package/generators/geometry-shape.generator.d.ts +1 -1
  34. package/generators/line-active.generator.d.ts +1 -1
  35. package/generators/line.generator.d.ts +1 -1
  36. package/geometry.component.d.ts +2 -0
  37. package/interfaces/element.d.ts +5 -0
  38. package/package.json +1 -1
  39. package/plugins/with-auto-complete-reaction.d.ts +2 -0
  40. package/plugins/with-auto-complete.d.ts +7 -0
  41. package/transforms/common.d.ts +6 -0
  42. package/transforms/geometry.d.ts +2 -1
  43. package/transforms/index.d.ts +5 -0
  44. package/utils/geometry.d.ts +5 -1
  45. package/utils/line.d.ts +2 -0
  46. package/utils/style/stroke.d.ts +3 -2
@@ -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/utils/style/stroke.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/shape.ts","../../../packages/draw/src/generators/geometry-shape.generator.ts","../../../packages/draw/src/transforms/geometry.ts","../../../packages/draw/src/transforms/geometry-text.ts","../../../packages/draw/src/transforms/image.ts","../../../packages/draw/src/transforms/line.ts","../../../packages/draw/src/transforms/index.ts","../../../packages/draw/src/plugins/with-geometry-create.ts","../../../packages/draw/src/constants/line.ts","../../../packages/draw/src/utils/geometry.ts","../../../packages/draw/src/utils/line-arrow.ts","../../../packages/draw/src/utils/line.ts","../../../packages/draw/src/utils/selected.ts","../../../packages/draw/src/utils/hit.ts","../../../packages/draw/src/interfaces/line.ts","../../../packages/draw/src/interfaces/element.ts","../../../packages/draw/src/interfaces/index.ts","../../../packages/draw/src/geometry.component.ts","../../../packages/draw/src/generators/line.generator.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/utils/clipboard.ts","../../../packages/draw/src/plugins/with-draw-fragment.ts","../../../packages/draw/src/utils/position/geometry.ts","../../../packages/draw/src/plugins/with-line-create.ts","../../../packages/draw/src/plugins/with-geometry-resize.ts","../../../packages/draw/src/utils/position/line.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-draw.ts","../../../packages/draw/src/plait-draw.ts"],"sourcesContent":["import { PlaitBoard, PlaitElement, Point, PointOfRectangle, RectangleClient, Vector } from '@plait/core';\nimport { GeometryComponent } from '../geometry.component';\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 getTextEditor(element: PlaitGeometry) {\n return PlaitGeometry.getTextManage(element).componentRef.instance.editor;\n },\n getTextManage(element: PlaitGeometry) {\n const component = PlaitElement.getComponent(element) as GeometryComponent;\n if (component) {\n return component.textManage;\n }\n throw new Error('can not get correctly component in get text editor');\n }\n};\n\nexport interface ShapeEngine {\n isHit: (rectangle: RectangleClient, point: Point) => boolean;\n getNearestPoint: (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\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 { PlaitDrawElement, PlaitGeometry, PlaitLine, StrokeStyle } from '../../interfaces';\nimport { DefaultGeometryStyle } from '../../constants';\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 = (element: PlaitGeometry | PlaitLine) => {\n const strokeColor = element.strokeColor || DefaultGeometryStyle.strokeColor;\n return strokeColor;\n};\n\nexport const getFillByElement = (element: PlaitGeometry | PlaitLine) => {\n const fill = element.fill || DefaultGeometryStyle.fill;\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 {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { getEdgeOnPolygonByPoint } from '../../utils/geometry';\nimport { Options } from 'roughjs/bin/core';\nimport { getRectangleByPoints } from '@plait/common';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } from '../../utils';\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 isHit(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 getEdgeOnPolygonByPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = 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 getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { getEdgeOnPolygonByPoint } from '../../utils';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\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 isHit(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 getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getEdgeOnPolygonByPoint(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 { PlaitBoard, Point, PointOfRectangle, RectangleClient, Vector, isPointInEllipse } 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 isHit(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 = getTangentSlope(point[0], point[1], a, b) as any;\n return getVectorBySlope(point[0], point[1], slope);\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\n/**\n * the result of slope is based on Cartesian coordinate system\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getTangentSlope(x: number, y: number, a: number, b: number) {\n const k = (-b * b * x) / (a * a * y);\n return k;\n}\n\n/**\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getVectorBySlope(x: number, y: number, slope: number) {\n const deltaX = 30;\n const deltaY = -slope * deltaX;\n let start = [0 - deltaX, 0 - deltaY] as Point;\n let end = [0 + deltaX, 0 + deltaY] as Point;\n // y < 0 acts on the lower half of the x-axis, with the starting point at the top and the end point at the bottom.\n \n if (y < 0) {\n const temp = start;\n start = end;\n end = temp;\n }\n const vector = [end[0] - start[0], end[1] - start[1]] as Vector;\n return vector;\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 { getCenterPointsOnPolygon, getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from './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, getTextRectangle } from '../../utils';\nimport { getRectangleByPoints } from '@plait/common';\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 = 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';\nimport { getRectangleByPoints } from '@plait/common';\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 = 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 { getEdgeOnPolygonByPoint } from '../../utils/geometry';\n\nexport const RectangleEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRectangle(board, rectangle, { ...options, fillStyle: 'solid' });\n },\n isHit(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.toRectangleClient([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 getEdgeOnPolygonByPoint(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 { getEdgeOnPolygonByPoint } from '../../utils/geometry';\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 isHit(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 getEdgeOnPolygonByPoint(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 { getEdgeOnPolygonByPoint } from '../../utils/geometry';\nimport { Options } from 'roughjs/bin/core';\nimport { getRectangleByPoints } from '@plait/common';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { getRoundRectangleRadius } from './round-rectangle';\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 isHit(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 getEdgeOnPolygonByPoint(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 = 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 {\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 { getCenterPointsOnPolygon, getEdgeOnPolygonByPoint, getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from './polygon';\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 { getCenterPointsOnPolygon, getStrokeWidthByElement } from '../../utils';\nimport { getRectangleByPoints } from '@plait/common';\nimport { ShapeDefaultSpace } from '../../constants';\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 = 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 { getRectangleByPoints } from '@plait/common';\nimport { getStrokeWidthByElement, getTextRectangle } 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 = 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 getNearestPointBetweenPointAndSegments,\n isPointInRoundRectangle\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getEdgeOnPolygonByPoint } from '../../utils/geometry';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\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 isHit(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 getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getEdgeOnPolygonByPoint(corners, point);\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 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 { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCenterPointsOnPolygon, getStrokeWidthByElement } from '../../utils';\nimport { getRectangleByPoints } from '@plait/common';\nimport { ShapeDefaultSpace } from '../../constants';\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 = 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 { getCenterPointsOnPolygon, getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from '../basic-shapes/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 { getCenterPointsOnPolygon, getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getRectangleByPoints } from '@plait/common';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\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 = 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 getNearestPointBetweenPointAndSegments,\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, getTangentSlope, getVectorBySlope } 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 isHit(rectangle: RectangleClient, point: Point) {\n //split shape to rectangle and a half ellipse\n const rangeRectangle = RectangleClient.toRectangleClient([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 = getTangentSlope(point[0], point[1], a, b) as any;\n return getVectorBySlope(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 getNearestPointBetweenPointAndSegments,\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, getTangentSlope, getVectorBySlope } 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}, 1, 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 isHit(rectangle: RectangleClient, point: Point) {\n //split shape to rectangle and a half ellipse\n const rangeRectangle = RectangleClient.toRectangleClient([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 nearestPoint = getNearestPointBetweenPointAndEllipse(\n point,\n [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\n if (nearestPoint[0] > rectangle.x + rectangle.width / 10) {\n nearestPoint[0] = (rectangle.x + rectangle.width / 10) * 2 - nearestPoint[0];\n }\n return nearestPoint;\n }\n\n if (nearestPoint[0] > rectangle.x + (rectangle.width * 9) / 10) {\n return getNearestPointBetweenPointAndEllipse(\n point,\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\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 = getTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorBySlope(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 { 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 { BasicShapes, PlaitGeometry } from '../interfaces';\nimport { getRectangleByPoints, 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 baseDraw(element: PlaitGeometry, data: ShapeData) {\n const rectangle = 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(element);\n const fill = getFillByElement(element);\n const strokeLineDash = getLineDashByElement(element);\n return drawGeometry(this.board, RectangleClient.inflate(rectangle, -strokeWidth), shape, {\n stroke: strokeColor,\n strokeWidth,\n fill,\n strokeLineDash\n });\n }\n}\n","import { PlaitBoard, Transforms, Point, addSelectedElement, clearSelectedElement, Path, PlaitNode } from '@plait/core';\nimport { DefaultBasicShapeProperty } from '../constants';\nimport { BasicShapes, PlaitDrawElement, PlaitGeometry, GeometryShapes, PlaitText } from '../interfaces';\nimport { createGeometryElement } from '../utils';\nimport { Element } from 'slate';\nimport { normalizeShapePoints } from '@plait/common';\n\nexport const insertGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n let newElement = createGeometryElement(shape, points, '', {\n strokeColor: DefaultBasicShapeProperty.strokeColor,\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n }) as PlaitGeometry;\n\n Transforms.insertNode(board, newElement, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(board, newElement);\n};\n\nexport const insertText = (board: PlaitBoard, points: [Point, Point], text: string | Element = '文本') => {\n let newElement = createGeometryElement(BasicShapes.text, points, text) as PlaitGeometry;\n Transforms.insertNode(board, newElement, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(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","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';\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 = PlaitGeometry.getTextEditor(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 { BOARD_TO_HOST, PlaitBoard, Point, Transforms, idCreator, toPoint, transformPoint } from '@plait/core';\n\nexport const insertImage = (board: PlaitBoard, imageItem: CommonImageItem, startPoint?: Point) => {\n const { width, height, url } = imageItem;\n const host = BOARD_TO_HOST.get(board);\n const viewportWidth = PlaitBoard.getComponent(board).nativeElement.clientWidth;\n const viewportHeight = PlaitBoard.getComponent(board).nativeElement.clientHeight;\n const point = transformPoint(board, toPoint(viewportWidth / 2, viewportHeight / 2, host!));\n const points: Point[] = startPoint\n ? [startPoint, [startPoint[0] + width, startPoint[1] + height]]\n : [\n [point[0] - width / 2, point[1] - height / 2],\n [point[0] + width / 2, point[1] + height / 2]\n ];\n const imageElement = {\n id: idCreator(),\n type: 'image',\n points,\n url\n };\n Transforms.insertNode(board, imageElement, [board.children.length]);\n Transforms.addSelectionWithTemporaryElements(board, [imageElement]);\n};\n","import { Path, PlaitBoard, Transforms } from '@plait/core';\nimport { LineHandleKey, LineMarkerType, LineText, PlaitLine } from '../interfaces';\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, element: PlaitLine, handleKey: LineHandleKey, marker: LineMarkerType) => {\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","import { insertText, insertGeometry, resizeGeometry } from './geometry';\nimport { setText, setTextSize } from './geometry-text';\nimport { insertImage } from './image';\nimport { removeLineText, resizeLine, setLineMark, 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 insertImage\n};\n","import {\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n Point,\n RectangleClient,\n Transforms,\n addSelectedElement,\n clearSelectedElement,\n createForeignObject,\n createG,\n preventTouchMove,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { BasicShapes, FlowchartSymbols, GeometryShapes, PlaitGeometry } from '../interfaces';\nimport { GeometryShapeGenerator } from '../generators/geometry-shape.generator';\nimport { createGeometryElement, getDefaultFlowchartProperty, getPointsByCenterPoint } from '../utils';\nimport {\n DefaultBasicShapeProperty,\n DefaultTextProperty,\n DrawPointerType,\n getFlowchartPointers,\n getGeometryPointers,\n ShapeDefaultSpace\n} from '../constants';\nimport { normalizeShapePoints, isDndMode, isDrawingMode } from '@plait/common';\nimport { DrawTransforms } from '../transforms';\nimport { DEFAULT_FONT_SIZE } from '@plait/text';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport const withGeometryCreateByDrag = (board: PlaitBoard) => {\n const { pointerMove, pointerUp } = board;\n\n let geometryShapeG: SVGGElement | 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 = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n\n if (dragMode) {\n const points = getDefaultGeometryPoints(pointer, movingPoint);\n if (pointer === BasicShapes.text) {\n const textG = getTemporaryTextG(movingPoint);\n geometryShapeG.appendChild(textG);\n PlaitBoard.getElementActiveHost(board).append(geometryShapeG);\n } else {\n const temporaryElement = createGeometryElement((pointer as unknown) as GeometryShapes, points, '', {\n strokeColor: DefaultBasicShapeProperty.strokeColor,\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n });\n geometryGenerator.draw(temporaryElement, geometryShapeG);\n PlaitBoard.getElementActiveHost(board).append(geometryShapeG);\n }\n }\n\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n const dragMode = isGeometryPointer && isDndMode(board);\n\n if (dragMode) {\n const targetPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const points = getDefaultGeometryPoints(pointer, targetPoint);\n if (pointer === BasicShapes.text) {\n DrawTransforms.insertText(board, points);\n } else {\n DrawTransforms.insertGeometry(board, points, (pointer as unknown) as GeometryShapes);\n }\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n }\n\n geometryShapeG?.remove();\n geometryShapeG = null;\n preventTouchMove(board, event, false);\n\n pointerUp(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 (isGeometryPointer && isDrawingMode(board)) {\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n start = point;\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n preventTouchMove(board, event, true);\n if (pointer === BasicShapes.text) {\n const points = getDefaultGeometryPoints(pointer, point);\n const textElement = createGeometryElement(BasicShapes.text, points, DefaultTextProperty.text);\n Transforms.insertNode(board, textElement, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(board, textElement);\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\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 = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (drawMode && pointer !== BasicShapes.text) {\n const points = normalizeShapePoints([start!, movingPoint], isShift);\n temporaryElement = createGeometryElement((pointer as unknown) as GeometryShapes, points, '', {\n strokeColor: DefaultBasicShapeProperty.strokeColor,\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n });\n geometryGenerator.draw(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 = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const { width, height } = RectangleClient.toRectangleClient([start!, targetPoint]);\n if (Math.hypot(width, height) === 0) {\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n const points = getDefaultGeometryPoints(pointer, targetPoint);\n if (pointer !== BasicShapes.text) {\n temporaryElement = createGeometryElement((pointer as unknown) as GeometryShapes, points, '', {\n strokeColor: DefaultBasicShapeProperty.strokeColor,\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n });\n }\n }\n }\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\n geometryShapeG?.remove();\n geometryShapeG = null;\n start = null;\n temporaryElement = null;\n preventTouchMove(board, event, false);\n\n pointerUp(event);\n };\n\n return board;\n};\n\nexport const getDefaultGeometryPoints = (pointer: DrawPointerType, targetPoint: Point) => {\n const defaultProperty = getGeometryDefaultProperty(pointer);\n return getPointsByCenterPoint(targetPoint, defaultProperty.width, defaultProperty.height);\n};\n\nexport const getGeometryDefaultProperty = (pointer: DrawPointerType) => {\n const isText = pointer === BasicShapes.text;\n const isFlowChart = getFlowchartPointers().includes(pointer);\n if (isText) {\n return DefaultTextProperty;\n } else if (isFlowChart) {\n return getDefaultFlowchartProperty(pointer as FlowchartSymbols);\n } else {\n return DefaultBasicShapeProperty;\n }\n};\n\nconst getTemporaryTextG = (movingPoint: Point) => {\n const textG = createG();\n const width = DefaultTextProperty.width - ShapeDefaultSpace.rectangleAndText * 2;\n const foreignObject = createForeignObject(\n movingPoint[0] - width / 2,\n movingPoint[1] - DefaultTextProperty.height / 2,\n width,\n DefaultTextProperty.height\n );\n\n const richtext = document.createElement('div');\n richtext.textContent = DefaultTextProperty.text;\n richtext.style.fontSize = `${DEFAULT_FONT_SIZE}px`;\n richtext.style.cursor = 'default';\n foreignObject.appendChild(richtext);\n textG.appendChild(foreignObject);\n\n return textG;\n};\n","export const DefaultLineStyle = {\n strokeWidth: 2,\n strokeColor: '#000'\n};\n\nexport const LINE_TEXT_SPACE = 4;\n","import {\n ACTIVE_STROKE_WIDTH,\n PlaitBoard,\n Point,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n SELECTION_FILL_COLOR,\n createG,\n distanceBetweenPointAndSegment,\n drawCircle,\n idCreator\n} from '@plait/core';\nimport { GeometryShapes, BasicShapes, PlaitGeometry, FlowchartSymbols } from '../interfaces/geometry';\nimport { Alignment, buildText } from '@plait/text';\nimport { Element } from 'slate';\nimport {\n DefaultBasicShapeProperty,\n DefaultFlowchartPropertyMap,\n DefaultTextProperty,\n ShapeDefaultSpace,\n getFlowchartPointers\n} from '../constants';\nimport { getRectangleByPoints } from '@plait/common';\nimport { getStrokeWidthByElement } from './style/stroke';\nimport { Options } from 'roughjs/bin/core';\nimport { getEngine } from '../engines';\nimport { getShape } from './shape';\nimport { getDefaultGeometryPoints } from '../plugins/with-geometry-create';\nimport { createLineElement } from './line';\nimport { LineMarkerType, LineShape } from '../interfaces';\nimport { DefaultLineStyle } from '../constants/line';\n\nexport const createGeometryElement = (\n shape: GeometryShapes,\n points: [Point, Point],\n text: string | Element,\n options?: Pick<PlaitGeometry, 'fill' | 'strokeColor' | 'strokeWidth'>\n): PlaitGeometry => {\n let textOptions = {};\n let alignment: undefined | Alignment = Alignment.center;\n if (shape === BasicShapes.text) {\n textOptions = { autoSize: true };\n alignment = undefined;\n }\n\n let flowchartOptions = {};\n if (getFlowchartPointers().includes(shape)) {\n flowchartOptions = { fill: '#ffffff' };\n }\n\n return {\n id: idCreator(),\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n textHeight: DefaultTextProperty.height,\n text: buildText(text, alignment),\n points,\n ...textOptions,\n ...options,\n ...flowchartOptions\n };\n};\n\nexport const getPointsByCenterPoint = (point: Point, width: number, height: number): [Point, Point] => {\n const leftTopPoint: Point = [point[0] - width / 2, point[1] - height / 2];\n const rightBottomPoint: Point = [point[0] + width / 2, point[1] + height / 2];\n\n return [leftTopPoint, rightBottomPoint];\n};\n\nexport const getTextRectangle = (element: PlaitGeometry) => {\n const elementRectangle = 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 = 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: PlaitGeometry, point: Point, inflateDelta = 0) => {\n const rectangle = getRectangleByPoints(element.points);\n const activeRectangle = RectangleClient.inflate(rectangle, inflateDelta);\n const shape = getShape(element);\n return getEngine(shape).getNearestPoint(activeRectangle, 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 getEdgeOnPolygonByPoint = (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 const distance = distanceBetweenPointAndSegment(point[0], point[1], start[0], start[1], end[0], end[1]);\n if (distance < 1) {\n return [start, end] as [Point, Point];\n }\n }\n return null;\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 strokeColor: DefaultBasicShapeProperty.strokeColor,\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n };\n\n const lineOptions = {\n strokeColor: DefaultLineStyle.strokeColor,\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","import { Point, arrowPoints, createG, createPath, distanceBetweenPointAndPoint, drawLinearPath, rotate } from '@plait/core';\nimport { LineMarkerType, PlaitLine } from '../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getFactorByPoints, getExtendPoint } from '@plait/common';\nimport { getStrokeWidthByElement } from './style';\n\ninterface ArrowOptions {\n marker: LineMarkerType;\n source: Point;\n target: Point;\n isSource: boolean;\n}\n\nconst MAX_LENGTH = 100;\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\n if (!PlaitLine.isSourceMark(element, LineMarkerType.none)) {\n const source = getExtendPoint(points[0], points[1], 24 + 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], 24 + 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 directionFactor = getFactorByPoints(source, target);\n const strokeWidth = getStrokeWidthByElement(element);\n const endPoint: Point = [target[0] + (strokeWidth * directionFactor.x) / 2, target[1] + (strokeWidth * directionFactor.y) / 2];\n const middlePoint: Point = [\n endPoint[0] - (8 + strokeWidth / 2) * directionFactor.x,\n endPoint[1] - (8 + strokeWidth / 2) * directionFactor.y\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 directionFactor = getFactorByPoints(source, target);\n const strokeWidth = getStrokeWidthByElement(element);\n const endPoint: Point = [target[0] + (strokeWidth * directionFactor.x) / 2, target[1] + (strokeWidth * directionFactor.y) / 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 {\n Point,\n idCreator,\n distanceBetweenPointAndSegments,\n PlaitBoard,\n createG,\n getElementById,\n RectangleClient,\n findElements,\n PlaitElement,\n drawLinearPath,\n createMask,\n createRect,\n ACTIVE_STROKE_WIDTH,\n PointOfRectangle,\n Direction,\n Vector,\n distanceBetweenPointAndPoint\n} from '@plait/core';\nimport {\n getPoints,\n getRectangleByPoints,\n getPointOnPolyline,\n getDirectionFactor,\n rotateVectorAnti90,\n getDirectionByVector,\n getOppositeDirection,\n getDirectionByPointOfRectangle,\n getPointByVector,\n removeDuplicatePoints,\n reduceRouteMargin,\n generateElbowLineRoute,\n getNextPoint,\n DEFAULT_ROUTE_MARGIN,\n getExtendPoint\n} from '@plait/common';\nimport {\n LineHandle,\n LineHandleKey,\n LineHandleRef,\n LineMarkerType,\n LineShape,\n LineText,\n PlaitDrawElement,\n PlaitGeometry,\n PlaitLine\n} from '../interfaces';\nimport { getPointsByCenterPoint, getNearestPoint } from './geometry';\nimport { getLineDashByElement, getStrokeColorByElement, getStrokeWidthByElement } from './style/stroke';\nimport { getEngine } from '../engines';\nimport { drawLineArrow } from './line-arrow';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { Op } from 'roughjs/bin/core';\nimport { getShape } from './shape';\nimport { LINE_TEXT_SPACE } from '../constants/line';\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 return PlaitLine.getPoints(board, element);\n }\n }\n};\n\nexport const getLineHandleRefPair = (board: PlaitBoard, element: PlaitLine) => {\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]])!;\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 getElbowPoints = (board: PlaitBoard, element: PlaitLine) => {\n if (element.points.length === 2) {\n const handleRefPair = getLineHandleRefPair(board, element);\n const offset = element.source.boundId || element.target.boundId ? DEFAULT_ROUTE_MARGIN : 0;\n const sourceElement = element.source.boundId && getElementById<PlaitGeometry>(board, element.source.boundId);\n const targetElement = element.target.boundId && getElementById<PlaitGeometry>(board, element.target.boundId);\n const isBound = sourceElement && targetElement;\n\n let points: Point[] = [];\n if (isBound) {\n const targetRectangle = RectangleClient.inflate(\n getRectangleByPoints(targetElement.points),\n getStrokeWidthByElement(targetElement) * 2\n );\n const sourceRectangle = RectangleClient.inflate(\n getRectangleByPoints(sourceElement.points),\n getStrokeWidthByElement(sourceElement) * 2\n );\n const sourcePoint = handleRefPair.source.point;\n const targetPoint = handleRefPair.target.point;\n const { sourceOffset, targetOffset } = reduceRouteMargin(sourceRectangle, targetRectangle);\n const sourceOuterRectangle = RectangleClient.expand(\n sourceRectangle,\n sourceOffset[3],\n sourceOffset[0],\n sourceOffset[1],\n sourceOffset[2]\n );\n const targetOuterRectangle = RectangleClient.expand(\n targetRectangle,\n targetOffset[3],\n targetOffset[0],\n targetOffset[1],\n targetOffset[2]\n );\n const nextSourcePoint = getNextPoint(sourcePoint, sourceOuterRectangle, handleRefPair.source.direction);\n const nextTargetPoint = getNextPoint(targetPoint, targetOuterRectangle, handleRefPair.target.direction);\n const isIntersect =\n RectangleClient.isPointInRectangle(targetRectangle, sourcePoint) ||\n RectangleClient.isPointInRectangle(targetOuterRectangle, nextSourcePoint) ||\n RectangleClient.isPointInRectangle(sourceOuterRectangle, nextTargetPoint) ||\n RectangleClient.isPointInRectangle(sourceRectangle, targetPoint);\n if (!isIntersect) {\n points = generateElbowLineRoute({\n sourcePoint,\n nextSourcePoint,\n sourceRectangle,\n sourceOuterRectangle,\n targetPoint,\n nextTargetPoint,\n targetRectangle,\n targetOuterRectangle\n });\n }\n }\n\n if (!points.length) {\n points = getPoints(\n handleRefPair.source.point,\n handleRefPair.source.direction,\n handleRefPair.target.point,\n handleRefPair.target.direction,\n offset\n );\n }\n points = removeDuplicatePoints(points);\n return points;\n }\n return element.points;\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 //TODO 直接获取贝塞尔曲线上高密度点\n const points = PlaitLine.getPoints(board, element);\n const draw = PlaitBoard.getRoughSVG(board).generator.curve(points);\n let bezierPoints = transformOpsToPoints(draw.sets[0].ops) as Point[];\n bezierPoints = removeDuplicatePoints(bezierPoints);\n return pointsOnBezierCurves(bezierPoints) as Point[];\n }\n};\n\nexport const transformOpsToPoints = (ops: Op[]) => {\n const result = [];\n for (let item of ops) {\n if (item.op === 'move') {\n result.push([item.data[0], item.data[1]]);\n } else {\n result.push([item.data[0], item.data[1]]);\n result.push([item.data[2], item.data[3]]);\n result.push([item.data[4], item.data[5]]);\n }\n }\n return result;\n};\n\nexport const isHitPolyLine = (pathPoints: Point[], point: Point, strokeWidth: number, expand: number = 0) => {\n const distance = distanceBetweenPointAndSegments(pathPoints, point);\n return distance <= strokeWidth + expand;\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 = getElbowPoints(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.toRectangleClient([point, point]));\n });\n};\n\nexport const isHitLineText = (board: PlaitBoard, element: PlaitLine, point: Point) => {\n return getHitLineTextIndex(board, element, point) !== -1;\n};\n\nexport const drawLine = (board: PlaitBoard, element: PlaitLine) => {\n const strokeWidth = getStrokeWidthByElement(element);\n const strokeColor = getStrokeColorByElement(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 //TODO element.points 应为曲线拐点\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\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 = 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 //撑开 line\n const maskTargetFillRect = createRect(rectangle);\n maskTargetFillRect.setAttribute('opacity', '0');\n maskTargetFillRect.setAttribute('fill', 'none');\n return { mask, maskTargetFillRect };\n}\n\nexport const getConnectionPoint = (geometry: PlaitGeometry, connection: Point, direction?: Direction, delta?: number): Point => {\n const rectangle = 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 transformPointToConnection = (board: PlaitBoard, point: Point, hitElement: PlaitGeometry): Point => {\n let rectangle = getRectangleByPoints(hitElement.points);\n rectangle = RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH);\n let nearestPoint = getNearestPoint(hitElement, point, ACTIVE_STROKE_WIDTH);\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 = (movingPoint: Point, hitElement: PlaitGeometry, rectangle: RectangleClient) => {\n const shape = getShape(hitElement);\n const connector = getEngine(shape).getConnectorPoints(rectangle);\n const points = getPointsByCenterPoint(movingPoint, 5, 5);\n const pointRectangle = getRectangleByPoints(points);\n return connector.find(point => {\n return RectangleClient.isHit(pointRectangle, RectangleClient.toRectangleClient([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 getBoardLines = (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 getVectorByConnection = (boundElement: PlaitGeometry, connection: PointOfRectangle): Vector => {\n const rectangle = 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) {\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","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 { PlaitElement, RectangleClient, Selection, PlaitBoard, isPolylineHitRectangle, Point } from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry } from '../interfaces';\nimport { TRANSPARENT, getRectangleByPoints } from '@plait/common';\nimport { getTextRectangle } from './geometry';\nimport { getLinePoints, isHitLineText, isHitPolyLine } from './line';\nimport { getFillByElement, getStrokeWidthByElement } from './style/stroke';\nimport { DefaultGeometryStyle } from '../constants/geometry';\nimport { getEngine } from '../engines';\nimport { getShape } from './shape';\n\nexport const isTextExceedingBounds = (geometry: PlaitGeometry) => {\n const client = getRectangleByPoints(geometry.points);\n if (geometry.textHeight > client.height) {\n return true;\n }\n return false;\n};\n\nexport const isRectangleHitDrawElement = (board: PlaitBoard, element: PlaitElement, selection: Selection) => {\n const rangeRectangle = RectangleClient.toRectangleClient([selection.anchor, selection.focus]);\n if (PlaitDrawElement.isGeometry(element)) {\n const client = 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 = getRectangleByPoints(element.points);\n return RectangleClient.isHit(rangeRectangle, client);\n }\n if (PlaitDrawElement.isLine(element)) {\n const points = getLinePoints(board, element);\n const strokeWidth = getStrokeWidthByElement(element);\n const isHitText = isHitLineText(board, element, selection.focus);\n const isHit = isHitPolyLine(points, selection.focus, strokeWidth, 3) || isHitText;\n const isContainPolyLinePoint = points.some(point => {\n return RectangleClient.isHit(rangeRectangle, RectangleClient.toRectangleClient([point, point]));\n });\n const isIntersect = Point.isEquals(selection.anchor, selection.focus) ? isHit : isPolylineHitRectangle(points, rangeRectangle);\n return isContainPolyLinePoint || isIntersect;\n }\n return null;\n};\n\nexport const isHitDrawElement = (board: PlaitBoard, element: PlaitElement, point: Point) => {\n if (PlaitDrawElement.isGeometry(element)) {\n const fill = getFillByElement(element);\n // when shape equals text, fill is not allowed\n if (fill !== DefaultGeometryStyle.fill && fill !== TRANSPARENT && !PlaitDrawElement.isText(element)) {\n return isRectangleHitDrawElement(board, element, { anchor: point, focus: point });\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 const strokeWidth = getStrokeWidthByElement(element);\n const engine = getEngine(getShape(element));\n const corners = engine.getCornerPoints(getRectangleByPoints(element.points));\n const isHit = isHitPolyLine(corners, point, strokeWidth, 3);\n const textClient = getTextRectangle(element);\n let isHitText = RectangleClient.isPointInRectangle(textClient, point);\n return isHit || isHitText;\n }\n }\n if (PlaitDrawElement.isImage(element) || PlaitDrawElement.isLine(element)) {\n return isRectangleHitDrawElement(board, element, { anchor: point, focus: point });\n }\n return null;\n};\n","import { Direction, PlaitBoard, PlaitElement, Point, PointOfRectangle, Vector, getElementById } from '@plait/core';\nimport { Element } from 'slate';\nimport { LineComponent } from '../line.component';\nimport { PlaitGeometry } from './geometry';\nimport { StrokeStyle } from './element';\nimport { getConnectionPoint } from '../utils';\nimport { PlaitImage } from '../interfaces/image';\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 //基于线长度,定位的百分比\n position: number;\n width: number;\n height: number;\n}\n\nexport interface LineHandle {\n // 关联元素的 id\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 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 getTextEditors(element: PlaitLine) {\n const component = PlaitElement.getComponent(element) as LineComponent;\n if (component) {\n const manage = component.textManages.find(manage => manage.isEditing);\n if (manage) {\n return [manage.componentRef.instance.editor];\n } else {\n return component.textManages.map(manage => manage.componentRef.instance.editor);\n }\n }\n throw new Error('can not get correctly component in get text editor');\n },\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","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) => {\n return PlaitDrawElement.isImage(value) || PlaitDrawElement.isGeometry(value);\n },\n isBaseShape: (value: any) => {\n return Object.keys(BasicShapes).includes(value.type);\n },\n isFlowchart: (value: any) => {\n return Object.keys(FlowchartSymbols).includes(value.type);\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} 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, getRectangleByPoints, CommonPluginElement } from '@plait/common';\nimport { DefaultGeometryActiveStyle, GeometryThreshold } from './constants/geometry';\nimport { PlaitDrawElement, PlaitText } from './interfaces';\nimport { getEngine } from './engines';\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 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 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.shapeGenerator = new GeometryShapeGenerator(this.board);\n this.initializeTextManage();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.initializeGenerator();\n this.shapeGenerator.draw(this.element, this.g);\n this.activeGenerator.draw(this.element, this.g, { selected: this.selected });\n this.drawText();\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitGeometry, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitGeometry, PlaitBoard>\n ) {\n if (value.element !== previous.element) {\n this.shapeGenerator.draw(this.element, this.g);\n this.activeGenerator.draw(this.element, this.g, { selected: this.selected });\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.draw(this.element, this.g, { selected: this.selected });\n }\n }\n }\n\n editText() {\n this.textManage.edit();\n this.activeGenerator.draw(this.element, this.g, { 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 },\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 }\n}\n","import { PlaitLine } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { drawLine } from '../utils';\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 baseDraw(element: PlaitLine, data: ShapeData) {\n let lineG: SVGGElement | undefined;\n lineG = drawLine(this.board, element);\n\n return lineG;\n }\n}\n","import { PlaitBoard, Point, createG, drawCircle, drawRectangle } from '@plait/core';\nimport { LineShape, PlaitLine } from '../interfaces';\nimport { Generator, PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER, getRectangleByPoints } from '@plait/common';\nimport { getCurvePoints, getLinePoints } from '../utils';\nimport { DefaultGeometryActiveStyle } from '../constants';\n\nexport interface ActiveData {\n selected: boolean;\n}\n\nexport class LineActiveGenerator extends Generator<PlaitLine, ActiveData> {\n hasResizeHandle = 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 baseDraw(element: PlaitLine, data: ActiveData): SVGGElement {\n const activeG = createG();\n if (this.hasResizeHandle) {\n activeG.classList.add('active');\n activeG.classList.add('line-handle');\n const points = PlaitLine.getPoints(this.board, element);\n points.forEach(point => {\n const circle = drawCircle(PlaitBoard.getRoughSVG(this.board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: '#999999',\n strokeWidth: 1,\n fill: '#FFF',\n fillStyle: 'solid'\n });\n activeG.appendChild(circle);\n });\n getMiddlePoints(this.board, element).forEach(point => {\n const circle = drawCircle(PlaitBoard.getRoughSVG(this.board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: '#FFFFFF80',\n strokeWidth: 1,\n fill: `${PRIMARY_COLOR}80`,\n fillStyle: 'solid'\n });\n activeG.appendChild(circle);\n });\n } else {\n const points = getLinePoints(this.board, element);\n const activeRectangle = getRectangleByPoints(points);\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: DefaultGeometryActiveStyle.selectionStrokeWidth\n });\n activeG.appendChild(strokeG);\n }\n\n return activeG;\n }\n}\n\nexport function getMiddlePoints(board: PlaitBoard, element: PlaitLine) {\n const result: Point[] = [];\n const shape = element.shape;\n if (shape === LineShape.straight) {\n const points = PlaitLine.getPoints(board, element);\n for (let i = 0; i < points.length - 1; i++) {\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 result.push(pointsOnBezier[middleIndex]);\n }\n }\n }\n return result;\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';\nimport {\n PlaitBoard,\n PlaitPluginElementComponent,\n PlaitPluginElementContext,\n OnContextChanged,\n getElementById,\n getSelectedElements,\n isSelectionMoving\n} from '@plait/core';\nimport { Subject } from 'rxjs';\nimport { LineText, PlaitDrawElement, PlaitGeometry, PlaitLine } from './interfaces';\nimport { TextManage, TextManageRef } from '@plait/text';\nimport { LineShapeGenerator } from './generators/line.generator';\nimport { LineActiveGenerator } from './generators/line-active.generator';\nimport { getLineTextRectangle } from './utils';\nimport { DrawTransforms } from './transforms';\nimport { GeometryThreshold } from './constants';\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 PlaitPluginElementComponent<PlaitLine, PlaitBoard>\n implements OnInit, OnDestroy, OnContextChanged<PlaitLine, PlaitBoard> {\n destroy$ = new Subject<void>();\n\n shapeGenerator!: LineShapeGenerator;\n\n activeGenerator!: LineActiveGenerator;\n\n textManages: TextManage[] = [];\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.initializeTextManages();\n }\n\n ngOnInit(): void {\n this.initializeGenerator();\n this.shapeGenerator.draw(this.element, this.g);\n this.activeGenerator.draw(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n super.ngOnInit();\n this.boundedElements = this.getBoundedElements();\n this.drawText();\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\n if (value.element !== previous.element) {\n this.shapeGenerator.draw(this.element, this.g);\n this.activeGenerator.draw(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.updateText(previous.element.texts, value.element.texts);\n this.updateTextRectangle();\n }\n\n if (isBoundedElementsChanged) {\n this.shapeGenerator.draw(this.element, this.g);\n this.activeGenerator.draw(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.updateTextRectangle();\n return;\n }\n\n if (!isSelectionMoving(this.board)) {\n this.activeGenerator.hasResizeHandle = this.hasResizeHandle();\n this.activeGenerator.draw(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n }\n }\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 initializeTextManages() {\n if (this.element.texts?.length) {\n this.element.texts.forEach((text, index) => {\n const manage = this.createTextManage(text, index);\n this.textManages.push(manage);\n });\n }\n }\n\n destroyTextManages() {\n this.textManages.forEach(manage => {\n manage.destroy();\n });\n }\n\n drawText() {\n if (this.element.texts?.length) {\n this.textManages.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 },\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 if (currentTextsLength === previousTextsLength) {\n for (let i = 0; i < previousTextsLength; i++) {\n if (previousTexts[i].text !== currentTexts[i].text) {\n this.textManages[i].updateText(currentTexts[i].text);\n }\n }\n } else {\n this.destroyTextManages();\n this.textManages = [];\n this.initializeTextManages();\n this.drawText();\n }\n }\n\n updateTextRectangle() {\n this.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 }\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\n if (\n !isVirtualKey(event) &&\n !isDelete(event) &&\n !isSpaceHotkey(event) &&\n isSingleSelection &&\n PlaitDrawElement.isGeometry(targetElement)\n ) {\n event.preventDefault();\n\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 (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, Transforms, getElementById, idCreator } from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\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 if (element.source.boundId && !getElementById(board, element.source.boundId, elements)) {\n delete source.boundId;\n delete source.connection;\n }\n if (element.target.boundId && !getElementById(board, element.target.boundId, elements)) {\n delete target.boundId;\n delete target.connection;\n }\n const points = element.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 { PlaitBoard, PlaitElement, Point, RectangleClient, getDataFromClipboard, getSelectedElements, setClipboardData } from '@plait/core';\nimport { getSelectedDrawElements, getSelectedImageElements } from '../utils/selected';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine, PlaitShape } from '../interfaces';\nimport { getTextFromClipboard, getTextSize } from '@plait/text';\nimport { buildClipboardData, insertClipboardData } from '../utils/clipboard';\nimport { DrawTransforms } from '../transforms';\nimport { getBoardLines } from '../utils/line';\nimport { PlaitImage } from '../interfaces/image';\nimport { acceptImageTypes, buildImage, getElementOfFocusedImage } 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 = (data: DataTransfer | null, rectangle: RectangleClient | null, type: 'copy' | 'cut') => {\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 elements = buildClipboardData(\n board,\n [...targetDrawElements, ...boundLineElements],\n rectangle ? [rectangle.x, rectangle.y] : [0, 0]\n );\n setClipboardData(data, elements);\n }\n setFragment(data, rectangle, type);\n };\n\n board.insertFragment = (data: DataTransfer | null, targetPoint: Point) => {\n const elements = getDataFromClipboard(data);\n const selectedElements = getSelectedElements(board);\n const drawElements = elements.filter(value => PlaitDrawElement.isDrawElement(value)) as PlaitDrawElement[];\n if (elements.length > 0 && drawElements.length > 0) {\n insertClipboardData(board, drawElements, targetPoint);\n } else if (elements.length === 0) {\n const text = getTextFromClipboard(data);\n // (* ̄︶ ̄)\n const insertAsChildren = selectedElements.length === 1 && selectedElements[0].children;\n const insertAsFreeText = !insertAsChildren;\n if (text && insertAsFreeText) {\n const { width, height } = getTextSize(board, text);\n DrawTransforms.insertText(board, [targetPoint, [targetPoint[0] + width, targetPoint[1] + height]], text);\n return;\n }\n }\n\n if (data?.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(data?.files[0].type) && canInsertionImage) {\n const imageFile = data.files[0];\n buildImage(board, imageFile, DEFAULT_IMAGE_WIDTH, imageItem => {\n DrawTransforms.insertImage(board, imageItem, targetPoint);\n });\n return;\n }\n }\n\n insertFragment(data, targetPoint);\n };\n\n return board;\n};\n\nexport const getBoundedLineElements = (board: PlaitBoard, plaitShapes: PlaitShape[]) => {\n const lines = getBoardLines(board);\n return lines.filter(line =>\n plaitShapes.find(shape => PlaitLine.isBoundElementOfSource(line, shape) || PlaitLine.isBoundElementOfTarget(line, shape))\n );\n};\n","import { Ancestor, PlaitBoard, Point, RectangleClient, depthFirstRecursion, getIsRecursionFunc } from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry } from '../../interfaces';\nimport { RESIZE_HANDLE_DIAMETER, getRectangleByPoints, getRectangleResizeHandleRefs, ResizeHandle } from '@plait/common';\nimport { getEngine } from '../../engines';\nimport { PlaitImage } from '../../interfaces/image';\nimport { getShape } from '../shape';\n\nexport const getHitGeometryResizeHandleRef = (board: PlaitBoard, element: PlaitGeometry | PlaitImage, point: Point) => {\n const rectangle = getRectangleByPoints(element.points);\n const resizeHandleRefs = getRectangleResizeHandleRefs(rectangle, RESIZE_HANDLE_DIAMETER);\n const result = resizeHandleRefs.find(resizeHandleRef => {\n return RectangleClient.isHit(RectangleClient.toRectangleClient([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 = getRectangleByPoints(node.points);\n client = RectangleClient.getOutlineRectangle(client, offset);\n const shape = getShape(node);\n const isHit = getEngine(shape).isHit(client, point);\n if (isHit) {\n geometry = node;\n }\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return geometry;\n};\n","import {\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n Point,\n Transforms,\n addSelectedElement,\n clearSelectedElement,\n createG,\n preventTouchMove,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { LineHandle, LineMarkerType, LineShape, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { createLineElement, transformPointToConnection } from '../utils';\nimport { getLinePointers } from '../constants';\nimport { DefaultLineStyle } from '../constants/line';\nimport { LineShapeGenerator } from '../generators/line.generator';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { isDrawingMode } from '@plait/common';\n\nexport const withLineCreateByDraw = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, pointerUp } = board;\n\n let start: Point | null = null;\n\n let sourceRef: Partial<LineHandle> = {};\n\n let targetRef: Partial<LineHandle> = {};\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 (isLinePointer && isDrawingMode(board)) {\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n start = point;\n const hitElement = getHitOutlineGeometry(board, point, -4);\n if (hitElement) {\n sourceRef.connection = transformPointToConnection(board, point, hitElement);\n sourceRef.boundId = hitElement.id;\n }\n preventTouchMove(board, event, true);\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n lineShapeG?.remove();\n lineShapeG = createG();\n const movingPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n if (start) {\n const hitElement = getHitOutlineGeometry(board, movingPoint, -4);\n targetRef.connection = hitElement ? transformPointToConnection(board, movingPoint, hitElement) : undefined;\n targetRef.boundId = hitElement ? hitElement.id : undefined;\n const lineGenerator = new LineShapeGenerator(board);\n const lineShape = PlaitBoard.getPointer(board) as LineShape;\n temporaryElement = createLineElement(\n lineShape,\n [start, movingPoint],\n { marker: LineMarkerType.none, connection: sourceRef.connection, boundId: sourceRef?.boundId },\n { marker: LineMarkerType.arrow, connection: targetRef.connection, boundId: targetRef?.boundId },\n [],\n {\n strokeColor: DefaultLineStyle.strokeColor,\n strokeWidth: DefaultLineStyle.strokeWidth\n }\n );\n lineGenerator.draw(temporaryElement, lineShapeG);\n PlaitBoard.getElementActiveHost(board).append(lineShapeG);\n }\n\n pointerMove(event);\n };\n\n board.pointerUp = (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\n lineShapeG?.remove();\n lineShapeG = null;\n start = null;\n sourceRef = {};\n targetRef = {};\n temporaryElement = null;\n preventTouchMove(board, event, false);\n\n pointerUp(event);\n };\n\n return board;\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, Transforms, getSelectedElements } from '@plait/core';\nimport { PlaitGeometry } from '../interfaces/geometry';\nimport {\n ResizeHandle,\n ResizeRef,\n ResizeState,\n WithResizeOptions,\n getRectangleByPoints,\n normalizeShapePoints,\n withResize\n} from '@plait/common';\nimport { getSelectedGeometryElements, getSelectedImageElements } from '../utils/selected';\nimport { getHitGeometryResizeHandleRef } from '../utils/position/geometry';\nimport { DrawTransforms } from '../transforms';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { GeometryComponent } from '../geometry.component';\nimport { PlaitImage } from '../interfaces/image';\nimport { PlaitDrawElement } from '../interfaces';\n\nexport const withGeometryResize = (board: PlaitBoard) => {\n const { keydown, keyup } = board;\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 const options: WithResizeOptions<PlaitGeometry | PlaitImage> = {\n key: 'draw-geometry',\n canResize: () => {\n return true;\n },\n detect: (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 handleRef = getHitGeometryResizeHandleRef(board, target, point);\n if (handleRef) {\n return {\n element: target,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass\n };\n }\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<PlaitGeometry | PlaitImage>, resizeState: ResizeState) => {\n let points: [Point, Point] = [...resizeRef.element.points];\n const rectangle = getRectangleByPoints(resizeRef.element.points);\n const ratio = rectangle.height / rectangle.width;\n const isCornerHandle = [ResizeHandle.nw, ResizeHandle.ne, ResizeHandle.se, ResizeHandle.sw].includes(resizeRef.handle);\n points = getPointsByResizeHandle(resizeState.endTransformPoint, resizeRef.element.points, resizeRef.handle);\n if ((isShift || PlaitDrawElement.isImage(resizeRef.element)) && isCornerHandle) {\n const rectangle = getRectangleByPoints(points);\n const factor = points[0][1] > points[1][1] ? 1 : -1;\n const height = rectangle.width * ratio * factor;\n points = [[resizeState.endTransformPoint[0], points[1][1] + height], points[1]];\n }\n if ((isShift || PlaitDrawElement.isImage(resizeRef.element)) && !isCornerHandle) {\n const rectangle = getRectangleByPoints(points);\n if (resizeRef.handle === ResizeHandle.n || resizeRef.handle === ResizeHandle.s) {\n const newWidth = rectangle.height / ratio;\n const offset = (newWidth - rectangle.width) / 2;\n const newRectangle = RectangleClient.expand(rectangle, offset, 0);\n const cornerPoints = RectangleClient.getCornerPoints(newRectangle);\n points = [cornerPoints[0], cornerPoints[2]];\n }\n if (resizeRef.handle === ResizeHandle.e || resizeRef.handle === ResizeHandle.w) {\n const newHeight = rectangle.width * ratio;\n const offset = (newHeight - rectangle.height) / 2;\n const newRectangle = RectangleClient.expand(rectangle, 0, offset);\n const cornerPoints = RectangleClient.getCornerPoints(newRectangle);\n points = [cornerPoints[0], cornerPoints[2]];\n }\n }\n if (PlaitDrawElement.isGeometry(resizeRef.element)) {\n const { height: textHeight } = PlaitGeometry.getTextManage(resizeRef.element).getSize();\n DrawTransforms.resizeGeometry(board, points, textHeight, resizeRef.path);\n } else {\n points = normalizeShapePoints(points);\n Transforms.setNode(board, { points }, resizeRef.path);\n }\n }\n };\n\n withResize<PlaitGeometry | PlaitImage>(board, options);\n\n return board;\n};\n\nconst getPointsByResizeHandle = (movingPoint: Point, elementPoints: Point[], handle: ResizeHandle): [Point, Point] => {\n switch (handle) {\n case ResizeHandle.nw: {\n return [movingPoint, elementPoints[1]];\n }\n case ResizeHandle.ne: {\n return [movingPoint, [elementPoints[0][0], elementPoints[1][1]]];\n }\n case ResizeHandle.se: {\n return [movingPoint, elementPoints[0]];\n }\n case ResizeHandle.sw: {\n return [movingPoint, [elementPoints[1][0], elementPoints[0][1]]];\n }\n case ResizeHandle.n: {\n return [[elementPoints[0][0], movingPoint[1]], elementPoints[1]];\n }\n case ResizeHandle.s: {\n return [elementPoints[0], [elementPoints[1][0], movingPoint[1]]];\n }\n case ResizeHandle.w: {\n return [[movingPoint[0], elementPoints[0][1]], elementPoints[1]];\n }\n default: {\n return [elementPoints[0], [movingPoint[0], elementPoints[1][1]]];\n }\n }\n};\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitLine } from '../../interfaces';\nimport { RESIZE_HANDLE_DIAMETER } from '@plait/common';\nimport { getMiddlePoints } from '../../generators/line-active.generator';\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 const points = PlaitLine.getPoints(board, element);\n const index = getHitPointIndex(points, point);\n if (index !== -1) {\n if (index === 0) {\n return { handle: LineResizeHandle.source, index };\n }\n if (index === points.length - 1) {\n return { handle: LineResizeHandle.target, index };\n }\n return { index };\n }\n\n const middlePoints = getMiddlePoints(board, element);\n const middleIndex = getHitPointIndex(middlePoints, point);\n if (middleIndex !== -1) {\n return { handle: LineResizeHandle.addHandle, index: middleIndex };\n }\n return undefined;\n};\n\nfunction 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.toRectangleClient([movingPoint, movingPoint]), rectangle);\n });\n return rectangle ? rectangles.indexOf(rectangle) : -1;\n}\n","import { PlaitBoard, Point } from '@plait/core';\nimport { ResizeRef, ResizeState, WithResizeOptions, withResize } from '@plait/common';\nimport { getSelectedLineElements } from '../utils/selected';\nimport { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { LineHandle, PlaitLine } from '../interfaces';\nimport { transformPointToConnection } from '../utils';\nimport { DrawTransforms } from '../transforms';\n\nexport const withLineResize = (board: PlaitBoard) => {\n let pointIndex = 0;\n const options: WithResizeOptions<PlaitLine, LineResizeHandle> = {\n key: 'draw-line',\n canResize: () => {\n return true;\n },\n detect: (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 };\n pointIndex = handleRef.index;\n }\n });\n return result;\n }\n return null;\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 if (resizeRef.handle === LineResizeHandle.source || resizeRef.handle === LineResizeHandle.target) {\n const object = resizeRef.handle === LineResizeHandle.source ? source : target;\n points[pointIndex] = resizeState.endTransformPoint;\n const hitElement = getHitOutlineGeometry(board, resizeState.endTransformPoint, -4);\n if (hitElement) {\n object.connection = transformPointToConnection(board, resizeState.endTransformPoint, hitElement);\n object.boundId = hitElement.id;\n } else {\n object.connection = undefined;\n object.boundId = undefined;\n if (points.length === 2) {\n let movingPoint = points[pointIndex];\n const otherPoint = points[Number(!pointIndex)];\n points[pointIndex] = alignPoints(otherPoint, movingPoint);\n }\n }\n } else if (resizeRef.handle === LineResizeHandle.addHandle) {\n points.splice(pointIndex + 1, 0, resizeState.endTransformPoint);\n } else {\n points[pointIndex] = resizeState.endTransformPoint;\n }\n DrawTransforms.resizeLine(board, { points, source, target }, resizeRef.path);\n }\n };\n\n withResize<PlaitLine, LineResizeHandle>(board, options);\n\n return board;\n};\n\nconst alignPoints = (basePoint: Point, movingPoint: Point) => {\n const offset = 3;\n const newPoint: Point = [...movingPoint];\n if (Point.isVerticalAlign(newPoint, basePoint, offset)) {\n newPoint[0] = basePoint[0];\n }\n if (Point.isHorizontalAlign(newPoint, basePoint, offset)) {\n newPoint[1] = basePoint[1];\n }\n return newPoint;\n};\n","import {\n ACTIVE_STROKE_WIDTH,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n drawCircle,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { LineShape, PlaitDrawElement } from '../interfaces';\nimport { drawBoundMask, getHitConnectorPoint, getNearestPoint } from '../utils';\nimport { getRectangleByPoints, isResizingByCondition } from '@plait/common';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { LineResizeHandle } from '../utils/position/line';\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 const linePointers = Object.keys(LineShape);\n const isLinePointer = PlaitBoard.isInPointer(board, linePointers);\n const movingPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\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, ACTIVE_STROKE_WIDTH);\n const rectangle = 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\n pointerMove(event);\n };\n\n board.pointerUp = event => {\n boundShapeG?.remove();\n boundShapeG = null;\n\n pointerUp(event);\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitElement,\n getHitElementByPoint,\n getNearestPointBetweenPointAndSegments,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { PlaitDrawElement, PlaitLine } from '../interfaces';\nimport { Node } from 'slate';\nimport { getHitLineTextIndex, getLinePoints, isHitLineText } from '../utils';\nimport { getRatioByPoint } from '@plait/common';\nimport { buildText } from '@plait/text';\nimport { LineComponent } from '../line.component';\nimport { DrawTransforms } from '../transforms';\n\nexport const withLineText = (board: PlaitBoard) => {\n const { dblclick } = board;\n\n board.dblclick = (event: MouseEvent) => {\n const clickPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\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.textManages.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.textManages[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';\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 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 }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.initializeGenerator();\n this.imageGenerator.draw(this.element, this.g, this.viewContainerRef);\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 } 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 }\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n this.imageGenerator.destroy();\n }\n}\n","import { PlaitBoard, PlaitElement, PlaitPluginElementContext, Selection, getSelectedElements } from '@plait/core';\nimport { GeometryComponent } from '../geometry.component';\nimport { LineComponent } from '../line.component';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getRectangleByPoints } from '@plait/common';\nimport { withDrawHotkey } from './with-draw-hotkey';\nimport { withGeometryCreateByDrawing, withGeometryCreateByDrag } from './with-geometry-create';\nimport { withDrawFragment } from './with-draw-fragment';\nimport { getLinePoints, isRectangleHitDrawElement, isHitDrawElement } from '../utils';\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';\n\nexport const withDraw = (board: PlaitBoard) => {\n const { drawElement, getRectangle, isRectangleHit, isHit, isMovable, isAlign } = 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 getRectangleByPoints(element.points);\n }\n if (PlaitDrawElement.isLine(element)) {\n const points = getLinePoints(board, element);\n return getRectangleByPoints(points);\n }\n if (PlaitDrawElement.isImage(element)) {\n return 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.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 (\n (element.source.boundId && !isSelected(element.source.boundId)) ||\n (element.target.boundId && !isSelected(element.target.boundId))\n ) {\n return false;\n }\n return true;\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 return withLineText(\n withLineBoundReaction(\n withLineResize(\n withGeometryResize(\n withLineCreateByDraw(withGeometryCreateByDrag(withGeometryCreateByDrawing(withDrawFragment(withDrawHotkey(board)))))\n )\n )\n )\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["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/utils/style/stroke.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/shape.ts","../../../packages/draw/src/generators/geometry-shape.generator.ts","../../../packages/draw/src/transforms/common.ts","../../../packages/draw/src/transforms/geometry.ts","../../../packages/draw/src/transforms/geometry-text.ts","../../../packages/draw/src/transforms/image.ts","../../../packages/draw/src/transforms/line.ts","../../../packages/draw/src/transforms/index.ts","../../../packages/draw/src/plugins/with-geometry-create.ts","../../../packages/draw/src/constants/line.ts","../../../packages/draw/src/utils/geometry.ts","../../../packages/draw/src/utils/line-arrow.ts","../../../packages/draw/src/generators/line.generator.ts","../../../packages/draw/src/utils/position/geometry.ts","../../../packages/draw/src/utils/line.ts","../../../packages/draw/src/utils/selected.ts","../../../packages/draw/src/utils/hit.ts","../../../packages/draw/src/interfaces/line.ts","../../../packages/draw/src/interfaces/element.ts","../../../packages/draw/src/interfaces/index.ts","../../../packages/draw/src/generators/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/utils/clipboard.ts","../../../packages/draw/src/plugins/with-draw-fragment.ts","../../../packages/draw/src/plugins/with-line-create.ts","../../../packages/draw/src/plugins/with-geometry-resize.ts","../../../packages/draw/src/utils/position/line.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-auto-complete-reaction.ts","../../../packages/draw/src/plugins/with-auto-complete.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 { GeometryComponent } from '../geometry.component';\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 getTextEditor(element: PlaitGeometry) {\n return PlaitGeometry.getTextManage(element).componentRef.instance.editor;\n },\n getTextManage(element: PlaitGeometry) {\n const component = PlaitElement.getComponent(element) as GeometryComponent;\n if (component) {\n return component.textManage;\n }\n throw new Error('can not get correctly component in get text editor');\n }\n};\n\nexport interface ShapeEngine {\n isHit: (rectangle: RectangleClient, point: Point) => boolean;\n getNearestPoint: (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","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 {\n PlaitBoard,\n Point,\n PointOfRectangle,\n RectangleClient,\n getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { getEdgeOnPolygonByPoint } from '../../utils/geometry';\nimport { Options } from 'roughjs/bin/core';\nimport { getRectangleByPoints } from '@plait/common';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } from '../../utils';\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 isHit(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 getEdgeOnPolygonByPoint(corners, point);\n },\n getConnectorPoints(rectangle: RectangleClient) {\n return RectangleClient.getEdgeCenterPoints(rectangle);\n },\n getTextRectangle(element: PlaitGeometry) {\n const elementRectangle = 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 getNearestPointBetweenPointAndSegments,\n isPointInPolygon,\n setStrokeLinecap\n} from '@plait/core';\nimport { getEdgeOnPolygonByPoint } from '../../utils';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\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 isHit(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 getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = getPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getEdgeOnPolygonByPoint(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 { PlaitBoard, Point, PointOfRectangle, RectangleClient, Vector, isPointInEllipse } 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 isHit(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 = getTangentSlope(point[0], point[1], a, b) as any;\n return getVectorBySlope(point[0], point[1], slope);\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\n/**\n * the result of slope is based on Cartesian coordinate system\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getTangentSlope(x: number, y: number, a: number, b: number) {\n const k = (-b * b * x) / (a * a * y);\n return k;\n}\n\n/**\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getVectorBySlope(x: number, y: number, slope: number) {\n const deltaX = 30;\n const deltaY = -slope * deltaX;\n let start = [0 - deltaX, 0 - deltaY] as Point;\n let end = [0 + deltaX, 0 + deltaY] as Point;\n // y < 0 acts on the lower half of the x-axis, with the starting point at the top and the end point at the bottom.\n \n if (y < 0) {\n const temp = start;\n start = end;\n end = temp;\n }\n const vector = [end[0] - start[0], end[1] - start[1]] as Vector;\n return vector;\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 { getCenterPointsOnPolygon, getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from './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, getTextRectangle } from '../../utils';\nimport { getRectangleByPoints } from '@plait/common';\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 = 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';\nimport { getRectangleByPoints } from '@plait/common';\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 = 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 { getEdgeOnPolygonByPoint } from '../../utils/geometry';\n\nexport const RectangleEngine: ShapeEngine = {\n draw(board: PlaitBoard, rectangle: RectangleClient, options: Options) {\n return drawRectangle(board, rectangle, { ...options, fillStyle: 'solid' });\n },\n isHit(rectangle: RectangleClient, point: Point) {\n const rangeRectangle = RectangleClient.toRectangleClient([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 getEdgeOnPolygonByPoint(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 { getEdgeOnPolygonByPoint } from '../../utils/geometry';\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 isHit(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 getEdgeOnPolygonByPoint(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 { getEdgeOnPolygonByPoint } from '../../utils/geometry';\nimport { Options } from 'roughjs/bin/core';\nimport { getRectangleByPoints } from '@plait/common';\nimport { ShapeDefaultSpace } from '../../constants';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { getRoundRectangleRadius } from './round-rectangle';\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 isHit(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 getEdgeOnPolygonByPoint(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 = 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 {\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 { getCenterPointsOnPolygon, getEdgeOnPolygonByPoint, getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from './polygon';\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 { getCenterPointsOnPolygon, getStrokeWidthByElement } from '../../utils';\nimport { getRectangleByPoints } from '@plait/common';\nimport { ShapeDefaultSpace } from '../../constants';\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 = 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 { getRectangleByPoints } from '@plait/common';\nimport { getStrokeWidthByElement, getTextRectangle } 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 = 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 getNearestPointBetweenPointAndSegments,\n isPointInRoundRectangle\n} from '@plait/core';\nimport { ShapeEngine } from '../../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getEdgeOnPolygonByPoint } from '../../utils/geometry';\nimport { RectangleEngine } from '../basic-shapes/rectangle';\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 isHit(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 getEdgeByConnectionPoint(rectangle: RectangleClient, pointOfRectangle: PointOfRectangle): [Point, Point] | null {\n const corners = RectangleEngine.getCornerPoints(rectangle);\n const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);\n return getEdgeOnPolygonByPoint(corners, point);\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 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 { Point, RectangleClient } from '@plait/core';\nimport { PlaitGeometry, ShapeEngine } from '../../interfaces';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getCenterPointsOnPolygon, getStrokeWidthByElement } from '../../utils';\nimport { getRectangleByPoints } from '@plait/common';\nimport { ShapeDefaultSpace } from '../../constants';\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 = 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 { getCenterPointsOnPolygon, getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from '../basic-shapes/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 { getCenterPointsOnPolygon, getTextRectangle } from '../../utils/geometry';\nimport { createPolygonEngine } from '../basic-shapes/polygon';\nimport { getRectangleByPoints } from '@plait/common';\nimport { getStrokeWidthByElement } from '../../utils';\nimport { ShapeDefaultSpace } from '../../constants';\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 = 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 getNearestPointBetweenPointAndSegments,\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, getTangentSlope, getVectorBySlope } 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 isHit(rectangle: RectangleClient, point: Point) {\n //split shape to rectangle and a half ellipse\n const rangeRectangle = RectangleClient.toRectangleClient([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 = getTangentSlope(point[0], point[1], a, b) as any;\n return getVectorBySlope(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 getNearestPointBetweenPointAndSegments,\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, getTangentSlope, getVectorBySlope } 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}, 1, 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 isHit(rectangle: RectangleClient, point: Point) {\n //split shape to rectangle and a half ellipse\n const rangeRectangle = RectangleClient.toRectangleClient([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 nearestPoint = getNearestPointBetweenPointAndEllipse(\n point,\n [rectangle.x + rectangle.width / 10, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\n if (nearestPoint[0] > rectangle.x + rectangle.width / 10) {\n nearestPoint[0] = (rectangle.x + rectangle.width / 10) * 2 - nearestPoint[0];\n }\n return nearestPoint;\n }\n\n if (nearestPoint[0] > rectangle.x + (rectangle.width * 9) / 10) {\n return getNearestPointBetweenPointAndEllipse(\n point,\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n rectangle.width / 10,\n rectangle.height / 2\n );\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 = getTangentSlope(point[0], point[1], a, b) as any;\n const vector = getVectorBySlope(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 { 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 { BasicShapes, PlaitGeometry } from '../interfaces';\nimport { getRectangleByPoints, 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 = 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 { PropertyTransforms } from '@plait/common';\nimport { PlaitBoard, PlaitElement } from '@plait/core';\nimport { MemorizeKey, PlaitDrawElement } from '../interfaces';\n\nexport const setStrokeColor = (board: PlaitBoard, strokeColor: string) => {\n PropertyTransforms.setProperty(board, { strokeColor }, { getMemorizeKey });\n};\n\nexport const setStrokeWidth = (board: PlaitBoard, strokeWidth: number) => {\n PropertyTransforms.setProperty(board, { strokeWidth }, { getMemorizeKey });\n};\n\nexport const setFillColor = (board: PlaitBoard, fill: string) => {\n PropertyTransforms.setProperty(board, { fill }, { getMemorizeKey });\n};\n\nexport const setStrokeStyle = (board: PlaitBoard, strokeStyle: string) => {\n PropertyTransforms.setProperty(board, { strokeStyle }, { getMemorizeKey });\n};\n\nexport const getMemorizeKey = (element: PlaitElement) => {\n let key = '';\n switch (true) {\n case PlaitDrawElement.isBaseShape(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","import { PlaitBoard, Transforms, Point, addSelectedElement, clearSelectedElement, Path, PlaitNode } from '@plait/core';\nimport { DefaultBasicShapeProperty } from '../constants';\nimport { BasicShapes, PlaitDrawElement, PlaitGeometry, GeometryShapes, PlaitText } from '../interfaces';\nimport { createGeometryElement } from '../utils';\nimport { Element } from 'slate';\nimport { normalizeShapePoints } from '@plait/common';\n\nexport const insertGeometry = (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => {\n let newElement = createGeometryElement(shape, points, '', {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n }) as PlaitGeometry;\n Transforms.insertNode(board, newElement, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(board, newElement);\n};\n\nexport const insertText = (board: PlaitBoard, points: [Point, Point], text: string | Element = '文本') => {\n let newElement = createGeometryElement(BasicShapes.text, points, text) as PlaitGeometry;\n Transforms.insertNode(board, newElement, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(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 transformShape = (board: PlaitBoard, element: PlaitGeometry, shape: GeometryShapes) => {\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, { shape }, path);\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';\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 = PlaitGeometry.getTextEditor(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 { BOARD_TO_HOST, PlaitBoard, Point, Transforms, idCreator, toPoint, transformPoint } from '@plait/core';\n\nexport const insertImage = (board: PlaitBoard, imageItem: CommonImageItem, startPoint?: Point) => {\n const { width, height, url } = imageItem;\n const host = BOARD_TO_HOST.get(board);\n const viewportWidth = PlaitBoard.getComponent(board).nativeElement.clientWidth;\n const viewportHeight = PlaitBoard.getComponent(board).nativeElement.clientHeight;\n const point = transformPoint(board, toPoint(viewportWidth / 2, viewportHeight / 2, host!));\n const points: Point[] = startPoint\n ? [startPoint, [startPoint[0] + width, startPoint[1] + height]]\n : [\n [point[0] - width / 2, point[1] - height / 2],\n [point[0] + width / 2, point[1] + height / 2]\n ];\n const imageElement = {\n id: idCreator(),\n type: 'image',\n points,\n url\n };\n Transforms.insertNode(board, imageElement, [board.children.length]);\n Transforms.addSelectionWithTemporaryElements(board, [imageElement]);\n};\n","import { Path, PlaitBoard, Transforms } from '@plait/core';\nimport { LineHandleKey, LineMarkerType, LineText, MemorizeKey, PlaitLine } from '../interfaces';\nimport { memorizeLatest } from '@plait/common';\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, element: PlaitLine, handleKey: LineHandleKey, marker: LineMarkerType) => {\n const path = PlaitBoard.findPath(board, element);\n let handle = handleKey === LineHandleKey.source ? element.source : element.target;\n handle = { ...handle, marker };\n memorizeLatest(MemorizeKey.line, handleKey, marker);\n Transforms.setNode(board, { [handleKey]: handle }, path);\n};\n","import { setFillColor, setStrokeColor, setStrokeStyle, setStrokeWidth } from './common';\nimport { insertText, insertGeometry, resizeGeometry, transformShape } from './geometry';\nimport { setText, setTextSize } from './geometry-text';\nimport { insertImage } from './image';\nimport { removeLineText, resizeLine, setLineMark, 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 insertImage,\n transformShape,\n setStrokeColor,\n setStrokeWidth,\n setFillColor,\n setStrokeStyle\n};\n","import {\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n Point,\n RectangleClient,\n Transforms,\n addSelectedElement,\n clearSelectedElement,\n createForeignObject,\n createG,\n preventTouchMove,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { BasicShapes, FlowchartSymbols, GeometryShapes, PlaitGeometry } from '../interfaces';\nimport { GeometryShapeGenerator } from '../generators/geometry-shape.generator';\nimport { createGeometryElement, getDefaultFlowchartProperty, getPointsByCenterPoint } from '../utils';\nimport {\n DefaultBasicShapeProperty,\n DefaultTextProperty,\n DrawPointerType,\n getFlowchartPointers,\n getGeometryPointers,\n ShapeDefaultSpace\n} from '../constants';\nimport { normalizeShapePoints, isDndMode, isDrawingMode } from '@plait/common';\nimport { DrawTransforms } from '../transforms';\nimport { DEFAULT_FONT_SIZE } from '@plait/text';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport const withGeometryCreateByDrag = (board: PlaitBoard) => {\n const { pointerMove, pointerUp } = board;\n\n let geometryShapeG: SVGGElement | 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 = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n\n if (dragMode) {\n const points = getDefaultGeometryPoints(pointer, movingPoint);\n if (pointer === BasicShapes.text) {\n const textG = getTemporaryTextG(movingPoint);\n geometryShapeG.appendChild(textG);\n PlaitBoard.getElementActiveHost(board).append(geometryShapeG);\n } else {\n const temporaryElement = createGeometryElement((pointer as unknown) as GeometryShapes, points, '', {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n });\n geometryGenerator.processDrawing(temporaryElement, geometryShapeG);\n PlaitBoard.getElementActiveHost(board).append(geometryShapeG);\n }\n }\n\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n const geometryPointers = getGeometryPointers();\n const isGeometryPointer = PlaitBoard.isInPointer(board, geometryPointers);\n const dragMode = isGeometryPointer && isDndMode(board);\n\n if (dragMode) {\n const targetPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const points = getDefaultGeometryPoints(pointer, targetPoint);\n if (pointer === BasicShapes.text) {\n DrawTransforms.insertText(board, points);\n } else {\n DrawTransforms.insertGeometry(board, points, (pointer as unknown) as GeometryShapes);\n }\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n }\n\n geometryShapeG?.remove();\n geometryShapeG = null;\n preventTouchMove(board, event, false);\n\n pointerUp(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 (isGeometryPointer && isDrawingMode(board)) {\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n start = point;\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n preventTouchMove(board, event, true);\n if (pointer === BasicShapes.text) {\n const points = getDefaultGeometryPoints(pointer, point);\n const textElement = createGeometryElement(BasicShapes.text, points, DefaultTextProperty.text);\n Transforms.insertNode(board, textElement, [board.children.length]);\n clearSelectedElement(board);\n addSelectedElement(board, textElement);\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\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 = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n if (drawMode && pointer !== BasicShapes.text) {\n const points = normalizeShapePoints([start!, movingPoint], isShift);\n temporaryElement = createGeometryElement((pointer as unknown) as GeometryShapes, points, '', {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n });\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 = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const { width, height } = RectangleClient.toRectangleClient([start!, targetPoint]);\n if (Math.hypot(width, height) === 0) {\n const pointer = PlaitBoard.getPointer(board) as DrawPointerType;\n const points = getDefaultGeometryPoints(pointer, targetPoint);\n if (pointer !== BasicShapes.text) {\n temporaryElement = createGeometryElement((pointer as unknown) as GeometryShapes, points, '', {\n strokeWidth: DefaultBasicShapeProperty.strokeWidth\n });\n }\n }\n }\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\n geometryShapeG?.remove();\n geometryShapeG = null;\n start = null;\n temporaryElement = null;\n preventTouchMove(board, event, false);\n\n pointerUp(event);\n };\n\n return board;\n};\n\nexport const getDefaultGeometryPoints = (pointer: DrawPointerType, targetPoint: Point) => {\n const defaultProperty = getGeometryDefaultProperty(pointer);\n return getPointsByCenterPoint(targetPoint, defaultProperty.width, defaultProperty.height);\n};\n\nexport const getGeometryDefaultProperty = (pointer: DrawPointerType) => {\n const isText = pointer === BasicShapes.text;\n const isFlowChart = getFlowchartPointers().includes(pointer);\n if (isText) {\n return DefaultTextProperty;\n } else if (isFlowChart) {\n return getDefaultFlowchartProperty(pointer as FlowchartSymbols);\n } else {\n return DefaultBasicShapeProperty;\n }\n};\n\nconst getTemporaryTextG = (movingPoint: Point) => {\n const textG = createG();\n const width = DefaultTextProperty.width - ShapeDefaultSpace.rectangleAndText * 2;\n const foreignObject = createForeignObject(\n movingPoint[0] - width / 2,\n movingPoint[1] - DefaultTextProperty.height / 2,\n width,\n DefaultTextProperty.height\n );\n\n const richtext = document.createElement('div');\n richtext.textContent = DefaultTextProperty.text;\n richtext.style.fontSize = `${DEFAULT_FONT_SIZE}px`;\n richtext.style.cursor = 'default';\n foreignObject.appendChild(richtext);\n textG.appendChild(foreignObject);\n\n return textG;\n};\n","export const DefaultLineStyle = {\n strokeWidth: 2,\n strokeColor: '#000'\n};\n\nexport const LINE_TEXT_SPACE = 4;\n","import {\n ACTIVE_STROKE_WIDTH,\n PlaitBoard,\n Point,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n SELECTION_FILL_COLOR,\n ThemeColorMode,\n createG,\n distanceBetweenPointAndSegment,\n drawCircle,\n idCreator\n} from '@plait/core';\nimport { GeometryShapes, BasicShapes, PlaitGeometry, FlowchartSymbols } from '../interfaces/geometry';\nimport { Alignment, buildText } from '@plait/text';\nimport { Element } from 'slate';\nimport {\n DefaultBasicShapeProperty,\n DefaultFlowchartPropertyMap,\n DefaultTextProperty,\n DrawThemeColors,\n ShapeDefaultSpace\n} from '../constants';\nimport { RESIZE_HANDLE_DIAMETER, getRectangleByPoints } from '@plait/common';\nimport { getStrokeWidthByElement } from './style/stroke';\nimport { Options } from 'roughjs/bin/core';\nimport { getEngine } from '../engines';\nimport { getShape } from './shape';\nimport { getDefaultGeometryPoints } from '../plugins/with-geometry-create';\nimport { createLineElement } from './line';\nimport { LineMarkerType, LineShape } from '../interfaces';\nimport { DefaultLineStyle } from '../constants/line';\n\nexport const createGeometryElement = (\n shape: GeometryShapes,\n points: [Point, Point],\n text: string | Element,\n options?: Pick<PlaitGeometry, 'fill' | 'strokeColor' | 'strokeWidth'>\n): PlaitGeometry => {\n let textOptions = {};\n let alignment: undefined | Alignment = Alignment.center;\n if (shape === BasicShapes.text) {\n textOptions = { autoSize: true };\n alignment = undefined;\n }\n\n return {\n id: idCreator(),\n type: 'geometry',\n shape,\n angle: 0,\n opacity: 1,\n textHeight: DefaultTextProperty.height,\n text: buildText(text, alignment),\n points,\n ...textOptions,\n ...options\n };\n};\n\nexport const getPointsByCenterPoint = (point: Point, width: number, height: number): [Point, Point] => {\n const leftTopPoint: Point = [point[0] - width / 2, point[1] - height / 2];\n const rightBottomPoint: Point = [point[0] + width / 2, point[1] + height / 2];\n\n return [leftTopPoint, rightBottomPoint];\n};\n\nexport const getTextRectangle = (element: PlaitGeometry) => {\n const elementRectangle = 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 = 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: PlaitGeometry, point: Point, inflateDelta = 0) => {\n const rectangle = getRectangleByPoints(element.points);\n const activeRectangle = RectangleClient.inflate(rectangle, inflateDelta);\n const shape = getShape(element);\n return getEngine(shape).getNearestPoint(activeRectangle, 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 getEdgeOnPolygonByPoint = (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 const distance = distanceBetweenPointAndSegment(point[0], point[1], start[0], start[1], end[0], end[1]);\n if (distance < 1) {\n return [start, end] as [Point, Point];\n }\n }\n return null;\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: PlaitGeometry) => {\n const AutoCompleteMargin = (12 + RESIZE_HANDLE_DIAMETER / 2) * 2;\n let rectangle = 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.toRectangleClient([movingPoint]);\n let rectangle = RectangleClient.toRectangleClient([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","import { Point, arrowPoints, createG, createPath, distanceBetweenPointAndPoint, drawLinearPath, rotate } from '@plait/core';\nimport { LineMarkerType, PlaitLine } from '../interfaces';\nimport { Options } from 'roughjs/bin/core';\nimport { getFactorByPoints, getExtendPoint } from '@plait/common';\nimport { getStrokeWidthByElement } from './style';\n\ninterface ArrowOptions {\n marker: LineMarkerType;\n source: Point;\n target: Point;\n isSource: boolean;\n}\n\nconst MAX_LENGTH = 100;\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\n if (!PlaitLine.isSourceMark(element, LineMarkerType.none)) {\n const source = getExtendPoint(points[0], points[1], 24 + 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], 24 + 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 directionFactor = getFactorByPoints(source, target);\n const strokeWidth = getStrokeWidthByElement(element);\n const endPoint: Point = [target[0] + (strokeWidth * directionFactor.x) / 2, target[1] + (strokeWidth * directionFactor.y) / 2];\n const middlePoint: Point = [\n endPoint[0] - (8 + strokeWidth / 2) * directionFactor.x,\n endPoint[1] - (8 + strokeWidth / 2) * directionFactor.y\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 directionFactor = getFactorByPoints(source, target);\n const strokeWidth = getStrokeWidthByElement(element);\n const endPoint: Point = [target[0] + (strokeWidth * directionFactor.x) / 2, target[1] + (strokeWidth * directionFactor.y) / 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 { PlaitLine } from '../interfaces';\nimport { Generator } from '@plait/common';\nimport { drawLine } from '../utils';\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\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, getRectangleByPoints, getRectangleResizeHandleRefs, ResizeHandle } from '@plait/common';\nimport { getEngine } from '../../engines';\nimport { PlaitImage } from '../../interfaces/image';\nimport { getShape } from '../shape';\n\nexport const getHitGeometryResizeHandleRef = (board: PlaitBoard, element: PlaitGeometry | PlaitImage, point: Point) => {\n const rectangle = getRectangleByPoints(element.points);\n const resizeHandleRefs = getRectangleResizeHandleRefs(rectangle, RESIZE_HANDLE_DIAMETER);\n const result = resizeHandleRefs.find(resizeHandleRef => {\n return RectangleClient.isHit(RectangleClient.toRectangleClient([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 = getRectangleByPoints(node.points);\n client = RectangleClient.getOutlineRectangle(client, offset);\n const shape = getShape(node);\n const isHit = getEngine(shape).isHit(client, point);\n if (isHit) {\n geometry = node;\n }\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return geometry;\n};\n","import {\n Point,\n idCreator,\n distanceBetweenPointAndSegments,\n PlaitBoard,\n createG,\n getElementById,\n RectangleClient,\n findElements,\n PlaitElement,\n drawLinearPath,\n createMask,\n createRect,\n ACTIVE_STROKE_WIDTH,\n PointOfRectangle,\n Direction,\n Vector,\n distanceBetweenPointAndPoint,\n catmullRomFitting\n} from '@plait/core';\nimport {\n getPoints,\n getRectangleByPoints,\n getPointOnPolyline,\n getDirectionFactor,\n rotateVectorAnti90,\n getDirectionByVector,\n getOppositeDirection,\n getDirectionByPointOfRectangle,\n getPointByVector,\n removeDuplicatePoints,\n reduceRouteMargin,\n generateElbowLineRoute,\n getNextPoint,\n DEFAULT_ROUTE_MARGIN,\n getExtendPoint\n} from '@plait/common';\nimport {\n LineHandle,\n LineHandleKey,\n LineHandleRef,\n LineMarkerType,\n LineShape,\n LineText,\n PlaitDrawElement,\n PlaitGeometry,\n PlaitLine\n} from '../interfaces';\nimport { getPointsByCenterPoint, getNearestPoint } from './geometry';\nimport { getLineDashByElement, getStrokeColorByElement, getStrokeWidthByElement } from './style/stroke';\nimport { getEngine } from '../engines';\nimport { drawLineArrow } from './line-arrow';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { Op } from 'roughjs/bin/core';\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';\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 return PlaitLine.getPoints(board, element);\n }\n }\n};\n\nexport const getLineHandleRefPair = (board: PlaitBoard, element: PlaitLine) => {\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 getElbowPoints = (board: PlaitBoard, element: PlaitLine) => {\n if (element.points.length === 2) {\n const handleRefPair = getLineHandleRefPair(board, element);\n const offset = element.source.boundId || element.target.boundId ? DEFAULT_ROUTE_MARGIN : 0;\n const sourceElement = element.source.boundId && getElementById<PlaitGeometry>(board, element.source.boundId);\n const targetElement = element.target.boundId && getElementById<PlaitGeometry>(board, element.target.boundId);\n const isBound = sourceElement && targetElement;\n\n let points: Point[] = [];\n if (isBound) {\n const targetRectangle = RectangleClient.inflate(\n getRectangleByPoints(targetElement.points),\n getStrokeWidthByElement(targetElement) * 2\n );\n const sourceRectangle = RectangleClient.inflate(\n getRectangleByPoints(sourceElement.points),\n getStrokeWidthByElement(sourceElement) * 2\n );\n const sourcePoint = handleRefPair.source.point;\n const targetPoint = handleRefPair.target.point;\n const { sourceOffset, targetOffset } = reduceRouteMargin(sourceRectangle, targetRectangle);\n const sourceOuterRectangle = RectangleClient.expand(\n sourceRectangle,\n sourceOffset[3],\n sourceOffset[0],\n sourceOffset[1],\n sourceOffset[2]\n );\n const targetOuterRectangle = RectangleClient.expand(\n targetRectangle,\n targetOffset[3],\n targetOffset[0],\n targetOffset[1],\n targetOffset[2]\n );\n const nextSourcePoint = getNextPoint(sourcePoint, sourceOuterRectangle, handleRefPair.source.direction);\n const nextTargetPoint = getNextPoint(targetPoint, targetOuterRectangle, handleRefPair.target.direction);\n const isIntersect =\n RectangleClient.isPointInRectangle(targetRectangle, sourcePoint) ||\n RectangleClient.isPointInRectangle(targetOuterRectangle, nextSourcePoint) ||\n RectangleClient.isPointInRectangle(sourceOuterRectangle, nextTargetPoint) ||\n RectangleClient.isPointInRectangle(sourceRectangle, targetPoint);\n if (!isIntersect) {\n points = generateElbowLineRoute({\n sourcePoint,\n nextSourcePoint,\n sourceRectangle,\n sourceOuterRectangle,\n targetPoint,\n nextTargetPoint,\n targetRectangle,\n targetOuterRectangle\n });\n }\n }\n\n if (!points.length) {\n points = getPoints(\n handleRefPair.source.point,\n handleRefPair.source.direction,\n handleRefPair.target.point,\n handleRefPair.target.direction,\n offset\n );\n }\n points = removeDuplicatePoints(points);\n return points;\n }\n return element.points;\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 const allPoints = PlaitLine.getPoints(board, element);\n const points = catmullRomFitting(allPoints);\n return pointsOnBezierCurves(points) as Point[];\n }\n};\n\nexport const transformOpsToPoints = (ops: Op[]) => {\n const result = [];\n for (let item of ops) {\n if (item.op === 'move') {\n result.push([item.data[0], item.data[1]]);\n } else {\n result.push([item.data[0], item.data[1]]);\n result.push([item.data[2], item.data[3]]);\n result.push([item.data[4], item.data[5]]);\n }\n }\n return result;\n};\n\nexport const isHitPolyLine = (pathPoints: Point[], point: Point, strokeWidth: number, expand: number = 0) => {\n const distance = distanceBetweenPointAndSegments(pathPoints, point);\n return distance <= strokeWidth + expand;\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 = getElbowPoints(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.toRectangleClient([point, point]));\n });\n};\n\nexport const isHitLineText = (board: PlaitBoard, element: PlaitLine, point: Point) => {\n return getHitLineTextIndex(board, element, point) !== -1;\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 //TODO element.points 应为曲线拐点\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\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 = 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 //撑开 line\n const maskTargetFillRect = createRect(rectangle);\n maskTargetFillRect.setAttribute('opacity', '0');\n maskTargetFillRect.setAttribute('fill', 'none');\n return { mask, maskTargetFillRect };\n}\n\nexport const getConnectionPoint = (geometry: PlaitGeometry, connection: Point, direction?: Direction, delta?: number): Point => {\n const rectangle = 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 transformPointToConnection = (board: PlaitBoard, point: Point, hitElement: PlaitGeometry): Point => {\n let rectangle = getRectangleByPoints(hitElement.points);\n rectangle = RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH);\n let nearestPoint = getNearestPoint(hitElement, point, ACTIVE_STROKE_WIDTH);\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 = (movingPoint: Point, hitElement: PlaitGeometry, rectangle: RectangleClient) => {\n const shape = getShape(hitElement);\n const connector = getEngine(shape).getConnectorPoints(rectangle);\n const points = getPointsByCenterPoint(movingPoint, 5, 5);\n const pointRectangle = getRectangleByPoints(points);\n return connector.find(point => {\n return RectangleClient.isHit(pointRectangle, RectangleClient.toRectangleClient([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 getBoardLines = (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 getVectorByConnection = (boundElement: PlaitGeometry, connection: PointOfRectangle): Vector => {\n const rectangle = 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) {\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 alignPoints = (basePoint: Point, movingPoint: Point) => {\n const offset = 3;\n const newPoint: Point = [...movingPoint];\n if (Point.isVerticalAlign(newPoint, basePoint, offset)) {\n newPoint[0] = basePoint[0];\n }\n if (Point.isHorizontalAlign(newPoint, basePoint, offset)) {\n newPoint[1] = basePoint[1];\n }\n return newPoint;\n};\n\nexport const handleLineCreating = (\n board: PlaitBoard,\n lineShape: LineShape,\n startPoint: Point,\n movingPoint: Point,\n sourceElement: PlaitGeometry | null,\n lineShapeG: SVGGElement\n) => {\n const hitElement = getHitOutlineGeometry(board, movingPoint, REACTION_MARGIN);\n const targetConnection = hitElement ? transformPointToConnection(board, movingPoint, hitElement) : undefined;\n const connection = sourceElement ? transformPointToConnection(board, startPoint, sourceElement) : undefined;\n const targetBoundId = hitElement ? hitElement.id : undefined;\n const lineGenerator = new LineShapeGenerator(board);\n const temporaryLineElement = createLineElement(\n lineShape,\n [startPoint, movingPoint],\n { marker: LineMarkerType.none, connection: connection, boundId: sourceElement?.id },\n { marker: LineMarkerType.arrow, connection: targetConnection, boundId: targetBoundId },\n [],\n {\n strokeWidth: DefaultLineStyle.strokeWidth\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","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 { PlaitElement, RectangleClient, Selection, PlaitBoard, isPolylineHitRectangle, Point } from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry } from '../interfaces';\nimport { TRANSPARENT, getRectangleByPoints } from '@plait/common';\nimport { getTextRectangle } from './geometry';\nimport { getLinePoints, isHitLineText, isHitPolyLine } from './line';\nimport { getFillByElement, getStrokeWidthByElement } from './style/stroke';\nimport { DefaultGeometryStyle } from '../constants/geometry';\nimport { getEngine } from '../engines';\nimport { getShape } from './shape';\n\nexport const isTextExceedingBounds = (geometry: PlaitGeometry) => {\n const client = getRectangleByPoints(geometry.points);\n if (geometry.textHeight > client.height) {\n return true;\n }\n return false;\n};\n\nexport const isRectangleHitDrawElement = (board: PlaitBoard, element: PlaitElement, selection: Selection) => {\n const rangeRectangle = RectangleClient.toRectangleClient([selection.anchor, selection.focus]);\n if (PlaitDrawElement.isGeometry(element)) {\n const client = 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 = getRectangleByPoints(element.points);\n return RectangleClient.isHit(rangeRectangle, client);\n }\n if (PlaitDrawElement.isLine(element)) {\n const points = getLinePoints(board, element);\n const strokeWidth = getStrokeWidthByElement(element);\n const isHitText = isHitLineText(board, element, selection.focus);\n const isHit = isHitPolyLine(points, selection.focus, strokeWidth, 3) || isHitText;\n const isContainPolyLinePoint = points.some(point => {\n return RectangleClient.isHit(rangeRectangle, RectangleClient.toRectangleClient([point, point]));\n });\n const isIntersect = Point.isEquals(selection.anchor, selection.focus) ? isHit : isPolylineHitRectangle(points, rangeRectangle);\n return isContainPolyLinePoint || isIntersect;\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 // when shape equals text, fill is not allowed\n if (fill !== DefaultGeometryStyle.fill && fill !== TRANSPARENT && !PlaitDrawElement.isText(element)) {\n return isRectangleHitDrawElement(board, element, { anchor: point, focus: point });\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 const strokeWidth = getStrokeWidthByElement(element);\n const engine = getEngine(getShape(element));\n const corners = engine.getCornerPoints(getRectangleByPoints(element.points));\n const isHit = isHitPolyLine(corners, point, strokeWidth, 3);\n const textClient = getTextRectangle(element);\n let isHitText = RectangleClient.isPointInRectangle(textClient, point);\n return isHit || isHitText;\n }\n }\n if (PlaitDrawElement.isImage(element) || PlaitDrawElement.isLine(element)) {\n return isRectangleHitDrawElement(board, element, { anchor: point, focus: point });\n }\n return null;\n};\n","import { Direction, PlaitBoard, PlaitElement, Point, PointOfRectangle, Vector, getElementById } from '@plait/core';\nimport { Element } from 'slate';\nimport { LineComponent } from '../line.component';\nimport { PlaitGeometry } from './geometry';\nimport { StrokeStyle } from './element';\nimport { getConnectionPoint } from '../utils';\nimport { PlaitImage } from '../interfaces/image';\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 //基于线长度,定位的百分比\n position: number;\n width: number;\n height: number;\n}\n\nexport interface LineHandle {\n // 关联元素的 id\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 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 getTextEditors(element: PlaitLine) {\n const component = PlaitElement.getComponent(element) as LineComponent;\n if (component) {\n const manage = component.textManages.find(manage => manage.isEditing);\n if (manage) {\n return [manage.componentRef.instance.editor];\n } else {\n return component.textManages.map(manage => manage.componentRef.instance.editor);\n }\n }\n throw new Error('can not get correctly component in get text editor');\n },\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 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) => {\n return PlaitDrawElement.isImage(value) || PlaitDrawElement.isGeometry(value);\n },\n isBaseShape: (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 { PlaitBoard, Point, RectangleClient, createG, drawCircle, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { PlaitGeometry } from '../interfaces';\nimport { ActiveGeneratorExtraData, Generator, RESIZE_HANDLE_DIAMETER, getRectangleByPoints } from '@plait/common';\nimport { getAutoCompletePoints } from '../utils';\n\nexport class AutoCompleteGenerator extends Generator<PlaitGeometry, ActiveGeneratorExtraData> {\n autoCompleteG!: SVGGElement;\n hoverElement: SVGGElement | null = null;\n\n constructor(public board: PlaitBoard) {\n super(board);\n }\n\n canDraw(element: PlaitGeometry, data: ActiveGeneratorExtraData): boolean {\n const selectedElements = getSelectedElements(this.board);\n\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, RESIZE_HANDLE_DIAMETER, {\n stroke: 'none',\n fill: '#6698FF4d',\n fillStyle: 'solid'\n });\n circle.classList.add(`geometry-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(`.geometry-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 createG,\n drawCircle\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 {\n ActiveGenerator,\n WithTextPluginKey,\n WithTextOptions,\n getRectangleByPoints,\n CommonPluginElement,\n RESIZE_HANDLE_DIAMETER\n} from '@plait/common';\nimport { GeometryThreshold } from './constants/geometry';\nimport { PlaitDrawElement, PlaitText } from './interfaces';\nimport { getEngine } from './engines';\nimport { AutoCompleteGenerator } from './generators/auto-complete.generator';\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 autoCompleteGenerator!: AutoCompleteGenerator;\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 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.autoCompleteGenerator = new AutoCompleteGenerator(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, this.g, { selected: this.selected });\n this.autoCompleteGenerator.processDrawing(this.element, this.g, { selected: this.selected });\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, this.g, { selected: this.selected });\n this.autoCompleteGenerator.processDrawing(this.element, this.g, { selected: this.selected });\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, this.g, { selected: this.selected });\n this.autoCompleteGenerator.processDrawing(this.element, this.g, { selected: this.selected });\n }\n }\n }\n\n editText() {\n this.textManage.edit();\n this.activeGenerator.processDrawing(this.element, this.g, { 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 },\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 }\n}\n","import { PlaitBoard, Point, createG, drawCircle, drawRectangle } from '@plait/core';\nimport { LineShape, PlaitLine } from '../interfaces';\nimport { Generator, PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER, getRectangleByPoints } from '@plait/common';\nimport { getCurvePoints, getLinePoints } from '../utils';\nimport { DefaultGeometryActiveStyle } from '../constants';\n\nexport interface ActiveData {\n selected: boolean;\n}\n\nexport class LineActiveGenerator extends Generator<PlaitLine, ActiveData> {\n hasResizeHandle = 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 if (this.hasResizeHandle) {\n activeG.classList.add('active');\n activeG.classList.add('line-handle');\n const points = PlaitLine.getPoints(this.board, element);\n points.forEach(point => {\n const circle = drawCircle(PlaitBoard.getRoughSVG(this.board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: '#999999',\n strokeWidth: 1,\n fill: '#FFF',\n fillStyle: 'solid'\n });\n activeG.appendChild(circle);\n });\n getMiddlePoints(this.board, element).forEach(point => {\n const circle = drawCircle(PlaitBoard.getRoughSVG(this.board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: '#FFFFFF80',\n strokeWidth: 1,\n fill: `${PRIMARY_COLOR}80`,\n fillStyle: 'solid'\n });\n activeG.appendChild(circle);\n });\n } else {\n const points = getLinePoints(this.board, element);\n const activeRectangle = getRectangleByPoints(points);\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: DefaultGeometryActiveStyle.selectionStrokeWidth\n });\n activeG.appendChild(strokeG);\n }\n\n return activeG;\n }\n}\n\nexport function getMiddlePoints(board: PlaitBoard, element: PlaitLine) {\n const result: Point[] = [];\n const shape = element.shape;\n if (shape === LineShape.straight) {\n const points = PlaitLine.getPoints(board, element);\n for (let i = 0; i < points.length - 1; i++) {\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 result.push(pointsOnBezier[middleIndex]);\n }\n }\n }\n return result;\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';\nimport {\n PlaitBoard,\n PlaitPluginElementComponent,\n PlaitPluginElementContext,\n OnContextChanged,\n getElementById,\n getSelectedElements,\n isSelectionMoving\n} from '@plait/core';\nimport { Subject } from 'rxjs';\nimport { LineText, PlaitDrawElement, PlaitGeometry, PlaitLine } from './interfaces';\nimport { TextManage, TextManageRef } from '@plait/text';\nimport { LineShapeGenerator } from './generators/line.generator';\nimport { LineActiveGenerator } from './generators/line-active.generator';\nimport { getLineTextRectangle } from './utils';\nimport { DrawTransforms } from './transforms';\nimport { GeometryThreshold } from './constants';\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 PlaitPluginElementComponent<PlaitLine, PlaitBoard>\n implements OnInit, OnDestroy, OnContextChanged<PlaitLine, PlaitBoard> {\n destroy$ = new Subject<void>();\n\n shapeGenerator!: LineShapeGenerator;\n\n activeGenerator!: LineActiveGenerator;\n\n textManages: TextManage[] = [];\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.initializeTextManages();\n }\n\n ngOnInit(): void {\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 super.ngOnInit();\n this.boundedElements = this.getBoundedElements();\n this.drawText();\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\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.updateText(previous.element.texts, value.element.texts);\n this.updateTextRectangle();\n }\n\n if (isBoundedElementsChanged) {\n this.shapeGenerator.processDrawing(this.element, this.g);\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n this.updateTextRectangle();\n return;\n }\n\n if (!isSelectionMoving(this.board)) {\n this.activeGenerator.hasResizeHandle = this.hasResizeHandle();\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });\n }\n }\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 initializeTextManages() {\n if (this.element.texts?.length) {\n this.element.texts.forEach((text, index) => {\n const manage = this.createTextManage(text, index);\n this.textManages.push(manage);\n });\n }\n }\n\n destroyTextManages() {\n this.textManages.forEach(manage => {\n manage.destroy();\n });\n }\n\n drawText() {\n if (this.element.texts?.length) {\n this.textManages.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 },\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 if (currentTextsLength === previousTextsLength) {\n for (let i = 0; i < previousTextsLength; i++) {\n if (previousTexts[i].text !== currentTexts[i].text) {\n this.textManages[i].updateText(currentTexts[i].text);\n }\n }\n } else {\n this.destroyTextManages();\n this.textManages = [];\n this.initializeTextManages();\n this.drawText();\n }\n }\n\n updateTextRectangle() {\n this.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 }\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\n if (\n !isVirtualKey(event) &&\n !isDelete(event) &&\n !isSpaceHotkey(event) &&\n isSingleSelection &&\n PlaitDrawElement.isGeometry(targetElement)\n ) {\n event.preventDefault();\n\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 (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, Transforms, getElementById, idCreator } from '@plait/core';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { PlaitImage } from '../interfaces/image';\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 if (element.source.boundId && !getElementById(board, element.source.boundId, elements)) {\n delete source.boundId;\n delete source.connection;\n }\n if (element.target.boundId && !getElementById(board, element.target.boundId, elements)) {\n delete target.boundId;\n delete target.connection;\n }\n const points = element.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 { PlaitBoard, PlaitElement, Point, RectangleClient, getDataFromClipboard, getSelectedElements, setClipboardData } from '@plait/core';\nimport { getSelectedDrawElements, getSelectedImageElements } from '../utils/selected';\nimport { PlaitDrawElement, PlaitGeometry, PlaitLine, PlaitShape } from '../interfaces';\nimport { getTextFromClipboard, getTextSize } from '@plait/text';\nimport { buildClipboardData, insertClipboardData } from '../utils/clipboard';\nimport { DrawTransforms } from '../transforms';\nimport { getBoardLines } from '../utils/line';\nimport { PlaitImage } from '../interfaces/image';\nimport { acceptImageTypes, buildImage, getElementOfFocusedImage } 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 = (data: DataTransfer | null, rectangle: RectangleClient | null, type: 'copy' | 'cut') => {\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 elements = buildClipboardData(\n board,\n [...targetDrawElements, ...boundLineElements],\n rectangle ? [rectangle.x, rectangle.y] : [0, 0]\n );\n setClipboardData(data, elements);\n }\n setFragment(data, rectangle, type);\n };\n\n board.insertFragment = (data: DataTransfer | null, targetPoint: Point) => {\n const elements = getDataFromClipboard(data);\n const selectedElements = getSelectedElements(board);\n const drawElements = elements.filter(value => PlaitDrawElement.isDrawElement(value)) as PlaitDrawElement[];\n if (elements.length > 0 && drawElements.length > 0) {\n insertClipboardData(board, drawElements, targetPoint);\n } else if (elements.length === 0) {\n const text = getTextFromClipboard(data);\n // (* ̄︶ ̄)\n const insertAsChildren = selectedElements.length === 1 && selectedElements[0].children;\n const insertAsFreeText = !insertAsChildren;\n if (text && insertAsFreeText) {\n const { width, height } = getTextSize(board, text);\n DrawTransforms.insertText(board, [targetPoint, [targetPoint[0] + width, targetPoint[1] + height]], text);\n return;\n }\n }\n\n if (data?.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(data?.files[0].type) && canInsertionImage) {\n const imageFile = data.files[0];\n buildImage(board, imageFile, DEFAULT_IMAGE_WIDTH, imageItem => {\n DrawTransforms.insertImage(board, imageItem, targetPoint);\n });\n return;\n }\n }\n\n insertFragment(data, targetPoint);\n };\n\n return board;\n};\n\nexport const getBoundedLineElements = (board: PlaitBoard, plaitShapes: PlaitShape[]) => {\n const lines = getBoardLines(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 toPoint,\n transformPoint\n} from '@plait/core';\nimport { LineShape, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { handleLineCreating } from '../utils';\nimport { REACTION_MARGIN, getLinePointers } from '../constants';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { isDrawingMode } from '@plait/common';\n\nexport const withLineCreateByDraw = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, pointerUp } = 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 (isLinePointer && isDrawingMode(board)) {\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\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 = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\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.pointerUp = (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\n lineShapeG?.remove();\n lineShapeG = null;\n sourceElement = null;\n start = null;\n temporaryElement = null;\n preventTouchMove(board, event, false);\n\n pointerUp(event);\n };\n\n return board;\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, Transforms, getSelectedElements } from '@plait/core';\nimport { PlaitGeometry } from '../interfaces/geometry';\nimport {\n ResizeHandle,\n ResizeRef,\n ResizeState,\n WithResizeOptions,\n getRectangleByPoints,\n normalizeShapePoints,\n withResize\n} from '@plait/common';\nimport { getSelectedGeometryElements, getSelectedImageElements } from '../utils/selected';\nimport { getHitGeometryResizeHandleRef } from '../utils/position/geometry';\nimport { DrawTransforms } from '../transforms';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { GeometryComponent } from '../geometry.component';\nimport { PlaitImage } from '../interfaces/image';\nimport { PlaitDrawElement } from '../interfaces';\n\nexport const withGeometryResize = (board: PlaitBoard) => {\n const { keydown, keyup } = board;\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 const options: WithResizeOptions<PlaitGeometry | PlaitImage> = {\n key: 'draw-geometry',\n canResize: () => {\n return true;\n },\n detect: (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 handleRef = getHitGeometryResizeHandleRef(board, target, point);\n if (handleRef) {\n return {\n element: target,\n handle: handleRef.handle,\n cursorClass: handleRef.cursorClass\n };\n }\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<PlaitGeometry | PlaitImage>, resizeState: ResizeState) => {\n let points: [Point, Point] = [...resizeRef.element.points];\n const rectangle = getRectangleByPoints(resizeRef.element.points);\n const ratio = rectangle.height / rectangle.width;\n const isCornerHandle = [ResizeHandle.nw, ResizeHandle.ne, ResizeHandle.se, ResizeHandle.sw].includes(resizeRef.handle);\n points = getPointsByResizeHandle(resizeState.endTransformPoint, resizeRef.element.points, resizeRef.handle);\n if ((isShift || PlaitDrawElement.isImage(resizeRef.element)) && isCornerHandle) {\n const rectangle = getRectangleByPoints(points);\n const factor = points[0][1] > points[1][1] ? 1 : -1;\n const height = rectangle.width * ratio * factor;\n points = [[resizeState.endTransformPoint[0], points[1][1] + height], points[1]];\n }\n if ((isShift || PlaitDrawElement.isImage(resizeRef.element)) && !isCornerHandle) {\n const rectangle = getRectangleByPoints(points);\n if (resizeRef.handle === ResizeHandle.n || resizeRef.handle === ResizeHandle.s) {\n const newWidth = rectangle.height / ratio;\n const offset = (newWidth - rectangle.width) / 2;\n const newRectangle = RectangleClient.expand(rectangle, offset, 0);\n const cornerPoints = RectangleClient.getCornerPoints(newRectangle);\n points = [cornerPoints[0], cornerPoints[2]];\n }\n if (resizeRef.handle === ResizeHandle.e || resizeRef.handle === ResizeHandle.w) {\n const newHeight = rectangle.width * ratio;\n const offset = (newHeight - rectangle.height) / 2;\n const newRectangle = RectangleClient.expand(rectangle, 0, offset);\n const cornerPoints = RectangleClient.getCornerPoints(newRectangle);\n points = [cornerPoints[0], cornerPoints[2]];\n }\n }\n if (PlaitDrawElement.isGeometry(resizeRef.element)) {\n const { height: textHeight } = PlaitGeometry.getTextManage(resizeRef.element).getSize();\n DrawTransforms.resizeGeometry(board, points, textHeight, resizeRef.path);\n } else {\n points = normalizeShapePoints(points);\n Transforms.setNode(board, { points }, resizeRef.path);\n }\n }\n };\n\n withResize<PlaitGeometry | PlaitImage>(board, options);\n\n return board;\n};\n\nconst getPointsByResizeHandle = (movingPoint: Point, elementPoints: Point[], handle: ResizeHandle): [Point, Point] => {\n switch (handle) {\n case ResizeHandle.nw: {\n return [movingPoint, elementPoints[1]];\n }\n case ResizeHandle.ne: {\n return [movingPoint, [elementPoints[0][0], elementPoints[1][1]]];\n }\n case ResizeHandle.se: {\n return [movingPoint, elementPoints[0]];\n }\n case ResizeHandle.sw: {\n return [movingPoint, [elementPoints[1][0], elementPoints[0][1]]];\n }\n case ResizeHandle.n: {\n return [[elementPoints[0][0], movingPoint[1]], elementPoints[1]];\n }\n case ResizeHandle.s: {\n return [elementPoints[0], [elementPoints[1][0], movingPoint[1]]];\n }\n case ResizeHandle.w: {\n return [[movingPoint[0], elementPoints[0][1]], elementPoints[1]];\n }\n default: {\n return [elementPoints[0], [movingPoint[0], elementPoints[1][1]]];\n }\n }\n};\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { PlaitLine } from '../../interfaces';\nimport { RESIZE_HANDLE_DIAMETER } from '@plait/common';\nimport { getMiddlePoints } from '../../generators/line-active.generator';\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 const points = PlaitLine.getPoints(board, element);\n const index = getHitPointIndex(points, point);\n if (index !== -1) {\n if (index === 0) {\n return { handle: LineResizeHandle.source, index };\n }\n if (index === points.length - 1) {\n return { handle: LineResizeHandle.target, index };\n }\n return { index };\n }\n\n const middlePoints = getMiddlePoints(board, element);\n const middleIndex = getHitPointIndex(middlePoints, point);\n if (middleIndex !== -1) {\n return { handle: LineResizeHandle.addHandle, index: middleIndex };\n }\n return undefined;\n};\n\nfunction 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.toRectangleClient([movingPoint, movingPoint]), rectangle);\n });\n return rectangle ? rectangles.indexOf(rectangle) : -1;\n}\n","import { PlaitBoard, Point } from '@plait/core';\nimport { ResizeRef, ResizeState, WithResizeOptions, withResize } from '@plait/common';\nimport { getSelectedLineElements } from '../utils/selected';\nimport { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { LineHandle, PlaitLine } from '../interfaces';\nimport { alignPoints, getLinePoints, transformPointToConnection } from '../utils';\nimport { DrawTransforms } from '../transforms';\nimport { REACTION_MARGIN } from '../constants';\n\nexport const withLineResize = (board: PlaitBoard) => {\n let pointIndex = 0;\n const options: WithResizeOptions<PlaitLine, LineResizeHandle> = {\n key: 'draw-line',\n canResize: () => {\n return true;\n },\n detect: (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 };\n pointIndex = handleRef.index;\n }\n });\n return result;\n }\n return null;\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 if (resizeRef.handle === LineResizeHandle.source || resizeRef.handle === LineResizeHandle.target) {\n const object = resizeRef.handle === LineResizeHandle.source ? source : target;\n points[pointIndex] = resizeState.endTransformPoint;\n const hitElement = getHitOutlineGeometry(board, resizeState.endTransformPoint, REACTION_MARGIN);\n if (hitElement) {\n object.connection = transformPointToConnection(board, resizeState.endTransformPoint, hitElement);\n object.boundId = hitElement.id;\n } else {\n object.connection = undefined;\n object.boundId = undefined;\n if (points.length === 2) {\n let movingPoint = points[pointIndex];\n const drawPoints = getLinePoints(board, resizeRef.element);\n const index = pointIndex === 0 ? drawPoints.length - 1 : pointIndex;\n const otherPoint = drawPoints[index];\n points[pointIndex] = alignPoints(otherPoint, movingPoint);\n }\n }\n } else if (resizeRef.handle === LineResizeHandle.addHandle) {\n points.splice(pointIndex + 1, 0, resizeState.endTransformPoint);\n } else {\n points[pointIndex] = resizeState.endTransformPoint;\n }\n DrawTransforms.resizeLine(board, { points, source, target }, resizeRef.path);\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 toPoint,\n transformPoint\n} from '@plait/core';\nimport { LineShape, PlaitDrawElement } from '../interfaces';\nimport { drawBoundMask, getHitConnectorPoint, getNearestPoint } from '../utils';\nimport { getRectangleByPoints, isResizingByCondition } from '@plait/common';\nimport { getHitOutlineGeometry } from '../utils/position/geometry';\nimport { LineResizeHandle } from '../utils/position/line';\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 const linePointers = Object.keys(LineShape);\n const isLinePointer = PlaitBoard.isInPointer(board, linePointers);\n const movingPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\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, ACTIVE_STROKE_WIDTH);\n const rectangle = 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\n pointerMove(event);\n };\n\n board.pointerUp = event => {\n boundShapeG?.remove();\n boundShapeG = null;\n\n pointerUp(event);\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n PlaitElement,\n getHitElementByPoint,\n getNearestPointBetweenPointAndSegments,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { PlaitDrawElement, PlaitLine } from '../interfaces';\nimport { Node } from 'slate';\nimport { getHitLineTextIndex, getLinePoints, isHitLineText } from '../utils';\nimport { getRatioByPoint } from '@plait/common';\nimport { buildText } from '@plait/text';\nimport { LineComponent } from '../line.component';\nimport { DrawTransforms } from '../transforms';\n\nexport const withLineText = (board: PlaitBoard) => {\n const { dblclick } = board;\n\n board.dblclick = (event: MouseEvent) => {\n const clickPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\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.textManages.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.textManages[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';\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 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 }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.initializeGenerator();\n this.imageGenerator.processDrawing(this.element, this.g, this.viewContainerRef);\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 } 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 }\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n this.imageGenerator.destroy();\n }\n}\n","import { PlaitBoard, PlaitElement, drawCircle, isSelectionMoving, toPoint, transformPoint } from '@plait/core';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getAutoCompletePoints, getHitIndexOfAutoCompletePoint, getSelectedDrawElements } from '../utils';\nimport { GeometryComponent } from '../geometry.component';\n\nexport const withAutoCompleteReaction = (board: PlaitBoard) => {\n const { pointerMove } = board;\n\n let reactionG: SVGGElement | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n reactionG?.remove();\n if (isSelectionMoving(board)) {\n pointerMove(event);\n return;\n }\n\n const selectedElements = getSelectedDrawElements(board);\n const movingPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n if (selectedElements.length === 1 && PlaitDrawElement.isGeometry(selectedElements[0])) {\n const points = getAutoCompletePoints(selectedElements[0]);\n const hitIndex = getHitIndexOfAutoCompletePoint(movingPoint, points);\n const hitPoint = points[hitIndex];\n const component = PlaitElement.getComponent(selectedElements[0]) as GeometryComponent;\n component.autoCompleteGenerator.recoverAutoCompleteG();\n if (hitPoint) {\n component.autoCompleteGenerator.removeAutoCompleteG(hitIndex);\n reactionG = drawCircle(PlaitBoard.getRoughSVG(board), hitPoint, 10, {\n stroke: 'none',\n fill: '#6698FF80',\n fillStyle: 'solid'\n });\n PlaitBoard.getElementActiveHost(board).append(reactionG);\n }\n }\n\n pointerMove(event);\n };\n\n return board;\n};\n","import {\n BoardTransforms,\n PlaitBoard,\n PlaitOptionsBoard,\n PlaitPointerType,\n Point,\n Transforms,\n addSelectedElement,\n clearSelectedElement,\n createG,\n distanceBetweenPointAndPoint,\n temporaryDisableSelection,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { LineShape, PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';\nimport { handleLineCreating, getAutoCompletePoints, getHitIndexOfAutoCompletePoint, getSelectedDrawElements } from '../utils';\n\nexport interface AutoCompleteOptions {\n afterComplete: (element: PlaitLine) => {};\n}\n\nexport const withAutoCompletePluginKey = 'plait-auto-complete-plugin-key';\n\nexport const withAutoComplete = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, pointerUp } = board;\n\n const tolerance = 3;\n let startPoint: Point | null = null;\n let lineShapeG: SVGGElement | null = null;\n let sourceElement: PlaitGeometry | null;\n let temporaryElement: PlaitLine | null;\n\n board.pointerDown = (event: PointerEvent) => {\n const selectedElements = getSelectedDrawElements(board);\n const clickPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n if (selectedElements.length === 1 && PlaitDrawElement.isGeometry(selectedElements[0])) {\n const points = getAutoCompletePoints(selectedElements[0]);\n const index = getHitIndexOfAutoCompletePoint(clickPoint, points);\n const hitPoint = points[index];\n if (hitPoint) {\n temporaryDisableSelection(board as PlaitOptionsBoard);\n startPoint = clickPoint;\n sourceElement = selectedElements[0];\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 = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n if (startPoint && sourceElement) {\n const distance = distanceBetweenPointAndPoint(...movingPoint, ...startPoint);\n if (distance > tolerance) {\n temporaryElement = handleLineCreating(board, LineShape.elbow, startPoint, movingPoint, sourceElement, lineShapeG);\n }\n }\n\n pointerMove(event);\n };\n\n board.pointerUp = 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<AutoCompleteOptions>(withAutoCompletePluginKey)\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 pointerUp(event);\n };\n\n return board;\n};\n","import { PlaitBoard, PlaitElement, PlaitPluginElementContext, Selection, getSelectedElements } from '@plait/core';\nimport { GeometryComponent } from '../geometry.component';\nimport { LineComponent } from '../line.component';\nimport { PlaitDrawElement } from '../interfaces';\nimport { getRectangleByPoints } from '@plait/common';\nimport { withDrawHotkey } from './with-draw-hotkey';\nimport { withGeometryCreateByDrawing, withGeometryCreateByDrag } from './with-geometry-create';\nimport { withDrawFragment } from './with-draw-fragment';\nimport { getLinePoints, isRectangleHitDrawElement, isHitDrawElement } from '../utils';\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 { withAutoCompleteReaction } from './with-auto-complete-reaction';\nimport { withAutoComplete } from './with-auto-complete';\n\nexport const withDraw = (board: PlaitBoard) => {\n const { drawElement, getRectangle, isRectangleHit, isHit, isMovable, isAlign } = 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 getRectangleByPoints(element.points);\n }\n if (PlaitDrawElement.isLine(element)) {\n const points = getLinePoints(board, element);\n return getRectangleByPoints(points);\n }\n if (PlaitDrawElement.isImage(element)) {\n return 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.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 (\n (!element.source.boundId ||\n (element.source.boundId && isSelected(element.source.boundId) && selectedElements.includes(element))) &&\n (!element.target.boundId ||\n (element.target.boundId && isSelected(element.target.boundId) && selectedElements.includes(element)))\n ) {\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 return withAutoCompleteReaction(\n withLineText(\n withLineBoundReaction(\n withLineResize(\n withGeometryResize(\n withLineCreateByDraw(\n withAutoComplete(withGeometryCreateByDrag(withGeometryCreateByDrawing(withDrawFragment(withDrawHotkey(board)))))\n )\n )\n )\n )\n )\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["heightRatio","getNearestPointBetweenPointAndRoundRectangle"],"mappings":"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"}