@plait/common 0.52.0 → 0.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/group.component.d.ts +18 -0
- package/esm2022/core/group.component.mjs +48 -0
- package/esm2022/core/image-base.component.mjs +2 -2
- package/esm2022/generators/group.generator.mjs +21 -0
- package/esm2022/generators/image.generator.mjs +6 -2
- package/esm2022/plugins/index.mjs +2 -1
- package/esm2022/plugins/with-group.mjs +189 -0
- package/esm2022/transforms/align.mjs +21 -13
- package/esm2022/utils/index.mjs +1 -2
- package/esm2022/utils/resize.mjs +23 -5
- package/esm2022/utils/vector.mjs +11 -1
- package/fesm2022/plait-common.mjs +305 -24
- package/fesm2022/plait-common.mjs.map +1 -1
- package/generators/group.generator.d.ts +6 -0
- package/package.json +1 -1
- package/plugins/index.d.ts +1 -0
- package/plugins/with-group.d.ts +2 -0
- package/utils/index.d.ts +0 -1
- package/utils/resize.d.ts +3 -1
- package/utils/vector.d.ts +1 -0
- package/esm2022/utils/rotate.mjs +0 -7
- package/utils/rotate.d.ts +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/utils/drawing/resize-handle.ts","../../../packages/common/src/generators/active.generator.ts","../../../packages/common/src/generators/image.generator.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/utils/vector.ts","../../../packages/common/src/utils/math.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/direction.ts","../../../packages/common/src/utils/default-orthogonal-routing.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/utils/creation-mode.ts","../../../packages/common/src/utils/text.ts","../../../packages/common/src/utils/image.ts","../../../packages/common/src/algorithms/data-structures/priority-queue.ts","../../../packages/common/src/algorithms/a-star.ts","../../../packages/common/src/algorithms/data-structures/graph.ts","../../../packages/common/src/utils/elbow-line-route.ts","../../../packages/common/src/utils/memorize.ts","../../../packages/common/src/utils/rotate.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/transforms/align.ts","../../../packages/common/src/transforms/text.ts","../../../packages/common/src/shapes/common.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/core/plugin-element.ts","../../../packages/common/src/core/image-base.component.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/plait-common.ts"],"sourcesContent":["export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const RESIZE_HANDLE_DIAMETER = 9;\nexport const WithTextPluginKey = 'plait-text-plugin-key';\nexport const DEFAULT_ROUTE_MARGIN = 30;\nexport const TRANSPARENT = 'transparent';\n","export enum MediaKeys {\n image = 'image'\n}\n\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\n\nexport const acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp'];\n\nexport const WithCommonPluginKey = 'plait-common-plugin-key';\n","export enum ResizeHandle {\n nw = '0',\n n = '4',\n ne = '1',\n e = '5',\n se = '2',\n s = '6',\n sw = '3',\n w = '7'\n}\n","import { PlaitBoard, PlaitElement, RectangleClient, setAngleForG } from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {\n prepend?: boolean;\n}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions\n> {\n g?: SVGGElement;\n\n protected options?: V;\n\n constructor(protected board: PlaitBoard, options?: V) {\n this.options = options;\n }\n\n processDrawing(element: T, parentG: SVGGElement, data?: K) {\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.draw(element, data);\n if (g) {\n if (this.g && parentG.contains(this.g)) {\n this.g.replaceWith(g);\n } else {\n if (this.options?.prepend) {\n parentG.prepend(g);\n } else {\n parentG.appendChild(g);\n }\n }\n this.g = g;\n const rect = this.board.getRectangle(element);\n if (rect && element.angle) {\n setAngleForG(g, RectangleClient.getCenterPoint(rect), element.angle);\n }\n } else {\n this.destroy();\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n } else {\n this.destroy();\n }\n }\n\n /**\n * abstract function\n */\n protected abstract canDraw(element: T, data?: K): boolean;\n\n /**\n * abstract function\n */\n protected abstract draw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n this.g = undefined;\n }\n }\n}\n\nexport interface AfterDraw<T extends PlaitElement = PlaitElement> {\n afterDraw(element: T): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, Point, drawCircle } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../../constants/default';\n\nexport const drawHandle = (board: PlaitBoard, centerPoint: Point) => {\n const options: Options = { stroke: '#99999995', strokeWidth: 2, fill: '#FFF', fillStyle: 'solid' };\n return drawCircle(PlaitBoard.getRoughSVG(board), centerPoint, RESIZE_HANDLE_DIAMETER, options);\n};\n\nexport function drawFillPrimaryHandle(board: PlaitBoard, point: Point) {\n return drawCircle(PlaitBoard.getRoughSVG(board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: '#FFFFFF',\n strokeWidth: 1,\n fill: `${PRIMARY_COLOR}`,\n fillStyle: 'solid'\n });\n}\n\nexport function drawPrimaryHandle(board: PlaitBoard, point: Point) {\n return drawCircle(PlaitBoard.getRoughSVG(board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: `${PRIMARY_COLOR}`,\n strokeWidth: 2,\n fill: `#FFFFFF`,\n fillStyle: 'solid'\n });\n}","import { PlaitBoard, PlaitElement, RectangleClient, createG, drawRectangle } from '@plait/core';\nimport { Generator, GeneratorOptions } from './generator';\nimport { PRIMARY_COLOR } from '../constants/default';\nimport { drawHandle } from '../utils/drawing';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T> & GeneratorOptions\n> {\n hasResizeHandle = false;\n\n constructor(public board: PlaitBoard, public options: ActiveGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ActiveGeneratorExtraData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n const rectangle = this.options.getRectangle(element);\n\n const delta = this.options.getStrokeWidth();\n const activeRectangle = RectangleClient.inflate(rectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: delta\n });\n\n activeG.append(strokeG);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // draw resize handle\n RectangleClient.getCornerPoints(activeRectangle).forEach(corner => {\n const cornerHandleG = drawHandle(this.board, corner);\n activeG.append(cornerHandleG);\n });\n } else {\n this.hasResizeHandle = false;\n }\n return activeG;\n }\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitOptionsBoard,\n RectangleClient,\n createForeignObject,\n createG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator, GeneratorOptions } from './generator';\nimport { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\nimport { CommonImageItem, WithCommonPluginOptions } from '../utils';\nimport { WithCommonPluginKey } from '../constants';\nexport interface ShapeData {\n viewContainerRef: ViewContainerRef;\n}\n\nexport interface ImageGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getImageItem: (element: T) => CommonImageItem;\n}\n\nexport class ImageGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ViewContainerRef,\n ImageGeneratorOptions<T> & GeneratorOptions\n> {\n foreignObject!: SVGForeignObjectElement;\n\n componentRef!: ComponentRef<ImageBaseComponent>;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ViewContainerRef): boolean {\n return !!this.options.getImageItem(element);\n }\n\n draw(element: T, viewContainerRef: ViewContainerRef): SVGGElement {\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n g.append(this.foreignObject);\n const componentType = (this.board as PlaitOptionsBoard).getPluginOptions<WithCommonPluginOptions>(WithCommonPluginKey)\n .imageComponentType;\n if (!componentType) {\n throw new Error('Not implement ImageBaseComponent error.');\n }\n this.componentRef = viewContainerRef.createComponent(componentType);\n this.componentRef.instance.board = this.board;\n\n this.componentRef.instance.imageItem = this.options.getImageItem(element);\n this.componentRef.instance.element = element;\n this.componentRef.instance.getRectangle = () => {\n return this.options.getRectangle(element);\n };\n this.componentRef.instance.cdr.markForCheck();\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n if (previous !== current && this.componentRef) {\n this.componentRef.instance.imageItem = this.options.getImageItem(current);\n this.componentRef!.instance.getRectangle = () => {\n return this.options.getRectangle(current);\n };\n }\n const currentForeignObject = this.options.getRectangle(current);\n updateForeignObject(\n this.g!,\n currentForeignObject.width,\n currentForeignObject.height,\n currentForeignObject.x,\n currentForeignObject.y\n );\n // solve image lose on move node\n if (this.foreignObject.children.length === 0) {\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n }\n this.componentRef?.instance.cdr.markForCheck();\n }\n\n destroy(): void {\n super.destroy();\n this.componentRef?.destroy();\n }\n}\n","import { PlaitBoard, Point, RectangleClient, ResizeCursorClass, setDragging } from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { PlaitElementOrArray, ResizeRef } from '../types/resize';\n\nexport const getResizeHandleByIndex = (index: number) => {\n return `${index}` as ResizeHandle;\n};\n\nexport const getIndexByResizeHandle = (resizeHandle: ResizeHandle) => {\n return Number(resizeHandle);\n};\n\nexport const getSymmetricHandleIndex = (board: PlaitBoard, index: number) => {\n const originIndex = isEdgeHandle(board, getResizeHandleByIndex(index)) ? index - 4 : index;\n let originSymmetricHandleIndex = originIndex + 2;\n if (originSymmetricHandleIndex >= 4) {\n originSymmetricHandleIndex = originSymmetricHandleIndex - 4;\n }\n return isEdgeHandle(board, getResizeHandleByIndex(index)) ? originSymmetricHandleIndex + 4 : originSymmetricHandleIndex;\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n case 2:\n return ResizeCursorClass.nwse;\n case 1:\n case 3:\n return ResizeCursorClass.nesw;\n case 4:\n case 6:\n return ResizeCursorClass.ns;\n case 5:\n case 7:\n return ResizeCursorClass.ew;\n default:\n return null;\n }\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number) => {\n const corners = RectangleClient.getCornerPoints(rectangle);\n const refs = corners.map((corner, index: number) => {\n return {\n rectangle: {\n x: corner[0] - diameter / 2,\n y: corner[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n handle: getResizeHandleByIndex(index) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n };\n });\n const rectangles = getResizeSideRectangles(corners, diameter / 2);\n refs.push(\n ...rectangles.map((rectangle, index) => {\n return {\n rectangle,\n handle: getResizeHandleByIndex(index + 4) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index + 4) as ResizeCursorClass\n };\n })\n );\n return refs;\n};\n\nexport const getResizeHandlePointByIndex = (rectangle: RectangleClient, index: number) => {\n if (index <= 3) {\n const corners = RectangleClient.getCornerPoints(rectangle);\n return corners[index];\n } else {\n const edgeCenterPoints = RectangleClient.getEdgeCenterPoints(rectangle);\n return edgeCenterPoints[index - 4];\n }\n};\n\nconst getResizeSideRectangles = (cornerPoints: Point[], offset: number): RectangleClient[] => {\n const result = [];\n for (let i = 0; i < cornerPoints.length; i++) {\n let rectangle = RectangleClient.getRectangleByPoints([cornerPoints[i], cornerPoints[(i + 1) % 4]]);\n const arr = new Array(2).fill(0);\n arr[(i + 1) % 2] = offset / 2;\n rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);\n result.push(rectangle);\n }\n return result;\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, ResizeRef<any, any>>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const isResizingByCondition = <T extends PlaitElementOrArray, K>(board: PlaitBoard, match: (resizeRef: ResizeRef<T, K>) => boolean) => {\n return isResizing(board) && match(IS_RESIZING.get(board)!);\n};\n\nexport const addResizing = <T extends PlaitElementOrArray, K>(board: PlaitBoard, resizeRef: ResizeRef<T, K>, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, resizeRef);\n setDragging(board, true);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.delete(board);\n setDragging(board, false);\n};\n\nexport const isEdgeHandle = (board: PlaitBoard, handle: ResizeHandle) => {\n const index = getIndexByResizeHandle(handle);\n if (index >= 4) {\n return true;\n } else {\n return false;\n }\n};\n\nexport const isCornerHandle = (board: PlaitBoard, handle: ResizeHandle) => {\n return !isEdgeHandle(board, handle);\n};\n","import { Point, Vector } from '@plait/core';\n\nexport function getUnitVectorByPointAndPoint(point1: Point, point2: Point): Point {\n const deltaX = point2[0] - point1[0];\n const deltaY = point2[1] - point1[1];\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n // Avoid division by zero if the points are the same\n if (distance === 0) {\n throw new Error('Points must not be the same for a unit vector calculation.');\n }\n // Calculate the unit vector components\n const unitX = deltaX / distance;\n const unitY = deltaY / distance;\n\n return [unitX, unitY];\n}\n\nexport function getPointByVectorComponent(point: Point, vector: Vector, component: number): Point {\n const distance = Math.hypot(vector[0], vector[1]);\n return [point[0] + (vector[0] / distance) * component, point[1] + (vector[1] / distance) * component];\n}\n\nexport function getPointByVectorDirectionComponent(\n point: Point,\n unitVector: Vector,\n directionComponent: number,\n isHorizontal: boolean\n) {\n if (isHorizontal) {\n return [point[0] + directionComponent, point[1] + (directionComponent / unitVector[0]) * unitVector[1]] as Point;\n } else {\n return [point[0] + (directionComponent / unitVector[1]) * unitVector[0], point[1] + directionComponent] as Point;\n }\n}\n\nexport function rotateVectorAnti90(vector: Vector): Vector {\n const x = vector[0];\n const y = vector[1];\n const rotatedX = y;\n const rotatedY = -x;\n return [rotatedX, rotatedY];\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { getPointByVectorDirectionComponent, getUnitVectorByPointAndPoint } from './vector';\n\nexport function isPointOnSegment(point: Point, startPoint: Point, endPoint: Point) {\n const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);\n const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;\n}\n\nexport const getCrossingPointsBetweenPointAndSegment = (point: Point, startPoint: Point, endPoint: Point) => {\n const result: Point[] = [];\n const xRange = [Math.min(startPoint[0], endPoint[0]), Math.max(startPoint[0], endPoint[0])];\n const yRange = [Math.min(startPoint[1], endPoint[1]), Math.max(startPoint[1], endPoint[1])];\n const unitVector = getUnitVectorByPointAndPoint(startPoint, endPoint);\n if (point[0] >= xRange[0] && point[0] <= xRange[1]) {\n const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[0] - startPoint[0], true) as Point;\n result.push(crossingPoint);\n } else if (point[1] >= yRange[0] && point[1] <= yRange[1]) {\n const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[1] - startPoint[1], false) as Point;\n result.push(crossingPoint);\n }\n return result;\n};\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { isPointOnSegment } from './math';\n\nexport function getPointOnPolyline(points: Point[], ratio: number) {\n const totalLength = calculatePolylineLength(points);\n const targetDistance = totalLength * ratio;\n\n let accumulatedDistance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);\n\n if (accumulatedDistance + segmentLength >= targetDistance) {\n const remainingDistance = targetDistance - accumulatedDistance;\n const ratioInSegment = remainingDistance / segmentLength;\n\n const targetX = x1 + (x2 - x1) * ratioInSegment;\n const targetY = y1 + (y2 - y1) * ratioInSegment;\n return [targetX, targetY];\n }\n\n accumulatedDistance += segmentLength;\n }\n\n return points[points.length - 1];\n}\n\nexport function calculatePolylineLength(points: Point[]) {\n let length = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n length += distanceBetweenPointAndPoint(x1, y1, x2, y2);\n }\n return length;\n}\n\nexport function getRatioByPoint(points: Point[], point: Point) {\n const totalLength = calculatePolylineLength(points);\n let distance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const isOverlap = isPointOnSegment(point, points[i], points[i + 1]);\n if (isOverlap) {\n distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);\n return distance / totalLength;\n } else {\n distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);\n }\n }\n throw new Error('Cannot get ratio by point');\n}\n\nexport const removeDuplicatePoints = (points: Point[]) => {\n const newArray: Point[] = [];\n points.forEach(point => {\n const index = newArray.findIndex(otherPoint => {\n return Point.isEquals(point, otherPoint);\n });\n if (index === -1) newArray.push(point);\n });\n return newArray;\n};\n\nexport function simplifyOrthogonalPoints(points: Point[]) {\n if (points.length <= 2) return points;\n let simplifiedPoints: Point[] = [points[0]];\n for (let i = 1; i < points.length - 1; i++) {\n const previous = points[i - 1];\n const current = points[i];\n const next = points[i + 1];\n const isTurn = !(Point.isOverHorizontal([previous, current, next]) || Point.isOverVertical([previous, current, next]));\n if (isTurn) {\n simplifiedPoints.push(current);\n }\n }\n simplifiedPoints.push(points[points.length - 1]);\n return simplifiedPoints;\n}\n\nexport const getExtendPoint = (source: Point, target: Point, extendDistance: number): Point => {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n const isEqual = Point.isEquals(source, target);\n const sin = isEqual ? 1 : (target[1] - source[1]) / distance;\n const cos = isEqual ? 1 : (target[0] - source[0]) / distance;\n return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];\n};\n","import { Direction, DirectionFactor, Point, PointOfRectangle, Vector } from '@plait/core';\n\nconst handleDirectionFactors = {\n [Direction.left]: { x: -1, y: 0 },\n [Direction.right]: { x: 1, y: 0 },\n [Direction.top]: { x: 0, y: -1 },\n [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getOppositeDirection(direction: Direction) {\n switch (direction) {\n case Direction.left:\n return Direction.right;\n case Direction.right:\n return Direction.left;\n case Direction.top:\n return Direction.bottom;\n case Direction.bottom:\n return Direction.top;\n }\n}\n\nexport function getDirectionByPointOfRectangle(point: PointOfRectangle): Direction | undefined {\n if (point[0] === 0) {\n return Direction.left;\n }\n if (point[0] === 1) {\n return Direction.right;\n }\n if (point[1] === 0) {\n return Direction.top;\n }\n if (point[1] === 1) {\n return Direction.bottom;\n }\n return undefined;\n}\n\n/**\n * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system\n * vector[0] and vector[1] are the x and y components of the vector respectively.\n * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.\n * if the vector has two directions, the function will return the string in which direction it is closer.\n */\nexport function getDirectionByVector(vector: Vector): Direction | null {\n const x = vector[0];\n const y = vector[1];\n if (x === 0 && y === 0) {\n return null;\n }\n if (x === 0) {\n return y > 0 ? Direction.bottom : Direction.top;\n }\n if (y === 0) {\n return x > 0 ? Direction.right : Direction.left;\n }\n const angle = Math.atan2(y, x);\n if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {\n return Direction.right;\n } else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {\n return Direction.bottom;\n } else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {\n return Direction.top;\n } else {\n return Direction.left;\n }\n}\n\nexport function getDirectionBetweenPointAndPoint(source: Point, target: Point) {\n if (source[0] === target[0]) {\n if (source[1] >= target[1]) {\n return Direction.top;\n } else {\n return Direction.bottom;\n }\n }\n if (source[1] === target[1]) {\n if (source[0] >= target[0]) {\n return Direction.left;\n } else {\n return Direction.right;\n }\n }\n throw new Error('can not match direction');\n}\n\nexport function getDirectionFactor(direction: Direction) {\n return handleDirectionFactors[direction];\n}\n\nexport function getDirectionFactorByDirectionComponent(directionComponent: number): DirectionFactor {\n const directionFactor = directionComponent === 0 ? directionComponent : directionComponent / Math.abs(directionComponent);\n return directionFactor as DirectionFactor;\n}\n","// Credits to xyflow\n// https://github.com/xyflow/xyflow/blob/main/packages/system/src/utils/edges/smoothstep-edge.ts\n\nimport { Direction, Point } from \"@plait/core\";\nimport { getDirectionFactor } from \"./direction\";\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n const sourceDirectionFactors = getDirectionFactor(sourcePosition);\n const targetDFs = getDirectionFactor(targetPosition);\n const sourceGapped: Point = [source[0] + sourceDirectionFactors.x * offset, source[1] + sourceDirectionFactors.y * offset];\n const targetGapped: Point = [target[0] + targetDFs.x * offset, target[1] + targetDFs.y * offset];\n const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n sourceX: source[0],\n sourceY: source[1],\n targetX: target[0],\n targetY: target[1]\n });\n // opposite handle positions, default case\n if (sourceDirectionFactors[dirAccessor] * targetDFs[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n [centerX, sourceGapped[1]],\n [centerX, targetGapped[1]]\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n [sourceGapped[0], centerY],\n [targetGapped[0], centerY]\n ];\n if (sourceDirectionFactors[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDirectionFactors.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDirectionFactors.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like right -> bottom for example\n let flipSourceTarget;\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n const isSameDir = sourceDirectionFactors[dirAccessor] === targetDFs[dirAccessor === 'x' ? 'y' : 'x'];\n const sourceGtTarget = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTarget = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n flipSourceTarget =\n (sourceDirectionFactors[dirAccessor] === 1 && ((!isSameDir && sourceGtTarget) || (isSameDir && sourceLtTarget))) ||\n (sourceDirectionFactors[dirAccessor] !== 1 && ((!isSameDir && sourceLtTarget) || (isSameDir && sourceGtTarget)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n return [source, sourceGapped, ...points, targetGapped, target];\n};\n\nconst getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nfunction getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY\n}: {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n}): [number, number, number, number] {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}","import { hotkeys } from '@plait/core';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n return event.code === 'Space';\n};\n\nexport const isDelete = (event: KeyboardEvent) => {\n return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);\n};\n","import { PlaitBoard } from '@plait/core';\n\nexport enum BoardCreationMode {\n 'dnd' = 'dnd',\n 'drawing' = 'drawing'\n}\n\nconst BOARD_TO_CREATION_MODE: WeakMap<PlaitBoard, BoardCreationMode> = new WeakMap();\n\nexport const getCreationMode = (board: PlaitBoard) => {\n return BOARD_TO_CREATION_MODE.get(board);\n};\n\nexport const setCreationMode = (board: PlaitBoard, mode: BoardCreationMode) => {\n BOARD_TO_CREATION_MODE.set(board, mode);\n};\n\nexport const isDndMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.dnd;\n};\n\nexport const isDrawingMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.drawing;\n};\n","import { PlaitElement } from '@plait/core';\nimport { CommonPluginElement } from '../core/plugin-element';\nimport { CustomText, PlaitMarkEditor } from '@plait/text';\nimport { Node } from 'slate';\n\nexport const getTextManages = (element: PlaitElement) => {\n const component = PlaitElement.getComponent(element) as CommonPluginElement;\n return component.getTextManages();\n};\n\nexport const getFirstTextManage = (element: PlaitElement) => {\n const textManage = getTextManages(element)[0];\n if (!textManage) {\n throw new Error('can not find textManage');\n }\n return textManage;\n};\n\nexport const getTextEditors = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.componentRef.instance.editor;\n });\n};\n\nexport const getFirstTextEditor = (element: PlaitElement) => {\n const textEditor = getTextEditors(element)[0];\n if (!textEditor) {\n throw new Error('can not find textEditor');\n }\n return textEditor;\n};\n\nexport const getTextMarksByElement = (element: PlaitElement) => {\n const editors = getTextEditors(element);\n const editor = editors[0];\n if (!editor) {\n return {};\n }\n if (editor.children.length === 0) {\n const textManage = getTextManages(element)[0];\n const currentMarks: Omit<CustomText, 'text'> = PlaitMarkEditor.getMarksByElement(textManage.componentRef.instance.children[0]);\n return currentMarks;\n }\n const currentMarks: Omit<CustomText, 'text'> = PlaitMarkEditor.getMarks(editor);\n return currentMarks;\n};\n\nexport const getElementsText = (elements: PlaitElement[]) => {\n return elements\n .map(item => {\n try {\n const editors = getTextEditors(item);\n if (editors.length) {\n return editors\n .map(editor => {\n const textsEntry = Node.texts(editor);\n return Array.from(textsEntry).reduce((total, text) => (total += text[0].text), '');\n })\n .join(' ');\n }\n return '';\n } catch (error) {\n return '';\n }\n })\n .filter(item => item)\n .join(' ');\n};\n","import { ComponentType, PlaitBoard, PlaitContextService, PlaitElement } from '@plait/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\n}\n\nexport interface WithCommonPluginOptions {\n imageComponentType?: ComponentType<ImageBaseComponent>;\n}\n\nexport const selectImage = (\n board: PlaitBoard,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void,\n acceptImageTypes: string[] = ['png', 'jpeg', 'gif', 'bmp']\n) => {\n const inputFile = document.createElement('input');\n inputFile.setAttribute('type', 'file');\n const acceptImageTypesString = '.' + acceptImageTypes.join(',.');\n inputFile.setAttribute('accept', acceptImageTypesString);\n inputFile.onchange = (event: Event) => {\n buildImage(board, (event.target as any).files[0], defaultImageWidth, handle);\n };\n inputFile.click();\n};\n\nexport const buildImage = async (\n board: PlaitBoard,\n imageFile: File,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void\n) => {\n let width = 0,\n height = 0;\n await getImageSize(imageFile, defaultImageWidth).then((value: { width: number; height: number }) => {\n width = value.width;\n height = value.height;\n });\n\n let imageItem = null;\n const url = URL.createObjectURL(imageFile);\n const context = PlaitBoard.getComponent(board).viewContainerRef.injector.get(PlaitContextService);\n context.setUploadingFile({ url, file: imageFile });\n\n imageItem = {\n url,\n width,\n height\n };\n handle(imageItem);\n};\n\nfunction getImageSize(file: File, defaultImageWidth: number): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.src = URL.createObjectURL(file);\n\n image.onload = function() {\n const width = defaultImageWidth;\n const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;\n resolve(\n image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight }\n );\n };\n });\n}\n\nconst BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap<PlaitBoard, PlaitElement>();\n\nexport const getElementOfFocusedImage = (board: PlaitBoard) => {\n return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);\n};\n\nexport const addElementOfFocusedImage = (board: PlaitBoard, element: PlaitElement) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);\n};\n\nexport const removeElementOfFocusedImage = (board: PlaitBoard) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);\n};","import { PointNode } from './graph';\n\nexport class PriorityQueue {\n list: { node: PointNode; priority: number }[];\n\n constructor() {\n this.list = [];\n }\n\n enqueue(item: { node: PointNode; priority: number }) {\n this.list.push(item);\n this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);\n }\n\n dequeue() {\n return this.list.shift();\n }\n}\n","import { Point } from '@plait/core';\nimport { PointGraph, PointNode } from './data-structures/graph';\nimport { PriorityQueue } from './data-structures/priority-queue';\n\nexport class AStar {\n cameFrom: Map<PointNode, PointNode>;\n\n constructor(private graph: PointGraph) {\n this.cameFrom = new Map<PointNode, PointNode>();\n }\n\n heuristic(a: Point, b: Point) {\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n }\n\n search(start: Point, end: Point, previousStart: Point) {\n const frontier = new PriorityQueue();\n const startNode = this.graph.get(start);\n this.cameFrom = new Map<PointNode, PointNode>();\n const costSoFar = new Map<PointNode, number>();\n costSoFar.set(startNode!, 0);\n frontier.enqueue({ node: startNode!, priority: 0 });\n while (frontier.list.length > 0) {\n var current = frontier.dequeue();\n\n if (!current) {\n throw new Error(`can't find current`);\n }\n const currentPoint = current!.node.data;\n if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {\n break;\n }\n current.node.adjacentNodes.forEach(next => {\n let newCost = costSoFar.get(current!.node)! + this.heuristic(next.data, current!.node.data);\n const previousNode = this.cameFrom.get(current!.node);\n // Inflection point weight, if an inflection point occurs, cost + 1 to avoid the inflection point path\n // Three points on a line to determine whether there is an inflection point\n const previousPoint = previousNode ? previousNode.data : previousStart;\n const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];\n const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];\n if (!x && !y) {\n newCost = newCost + 1;\n }\n if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next)!)) {\n costSoFar.set(next, newCost);\n const priority = newCost + this.heuristic(next.data, end);\n frontier.enqueue({ node: next, priority });\n this.cameFrom.set(next, current!.node);\n }\n });\n }\n }\n\n getRoute(start: Point, end: Point) {\n const result = [];\n let temp = end;\n while (temp[0] !== start[0] || temp[1] !== start[1]) {\n const node = this.graph.get(temp);\n const preNode = this.cameFrom.get(node!);\n result.unshift(preNode!.data);\n temp = preNode!.data;\n }\n return result;\n }\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\n\nexport class PointNode {\n public distance = Number.MAX_SAFE_INTEGER;\n public adjacentNodes: PointNode[] = [];\n constructor(public data: Point) {}\n}\n\nexport class PointGraph {\n private index: { [x: string]: { [y: string]: PointNode } } = {};\n\n add(p: Point) {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (!(xs in this.index)) {\n this.index[xs] = {};\n }\n if (!(ys in this.index[xs])) {\n this.index[xs][ys] = new PointNode(p);\n }\n }\n connect(a: Point, b: Point) {\n const nodeA = this.get(a);\n const nodeB = this.get(b);\n\n if (!nodeA || !nodeB) {\n throw new Error(`A point was not found`);\n }\n\n nodeA.adjacentNodes.push(nodeB);\n }\n\n has(p: Point): boolean {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n return xs in this.index && ys in this.index[xs];\n }\n\n get(p: Point): PointNode | null {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (xs in this.index && ys in this.index[xs]) {\n return this.index[xs][ys];\n }\n\n return null;\n }\n}\n","import { Direction, Point, RectangleClient } from '@plait/core';\nimport { removeDuplicatePoints, simplifyOrthogonalPoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nexport interface ElbowLineRouteOptions {\n sourcePoint: Point;\n nextSourcePoint: Point;\n sourceRectangle: RectangleClient;\n sourceOuterRectangle: RectangleClient;\n targetPoint: Point;\n nextTargetPoint: Point;\n targetOuterRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface RouteAdjustOptions {\n centerX?: number;\n centerY?: number;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface AdjustOptions {\n parallelPaths: [Point, Point][];\n pointOfHit: Point;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport const generateElbowLineRoute = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint } = options;\n const points = getGraphPoints(options);\n const graph = createGraph(points);\n const aStar = new AStar(graph);\n aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);\n let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);\n route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];\n // Centerline correction: Correct the shortest path route based on the horizontal centerline/vertical centerline\n // 1. Find the horizontal center line (centerX)/vertical center line (centerY)\n // 2. Find the point that intersects centerX/centerY in route, and find the line segment parallel to centerX/centerY in route\n // 3. Construct a rectangle based on the intersection points and parallel lines found in the previous step.\n // 4. Determine whether the rectangle intersects with the element. If it does not intersect, the center line can be mapped based on the rectangle constructed in the previous step.\n // 5. Determine whether the path after mapping the center line meets the constraints (inflection point cannot be increased)\n const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);\n const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);\n const centerX = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);\n const centerY = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);\n route = routeAdjust(route, { centerX, centerY, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle });\n return route;\n};\n\nexport const routeAdjust = (path: Point[], options: RouteAdjustOptions) => {\n const { sourceRectangle, targetRectangle, centerX, centerY } = options;\n if (centerX !== undefined) {\n const optionsX = getAdjustOptions(path, centerX, true);\n const resultX =\n optionsX.pointOfHit &&\n adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle });\n if (resultX) {\n path = resultX;\n }\n }\n if (centerY !== undefined) {\n const optionsY = getAdjustOptions(path, centerY, false);\n const resultY =\n optionsY.pointOfHit &&\n adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle });\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions): null | Point[] => {\n const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;\n let result = null;\n parallelPaths.forEach(parallelPath => {\n // Construct a rectangle\n const tempRectPoints = [pointOfHit, parallelPath[0], parallelPath[1]];\n // directly use getCornerPoints will bring the precision issue (eg: 263.6923375175286 - 57.130859375)\n const tempRect = RectangleClient.getRectangleByPoints(tempRectPoints);\n if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {\n const tempCorners = RectangleClient.getCornerPoints(tempRect);\n const indexRangeInPath: number[] = [];\n const indexRangeInCorner: number[] = [];\n route.forEach((point, index) => {\n const cornerResult = tempCorners.findIndex(corner => Point.isEquals(point, corner));\n if (cornerResult !== -1) {\n indexRangeInPath.push(index);\n indexRangeInCorner.push(cornerResult);\n }\n });\n const newPath = [...route];\n const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index)) as Point;\n const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;\n newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);\n const turnCount = simplifyOrthogonalPoints([...route]).length - 1;\n const newTurnCount = simplifyOrthogonalPoints([...newPath]).length - 1;\n if (newTurnCount <= turnCount) {\n result = newPath;\n }\n }\n return null;\n });\n return result;\n};\n\nconst getAdjustOptions = (path: Point[], centerOfAxis: number, isHorizontal: boolean) => {\n const parallelPaths: [Point, Point][] = [];\n let start: null | Point = null;\n let pointOfHit: null | Point = null;\n const axis = isHorizontal ? 0 : 1;\n\n for (let index = 0; index < path.length; index++) {\n const previous = path[index - 1];\n const current = path[index];\n if (start === null && previous && previous[axis] === current[axis]) {\n start = previous;\n }\n if (start !== null) {\n if (previous[axis] !== current[axis]) {\n parallelPaths.push([start, previous]);\n start = null;\n }\n }\n if (current[axis] === centerOfAxis) {\n pointOfHit = current;\n }\n }\n if (start) {\n parallelPaths.push([start, path[path.length - 1]]);\n }\n return { pointOfHit, parallelPaths };\n};\n\nexport const getGraphPoints = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;\n const x: number[] = [];\n const y: number[] = [];\n let result: Point[] = [];\n\n [sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {\n x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);\n y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);\n });\n const rectanglesX = [\n sourceOuterRectangle.x,\n sourceOuterRectangle.x + sourceOuterRectangle.width,\n targetOuterRectangle.x,\n targetOuterRectangle.x + targetOuterRectangle.width\n ].sort((a, b) => a - b);\n x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);\n const rectanglesY = [\n sourceOuterRectangle.y,\n sourceOuterRectangle.y + sourceOuterRectangle.height,\n targetOuterRectangle.y,\n targetOuterRectangle.y + targetOuterRectangle.height\n ].sort((a, b) => a - b);\n y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n const point: Point = [x[i], y[j]];\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n if (!isInSource && !isInTarget) {\n result.push(point);\n }\n }\n }\n result = removeDuplicatePoints(result).filter(point => {\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n return !isInSource && !isInTarget;\n });\n return result;\n};\n\nexport const createGraph = (points: Point[]) => {\n const graph = new PointGraph();\n const Xs: number[] = [];\n const Ys: number[] = [];\n points.forEach(p => {\n const x = p[0],\n y = p[1];\n if (Xs.indexOf(x) < 0) Xs.push(x);\n if (Ys.indexOf(y) < 0) Ys.push(y);\n graph.add(p);\n });\n Xs.sort((a, b) => a - b);\n Ys.sort((a, b) => a - b);\n const inHotIndex = (p: Point): boolean => graph.has(p);\n for (let i = 0; i < Xs.length; i++) {\n for (let j = 0; j < Ys.length; j++) {\n const point: Point = [Xs[i], Ys[j]];\n if (!inHotIndex(point)) continue;\n if (i > 0) {\n const otherPoint: Point = [Xs[i - 1], Ys[j]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n if (j > 0) {\n const otherPoint: Point = [Xs[i], Ys[j - 1]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n }\n }\n return graph;\n};\n\nexport const reduceRouteMargin = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const defaultOffset = DEFAULT_ROUTE_MARGIN;\n let sourceOffset: number[] = new Array(4).fill(defaultOffset);\n let targetOffset: number[] = new Array(4).fill(defaultOffset);\n const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);\n const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);\n if (leftToRight > 0 && leftToRight < defaultOffset * 2) {\n const offset = leftToRight / 2;\n sourceOffset[3] = offset;\n targetOffset[1] = offset;\n }\n\n if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {\n const offset = rightToLeft / 2;\n targetOffset[3] = offset;\n sourceOffset[1] = offset;\n }\n\n const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);\n const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);\n if (topToBottom > 0 && topToBottom < defaultOffset * 2) {\n const offset = topToBottom / 2;\n sourceOffset[0] = offset;\n targetOffset[2] = offset;\n }\n if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {\n const offset = bottomToTop / 2;\n sourceOffset[2] = offset;\n targetOffset[0] = offset;\n }\n return { sourceOffset, targetOffset };\n};\n\nexport const getNextPoint = (point: Point, outerRectangle: RectangleClient, direction: Direction): Point => {\n switch (direction) {\n case Direction.top: {\n return [point[0], outerRectangle.y];\n }\n case Direction.bottom: {\n return [point[0], outerRectangle.y + outerRectangle.height];\n }\n case Direction.right: {\n return [outerRectangle.x + outerRectangle.width, point[1]];\n }\n default: {\n return [outerRectangle.x, point[1]];\n }\n }\n};\n\nexport const getSourceAndTargetOuterRectangle = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\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 return {\n sourceOuterRectangle,\n targetOuterRectangle\n };\n};\n\nexport const isSourceAndTargetIntersect = (options: ElbowLineRouteOptions) => {\n const {\n sourcePoint,\n nextSourcePoint,\n sourceRectangle,\n sourceOuterRectangle,\n targetPoint,\n nextTargetPoint,\n targetRectangle,\n targetOuterRectangle\n } = options;\n\n return (\n RectangleClient.isPointInRectangle(targetRectangle, sourcePoint) ||\n RectangleClient.isPointInRectangle(targetOuterRectangle, nextSourcePoint) ||\n RectangleClient.isPointInRectangle(sourceOuterRectangle, nextTargetPoint) ||\n RectangleClient.isPointInRectangle(sourceRectangle, targetPoint)\n );\n};\n","import { PlaitElement } from '@plait/core';\n\nconst map = new Map<string, any>();\n\nexport const memorizeLatest = <T extends PlaitElement = PlaitElement>(\n memorizedKey: string,\n propertyKey: keyof T,\n propertyValue: T[keyof T]\n) => {\n let obj = map.has(memorizedKey) ? map.get(memorizedKey) : {};\n obj[propertyKey] = propertyValue;\n map.set(memorizedKey, obj);\n};\n\nexport const getMemorizedLatest = <T extends PlaitElement = PlaitElement>(memorizedKey: string): T => {\n return map.get(memorizedKey);\n};\n","import { Point, rotate } from '@plait/core';\n\nexport const rotatePoints = (points: Point[], centerPoint: Point, angle: number) => {\n return points.map(point => {\n return rotate(point[0], point[1], centerPoint[0], centerPoint[1], angle) as Point;\n });\n};\n","import { Path, PlaitBoard, PlaitElement, Transforms, getSelectedElements } from '@plait/core';\nimport { memorizeLatest } from '../utils';\n\nexport interface SetOptions<T extends PlaitElement = PlaitElement> {\n callback?: (element: T, path: Path) => void;\n getMemorizeKey?: (element: T) => string;\n match?: (element: T) => boolean;\n}\n\nexport const setProperty = <T extends PlaitElement = PlaitElement>(board: PlaitBoard, properties: Partial<T>, options?: SetOptions<T>) => {\n const selectedElements = getSelectedElements(board) as T[];\n selectedElements.forEach(element => {\n if (options?.match && !options?.match(element)) return;\n const path = PlaitBoard.findPath(board, element);\n const memorizeKey = options?.getMemorizeKey ? options?.getMemorizeKey(element) : '';\n for (let key in properties) {\n memorizeKey && memorizeLatest(memorizeKey, key, properties[key]);\n }\n if (options?.callback) {\n options.callback(element, path);\n } else {\n Transforms.setNode(board, properties, path);\n }\n });\n};\n\nconst setStrokeStyle = (board: PlaitBoard, strokeStyle: string, options: SetOptions) => {\n setProperty(board, { strokeStyle }, options);\n};\n\nconst setFillColor = (board: PlaitBoard, fill: string, options: SetOptions) => {\n setProperty(board, { fill }, options);\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string, options: SetOptions) => {\n setProperty(board, { strokeColor }, options);\n};\n\nconst setStrokeWidth = (board: PlaitBoard, strokeWidth: number, options: SetOptions) => {\n setProperty(board, { strokeWidth }, options);\n};\n\nexport const PropertyTransforms = {\n setFillColor,\n setStrokeStyle,\n setProperty,\n setStrokeWidth,\n setStrokeColor\n};\n","import { C, MERGING, PlaitBoard, Point, RectangleClient, Transforms, getRectangleByElements, getSelectedElements } from '@plait/core';\n\nexport const alignTop = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y - rectangle.y] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignBottom = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y + outerRectangle.height - (rectangle.y + rectangle.height)] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignLeft = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x - rectangle.x, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignHorizontalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.x + outerRectangle.width / 2;\n const elementCenter = rectangle.x + rectangle.width / 2;\n return [outerCenter - elementCenter, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignVerticalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.y + outerRectangle.height / 2;\n const elementCenter = rectangle.y + rectangle.height / 2;\n return [0, outerCenter - elementCenter] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignRight = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x + outerRectangle.width - (rectangle.x + rectangle.width), 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nfunction setOffset(board: PlaitBoard, getOffset: (outerRectangle: RectangleClient, rectangle: RectangleClient) => Point) {\n let elements = getSelectedElements(board);\n elements = elements.filter(element => board.children.includes(element));\n const outerRectangle = getRectangleByElements(board, elements, false);\n elements.forEach(element => {\n if (!element.points) return;\n const path = PlaitBoard.findPath(board, element);\n const rectangle = board.getRectangle(element)!;\n const offset = getOffset(outerRectangle, rectangle);\n const newPoints = element.points.map(p => [p[0] + offset[0], p[1] + offset[1]]) as Point[];\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n path\n );\n MERGING.set(board, true);\n });\n MERGING.set(board, false);\n}\n\nexport const distributeHorizontal = (board: PlaitBoard) => {\n distribute(board, true);\n};\n\nexport const distributeVertical = (board: PlaitBoard) => {\n distribute(board, false);\n};\n\nconst distribute = (board: PlaitBoard, isHorizontal: boolean) => {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n const selectedElements = getSelectedElements(board).filter(element => board.children.includes(element));\n const refs = selectedElements.map(element => {\n return { element, rectangle: board.getRectangle(element)! };\n });\n const outerRectangle = getRectangleByElements(board, selectedElements, false);\n const minRectangleRef = refs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis])[0];\n const maxRectangleRef = refs.sort((a, b) => b.rectangle[axis] + b.rectangle[side] - (a.rectangle[axis] + a.rectangle[side]))[0];\n const minIndex = refs.findIndex(ref => ref === minRectangleRef);\n const maxIndex = refs.findIndex(ref => ref === maxRectangleRef);\n let distributeRefs = refs.filter((element, index) => index !== minIndex && index !== maxIndex);\n const sum = distributeRefs.reduce((accumulator, current) => current.rectangle[side] + accumulator, 0);\n const offset =\n (outerRectangle[side] - minRectangleRef.rectangle[side] - maxRectangleRef.rectangle[side] - sum) / (distributeRefs.length + 1);\n distributeRefs = distributeRefs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis]);\n let position = minRectangleRef.rectangle[axis] + minRectangleRef.rectangle[side] + offset;\n for (let i = 0; i < distributeRefs.length; i++) {\n const rectangle = distributeRefs[i].rectangle;\n const moveOffset = [0, 0];\n const moveAxis = isHorizontal ? 0 : 1;\n moveOffset[moveAxis] = position - rectangle[axis];\n const path = PlaitBoard.findPath(board, distributeRefs[i].element);\n const newPoints = distributeRefs[i].element.points!.map(p => [p[0] + moveOffset[0], p[1] + moveOffset[1]]) as Point[];\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n path\n );\n MERGING.set(board, true);\n position = position + rectangle[side] + offset;\n }\n MERGING.set(board, false);\n};\n\nexport interface AlignTransform {\n alignTop: (board: PlaitBoard) => void;\n alignHorizontalCenter: (board: PlaitBoard) => void;\n alignBottom: (board: PlaitBoard) => void;\n alignLeft: (board: PlaitBoard) => void;\n alignVerticalCenter: (board: PlaitBoard) => void;\n alignRight: (board: PlaitBoard) => void;\n distributeHorizontal: (board: PlaitBoard) => void;\n distributeVertical: (board: PlaitBoard) => void;\n}\n\nexport const AlignTransform: AlignTransform = {\n alignTop,\n alignHorizontalCenter,\n alignBottom,\n alignLeft,\n alignVerticalCenter,\n alignRight,\n distributeHorizontal,\n distributeVertical\n};\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { AlignEditor, Alignment, FontSizes, MarkTypes, PlaitMarkEditor } from '@plait/text';\nimport { BaseRange, Editor, Transforms as SlateTransforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { getTextEditors } from '../utils/text';\n\nconst setTextMarks = (board: PlaitBoard, mark: MarkTypes) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements.length) {\n const firstEditor = getTextEditors(selectedElements[0])[0];\n const activeMarks = PlaitMarkEditor.getMarks(firstEditor);\n const elements = selectedElements.filter(element => {\n const editors = getTextEditors(element);\n return editors.some(editor => {\n const elementMarks = PlaitMarkEditor.getMarks(editor);\n return elementMarks[mark] === activeMarks[mark];\n });\n });\n\n elements.forEach(element => {\n const editors = getTextEditors(element);\n editors.forEach(editor => PlaitMarkEditor.toggleMark(editor, mark));\n });\n }\n};\n\nconst setFontSize = (board: PlaitBoard, size: FontSizes, defaultFontSize: number | ((element: PlaitElement) => number | undefined)) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements.length) {\n selectedElements.forEach(element => {\n const editors = getTextEditors(element);\n const finalDefaultFontSize = typeof defaultFontSize === 'function' ? defaultFontSize(element) : defaultFontSize;\n editors.forEach(editor => PlaitMarkEditor.setFontSizeMark(editor, size, finalDefaultFontSize));\n });\n }\n};\n\nconst setTextColor = (board: PlaitBoard, color: string, textSelection?: BaseRange) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements?.length) {\n selectedElements.forEach(element => {\n const editors = getTextEditors(element);\n editors.forEach(editor => {\n if (textSelection) {\n SlateTransforms.select(editor, textSelection);\n }\n if (color === 'transparent') {\n Editor.removeMark(editor, MarkTypes.color);\n } else {\n PlaitMarkEditor.setColorMark(editor, color);\n }\n });\n });\n }\n};\n\nconst setTextAlign = (board: PlaitBoard, align: Alignment) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements?.length) {\n selectedElements.forEach(element => {\n const editors = getTextEditors(element);\n editors.forEach(editor => AlignEditor.setAlign(editor as AngularEditor, align));\n });\n }\n};\n\nexport const TextTransforms = { setTextAlign, setTextColor, setFontSize, setTextMarks };\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point], shift: boolean = false): [Point, Point] => {\n let start = points[0];\n let end = points[1];\n if (shift) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n const edge = Math.max(height, width);\n end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];\n }\n\n const leftTopPoint: Point = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];\n let rightBottomPoint: Point = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];\n\n return [leftTopPoint, rightBottomPoint];\n};\n","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n PlaitBoard,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n handleTouchTarget,\n throttleRAF,\n toViewBoxPoint,\n toHostPoint,\n isDragging\n} from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { addResizing, isResizing, removeResizing } from '../utils/resize';\nimport { PlaitElementOrArray, ResizeHitTestRef, ResizeRef, WithResizeOptions } from '../types/resize';\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n !PlaitBoard.isReadonly(board) && !PlaitBoard.hasBeenTextEditing(board) && PlaitBoard.isPointer(board, PlaitPointerType.selection)\n );\n};\n\nexport const withResize = <T extends PlaitElementOrArray = PlaitElementOrArray, K = ResizeHandle>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K>\n) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeHitTestRef: ResizeHitTestRef<T, K> | null = null;\n let resizeRef: ResizeRef<T, K> | null = null;\n let startPoint: Point | null = null;\n let hoverHitTestRef: ResizeHitTestRef<T, K> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event) || !isMainPointer(event)) {\n pointerDown(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n resizeHitTestRef = options.hitTest(point);\n if (resizeHitTestRef) {\n if (resizeHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeHitTestRef.cursorClass}`);\n }\n startPoint = [event.x, event.y];\n const path = Array.isArray(resizeHitTestRef.element)\n ? resizeHitTestRef.element.map(el => PlaitBoard.findPath(board, el))\n : PlaitBoard.findPath(board, resizeHitTestRef.element);\n resizeRef = {\n path,\n element: resizeHitTestRef.element,\n handle: resizeHitTestRef.handle,\n handleIndex: resizeHitTestRef.handleIndex,\n rectangle: resizeHitTestRef.rectangle\n };\n preventTouchMove(board, event, true);\n // prevent text from being selected when user pressed shift and pointer down\n event.preventDefault();\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerMove(event);\n return;\n }\n if (startPoint && resizeHitTestRef && !isResizing(board)) {\n // prevent text from being selected\n event.preventDefault();\n const endPoint = [event.x, event.y];\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, resizeRef!, options.key);\n MERGING.set(board, true);\n options.beforeResize && options.beforeResize(resizeRef!);\n }\n }\n if (!isResizing(board) && !isDragging(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n throttleRAF(board, options.key + '-common-resize-hit-test', () => {\n const hitTestRef = options.hitTest(point);\n if (hitTestRef) {\n if (hoverHitTestRef && hitTestRef.cursorClass !== hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n }\n hoverHitTestRef = hitTestRef;\n if (hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${hoverHitTestRef.cursorClass}`);\n }\n } else {\n if (hoverHitTestRef) {\n if (hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n }\n hoverHitTestRef = null;\n }\n }\n });\n } else {\n if (startPoint && isResizing(board)) {\n event.preventDefault();\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n throttleRAF(board, 'with-common-resize', () => {\n if (startPoint && resizeRef) {\n handleTouchTarget(board);\n options.onResize(resizeRef, {\n startPoint: toViewBoxPoint(board, toHostPoint(board, startPoint[0], startPoint[1])),\n endPoint,\n isShift: !!event.shiftKey\n });\n }\n });\n return;\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeHitTestRef) {\n options.afterResize && options.afterResize(resizeRef!);\n removeResizing(board, options.key);\n startPoint = null;\n resizeHitTestRef = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, event, false);\n }\n };\n\n return board;\n};\n","import { PlaitBoard, PlaitElement, PlaitPluginElementComponent } from '@plait/core';\nimport { TextManage } from '@plait/text';\n\nexport abstract class CommonPluginElement<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard\n> extends PlaitPluginElementComponent<T, K> {\n private textManages: TextManage[] = [];\n\n initializeTextManages(textManages: TextManage[]) {\n this.textManages = textManages;\n }\n\n addTextManage(textManage: TextManage) {\n this.textManages.push(textManage);\n }\n\n destroyTextManages() {\n this.getTextManages().forEach(manage => {\n manage.destroy();\n });\n this.textManages = [];\n }\n\n getTextManages() {\n return this.textManages;\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ACTIVE_STROKE_WIDTH, PlaitBoard, PlaitElement, RectangleClient, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { ActiveGenerator } from '../generators';\nimport { CommonImageItem } from '../utils';\n\n@Directive({\n host: {\n class: 'plait-image-container'\n }\n})\nexport abstract class ImageBaseComponent implements OnInit, OnDestroy {\n _imageItem!: CommonImageItem;\n\n _isFocus!: boolean;\n\n initialized = false;\n\n activeGenerator!: ActiveGenerator;\n\n @Input()\n element!: PlaitElement;\n\n @Input()\n set imageItem(value: CommonImageItem) {\n this.afterImageItemChange(this._imageItem, value);\n this._imageItem = value;\n this.drawFocus();\n }\n\n get imageItem() {\n return this._imageItem;\n }\n\n @Input()\n board!: PlaitBoard;\n\n @Input()\n set isFocus(value: boolean) {\n this._isFocus = value;\n this.drawFocus();\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n abstract afterImageItemChange(previous: CommonImageItem, current: CommonImageItem): void;\n\n @Input() getRectangle!: () => RectangleClient;\n\n @Input() hasResizeHandle!: () => boolean;\n\n constructor(protected elementRef: ElementRef<HTMLElement>, public cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.activeGenerator = new ActiveGenerator(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)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.getRectangle();\n },\n hasResizeHandle: () => {\n const selectedElements = getSelectedElements(this.board);\n return (selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length;\n }\n });\n this.initialized = true;\n }\n\n drawFocus() {\n if (this.initialized) {\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.processDrawing({} as PlaitElement, activeG, { selected: this._isFocus });\n }\n }\n\n ngOnDestroy(): void {\n if (this.activeGenerator) {\n this.activeGenerator.destroy();\n }\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generators';\nexport * from './transforms';\nexport * from './shapes';\nexport * from './plugins';\nexport * from './utils';\nexport * from './core/plugin-element';\nexport * from './core/image-base.component';\nexport * from './algorithms'\nexport * from './types/resize';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["SlateTransforms"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/utils/drawing/resize-handle.ts","../../../packages/common/src/generators/active.generator.ts","../../../packages/common/src/generators/image.generator.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/utils/vector.ts","../../../packages/common/src/utils/math.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/direction.ts","../../../packages/common/src/utils/default-orthogonal-routing.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/utils/creation-mode.ts","../../../packages/common/src/utils/text.ts","../../../packages/common/src/utils/image.ts","../../../packages/common/src/algorithms/data-structures/priority-queue.ts","../../../packages/common/src/algorithms/a-star.ts","../../../packages/common/src/algorithms/data-structures/graph.ts","../../../packages/common/src/utils/elbow-line-route.ts","../../../packages/common/src/utils/memorize.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/transforms/align.ts","../../../packages/common/src/transforms/text.ts","../../../packages/common/src/shapes/common.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/generators/group.generator.ts","../../../packages/common/src/core/plugin-element.ts","../../../packages/common/src/core/group.component.ts","../../../packages/common/src/plugins/with-group.ts","../../../packages/common/src/core/image-base.component.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/plait-common.ts"],"sourcesContent":["export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const RESIZE_HANDLE_DIAMETER = 9;\nexport const WithTextPluginKey = 'plait-text-plugin-key';\nexport const DEFAULT_ROUTE_MARGIN = 30;\nexport const TRANSPARENT = 'transparent';\n","export enum MediaKeys {\n image = 'image'\n}\n\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\n\nexport const acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp'];\n\nexport const WithCommonPluginKey = 'plait-common-plugin-key';\n","export enum ResizeHandle {\n nw = '0',\n n = '4',\n ne = '1',\n e = '5',\n se = '2',\n s = '6',\n sw = '3',\n w = '7'\n}\n","import { PlaitBoard, PlaitElement, RectangleClient, setAngleForG } from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {\n prepend?: boolean;\n}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions\n> {\n g?: SVGGElement;\n\n protected options?: V;\n\n constructor(protected board: PlaitBoard, options?: V) {\n this.options = options;\n }\n\n processDrawing(element: T, parentG: SVGGElement, data?: K) {\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.draw(element, data);\n if (g) {\n if (this.g && parentG.contains(this.g)) {\n this.g.replaceWith(g);\n } else {\n if (this.options?.prepend) {\n parentG.prepend(g);\n } else {\n parentG.appendChild(g);\n }\n }\n this.g = g;\n const rect = this.board.getRectangle(element);\n if (rect && element.angle) {\n setAngleForG(g, RectangleClient.getCenterPoint(rect), element.angle);\n }\n } else {\n this.destroy();\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n } else {\n this.destroy();\n }\n }\n\n /**\n * abstract function\n */\n protected abstract canDraw(element: T, data?: K): boolean;\n\n /**\n * abstract function\n */\n protected abstract draw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n this.g = undefined;\n }\n }\n}\n\nexport interface AfterDraw<T extends PlaitElement = PlaitElement> {\n afterDraw(element: T): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, Point, drawCircle } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../../constants/default';\n\nexport const drawHandle = (board: PlaitBoard, centerPoint: Point) => {\n const options: Options = { stroke: '#99999995', strokeWidth: 2, fill: '#FFF', fillStyle: 'solid' };\n return drawCircle(PlaitBoard.getRoughSVG(board), centerPoint, RESIZE_HANDLE_DIAMETER, options);\n};\n\nexport function drawFillPrimaryHandle(board: PlaitBoard, point: Point) {\n return drawCircle(PlaitBoard.getRoughSVG(board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: '#FFFFFF',\n strokeWidth: 1,\n fill: `${PRIMARY_COLOR}`,\n fillStyle: 'solid'\n });\n}\n\nexport function drawPrimaryHandle(board: PlaitBoard, point: Point) {\n return drawCircle(PlaitBoard.getRoughSVG(board), point, RESIZE_HANDLE_DIAMETER, {\n stroke: `${PRIMARY_COLOR}`,\n strokeWidth: 2,\n fill: `#FFFFFF`,\n fillStyle: 'solid'\n });\n}","import { PlaitBoard, PlaitElement, RectangleClient, createG, drawRectangle } from '@plait/core';\nimport { Generator, GeneratorOptions } from './generator';\nimport { PRIMARY_COLOR } from '../constants/default';\nimport { drawHandle } from '../utils/drawing';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T> & GeneratorOptions\n> {\n hasResizeHandle = false;\n\n constructor(public board: PlaitBoard, public options: ActiveGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ActiveGeneratorExtraData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n const rectangle = this.options.getRectangle(element);\n\n const delta = this.options.getStrokeWidth();\n const activeRectangle = RectangleClient.inflate(rectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: delta\n });\n\n activeG.append(strokeG);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // draw resize handle\n RectangleClient.getCornerPoints(activeRectangle).forEach(corner => {\n const cornerHandleG = drawHandle(this.board, corner);\n activeG.append(cornerHandleG);\n });\n } else {\n this.hasResizeHandle = false;\n }\n return activeG;\n }\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitOptionsBoard,\n RectangleClient,\n createForeignObject,\n createG,\n setAngleForG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator, GeneratorOptions } from './generator';\nimport { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\nimport { CommonImageItem, WithCommonPluginOptions } from '../utils';\nimport { WithCommonPluginKey } from '../constants';\nexport interface ShapeData {\n viewContainerRef: ViewContainerRef;\n}\n\nexport interface ImageGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getImageItem: (element: T) => CommonImageItem;\n}\n\nexport class ImageGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ViewContainerRef,\n ImageGeneratorOptions<T> & GeneratorOptions\n> {\n foreignObject!: SVGForeignObjectElement;\n\n componentRef!: ComponentRef<ImageBaseComponent>;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ViewContainerRef): boolean {\n return !!this.options.getImageItem(element);\n }\n\n draw(element: T, viewContainerRef: ViewContainerRef): SVGGElement {\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n g.append(this.foreignObject);\n const componentType = (this.board as PlaitOptionsBoard).getPluginOptions<WithCommonPluginOptions>(WithCommonPluginKey)\n .imageComponentType;\n if (!componentType) {\n throw new Error('Not implement ImageBaseComponent error.');\n }\n this.componentRef = viewContainerRef.createComponent(componentType);\n this.componentRef.instance.board = this.board;\n\n this.componentRef.instance.imageItem = this.options.getImageItem(element);\n this.componentRef.instance.element = element;\n this.componentRef.instance.getRectangle = () => {\n return this.options.getRectangle(element);\n };\n this.componentRef.instance.cdr.markForCheck();\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n if (previous !== current && this.componentRef) {\n this.componentRef.instance.imageItem = this.options.getImageItem(current);\n this.componentRef.instance.element = current;\n this.componentRef!.instance.getRectangle = () => {\n return this.options.getRectangle(current);\n };\n }\n const currentForeignObject = this.options.getRectangle(current);\n updateForeignObject(\n this.g!,\n currentForeignObject.width,\n currentForeignObject.height,\n currentForeignObject.x,\n currentForeignObject.y\n );\n if (currentForeignObject && current.angle) {\n setAngleForG(this.g!, RectangleClient.getCenterPoint(currentForeignObject), current.angle);\n }\n // solve image lose on move node\n if (this.foreignObject.children.length === 0) {\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n }\n this.componentRef?.instance.cdr.markForCheck();\n }\n\n destroy(): void {\n super.destroy();\n this.componentRef?.destroy();\n }\n}\n","import { PlaitBoard, Point, RectangleClient, ResizeCursorClass, setDragging, RESIZE_CURSORS, rotatePoints } from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { PlaitElementOrArray, ResizeRef } from '../types/resize';\n\nexport const getResizeHandleByIndex = (index: number) => {\n return `${index}` as ResizeHandle;\n};\n\nexport const getIndexByResizeHandle = (resizeHandle: ResizeHandle) => {\n return Number(resizeHandle);\n};\n\nexport const getSymmetricHandleIndex = (board: PlaitBoard, index: number) => {\n const originIndex = isEdgeHandle(board, getResizeHandleByIndex(index)) ? index - 4 : index;\n let originSymmetricHandleIndex = originIndex + 2;\n if (originSymmetricHandleIndex >= 4) {\n originSymmetricHandleIndex = originSymmetricHandleIndex - 4;\n }\n return isEdgeHandle(board, getResizeHandleByIndex(index)) ? originSymmetricHandleIndex + 4 : originSymmetricHandleIndex;\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n case 2:\n return ResizeCursorClass.nwse;\n case 1:\n case 3:\n return ResizeCursorClass.nesw;\n case 4:\n case 6:\n return ResizeCursorClass.ns;\n case 5:\n case 7:\n return ResizeCursorClass.ew;\n default:\n return null;\n }\n};\n\nexport const getRotatedResizeCursorClassByAngle = (cursor: ResizeCursorClass, angle: number) => {\n const index = RESIZE_CURSORS.indexOf(cursor);\n if (index >= 0) {\n const temp = Math.round(angle / (Math.PI / 4));\n cursor = RESIZE_CURSORS[(index + temp) % RESIZE_CURSORS.length] as ResizeCursorClass;\n }\n return cursor;\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number, angle: number = 0) => {\n const corners = RectangleClient.getCornerPoints(rectangle);\n const refs = corners.map((corner, index: number) => {\n return {\n rectangle: {\n x: corner[0] - diameter / 2,\n y: corner[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n handle: getResizeHandleByIndex(index) as ResizeHandle,\n cursorClass: getRotatedResizeCursorClassByAngle(getResizeCursorClassByIndex(index) as ResizeCursorClass, angle)\n };\n });\n const rectangles = getResizeSideRectangles(corners, diameter / 2);\n refs.push(\n ...rectangles.map((rectangle, index) => {\n return {\n rectangle,\n handle: getResizeHandleByIndex(index + 4) as ResizeHandle,\n cursorClass: getRotatedResizeCursorClassByAngle(getResizeCursorClassByIndex(index + 4) as ResizeCursorClass, angle)\n };\n })\n );\n return refs;\n};\n\nexport const getResizeHandlePointByIndex = (rectangle: RectangleClient, index: number) => {\n if (index <= 3) {\n const corners = RectangleClient.getCornerPoints(rectangle);\n return corners[index];\n } else {\n const edgeCenterPoints = RectangleClient.getEdgeCenterPoints(rectangle);\n return edgeCenterPoints[index - 4];\n }\n};\n\nconst getResizeSideRectangles = (cornerPoints: Point[], offset: number): RectangleClient[] => {\n const result = [];\n for (let i = 0; i < cornerPoints.length; i++) {\n let rectangle = RectangleClient.getRectangleByPoints([cornerPoints[i], cornerPoints[(i + 1) % 4]]);\n const arr = new Array(2).fill(0);\n arr[(i + 1) % 2] = offset / 2;\n rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);\n result.push(rectangle);\n }\n return result;\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, ResizeRef<any, any>>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const isResizingByCondition = <T extends PlaitElementOrArray, K>(\n board: PlaitBoard,\n match: (resizeRef: ResizeRef<T, K>) => boolean\n) => {\n return isResizing(board) && match(IS_RESIZING.get(board)!);\n};\n\nexport const addResizing = <T extends PlaitElementOrArray, K>(board: PlaitBoard, resizeRef: ResizeRef<T, K>, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, resizeRef);\n setDragging(board, true);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.delete(board);\n setDragging(board, false);\n};\n\nexport const isEdgeHandle = (board: PlaitBoard, handle: ResizeHandle) => {\n const index = getIndexByResizeHandle(handle);\n if (index >= 4) {\n return true;\n } else {\n return false;\n }\n};\n\nexport const isCornerHandle = (board: PlaitBoard, handle: ResizeHandle) => {\n return !isEdgeHandle(board, handle);\n};\n\n// 处理元素先旋转后resize导致的位置偏移\nexport const resetPointsAfterResize = (\n originRectangle: RectangleClient,\n currentRectangle: RectangleClient,\n originSelectionCenterPoint: Point,\n currentSelectionCenterPoint: Point,\n angle: number\n): [Point, Point] => {\n const correctSelectionCenterPoint = rotatePoints([currentSelectionCenterPoint], originSelectionCenterPoint, angle)[0];\n const rotatedElementCenterPoint = rotatePoints(\n [RectangleClient.getCenterPoint(currentRectangle) as Point],\n originSelectionCenterPoint,\n angle\n )[0];\n\n const currentPoints = RectangleClient.getPoints(currentRectangle);\n const originRectangleCenterPoint = RectangleClient.getCenterPoint(originRectangle);\n\n const correctElementCenterPoint = rotatePoints([rotatedElementCenterPoint], correctSelectionCenterPoint, -angle)[0];\n\n const rotatedPoints = rotatePoints(currentPoints, originRectangleCenterPoint, angle);\n return rotatePoints(rotatedPoints, correctElementCenterPoint, -angle) as [Point, Point];\n};\n","import { Point, Vector } from '@plait/core';\n\nexport function getUnitVectorByPointAndPoint(point1: Point, point2: Point): Point {\n const deltaX = point2[0] - point1[0];\n const deltaY = point2[1] - point1[1];\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n // Avoid division by zero if the points are the same\n if (distance === 0) {\n throw new Error('Points must not be the same for a unit vector calculation.');\n }\n // Calculate the unit vector components\n const unitX = deltaX / distance;\n const unitY = deltaY / distance;\n\n return [unitX, unitY];\n}\n\nexport function getPointByVectorComponent(point: Point, vector: Vector, component: number): Point {\n const distance = Math.hypot(vector[0], vector[1]);\n return [point[0] + (vector[0] / distance) * component, point[1] + (vector[1] / distance) * component];\n}\n\nexport function getPointByVectorDirectionComponent(point: Point, unitVector: Vector, directionComponent: number, isHorizontal: boolean) {\n if (isHorizontal) {\n return [point[0] + directionComponent, point[1] + (directionComponent / unitVector[0]) * unitVector[1]] as Point;\n } else {\n return [point[0] + (directionComponent / unitVector[1]) * unitVector[0], point[1] + directionComponent] as Point;\n }\n}\n\nexport function rotateVectorAnti90(vector: Vector): Vector {\n const x = vector[0];\n const y = vector[1];\n const rotatedX = y;\n const rotatedY = -x;\n return [rotatedX, rotatedY];\n}\n\nexport function rotateVector(vector: Vector, angle: number): Vector {\n if (!angle) {\n return vector;\n }\n const x = vector[0];\n const y = vector[1];\n const rotatedX = x * Math.cos(angle) - y * Math.sin(angle);\n const rotatedY = x * Math.sin(angle) + y * Math.cos(angle);\n return [rotatedX, rotatedY];\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { getPointByVectorDirectionComponent, getUnitVectorByPointAndPoint } from './vector';\n\nexport function isPointOnSegment(point: Point, startPoint: Point, endPoint: Point) {\n const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);\n const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;\n}\n\nexport const getCrossingPointsBetweenPointAndSegment = (point: Point, startPoint: Point, endPoint: Point) => {\n const result: Point[] = [];\n const xRange = [Math.min(startPoint[0], endPoint[0]), Math.max(startPoint[0], endPoint[0])];\n const yRange = [Math.min(startPoint[1], endPoint[1]), Math.max(startPoint[1], endPoint[1])];\n const unitVector = getUnitVectorByPointAndPoint(startPoint, endPoint);\n if (point[0] >= xRange[0] && point[0] <= xRange[1]) {\n const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[0] - startPoint[0], true) as Point;\n result.push(crossingPoint);\n } else if (point[1] >= yRange[0] && point[1] <= yRange[1]) {\n const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[1] - startPoint[1], false) as Point;\n result.push(crossingPoint);\n }\n return result;\n};\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { isPointOnSegment } from './math';\n\nexport function getPointOnPolyline(points: Point[], ratio: number) {\n const totalLength = calculatePolylineLength(points);\n const targetDistance = totalLength * ratio;\n\n let accumulatedDistance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);\n\n if (accumulatedDistance + segmentLength >= targetDistance) {\n const remainingDistance = targetDistance - accumulatedDistance;\n const ratioInSegment = remainingDistance / segmentLength;\n\n const targetX = x1 + (x2 - x1) * ratioInSegment;\n const targetY = y1 + (y2 - y1) * ratioInSegment;\n return [targetX, targetY];\n }\n\n accumulatedDistance += segmentLength;\n }\n\n return points[points.length - 1];\n}\n\nexport function calculatePolylineLength(points: Point[]) {\n let length = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n length += distanceBetweenPointAndPoint(x1, y1, x2, y2);\n }\n return length;\n}\n\nexport function getRatioByPoint(points: Point[], point: Point) {\n const totalLength = calculatePolylineLength(points);\n let distance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const isOverlap = isPointOnSegment(point, points[i], points[i + 1]);\n if (isOverlap) {\n distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);\n return distance / totalLength;\n } else {\n distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);\n }\n }\n throw new Error('Cannot get ratio by point');\n}\n\nexport const removeDuplicatePoints = (points: Point[]) => {\n const newArray: Point[] = [];\n points.forEach(point => {\n const index = newArray.findIndex(otherPoint => {\n return Point.isEquals(point, otherPoint);\n });\n if (index === -1) newArray.push(point);\n });\n return newArray;\n};\n\nexport function simplifyOrthogonalPoints(points: Point[]) {\n if (points.length <= 2) return points;\n let simplifiedPoints: Point[] = [points[0]];\n for (let i = 1; i < points.length - 1; i++) {\n const previous = points[i - 1];\n const current = points[i];\n const next = points[i + 1];\n const isTurn = !(Point.isOverHorizontal([previous, current, next]) || Point.isOverVertical([previous, current, next]));\n if (isTurn) {\n simplifiedPoints.push(current);\n }\n }\n simplifiedPoints.push(points[points.length - 1]);\n return simplifiedPoints;\n}\n\nexport const getExtendPoint = (source: Point, target: Point, extendDistance: number): Point => {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n const isEqual = Point.isEquals(source, target);\n const sin = isEqual ? 1 : (target[1] - source[1]) / distance;\n const cos = isEqual ? 1 : (target[0] - source[0]) / distance;\n return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];\n};\n","import { Direction, DirectionFactor, Point, PointOfRectangle, Vector } from '@plait/core';\n\nconst handleDirectionFactors = {\n [Direction.left]: { x: -1, y: 0 },\n [Direction.right]: { x: 1, y: 0 },\n [Direction.top]: { x: 0, y: -1 },\n [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getOppositeDirection(direction: Direction) {\n switch (direction) {\n case Direction.left:\n return Direction.right;\n case Direction.right:\n return Direction.left;\n case Direction.top:\n return Direction.bottom;\n case Direction.bottom:\n return Direction.top;\n }\n}\n\nexport function getDirectionByPointOfRectangle(point: PointOfRectangle): Direction | undefined {\n if (point[0] === 0) {\n return Direction.left;\n }\n if (point[0] === 1) {\n return Direction.right;\n }\n if (point[1] === 0) {\n return Direction.top;\n }\n if (point[1] === 1) {\n return Direction.bottom;\n }\n return undefined;\n}\n\n/**\n * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system\n * vector[0] and vector[1] are the x and y components of the vector respectively.\n * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.\n * if the vector has two directions, the function will return the string in which direction it is closer.\n */\nexport function getDirectionByVector(vector: Vector): Direction | null {\n const x = vector[0];\n const y = vector[1];\n if (x === 0 && y === 0) {\n return null;\n }\n if (x === 0) {\n return y > 0 ? Direction.bottom : Direction.top;\n }\n if (y === 0) {\n return x > 0 ? Direction.right : Direction.left;\n }\n const angle = Math.atan2(y, x);\n if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {\n return Direction.right;\n } else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {\n return Direction.bottom;\n } else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {\n return Direction.top;\n } else {\n return Direction.left;\n }\n}\n\nexport function getDirectionBetweenPointAndPoint(source: Point, target: Point) {\n if (source[0] === target[0]) {\n if (source[1] >= target[1]) {\n return Direction.top;\n } else {\n return Direction.bottom;\n }\n }\n if (source[1] === target[1]) {\n if (source[0] >= target[0]) {\n return Direction.left;\n } else {\n return Direction.right;\n }\n }\n throw new Error('can not match direction');\n}\n\nexport function getDirectionFactor(direction: Direction) {\n return handleDirectionFactors[direction];\n}\n\nexport function getDirectionFactorByDirectionComponent(directionComponent: number): DirectionFactor {\n const directionFactor = directionComponent === 0 ? directionComponent : directionComponent / Math.abs(directionComponent);\n return directionFactor as DirectionFactor;\n}\n","// Credits to xyflow\n// https://github.com/xyflow/xyflow/blob/main/packages/system/src/utils/edges/smoothstep-edge.ts\n\nimport { Direction, Point } from \"@plait/core\";\nimport { getDirectionFactor } from \"./direction\";\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n const sourceDirectionFactors = getDirectionFactor(sourcePosition);\n const targetDFs = getDirectionFactor(targetPosition);\n const sourceGapped: Point = [source[0] + sourceDirectionFactors.x * offset, source[1] + sourceDirectionFactors.y * offset];\n const targetGapped: Point = [target[0] + targetDFs.x * offset, target[1] + targetDFs.y * offset];\n const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n sourceX: source[0],\n sourceY: source[1],\n targetX: target[0],\n targetY: target[1]\n });\n // opposite handle positions, default case\n if (sourceDirectionFactors[dirAccessor] * targetDFs[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n [centerX, sourceGapped[1]],\n [centerX, targetGapped[1]]\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n [sourceGapped[0], centerY],\n [targetGapped[0], centerY]\n ];\n if (sourceDirectionFactors[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDirectionFactors.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDirectionFactors.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like right -> bottom for example\n let flipSourceTarget;\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n const isSameDir = sourceDirectionFactors[dirAccessor] === targetDFs[dirAccessor === 'x' ? 'y' : 'x'];\n const sourceGtTarget = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTarget = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n flipSourceTarget =\n (sourceDirectionFactors[dirAccessor] === 1 && ((!isSameDir && sourceGtTarget) || (isSameDir && sourceLtTarget))) ||\n (sourceDirectionFactors[dirAccessor] !== 1 && ((!isSameDir && sourceLtTarget) || (isSameDir && sourceGtTarget)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n return [source, sourceGapped, ...points, targetGapped, target];\n};\n\nconst getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nfunction getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY\n}: {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n}): [number, number, number, number] {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}","import { hotkeys } from '@plait/core';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n return event.code === 'Space';\n};\n\nexport const isDelete = (event: KeyboardEvent) => {\n return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);\n};\n","import { PlaitBoard } from '@plait/core';\n\nexport enum BoardCreationMode {\n 'dnd' = 'dnd',\n 'drawing' = 'drawing'\n}\n\nconst BOARD_TO_CREATION_MODE: WeakMap<PlaitBoard, BoardCreationMode> = new WeakMap();\n\nexport const getCreationMode = (board: PlaitBoard) => {\n return BOARD_TO_CREATION_MODE.get(board);\n};\n\nexport const setCreationMode = (board: PlaitBoard, mode: BoardCreationMode) => {\n BOARD_TO_CREATION_MODE.set(board, mode);\n};\n\nexport const isDndMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.dnd;\n};\n\nexport const isDrawingMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.drawing;\n};\n","import { PlaitElement } from '@plait/core';\nimport { CommonPluginElement } from '../core/plugin-element';\nimport { CustomText, PlaitMarkEditor } from '@plait/text';\nimport { Node } from 'slate';\n\nexport const getTextManages = (element: PlaitElement) => {\n const component = PlaitElement.getComponent(element) as CommonPluginElement;\n return component.getTextManages();\n};\n\nexport const getFirstTextManage = (element: PlaitElement) => {\n const textManage = getTextManages(element)[0];\n if (!textManage) {\n throw new Error('can not find textManage');\n }\n return textManage;\n};\n\nexport const getTextEditors = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.componentRef.instance.editor;\n });\n};\n\nexport const getFirstTextEditor = (element: PlaitElement) => {\n const textEditor = getTextEditors(element)[0];\n if (!textEditor) {\n throw new Error('can not find textEditor');\n }\n return textEditor;\n};\n\nexport const getTextMarksByElement = (element: PlaitElement) => {\n const editors = getTextEditors(element);\n const editor = editors[0];\n if (!editor) {\n return {};\n }\n if (editor.children.length === 0) {\n const textManage = getTextManages(element)[0];\n const currentMarks: Omit<CustomText, 'text'> = PlaitMarkEditor.getMarksByElement(textManage.componentRef.instance.children[0]);\n return currentMarks;\n }\n const currentMarks: Omit<CustomText, 'text'> = PlaitMarkEditor.getMarks(editor);\n return currentMarks;\n};\n\nexport const getElementsText = (elements: PlaitElement[]) => {\n return elements\n .map(item => {\n try {\n const editors = getTextEditors(item);\n if (editors.length) {\n return editors\n .map(editor => {\n const textsEntry = Node.texts(editor);\n return Array.from(textsEntry).reduce((total, text) => (total += text[0].text), '');\n })\n .join(' ');\n }\n return '';\n } catch (error) {\n return '';\n }\n })\n .filter(item => item)\n .join(' ');\n};\n","import { ComponentType, PlaitBoard, PlaitContextService, PlaitElement } from '@plait/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\n}\n\nexport interface WithCommonPluginOptions {\n imageComponentType?: ComponentType<ImageBaseComponent>;\n}\n\nexport const selectImage = (\n board: PlaitBoard,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void,\n acceptImageTypes: string[] = ['png', 'jpeg', 'gif', 'bmp']\n) => {\n const inputFile = document.createElement('input');\n inputFile.setAttribute('type', 'file');\n const acceptImageTypesString = '.' + acceptImageTypes.join(',.');\n inputFile.setAttribute('accept', acceptImageTypesString);\n inputFile.onchange = (event: Event) => {\n buildImage(board, (event.target as any).files[0], defaultImageWidth, handle);\n };\n inputFile.click();\n};\n\nexport const buildImage = async (\n board: PlaitBoard,\n imageFile: File,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void\n) => {\n let width = 0,\n height = 0;\n await getImageSize(imageFile, defaultImageWidth).then((value: { width: number; height: number }) => {\n width = value.width;\n height = value.height;\n });\n\n let imageItem = null;\n const url = URL.createObjectURL(imageFile);\n const context = PlaitBoard.getComponent(board).viewContainerRef.injector.get(PlaitContextService);\n context.setUploadingFile({ url, file: imageFile });\n\n imageItem = {\n url,\n width,\n height\n };\n handle(imageItem);\n};\n\nfunction getImageSize(file: File, defaultImageWidth: number): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.src = URL.createObjectURL(file);\n\n image.onload = function() {\n const width = defaultImageWidth;\n const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;\n resolve(\n image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight }\n );\n };\n });\n}\n\nconst BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap<PlaitBoard, PlaitElement>();\n\nexport const getElementOfFocusedImage = (board: PlaitBoard) => {\n return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);\n};\n\nexport const addElementOfFocusedImage = (board: PlaitBoard, element: PlaitElement) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);\n};\n\nexport const removeElementOfFocusedImage = (board: PlaitBoard) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);\n};","import { PointNode } from './graph';\n\nexport class PriorityQueue {\n list: { node: PointNode; priority: number }[];\n\n constructor() {\n this.list = [];\n }\n\n enqueue(item: { node: PointNode; priority: number }) {\n this.list.push(item);\n this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);\n }\n\n dequeue() {\n return this.list.shift();\n }\n}\n","import { Point } from '@plait/core';\nimport { PointGraph, PointNode } from './data-structures/graph';\nimport { PriorityQueue } from './data-structures/priority-queue';\n\nexport class AStar {\n cameFrom: Map<PointNode, PointNode>;\n\n constructor(private graph: PointGraph) {\n this.cameFrom = new Map<PointNode, PointNode>();\n }\n\n heuristic(a: Point, b: Point) {\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n }\n\n search(start: Point, end: Point, previousStart: Point) {\n const frontier = new PriorityQueue();\n const startNode = this.graph.get(start);\n this.cameFrom = new Map<PointNode, PointNode>();\n const costSoFar = new Map<PointNode, number>();\n costSoFar.set(startNode!, 0);\n frontier.enqueue({ node: startNode!, priority: 0 });\n while (frontier.list.length > 0) {\n var current = frontier.dequeue();\n\n if (!current) {\n throw new Error(`can't find current`);\n }\n const currentPoint = current!.node.data;\n if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {\n break;\n }\n current.node.adjacentNodes.forEach(next => {\n let newCost = costSoFar.get(current!.node)! + this.heuristic(next.data, current!.node.data);\n const previousNode = this.cameFrom.get(current!.node);\n // Inflection point weight, if an inflection point occurs, cost + 1 to avoid the inflection point path\n // Three points on a line to determine whether there is an inflection point\n const previousPoint = previousNode ? previousNode.data : previousStart;\n const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];\n const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];\n if (!x && !y) {\n newCost = newCost + 1;\n }\n if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next)!)) {\n costSoFar.set(next, newCost);\n const priority = newCost + this.heuristic(next.data, end);\n frontier.enqueue({ node: next, priority });\n this.cameFrom.set(next, current!.node);\n }\n });\n }\n }\n\n getRoute(start: Point, end: Point) {\n const result = [];\n let temp = end;\n while (temp[0] !== start[0] || temp[1] !== start[1]) {\n const node = this.graph.get(temp);\n const preNode = this.cameFrom.get(node!);\n result.unshift(preNode!.data);\n temp = preNode!.data;\n }\n return result;\n }\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\n\nexport class PointNode {\n public distance = Number.MAX_SAFE_INTEGER;\n public adjacentNodes: PointNode[] = [];\n constructor(public data: Point) {}\n}\n\nexport class PointGraph {\n private index: { [x: string]: { [y: string]: PointNode } } = {};\n\n add(p: Point) {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (!(xs in this.index)) {\n this.index[xs] = {};\n }\n if (!(ys in this.index[xs])) {\n this.index[xs][ys] = new PointNode(p);\n }\n }\n connect(a: Point, b: Point) {\n const nodeA = this.get(a);\n const nodeB = this.get(b);\n\n if (!nodeA || !nodeB) {\n throw new Error(`A point was not found`);\n }\n\n nodeA.adjacentNodes.push(nodeB);\n }\n\n has(p: Point): boolean {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n return xs in this.index && ys in this.index[xs];\n }\n\n get(p: Point): PointNode | null {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (xs in this.index && ys in this.index[xs]) {\n return this.index[xs][ys];\n }\n\n return null;\n }\n}\n","import { Direction, Point, RectangleClient } from '@plait/core';\nimport { removeDuplicatePoints, simplifyOrthogonalPoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nexport interface ElbowLineRouteOptions {\n sourcePoint: Point;\n nextSourcePoint: Point;\n sourceRectangle: RectangleClient;\n sourceOuterRectangle: RectangleClient;\n targetPoint: Point;\n nextTargetPoint: Point;\n targetOuterRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface RouteAdjustOptions {\n centerX?: number;\n centerY?: number;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface AdjustOptions {\n parallelPaths: [Point, Point][];\n pointOfHit: Point;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport const generateElbowLineRoute = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint } = options;\n const points = getGraphPoints(options);\n const graph = createGraph(points);\n const aStar = new AStar(graph);\n aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);\n let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);\n route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];\n // Centerline correction: Correct the shortest path route based on the horizontal centerline/vertical centerline\n // 1. Find the horizontal center line (centerX)/vertical center line (centerY)\n // 2. Find the point that intersects centerX/centerY in route, and find the line segment parallel to centerX/centerY in route\n // 3. Construct a rectangle based on the intersection points and parallel lines found in the previous step.\n // 4. Determine whether the rectangle intersects with the element. If it does not intersect, the center line can be mapped based on the rectangle constructed in the previous step.\n // 5. Determine whether the path after mapping the center line meets the constraints (inflection point cannot be increased)\n const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);\n const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);\n const centerX = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);\n const centerY = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);\n route = routeAdjust(route, { centerX, centerY, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle });\n return route;\n};\n\nexport const routeAdjust = (path: Point[], options: RouteAdjustOptions) => {\n const { sourceRectangle, targetRectangle, centerX, centerY } = options;\n if (centerX !== undefined) {\n const optionsX = getAdjustOptions(path, centerX, true);\n const resultX =\n optionsX.pointOfHit &&\n adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle });\n if (resultX) {\n path = resultX;\n }\n }\n if (centerY !== undefined) {\n const optionsY = getAdjustOptions(path, centerY, false);\n const resultY =\n optionsY.pointOfHit &&\n adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle });\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions): null | Point[] => {\n const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;\n let result = null;\n parallelPaths.forEach(parallelPath => {\n // Construct a rectangle\n const tempRectPoints = [pointOfHit, parallelPath[0], parallelPath[1]];\n // directly use getCornerPoints will bring the precision issue (eg: 263.6923375175286 - 57.130859375)\n const tempRect = RectangleClient.getRectangleByPoints(tempRectPoints);\n if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {\n const tempCorners = RectangleClient.getCornerPoints(tempRect);\n const indexRangeInPath: number[] = [];\n const indexRangeInCorner: number[] = [];\n route.forEach((point, index) => {\n const cornerResult = tempCorners.findIndex(corner => Point.isEquals(point, corner));\n if (cornerResult !== -1) {\n indexRangeInPath.push(index);\n indexRangeInCorner.push(cornerResult);\n }\n });\n const newPath = [...route];\n const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index)) as Point;\n const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;\n newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);\n const turnCount = simplifyOrthogonalPoints([...route]).length - 1;\n const newTurnCount = simplifyOrthogonalPoints([...newPath]).length - 1;\n if (newTurnCount <= turnCount) {\n result = newPath;\n }\n }\n return null;\n });\n return result;\n};\n\nconst getAdjustOptions = (path: Point[], centerOfAxis: number, isHorizontal: boolean) => {\n const parallelPaths: [Point, Point][] = [];\n let start: null | Point = null;\n let pointOfHit: null | Point = null;\n const axis = isHorizontal ? 0 : 1;\n\n for (let index = 0; index < path.length; index++) {\n const previous = path[index - 1];\n const current = path[index];\n if (start === null && previous && previous[axis] === current[axis]) {\n start = previous;\n }\n if (start !== null) {\n if (previous[axis] !== current[axis]) {\n parallelPaths.push([start, previous]);\n start = null;\n }\n }\n if (current[axis] === centerOfAxis) {\n pointOfHit = current;\n }\n }\n if (start) {\n parallelPaths.push([start, path[path.length - 1]]);\n }\n return { pointOfHit, parallelPaths };\n};\n\nexport const getGraphPoints = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;\n const x: number[] = [];\n const y: number[] = [];\n let result: Point[] = [];\n\n [sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {\n x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);\n y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);\n });\n const rectanglesX = [\n sourceOuterRectangle.x,\n sourceOuterRectangle.x + sourceOuterRectangle.width,\n targetOuterRectangle.x,\n targetOuterRectangle.x + targetOuterRectangle.width\n ].sort((a, b) => a - b);\n x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);\n const rectanglesY = [\n sourceOuterRectangle.y,\n sourceOuterRectangle.y + sourceOuterRectangle.height,\n targetOuterRectangle.y,\n targetOuterRectangle.y + targetOuterRectangle.height\n ].sort((a, b) => a - b);\n y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n const point: Point = [x[i], y[j]];\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n if (!isInSource && !isInTarget) {\n result.push(point);\n }\n }\n }\n result = removeDuplicatePoints(result).filter(point => {\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n return !isInSource && !isInTarget;\n });\n return result;\n};\n\nexport const createGraph = (points: Point[]) => {\n const graph = new PointGraph();\n const Xs: number[] = [];\n const Ys: number[] = [];\n points.forEach(p => {\n const x = p[0],\n y = p[1];\n if (Xs.indexOf(x) < 0) Xs.push(x);\n if (Ys.indexOf(y) < 0) Ys.push(y);\n graph.add(p);\n });\n Xs.sort((a, b) => a - b);\n Ys.sort((a, b) => a - b);\n const inHotIndex = (p: Point): boolean => graph.has(p);\n for (let i = 0; i < Xs.length; i++) {\n for (let j = 0; j < Ys.length; j++) {\n const point: Point = [Xs[i], Ys[j]];\n if (!inHotIndex(point)) continue;\n if (i > 0) {\n const otherPoint: Point = [Xs[i - 1], Ys[j]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n if (j > 0) {\n const otherPoint: Point = [Xs[i], Ys[j - 1]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n }\n }\n return graph;\n};\n\nexport const reduceRouteMargin = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const defaultOffset = DEFAULT_ROUTE_MARGIN;\n let sourceOffset: number[] = new Array(4).fill(defaultOffset);\n let targetOffset: number[] = new Array(4).fill(defaultOffset);\n const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);\n const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);\n if (leftToRight > 0 && leftToRight < defaultOffset * 2) {\n const offset = leftToRight / 2;\n sourceOffset[3] = offset;\n targetOffset[1] = offset;\n }\n\n if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {\n const offset = rightToLeft / 2;\n targetOffset[3] = offset;\n sourceOffset[1] = offset;\n }\n\n const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);\n const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);\n if (topToBottom > 0 && topToBottom < defaultOffset * 2) {\n const offset = topToBottom / 2;\n sourceOffset[0] = offset;\n targetOffset[2] = offset;\n }\n if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {\n const offset = bottomToTop / 2;\n sourceOffset[2] = offset;\n targetOffset[0] = offset;\n }\n return { sourceOffset, targetOffset };\n};\n\nexport const getNextPoint = (point: Point, outerRectangle: RectangleClient, direction: Direction): Point => {\n switch (direction) {\n case Direction.top: {\n return [point[0], outerRectangle.y];\n }\n case Direction.bottom: {\n return [point[0], outerRectangle.y + outerRectangle.height];\n }\n case Direction.right: {\n return [outerRectangle.x + outerRectangle.width, point[1]];\n }\n default: {\n return [outerRectangle.x, point[1]];\n }\n }\n};\n\nexport const getSourceAndTargetOuterRectangle = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\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 return {\n sourceOuterRectangle,\n targetOuterRectangle\n };\n};\n\nexport const isSourceAndTargetIntersect = (options: ElbowLineRouteOptions) => {\n const {\n sourcePoint,\n nextSourcePoint,\n sourceRectangle,\n sourceOuterRectangle,\n targetPoint,\n nextTargetPoint,\n targetRectangle,\n targetOuterRectangle\n } = options;\n\n return (\n RectangleClient.isPointInRectangle(targetRectangle, sourcePoint) ||\n RectangleClient.isPointInRectangle(targetOuterRectangle, nextSourcePoint) ||\n RectangleClient.isPointInRectangle(sourceOuterRectangle, nextTargetPoint) ||\n RectangleClient.isPointInRectangle(sourceRectangle, targetPoint)\n );\n};\n","import { PlaitElement } from '@plait/core';\n\nconst map = new Map<string, any>();\n\nexport const memorizeLatest = <T extends PlaitElement = PlaitElement>(\n memorizedKey: string,\n propertyKey: keyof T,\n propertyValue: T[keyof T]\n) => {\n let obj = map.has(memorizedKey) ? map.get(memorizedKey) : {};\n obj[propertyKey] = propertyValue;\n map.set(memorizedKey, obj);\n};\n\nexport const getMemorizedLatest = <T extends PlaitElement = PlaitElement>(memorizedKey: string): T => {\n return map.get(memorizedKey);\n};\n","import { Path, PlaitBoard, PlaitElement, Transforms, getSelectedElements } from '@plait/core';\nimport { memorizeLatest } from '../utils';\n\nexport interface SetOptions<T extends PlaitElement = PlaitElement> {\n callback?: (element: T, path: Path) => void;\n getMemorizeKey?: (element: T) => string;\n match?: (element: T) => boolean;\n}\n\nexport const setProperty = <T extends PlaitElement = PlaitElement>(board: PlaitBoard, properties: Partial<T>, options?: SetOptions<T>) => {\n const selectedElements = getSelectedElements(board) as T[];\n selectedElements.forEach(element => {\n if (options?.match && !options?.match(element)) return;\n const path = PlaitBoard.findPath(board, element);\n const memorizeKey = options?.getMemorizeKey ? options?.getMemorizeKey(element) : '';\n for (let key in properties) {\n memorizeKey && memorizeLatest(memorizeKey, key, properties[key]);\n }\n if (options?.callback) {\n options.callback(element, path);\n } else {\n Transforms.setNode(board, properties, path);\n }\n });\n};\n\nconst setStrokeStyle = (board: PlaitBoard, strokeStyle: string, options: SetOptions) => {\n setProperty(board, { strokeStyle }, options);\n};\n\nconst setFillColor = (board: PlaitBoard, fill: string, options: SetOptions) => {\n setProperty(board, { fill }, options);\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string, options: SetOptions) => {\n setProperty(board, { strokeColor }, options);\n};\n\nconst setStrokeWidth = (board: PlaitBoard, strokeWidth: number, options: SetOptions) => {\n setProperty(board, { strokeWidth }, options);\n};\n\nexport const PropertyTransforms = {\n setFillColor,\n setStrokeStyle,\n setProperty,\n setStrokeWidth,\n setStrokeColor\n};\n","import {\n MERGING,\n PlaitBoard,\n PlaitElement,\n PlaitGroupElement,\n Point,\n RectangleClient,\n Transforms,\n getElementsInGroup,\n getHighestSelectedElements,\n getRectangleByElements\n} from '@plait/core';\n\nexport const alignTop = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y - rectangle.y] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignBottom = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y + outerRectangle.height - (rectangle.y + rectangle.height)] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignLeft = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x - rectangle.x, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignHorizontalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.x + outerRectangle.width / 2;\n const elementCenter = rectangle.x + rectangle.width / 2;\n return [outerCenter - elementCenter, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignVerticalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.y + outerRectangle.height / 2;\n const elementCenter = rectangle.y + rectangle.height / 2;\n return [0, outerCenter - elementCenter] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignRight = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x + outerRectangle.width - (rectangle.x + rectangle.width), 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nfunction setOffset(board: PlaitBoard, getOffset: (outerRectangle: RectangleClient, rectangle: RectangleClient) => Point) {\n const elements = getHighestSelectedElements(board);\n const outerRectangle = getRectangleByElements(board, elements, false);\n elements.forEach(element => {\n if (!element.points && !PlaitGroupElement.isGroup(element)) return;\n const rectangle = board.getRectangle(element)!;\n const offset = getOffset(outerRectangle, rectangle);\n let updateElements: PlaitElement[] = [];\n if (PlaitGroupElement.isGroup(element)) {\n updateElements = getElementsInGroup(board, element, true, false);\n } else if (element.points) {\n updateElements = [element];\n }\n updateElements.forEach(item => {\n const newPoints = item.points!.map(p => [p[0] + offset[0], p[1] + offset[1]]) as Point[];\n const path = PlaitBoard.findPath(board, item);\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n path\n );\n });\n MERGING.set(board, true);\n });\n MERGING.set(board, false);\n}\n\nexport const distributeHorizontal = (board: PlaitBoard) => {\n distribute(board, true);\n};\n\nexport const distributeVertical = (board: PlaitBoard) => {\n distribute(board, false);\n};\n\nconst distribute = (board: PlaitBoard, isHorizontal: boolean) => {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n const highestSelectedElements = getHighestSelectedElements(board);\n const refs = highestSelectedElements.map(element => {\n return { element, rectangle: board.getRectangle(element)! };\n });\n const outerRectangle = getRectangleByElements(board, highestSelectedElements, false);\n const minRectangleRef = refs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis])[0];\n const maxRectangleRef = refs.sort((a, b) => b.rectangle[axis] + b.rectangle[side] - (a.rectangle[axis] + a.rectangle[side]))[0];\n const minIndex = refs.findIndex(ref => ref === minRectangleRef);\n const maxIndex = refs.findIndex(ref => ref === maxRectangleRef);\n let distributeRefs = refs.filter((element, index) => index !== minIndex && index !== maxIndex);\n const sum = distributeRefs.reduce((accumulator, current) => current.rectangle[side] + accumulator, 0);\n const offset =\n (outerRectangle[side] - minRectangleRef.rectangle[side] - maxRectangleRef.rectangle[side] - sum) / (distributeRefs.length + 1);\n distributeRefs = distributeRefs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis]);\n let position = minRectangleRef.rectangle[axis] + minRectangleRef.rectangle[side] + offset;\n for (let i = 0; i < distributeRefs.length; i++) {\n const rectangle = distributeRefs[i].rectangle;\n const moveOffset = [0, 0];\n const moveAxis = isHorizontal ? 0 : 1;\n moveOffset[moveAxis] = position - rectangle[axis];\n const path = PlaitBoard.findPath(board, distributeRefs[i].element);\n const newPoints = distributeRefs[i].element.points!.map(p => [p[0] + moveOffset[0], p[1] + moveOffset[1]]) as Point[];\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n path\n );\n MERGING.set(board, true);\n position = position + rectangle[side] + offset;\n }\n MERGING.set(board, false);\n};\n\nexport interface AlignTransform {\n alignTop: (board: PlaitBoard) => void;\n alignHorizontalCenter: (board: PlaitBoard) => void;\n alignBottom: (board: PlaitBoard) => void;\n alignLeft: (board: PlaitBoard) => void;\n alignVerticalCenter: (board: PlaitBoard) => void;\n alignRight: (board: PlaitBoard) => void;\n distributeHorizontal: (board: PlaitBoard) => void;\n distributeVertical: (board: PlaitBoard) => void;\n}\n\nexport const AlignTransform: AlignTransform = {\n alignTop,\n alignHorizontalCenter,\n alignBottom,\n alignLeft,\n alignVerticalCenter,\n alignRight,\n distributeHorizontal,\n distributeVertical\n};\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { AlignEditor, Alignment, FontSizes, MarkTypes, PlaitMarkEditor } from '@plait/text';\nimport { BaseRange, Editor, Transforms as SlateTransforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { getTextEditors } from '../utils/text';\n\nconst setTextMarks = (board: PlaitBoard, mark: MarkTypes) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements.length) {\n const firstEditor = getTextEditors(selectedElements[0])[0];\n const activeMarks = PlaitMarkEditor.getMarks(firstEditor);\n const elements = selectedElements.filter(element => {\n const editors = getTextEditors(element);\n return editors.some(editor => {\n const elementMarks = PlaitMarkEditor.getMarks(editor);\n return elementMarks[mark] === activeMarks[mark];\n });\n });\n\n elements.forEach(element => {\n const editors = getTextEditors(element);\n editors.forEach(editor => PlaitMarkEditor.toggleMark(editor, mark));\n });\n }\n};\n\nconst setFontSize = (board: PlaitBoard, size: FontSizes, defaultFontSize: number | ((element: PlaitElement) => number | undefined)) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements.length) {\n selectedElements.forEach(element => {\n const editors = getTextEditors(element);\n const finalDefaultFontSize = typeof defaultFontSize === 'function' ? defaultFontSize(element) : defaultFontSize;\n editors.forEach(editor => PlaitMarkEditor.setFontSizeMark(editor, size, finalDefaultFontSize));\n });\n }\n};\n\nconst setTextColor = (board: PlaitBoard, color: string, textSelection?: BaseRange) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements?.length) {\n selectedElements.forEach(element => {\n const editors = getTextEditors(element);\n editors.forEach(editor => {\n if (textSelection) {\n SlateTransforms.select(editor, textSelection);\n }\n if (color === 'transparent') {\n Editor.removeMark(editor, MarkTypes.color);\n } else {\n PlaitMarkEditor.setColorMark(editor, color);\n }\n });\n });\n }\n};\n\nconst setTextAlign = (board: PlaitBoard, align: Alignment) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements?.length) {\n selectedElements.forEach(element => {\n const editors = getTextEditors(element);\n editors.forEach(editor => AlignEditor.setAlign(editor as AngularEditor, align));\n });\n }\n};\n\nexport const TextTransforms = { setTextAlign, setTextColor, setFontSize, setTextMarks };\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point], shift: boolean = false): [Point, Point] => {\n let start = points[0];\n let end = points[1];\n if (shift) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n const edge = Math.max(height, width);\n end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];\n }\n\n const leftTopPoint: Point = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];\n let rightBottomPoint: Point = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];\n\n return [leftTopPoint, rightBottomPoint];\n};\n","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n PlaitBoard,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n handleTouchTarget,\n throttleRAF,\n toViewBoxPoint,\n toHostPoint,\n isDragging\n} from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { addResizing, isResizing, removeResizing } from '../utils/resize';\nimport { PlaitElementOrArray, ResizeHitTestRef, ResizeRef, WithResizeOptions } from '../types/resize';\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n !PlaitBoard.isReadonly(board) && !PlaitBoard.hasBeenTextEditing(board) && PlaitBoard.isPointer(board, PlaitPointerType.selection)\n );\n};\n\nexport const withResize = <T extends PlaitElementOrArray = PlaitElementOrArray, K = ResizeHandle>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K>\n) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeHitTestRef: ResizeHitTestRef<T, K> | null = null;\n let resizeRef: ResizeRef<T, K> | null = null;\n let startPoint: Point | null = null;\n let hoverHitTestRef: ResizeHitTestRef<T, K> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event) || !isMainPointer(event)) {\n pointerDown(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n resizeHitTestRef = options.hitTest(point);\n if (resizeHitTestRef) {\n if (resizeHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeHitTestRef.cursorClass}`);\n }\n startPoint = [event.x, event.y];\n const path = Array.isArray(resizeHitTestRef.element)\n ? resizeHitTestRef.element.map(el => PlaitBoard.findPath(board, el))\n : PlaitBoard.findPath(board, resizeHitTestRef.element);\n resizeRef = {\n path,\n element: resizeHitTestRef.element,\n handle: resizeHitTestRef.handle,\n handleIndex: resizeHitTestRef.handleIndex,\n rectangle: resizeHitTestRef.rectangle\n };\n preventTouchMove(board, event, true);\n // prevent text from being selected when user pressed shift and pointer down\n event.preventDefault();\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerMove(event);\n return;\n }\n if (startPoint && resizeHitTestRef && !isResizing(board)) {\n // prevent text from being selected\n event.preventDefault();\n const endPoint = [event.x, event.y];\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, resizeRef!, options.key);\n MERGING.set(board, true);\n options.beforeResize && options.beforeResize(resizeRef!);\n }\n }\n if (!isResizing(board) && !isDragging(board)) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n throttleRAF(board, options.key + '-common-resize-hit-test', () => {\n const hitTestRef = options.hitTest(point);\n if (hitTestRef) {\n if (hoverHitTestRef && hitTestRef.cursorClass !== hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n }\n hoverHitTestRef = hitTestRef;\n if (hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${hoverHitTestRef.cursorClass}`);\n }\n } else {\n if (hoverHitTestRef) {\n if (hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n }\n hoverHitTestRef = null;\n }\n }\n });\n } else {\n if (startPoint && isResizing(board)) {\n event.preventDefault();\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n throttleRAF(board, 'with-common-resize', () => {\n if (startPoint && resizeRef) {\n handleTouchTarget(board);\n options.onResize(resizeRef, {\n startPoint: toViewBoxPoint(board, toHostPoint(board, startPoint[0], startPoint[1])),\n endPoint,\n isShift: !!event.shiftKey\n });\n }\n });\n return;\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeHitTestRef) {\n options.afterResize && options.afterResize(resizeRef!);\n removeResizing(board, options.key);\n startPoint = null;\n resizeHitTestRef = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, event, false);\n }\n };\n\n return board;\n};\n","import { ACTIVE_STROKE_WIDTH, PlaitGroup, RectangleClient, drawRectangle, getRectangleByGroup } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { Generator } from './generator';\n\nexport class GroupGenerator extends Generator<PlaitGroup> {\n canDraw(element: PlaitGroup): boolean {\n return true;\n }\n\n draw(element: PlaitGroup, partialSelected: boolean) {\n const options: Options = {\n stroke: '',\n strokeWidth: ACTIVE_STROKE_WIDTH,\n strokeLineDash: [5]\n };\n let rectangle: RectangleClient = { x: 0, y: 0, width: 0, height: 0 };\n if (partialSelected) {\n options.stroke = '#999';\n rectangle = getRectangleByGroup(this.board, element, true);\n }\n return drawRectangle(this.board, rectangle, options);\n }\n}\n","import { PlaitBoard, PlaitElement, PlaitPluginElementComponent } from '@plait/core';\nimport { TextManage } from '@plait/text';\n\nexport abstract class CommonPluginElement<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard\n> extends PlaitPluginElementComponent<T, K> {\n private textManages: TextManage[] = [];\n\n initializeTextManages(textManages: TextManage[]) {\n this.textManages = textManages;\n }\n\n addTextManage(textManage: TextManage) {\n this.textManages.push(textManage);\n }\n\n destroyTextManages() {\n this.getTextManages().forEach(manage => {\n manage.destroy();\n });\n this.textManages = [];\n }\n\n getTextManages() {\n return this.textManages;\n }\n}\n","import { OnInit, OnDestroy, ViewContainerRef, ChangeDetectorRef, ChangeDetectionStrategy, Component } from '@angular/core';\nimport {\n OnContextChanged,\n PlaitBoard,\n PlaitGroup,\n PlaitPluginElementContext,\n getElementsInGroup,\n getRectangleByGroup,\n isSelectedElementOrGroup,\n isSelectionMoving\n} from '@plait/core';\nimport { GroupGenerator } from '../generators/group.generator';\nimport { ActiveGenerator } from '../generators';\nimport { CommonPluginElement } from './plugin-element';\n\n@Component({\n selector: 'plait-group',\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class GroupComponent extends CommonPluginElement<PlaitGroup, PlaitBoard>\n implements OnInit, OnDestroy, OnContextChanged<PlaitGroup, PlaitBoard> {\n constructor(private viewContainerRef: ViewContainerRef, protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n activeGenerator!: ActiveGenerator<PlaitGroup>;\n\n groupGenerator!: GroupGenerator;\n\n initializeGenerator() {\n this.activeGenerator = new ActiveGenerator<PlaitGroup>(this.board, {\n getRectangle: (element: PlaitGroup) => {\n return getRectangleByGroup(this.board, element);\n },\n getStrokeWidth: () => 0,\n getStrokeOpacity: () => 0,\n hasResizeHandle: () => {\n return !isSelectionMoving(this.board);\n }\n });\n this.groupGenerator = new GroupGenerator(this.board);\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.initializeGenerator();\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitGroup, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitGroup, PlaitBoard>\n ) {\n const elementsInGroup = getElementsInGroup(this.board, value.element, false, true);\n const isPartialSelectGroup =\n elementsInGroup.some(item => isSelectedElementOrGroup(this.board, item)) &&\n !elementsInGroup.every(item => isSelectedElementOrGroup(this.board, item));\n this.groupGenerator.processDrawing(value.element, this.g, isPartialSelectGroup);\n }\n}\n","import {\n PlaitBoard,\n PlaitPluginElementContext,\n PlaitGroupElement,\n toViewBoxPoint,\n toHostPoint,\n getHitElementsBySelection,\n createGroupRectangleG,\n ClipboardData,\n getHighestSelectedGroups,\n getSelectedIsolatedElements,\n PlaitElement,\n PlaitGroup,\n getSelectedGroups,\n Selection,\n Point,\n Transforms,\n idCreator,\n getGroupByElement,\n getSelectedIsolatedElementsCanAddToGroup,\n getElementsInGroup,\n getRectangleByGroup,\n GroupTransforms\n} from '@plait/core';\nimport { GroupComponent } from '../core/group.component';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function withGroup(board: PlaitBoard) {\n let groupRectangleG: SVGGElement | null;\n let removeGroups: PlaitGroup[] | null;\n\n const {\n drawElement,\n pointerMove,\n globalPointerUp,\n insertFragment,\n getDeletedFragment,\n deleteFragment,\n getRelatedFragment,\n getRectangle,\n keyDown\n } = board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitGroupElement.isGroup(context.element)) {\n return GroupComponent;\n }\n return drawElement(context);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n groupRectangleG?.remove();\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n let selection: Selection = { anchor: point, focus: point };\n if (board.selection && !Selection.isCollapsed(board.selection)) {\n selection = board.selection;\n }\n const hitElements = getHitElementsBySelection(board, selection);\n if (hitElements.length) {\n groupRectangleG = createGroupRectangleG(board, hitElements);\n groupRectangleG && PlaitBoard.getElementActiveHost(board).append(groupRectangleG);\n }\n\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n groupRectangleG?.remove();\n groupRectangleG = null;\n globalPointerUp(event);\n };\n\n board.getRelatedFragment = (elements: PlaitElement[]) => {\n const groups = getSelectedGroups(board);\n return getRelatedFragment([...elements, ...groups]);\n };\n\n board.insertFragment = (data: DataTransfer | null, clipboardData: ClipboardData | null, targetPoint: Point) => {\n const elements: PlaitElement[] = [];\n if (clipboardData?.elements?.length) {\n const groups = getHighestSelectedGroups(board, clipboardData?.elements);\n const selectedIsolatedElements = getSelectedIsolatedElements(board, clipboardData?.elements);\n selectedIsolatedElements.forEach(item => {\n elements.push(!item.groupId ? item : updateGroupId(item, undefined));\n });\n if (groups.length) {\n groups.forEach(item => {\n const newGroup = { ...updateGroupId(item, undefined), id: idCreator() };\n elements.push(newGroup);\n elements.push(...updateElementsGroupId(item, clipboardData.elements!, newGroup.id));\n });\n }\n clipboardData.elements = elements;\n }\n insertFragment(data, clipboardData, targetPoint);\n const groupElements = elements?.filter(value => PlaitGroupElement.isGroup(value)) as PlaitElement[];\n groupElements.forEach(element => {\n Transforms.insertNode(board, element, [board.children.length]);\n });\n };\n\n board.getDeletedFragment = (data: PlaitElement[]) => {\n if (removeGroups && removeGroups.length) {\n data.push(...removeGroups);\n }\n return getDeletedFragment(data);\n };\n\n board.deleteFragment = (data: DataTransfer | null) => {\n removeGroups = getRemoveGroups(board);\n if (removeGroups?.length) {\n updateSiblingElementGroupId(board, removeGroups);\n }\n deleteFragment(data);\n removeGroups = null;\n };\n\n board.getRectangle = (element: PlaitElement) => {\n if (PlaitGroupElement.isGroup(element)) {\n return getRectangleByGroup(board, element);\n }\n return getRectangle(element);\n };\n\n board.keyDown = (event: KeyboardEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n if (isKeyHotkey('mod+g', event)) {\n event.preventDefault();\n GroupTransforms.addGroup(board);\n return;\n }\n if (isKeyHotkey('mod+shift+g', event)) {\n event.preventDefault();\n GroupTransforms.removeGroup(board);\n return;\n }\n }\n keyDown(event);\n };\n\n return board;\n}\n\nconst updateGroupId = (element: PlaitElement, groupId?: string) => {\n return {\n ...element,\n groupId: groupId\n };\n};\n\nconst updateElementsGroupId = (group: PlaitGroup, clipboardDataElements: PlaitElement[], newGroupId: string) => {\n const elements: PlaitElement[] = [];\n const elementsInGroup = clipboardDataElements.filter(item => item.groupId === group.id);\n if (elementsInGroup.length) {\n elementsInGroup.forEach(item => {\n if (PlaitGroupElement.isGroup(item)) {\n const newGroup = { ...updateGroupId(item, newGroupId), id: idCreator() };\n elements.push(newGroup);\n elements.push(...updateElementsGroupId(item, clipboardDataElements, newGroup.id));\n } else {\n elements.push(updateGroupId(item, newGroupId));\n }\n });\n }\n return elements;\n};\n\nconst getRemoveGroups = (board: PlaitBoard) => {\n const selectedGroups = board.getRelatedFragment([]) as PlaitGroup[];\n const removeGroups = [...selectedGroups];\n const highestSelectedGroups = getHighestSelectedGroups(board);\n const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);\n const removeNodes = [...highestSelectedGroups, ...selectedIsolatedElements];\n removeNodes.forEach(item => {\n const hitElementGroups = getGroupByElement(board, item, true) as PlaitGroup[];\n if (hitElementGroups.length) {\n const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);\n const siblingElements = elementsInGroup.filter(\n element => ![...removeNodes, ...removeGroups].map(item => item.id).includes(element.id)\n );\n if (siblingElements.length === 1 || siblingElements.length === 0) {\n if (!removeGroups.includes(hitElementGroups[0])) {\n removeGroups.push(hitElementGroups[0]);\n }\n if (siblingElements.length === 1) {\n if (hitElementGroups.length > 1) {\n const aboveGroup = findAboveGroupWithAnotherElement(board, hitElementGroups.slice(1, hitElementGroups.length), [\n ...removeNodes,\n ...removeGroups\n ]);\n let index = hitElementGroups.length;\n if (aboveGroup) {\n index = hitElementGroups.findIndex(item => item.id === aboveGroup.id);\n }\n [...hitElementGroups.slice(1, index)].forEach(item => {\n if (!removeGroups.includes(item)) {\n removeGroups.push(item);\n }\n });\n }\n }\n }\n }\n });\n return removeGroups;\n};\n\nconst findAboveGroupWithAnotherElement = (board: PlaitBoard, groups: PlaitGroup[], excludeNodes: PlaitElement[]) => {\n let group: PlaitGroup | null = null;\n for (let i = 0; i < groups.length; i++) {\n const elementsInGroup = getElementsInGroup(board, groups[i], false, true);\n const siblingElements = elementsInGroup.filter(element => !excludeNodes.map(item => item.id).includes(element.id));\n if (siblingElements.length > 0) {\n group = groups[i];\n break;\n }\n }\n return group;\n};\n\nconst updateSiblingElementGroupId = (board: PlaitBoard, removeGroups: PlaitGroup[]) => {\n const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);\n const highestSelectedGroups = getHighestSelectedGroups(board);\n const isolatedElementsInGroup = selectedIsolatedElements.filter(item => item.groupId);\n [...highestSelectedGroups, ...isolatedElementsInGroup].forEach(item => {\n const hitElementGroups = getGroupByElement(board, item, true) as PlaitGroup[];\n if (hitElementGroups.length) {\n const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);\n const siblingElements = elementsInGroup.filter(element => element.id !== item.id);\n if (siblingElements.length === 1) {\n const removeGroupIds = removeGroups.map(item=> item.id);\n if (hitElementGroups.some(group => removeGroupIds.includes(group.id))) {\n const group = hitElementGroups.find(group => !removeGroupIds.includes(group.id));\n const path = PlaitBoard.findPath(board, siblingElements[0]);\n Transforms.setNode(board, { groupId: group?.id || undefined }, path);\n }\n }\n }\n });\n};\n","import { ChangeDetectorRef, Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ACTIVE_STROKE_WIDTH, PlaitBoard, PlaitElement, RectangleClient, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { ActiveGenerator } from '../generators';\nimport { CommonImageItem } from '../utils';\n\n@Directive({\n host: {\n class: 'plait-image-container'\n }\n})\nexport abstract class ImageBaseComponent implements OnInit, OnDestroy {\n _imageItem!: CommonImageItem;\n\n _isFocus!: boolean;\n\n initialized = false;\n\n activeGenerator!: ActiveGenerator;\n\n @Input()\n element!: PlaitElement;\n\n @Input()\n set imageItem(value: CommonImageItem) {\n this.afterImageItemChange(this._imageItem, value);\n this._imageItem = value;\n this.drawFocus();\n }\n\n get imageItem() {\n return this._imageItem;\n }\n\n @Input()\n board!: PlaitBoard;\n\n @Input()\n set isFocus(value: boolean) {\n this._isFocus = value;\n this.drawFocus();\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n abstract afterImageItemChange(previous: CommonImageItem, current: CommonImageItem): void;\n\n @Input() getRectangle!: () => RectangleClient;\n\n @Input() hasResizeHandle!: () => boolean;\n\n constructor(protected elementRef: ElementRef<HTMLElement>, public cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.activeGenerator = new ActiveGenerator(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)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.getRectangle();\n },\n hasResizeHandle: () => {\n const selectedElements = getSelectedElements(this.board);\n return (selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length;\n }\n });\n this.initialized = true;\n }\n\n drawFocus() {\n if (this.initialized) {\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.processDrawing(this.element as PlaitElement, activeG, { selected: this._isFocus });\n }\n }\n\n ngOnDestroy(): void {\n if (this.activeGenerator) {\n this.activeGenerator.destroy();\n }\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generators';\nexport * from './transforms';\nexport * from './shapes';\nexport * from './plugins';\nexport * from './utils';\nexport * from './core/plugin-element';\nexport * from './core/image-base.component';\nexport * from './algorithms'\nexport * from './types/resize';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["SlateTransforms"],"mappings":"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"}
|