@plait/common 0.92.1 → 0.92.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RectangleClient, toActiveRectangleFromViewBoxRectangle, PlaitGroupElement, getSelectionAngle, getElementsInGroup, setAngleForG, drawCircle, PlaitBoard, RESIZE_HANDLE_CLASS_NAME, DEFAULT_COLOR, createG, setStrokeLinecap, drawRectangle, ACTIVE_STROKE_WIDTH, SELECTION_RECTANGLE_CLASS_NAME, ResizeCursorClass, RESIZE_CURSORS, setDragging, rotatePoints, isSelectionMoving, getSelectedElements, distanceBetweenPointAndPoint, Point, Direction, hotkeys, PlaitElement, createDebugGenerator, idCreator, Transforms, createForeignObject, updateForeignObject, getHighestSelectedElements, getRectangleByElements, MERGING, PlaitPointerType, isMainPointer, toViewBoxPoint, toHostPoint, PRESS_AND_MOVE_BUFFER, isDragging, throttleRAF, getRectangleByGroup, ElementFlavour, Selection, isMovingElements, getHitElementsBySelection, createGroupRectangleG, getSelectedGroups, getHighestSelectedGroups, getSelectedIsolatedElements, getAllGroups, isSelectedElementOrGroup, getSelectedIsolatedElementsCanAddToGroup, getGroupByElement, ceilToDecimal, updateForeignObjectWidth, IS_TEXT_EDITABLE, isTouchDevice } from '@plait/core';
|
|
1
|
+
import { RectangleClient, toActiveRectangleFromViewBoxRectangle, PlaitGroupElement, getSelectionAngle, getElementsInGroup, setAngleForG, drawCircle, PlaitBoard, RESIZE_HANDLE_CLASS_NAME, DEFAULT_COLOR, createG, setStrokeLinecap, drawRectangle, ACTIVE_STROKE_WIDTH, SELECTION_RECTANGLE_CLASS_NAME, ResizeCursorClass, RESIZE_CURSORS, setDragging, rotatePoints, isSelectionMoving, getSelectedElements, distanceBetweenPointAndPoint, Point, Direction, hotkeys, PlaitElement, createDebugGenerator, idCreator, Transforms, createForeignObject, updateForeignObject, getHighestSelectedElements, getRectangleByElements, MERGING, PlaitPointerType, isMainPointer, toViewBoxPoint, toHostPoint, PRESS_AND_MOVE_BUFFER, isDragging, throttleRAF, getRectangleByGroup, ElementFlavour, Selection, isMovingElements, getHitElementsBySelection, createGroupRectangleG, getSelectedGroups, getHighestSelectedGroups, getSelectedIsolatedElements, getAllGroups, isSelectedElementOrGroup, getSelectedIsolatedElementsCanAddToGroup, getGroupByElement, ceilToDecimal, updateForeignObjectWidth, IS_TEXT_EDITABLE, isDebug, isTouchDevice } from '@plait/core';
|
|
2
2
|
import { isKeyHotkey } from 'is-hotkey';
|
|
3
3
|
import { Node, Operation, Editor, Transforms as Transforms$1, Range } from 'slate';
|
|
4
4
|
|
|
@@ -2246,6 +2246,9 @@ class TextManage {
|
|
|
2246
2246
|
edit(callback, exitEdit) {
|
|
2247
2247
|
this.isEditing = true;
|
|
2248
2248
|
IS_TEXT_EDITABLE.set(this.board, true);
|
|
2249
|
+
if (isDebug()) {
|
|
2250
|
+
console.log('text-manage', 'set text editing to ', true);
|
|
2251
|
+
}
|
|
2249
2252
|
const props = {
|
|
2250
2253
|
readonly: false
|
|
2251
2254
|
};
|
|
@@ -2288,6 +2291,9 @@ class TextManage {
|
|
|
2288
2291
|
document.removeEventListener('pointerdown', pointerDownHandler);
|
|
2289
2292
|
document.removeEventListener('keydown', keyDownHandler);
|
|
2290
2293
|
IS_TEXT_EDITABLE.set(this.board, false);
|
|
2294
|
+
if (isDebug()) {
|
|
2295
|
+
console.log('text-manage', 'set IS_TEXT_EDITABLE to ', false);
|
|
2296
|
+
}
|
|
2291
2297
|
MERGING.set(this.board, false);
|
|
2292
2298
|
callback && callback();
|
|
2293
2299
|
const props = {
|
|
@@ -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/constants/property.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/utils/drawing/resize-handle.ts","../../../packages/common/src/utils/drawing/rotate-handle.ts","../../../packages/common/src/generators/active.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/utils/elements.ts","../../../packages/common/src/utils/animate.ts","../../../packages/common/src/utils/stroke.ts","../../../packages/common/src/utils/clipboard.ts","../../../packages/common/src/utils/point-placement.ts","../../../packages/common/src/image/image.generator.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/transforms/align.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/element-ref.ts","../../../packages/common/src/core/element-flavour.ts","../../../packages/common/src/core/group.component.ts","../../../packages/common/src/plugins/with-group.ts","../../../packages/common/src/image/image-base.component.ts","../../../packages/common/src/text/text-measure.ts","../../../packages/common/src/text/text-manage.ts","../../../packages/common/src/text/with-text.ts","../../../packages/common/src/text/types.ts","../../../packages/common/src/image/with-image.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';\nexport const ROTATE_HANDLE_DISTANCE_TO_ELEMENT = 4;\nexport const ROTATE_HANDLE_SIZE = 18;\nexport const DEFAULT_FONT_FAMILY = `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'PingFang SC', 'Noto Sans', 'Noto Sans CJK SC', 'Microsoft Yahei', 'Hiragino Sans GB', Arial, sans-serif`;\nexport const DEFAULT_FILL = 'none';\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","export enum StrokeStyle {\n solid = 'solid',\n dashed = 'dashed',\n dotted = 'dotted'\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitGroupElement,\n RectangleClient,\n getElementsInGroup,\n getSelectionAngle,\n setAngleForG,\n toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {\n prepend?: boolean;\n active?: boolean;\n}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions,\n P extends PlaitBoard = PlaitBoard\n> {\n g?: SVGGElement;\n\n protected options?: V;\n\n constructor(protected board: P, 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.g) {\n this.g.remove();\n }\n if (this.options?.prepend) {\n parentG.prepend(g);\n } else {\n parentG.appendChild(g);\n }\n }\n this.g = g;\n const rectangle = this.board.getRectangle(element);\n if (!rectangle) {\n return;\n }\n let centerPoint = RectangleClient.getCenterPoint(rectangle);\n if (this.options?.active) {\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(this.board, rectangle);\n centerPoint = RectangleClient.getCenterPoint(activeRectangle);\n }\n let angle;\n if (PlaitGroupElement.isGroup(element)) {\n angle = getSelectionAngle(getElementsInGroup(this.board, element, true));\n } else {\n angle = element.angle;\n }\n if (angle) {\n setAngleForG(g, centerPoint, 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 { RESIZE_HANDLE_CLASS_NAME, 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 const handleG = drawCircle(PlaitBoard.getRoughSVG(board), centerPoint, RESIZE_HANDLE_DIAMETER, options);\n handleG.classList.add(RESIZE_HANDLE_CLASS_NAME);\n return handleG;\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}\n","import { DEFAULT_COLOR, PlaitBoard, RectangleClient, createG, setStrokeLinecap } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { ROTATE_HANDLE_DISTANCE_TO_ELEMENT, ROTATE_HANDLE_SIZE } from '../../constants';\n\nconst rotateHandleRadius = 6;\n\nexport const drawRotateHandle = (board: PlaitBoard, rectangle: RectangleClient) => {\n const options: Options = { stroke: DEFAULT_COLOR, strokeWidth: 1, fillStyle: 'solid' };\n const handleCenterPoint = [\n rectangle.x - ROTATE_HANDLE_DISTANCE_TO_ELEMENT - ROTATE_HANDLE_SIZE / 2,\n rectangle.y + rectangle.height + ROTATE_HANDLE_DISTANCE_TO_ELEMENT + ROTATE_HANDLE_SIZE / 2\n ];\n const rs = PlaitBoard.getRoughSVG(board);\n const handleG = createG();\n const line = rs.path(\n `M ${handleCenterPoint[0] + rotateHandleRadius} ${handleCenterPoint[1]} A ${rotateHandleRadius} ${rotateHandleRadius}, 0, 1, 0, ${\n handleCenterPoint[0]\n } ${handleCenterPoint[1] + rotateHandleRadius}`,\n options\n );\n const arrow = rs.polygon(\n [\n [handleCenterPoint[0], handleCenterPoint[1] + rotateHandleRadius - 2],\n [handleCenterPoint[0], handleCenterPoint[1] + rotateHandleRadius + 2],\n [handleCenterPoint[0] + 4.5, handleCenterPoint[1] + rotateHandleRadius]\n ],\n { ...options, fill: DEFAULT_COLOR }\n );\n setStrokeLinecap(arrow, 'round');\n handleG.append(line, arrow);\n return handleG;\n};\n","import {\n ACTIVE_STROKE_WIDTH,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n SELECTION_RECTANGLE_CLASS_NAME,\n createG,\n drawRectangle,\n toActiveRectangleFromViewBoxRectangle\n} 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> extends GeneratorOptions {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n active: true;\n}\n\nexport const createActiveGenerator = <T extends PlaitElement = PlaitElement>(\n board: PlaitBoard,\n options: Omit<ActiveGeneratorOptions<T>, 'active'>\n) => {\n return new ActiveGenerator<T>(board, { ...options, active: true });\n};\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T>\n> {\n static key = 'active-generator';\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 activeRectangle = toActiveRectangleFromViewBoxRectangle(this.board, this.options.getRectangle(element));\n\n const delta = this.options.getStrokeWidth() * this.board.viewport.zoom;\n const activeRectangleWithDelta = RectangleClient.inflate(activeRectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangleWithDelta, {\n stroke: PRIMARY_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH\n });\n\n activeG.append(strokeG);\n strokeG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // draw resize handle\n RectangleClient.getCornerPoints(activeRectangleWithDelta).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 Point,\n RectangleClient,\n ResizeCursorClass,\n setDragging,\n RESIZE_CURSORS,\n rotatePoints,\n PlaitElement,\n getSelectedElements,\n isSelectionMoving\n} 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) => {\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, 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, P>(board: PlaitBoard, resizeRef: ResizeRef<T, K, P>, 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\nexport const hasMoreThanOnePoint = (element: PlaitElement) => {\n const points = element.points as Point[];\n return points && points.length > 1;\n};\n\nexport const hasResizeHandle = (board: PlaitBoard, element: PlaitElement) => {\n if (PlaitBoard.hasBeenTextEditing(board) || isSelectionMoving(board)) {\n return false;\n }\n const selectedElements = getSelectedElements(board);\n return selectedElements.length === 1 && selectedElements[0] === element && hasMoreThanOnePoint(element);\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 { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { Editor, Node, Element } from 'slate';\nimport { TextManage } from '../text/text-manage';\nimport { Alignment, CustomText, ParagraphElement } from '../text/types';\nimport { PlaitCommonElementRef } from '../core';\n\nexport interface TextInterface {\n getTextEditors: (board: PlaitBoard, elements?: PlaitElement[]) => Editor[] | undefined;\n findFirstTextEditor: (board: PlaitBoard) => null;\n getFirstTextEditor: (element: PlaitElement) => Editor;\n getTextEditorsByElement: (element: PlaitElement) => Editor[];\n getEditingTextEditor: (board: PlaitBoard, elements?: PlaitElement[]) => Editor | undefined;\n}\n\nexport const getTextManages = (element: PlaitElement) => {\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n return ref?.getTextManages() || [];\n};\n\nexport const getFirstTextManage = (element: PlaitElement) => {\n const textManage = getTextManages(element)[0];\n if (!textManage) {\n console.warn('can not find textManage');\n }\n return textManage;\n};\n\nexport const getTextEditorsByElement: TextInterface['getTextEditorsByElement'] = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.editor;\n });\n};\n\nexport const getFirstTextEditor: TextInterface['getFirstTextEditor'] = (element: PlaitElement) => {\n const textEditor = getTextEditorsByElement(element)[0];\n if (!textEditor) {\n console.warn('can not find textManage');\n }\n return textEditor;\n};\n\nexport const findFirstTextEditor: TextInterface['findFirstTextEditor'] = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board);\n let firstEditor: Editor | null = null;\n selectedElements.forEach(element => {\n const editors = getTextEditorsByElement(element);\n if (!firstEditor && editors && editors.length > 0) {\n firstEditor = editors[0];\n }\n });\n return firstEditor;\n};\n\nexport const getElementsText = (elements: PlaitElement[]) => {\n return elements\n .map(item => {\n try {\n const editors = getTextEditorsByElement(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\nexport const getTextEditors: TextInterface['getTextEditors'] = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements || getSelectedElements(board);\n if (selectedElements.length) {\n const textManages: TextManage[] = [];\n selectedElements.forEach(item => {\n textManages.push(...getTextManages(item));\n });\n const editingTextManage = textManages.find(textManage => textManage.isEditing);\n if (editingTextManage) {\n return [editingTextManage.editor];\n }\n return textManages.map(item => {\n return item.editor;\n });\n }\n return undefined;\n};\n\nexport const getEditingTextEditor: TextInterface['getEditingTextEditor'] = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements || getSelectedElements(board);\n const textManages: TextManage[] = [];\n selectedElements.forEach(item => {\n textManages.push(...getTextManages(item));\n });\n const editingTextManage = textManages.find(textManage => textManage.isEditing);\n if (editingTextManage) {\n return editingTextManage.editor;\n }\n return undefined;\n};\n\nexport const buildText = (text: string | Element, align?: Alignment, properties?: Partial<CustomText>) => {\n properties = properties || {};\n const plaitText = typeof text === 'string' ? { children: [{ text, ...properties }], type: 'paragraph' } : text;\n if (align) {\n (plaitText as ParagraphElement).align = align;\n }\n return plaitText;\n};\n\nexport const getLineHeightByFontSize = (fontSize: number) => {\n if (fontSize === 14) {\n return 20;\n }\n return fontSize * 1.5;\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\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.getBoardContext(board);\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};\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, PlaitBoard, Point, RectangleClient, createDebugGenerator, DebugGenerator } from '@plait/core';\nimport { removeDuplicatePoints, simplifyOrthogonalPoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nconst debugGenerator = createDebugGenerator('debug:plait:elbow-line-routing');\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, board?: PlaitBoard) => {\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 }, board);\n return route;\n};\n\nexport const routeAdjust = (path: Point[], options: RouteAdjustOptions, board?: PlaitBoard) => {\n const { sourceRectangle, targetRectangle, centerX, centerY } = options;\n if (board) {\n debugGenerator.clear();\n }\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 }, board);\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 }, board);\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions, board?: PlaitBoard): 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.getCornerPointsByPoints(tempRectPoints);\n if (board) {\n debugGenerator.drawRectangle(board, tempRect);\n }\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 simplifyPoints = simplifyOrthogonalPoints([...newPath]);\n // if (board) {\n // debugGenerator.drawLine(board, simplifyPoints);\n // }\n const newTurnCount = simplifyPoints.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 { PlaitBoard, setDragging } from '@plait/core';\nimport { RotateRef } from '../types';\n\nexport const IS_ROTATING = new WeakMap<PlaitBoard, RotateRef>();\n\nexport const isRotating = (board: PlaitBoard) => {\n return !!IS_ROTATING.get(board);\n};\n\nexport const addRotating = (board: PlaitBoard, rotateRef: RotateRef) => {\n PlaitBoard.getBoardContainer(board).classList.add(`draw-elements-rotating`);\n IS_ROTATING.set(board, rotateRef);\n setDragging(board, true);\n};\n\nexport const removeRotating = (board: PlaitBoard) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`draw-elements-rotating`);\n IS_ROTATING.delete(board);\n setDragging(board, false);\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { DEFAULT_FILL, TRANSPARENT } from '../constants';\n\nexport const getElementArea = (board: PlaitBoard, element: PlaitElement) => {\n const rectangle = board.getRectangle(element);\n if (rectangle) {\n return rectangle.width * rectangle.height;\n }\n return 0;\n};\n\nexport const sortElementsByArea = (board: PlaitBoard, elements: PlaitElement[], direction: 'desc' | 'asc' = 'asc') => {\n return elements.sort((a, b) => {\n const areaA = getElementArea(board, a);\n const areaB = getElementArea(board, b);\n return direction === 'asc' ? areaA - areaB : areaB - areaA;\n });\n};\n\nexport const isFilled = (fill: string) => {\n return fill && fill !== DEFAULT_FILL && fill !== TRANSPARENT;\n};\n","export type AnimateOption = { stop: () => void; start: () => void };\n\nexport function animate(tween: (t: number) => void, duration: number, ease: Function, callback: Function): AnimateOption {\n const start = getTimestamp();\n let stopAnimation = false;\n\n function tick(now: number) {\n if (stopAnimation) {\n return;\n }\n const elapsed = now - start;\n const t = Math.min(elapsed / duration, 1);\n tween(ease(t));\n if (t < 1) {\n requestAnimationFrame(tick);\n } else if (callback) {\n callback();\n }\n }\n\n requestAnimationFrame(tick);\n return {\n stop: () => (stopAnimation = true),\n start: () => {\n stopAnimation = false;\n requestAnimationFrame(tick);\n }\n };\n}\n\nexport function getTimestamp() {\n if (window.performance && window.performance.now) {\n return window.performance.now();\n } else {\n return Date.now();\n }\n}\n\nexport function linear(t: number) {\n return t;\n}\n","import { StrokeStyle } from '../constants';\n\nexport const getStrokeLineDash = (strokeStyle: StrokeStyle, strokeWidth: number) => {\n switch (strokeStyle) {\n case StrokeStyle.dashed:\n return [8, 8 + strokeWidth];\n case StrokeStyle.dotted:\n return [2, 4 + strokeWidth];\n default:\n return undefined;\n }\n};\n","import { idCreator, PlaitBoard, PlaitElement, Point, Transforms } from '@plait/core';\n\nexport const buildClipboardData = (\n board: PlaitBoard,\n elements: PlaitElement[],\n startPoint: Point,\n elementBuilder?: (element: PlaitElement) => PlaitElement | undefined\n) => {\n return elements.map(element => {\n const newElement = elementBuilder && elementBuilder(element);\n if (newElement) {\n return newElement;\n }\n if (element.points) {\n const points = element.points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);\n return { ...element, points };\n }\n return element;\n });\n};\n\nexport const insertClipboardData = (\n board: PlaitBoard,\n elements: PlaitElement[],\n startPoint: Point,\n elementHandler?: (element: PlaitElement, idsMap: Record<string, string>) => void\n) => {\n const idsMap: Record<string, string> = {};\n elements.forEach(element => {\n idsMap[element.id] = idCreator();\n });\n elements.forEach(element => {\n element.id = idsMap[element.id];\n elementHandler && elementHandler(element, idsMap);\n if (element.points) {\n element.points = element.points.map(point => [startPoint[0] + point[0], startPoint[1] + point[1]]) as [Point, Point];\n }\n Transforms.insertNode(board, element, [board.children.length]);\n });\n Transforms.addSelectionWithTemporaryElements(board, elements);\n};\n","import { Direction, Point } from '@plait/core';\n\n// Based on right\n// Right -> Left:\n// 1. End point -> starting point/start point -> end point\n// 2. Add -> Subtract\n\n// Horizontal -> Vertical:\n// 1. Starting point/end point -> vertical axis\n// 2. Addition and subtraction -> vertical axis\n\n// Bottom -> Top:\n// 1. End point -> starting point/end point -> starting point\n// 2. Add -> Subtract\nexport const moveXOfPoint = (point: Point, distance: number, direction: Direction = Direction.right): Point => {\n if (direction === Direction.left) {\n return [point[0] - distance, point[1]];\n }\n if (direction === Direction.bottom) {\n return [point[0], point[1] + distance];\n }\n if (direction === Direction.top) {\n return [point[0], point[1] - distance];\n }\n return [point[0] + distance, point[1]];\n};\n\nexport const moveYOfPoint = (point: Point, distance: number, direction: Direction = Direction.right): Point => {\n if (direction === Direction.bottom) {\n return [point[0] + distance, point[1]];\n }\n if (direction === Direction.top) {\n return [point[0] + distance, point[1]];\n }\n return [point[0], point[1] + distance];\n};\n\nexport const getDirectionByIndex = (index: number) => {\n if (index === 0) {\n return Direction.top;\n }\n if (index === 1) {\n return Direction.right;\n }\n if (index === 2) {\n return Direction.bottom;\n }\n if (index === 3) {\n return Direction.left;\n }\n return Direction.right;\n};\n\nexport const getXDistanceBetweenPoint = (point1: Point, point2: Point, isHorizontal: boolean) => {\n if (isHorizontal) {\n return Math.abs(point1[0] - point2[0]);\n } else {\n return Math.abs(point1[1] - point2[1]);\n }\n};\n","import {\n ACTIVE_STROKE_WIDTH,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n createForeignObject,\n createG,\n getSelectedElements,\n isSelectionMoving,\n setAngleForG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator, GeneratorExtraData, GeneratorOptions } from '../generators/generator';\nimport { CommonImageItem, hasResizeHandle, getElementOfFocusedImage } from '../utils';\nimport { ActiveGenerator, createActiveGenerator } from '../generators/active.generator';\nimport { PlaitImageBoard, ImageComponentRef, ImageProps } from './with-image';\n\nexport const FOREIGN_OBJECT_IMAGE_CLASS_NAME = 'foreign-object-image';\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 GeneratorExtraData,\n ImageGeneratorOptions<T> & GeneratorOptions\n> {\n static key = 'image-generator';\n\n foreignObject!: SVGForeignObjectElement;\n\n imageComponentRef!: ImageComponentRef;\n\n activeGenerator!: ActiveGenerator;\n\n isFocus = false;\n\n element!: T;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T): boolean {\n return !!this.options.getImageItem(element);\n }\n\n draw(element: T): SVGGElement {\n this.element = element;\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n this.foreignObject.classList.add(FOREIGN_OBJECT_IMAGE_CLASS_NAME);\n g.append(this.foreignObject);\n const props: ImageProps = {\n board: this.board,\n imageItem: this.options.getImageItem(element),\n element,\n getRectangle: () => {\n return this.options.getRectangle(element);\n }\n };\n this.imageComponentRef = (this.board as unknown as PlaitImageBoard).renderImage(this.foreignObject, props);\n\n this.activeGenerator = createActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (!(selectedElements.length === 1 && !isSelectionMoving(this.board))) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if ((selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.options.getRectangle(this.element);\n },\n hasResizeHandle: () => {\n const isSelectedImageElement = hasResizeHandle(this.board, this.element);\n const isSelectedImage = !!getElementOfFocusedImage(this.board);\n return isSelectedImage || isSelectedImageElement;\n }\n });\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n this.element = current;\n if (previous !== current && this.imageComponentRef) {\n const props = {\n imageItem: this.options.getImageItem(current),\n element: current,\n getRectangle: () => {\n return this.options.getRectangle(current);\n }\n };\n this.imageComponentRef.update(props);\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 !== undefined) {\n setAngleForG(this.g!, RectangleClient.getCenterPoint(currentForeignObject), current.angle);\n }\n const activeG = PlaitBoard.getActiveHost(this.board);\n this.activeGenerator.processDrawing(current, activeG, { selected: this.isFocus });\n }\n\n setFocus(element: PlaitElement, isFocus: boolean) {\n this.isFocus = isFocus;\n const activeG = PlaitBoard.getActiveHost(this.board);\n this.activeGenerator.processDrawing(element, activeG, { selected: isFocus });\n const props: Partial<ImageProps> = {\n isFocus\n };\n this.imageComponentRef.update(props);\n }\n\n destroy(): void {\n super.destroy();\n this.imageComponentRef?.destroy();\n this.activeGenerator?.destroy();\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 | null, options: SetOptions) => {\n setProperty(board, { fill }, options);\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string | null, 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 { 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 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, ResizeOptions, 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, P = ResizeOptions>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K, P>\n) => {\n const { pointerDown, pointerMove, globalPointerUp, touchStart } = board;\n let resizeHitTestRef: ResizeHitTestRef<T, K, P> | null = null;\n let resizeRef: ResizeRef<T, K, P> | null = null;\n let startPoint: Point | null = null;\n let hoverHitTestRef: ResizeHitTestRef<T, K, P> | null = null;\n\n board.touchStart = (event: TouchEvent) => {\n if (resizeRef) {\n event.preventDefault();\n return;\n }\n touchStart(event);\n };\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 options: resizeHitTestRef.options\n };\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n clearHoverHitTestRef();\n pointerMove(event);\n return;\n }\n if (startPoint && resizeHitTestRef && !isResizing(board)) {\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 clearHoverHitTestRef();\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 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 }\n };\n\n const clearHoverHitTestRef = () => {\n if (hoverHitTestRef) {\n if (hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n }\n hoverHitTestRef = null;\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 static key = 'GroupGenerator';\n\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 { PlaitElementRef } from '@plait/core';\nimport { Generator } from '../generators';\nimport { TextManage } from '../text';\n\nexport class PlaitCommonElementRef implements PlaitElementRef {\n private textManages: TextManage[] = [];\n\n private generatorMap = new Map<string, Generator | Object>();\n\n addGenerator<T extends Object = Generator>(key: string, generator: T) {\n this.generatorMap.set(key, generator);\n }\n\n getGenerator<T extends Object = Generator>(key: string) {\n return this.generatorMap.get(key) as T;\n }\n\n initializeTextManage(textManage: TextManage | TextManage[]) {\n this.textManages = [];\n if (Array.isArray(textManage)) {\n this.textManages.push(...textManage);\n } else {\n this.textManages.push(textManage);\n }\n }\n\n getTextManages() {\n return this.textManages;\n }\n\n updateActiveSection = () => {};\n\n destroyTextManage() {\n this.textManages.forEach((textManage) => {\n textManage.destroy();\n });\n this.textManages = [];\n }\n}\n","import { ElementFlavour, PlaitBoard, PlaitElement } from '@plait/core';\nimport { PlaitCommonElementRef } from './element-ref';\n\nexport class CommonElementFlavour<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard,\n R extends PlaitCommonElementRef = PlaitCommonElementRef\n> extends ElementFlavour<T, K, R> {\n constructor(elementRef = new PlaitCommonElementRef()) {\n super(elementRef as R);\n }\n}\n","import { OnContextChanged, PlaitBoard, PlaitGroup, PlaitPluginElementContext, getRectangleByGroup, isSelectionMoving } from '@plait/core';\nimport { GroupGenerator } from '../generators/group.generator';\nimport { ActiveGenerator, createActiveGenerator } from '../generators';\nimport { CommonElementFlavour } from './element-flavour';\n\nexport class GroupComponent extends CommonElementFlavour<PlaitGroup, PlaitBoard> implements OnContextChanged<PlaitGroup, PlaitBoard> {\n constructor() {\n super();\n }\n\n activeGenerator!: ActiveGenerator<PlaitGroup>;\n\n groupGenerator!: GroupGenerator;\n\n initializeGenerator() {\n this.activeGenerator = createActiveGenerator<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 this.getRef().addGenerator(GroupGenerator.key, this.groupGenerator);\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitGroup, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitGroup, PlaitBoard>\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 PlaitPointerType,\n WritableClipboardOperationType,\n throttleRAF,\n isMovingElements,\n getAllGroups,\n isSelectedElementOrGroup\n} from '@plait/core';\nimport { GroupComponent } from '../core/group.component';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { isResizing } from '../utils';\nimport { PlaitCommonElementRef } from '../core';\nimport { GroupGenerator } from '../generators/group.generator';\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 onChange\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 throttleRAF(board, 'with-group', () => {\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 pointer = PlaitBoard.getPointer(board);\n if (!isResizing(board) && !isMovingElements(board) && pointer === PlaitPointerType.selection) {\n const hitElements = getHitElementsBySelection(board, selection);\n if (hitElements.length) {\n groupRectangleG = createGroupRectangleG(board, hitElements);\n groupRectangleG && PlaitBoard.getElementTopHost(board).append(groupRectangleG);\n }\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[], originData?: PlaitElement[]) => {\n const groups = getSelectedGroups(board, elements, originData);\n return getRelatedFragment([...elements, ...groups], originData);\n };\n\n board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n let elements: PlaitElement[] = [];\n if (clipboardData?.elements?.length) {\n elements = new Array(clipboardData?.elements?.length);\n const groups = getHighestSelectedGroups(board, clipboardData?.elements);\n const selectedIsolatedElements = getSelectedIsolatedElements(board, clipboardData?.elements);\n selectedIsolatedElements.forEach((item) => {\n const index = clipboardData.elements!.map((element) => element.id).indexOf(item.id);\n elements.splice(index, 1, !item.groupId ? item : updateGroupId(item, undefined));\n });\n if (groups.length) {\n groups.forEach((item) => {\n const index = clipboardData.elements!.map((element) => element.id).indexOf(item.id);\n const newGroup = { ...updateGroupId(item, undefined), id: idCreator() };\n elements.splice(index, 1, newGroup);\n updateElementsGroupId(item, clipboardData.elements!, newGroup.id, elements);\n });\n }\n clipboardData.elements = elements;\n }\n insertFragment(clipboardData, targetPoint, operationType);\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 removeGroups = getRemoveGroups(board);\n if (removeGroups && removeGroups.length) {\n data.push(...removeGroups);\n }\n return getDeletedFragment(data);\n };\n\n board.deleteFragment = (elements: PlaitElement[]) => {\n if (removeGroups?.length) {\n updateSiblingElementGroupId(board, removeGroups);\n }\n deleteFragment(elements);\n removeGroups = null;\n };\n\n board.getRectangle = (element: PlaitElement) => {\n if (PlaitGroupElement.isGroup(element)) {\n return getRectangleByGroup(board, element, true);\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 Transforms.addGroup(board);\n return;\n }\n if (isKeyHotkey('mod+shift+g', event)) {\n event.preventDefault();\n Transforms.removeGroup(board);\n return;\n }\n }\n keyDown(event);\n };\n\n board.onChange = () => {\n onChange();\n const groups = getAllGroups(board);\n groups.forEach((group) => {\n const elementsInGroup = getElementsInGroup(board, group, false, true);\n const isPartialSelectGroup =\n elementsInGroup.some((item) => isSelectedElementOrGroup(board, item)) &&\n !elementsInGroup.every((item) => isSelectedElementOrGroup(board, item));\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(group);\n const g = PlaitElement.getElementG(group);\n ref.getGenerator(GroupGenerator.key).processDrawing(group, g, isPartialSelectGroup);\n });\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, elements: PlaitElement[]) => {\n const elementsInGroup = clipboardDataElements.filter((item) => item.groupId === group.id);\n if (elementsInGroup.length) {\n elementsInGroup.forEach((item) => {\n const index = clipboardDataElements.map((item) => item.id).indexOf(item.id);\n if (PlaitGroupElement.isGroup(item)) {\n const newGroup = { ...updateGroupId(item, newGroupId), id: idCreator() };\n elements.splice(index, 1, newGroup);\n updateElementsGroupId(item, clipboardDataElements, newGroup.id, elements);\n } else {\n elements.splice(index, 1, 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 { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport abstract class ImageBaseComponent {\n _isFocus!: boolean;\n\n element!: PlaitElement;\n\n board!: PlaitBoard;\n\n set isFocus(value: boolean) {\n this._isFocus = value;\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n abstract nativeElement(): HTMLElement;\n}\n","import { Node } from 'slate';\nimport { CustomText, ElementSize, ParagraphElement } from './types';\nimport { getLineHeightByFontSize } from '../utils/text';\nimport { ceilToDecimal, PlaitBoard } from '@plait/core';\n\nconst BOARD_TO_CANVAS_MAP = new WeakMap<PlaitBoard, HTMLCanvasElement>();\n\nconst ELEMENT_TO_SIZE_MAP = new WeakMap<ParagraphElement, ElementSize>();\n\nconst getCanvasForBoard = (board: PlaitBoard | null): HTMLCanvasElement => {\n if (board) {\n if (!BOARD_TO_CANVAS_MAP.get(board)) {\n const canvas = document.createElement('canvas');\n BOARD_TO_CANVAS_MAP.set(board, canvas);\n return canvas;\n }\n return BOARD_TO_CANVAS_MAP.get(board) as HTMLCanvasElement;\n }\n return document.createElement('canvas');\n};\n\nexport const getElementSize = (\n board: PlaitBoard | null,\n element: ParagraphElement,\n options: {\n fontSize: number;\n fontFamily: string;\n },\n containerMaxWidth: number = 10000\n) => {\n let size = ELEMENT_TO_SIZE_MAP.get(element);\n if (size) {\n return size;\n }\n size = measureElement(board, element, options, containerMaxWidth);\n ELEMENT_TO_SIZE_MAP.set(element, size);\n return size;\n};\n\nexport const updateElementSizeCache = (board: PlaitBoard | null, element: ParagraphElement, size: ElementSize) => {\n ELEMENT_TO_SIZE_MAP.set(element, size);\n};\n\nexport const clearElementSizeCache = (board: PlaitBoard | null, element: ParagraphElement) => {\n ELEMENT_TO_SIZE_MAP.delete(element);\n};\n\nexport function measureElement(\n board: PlaitBoard | null,\n element: ParagraphElement,\n options: {\n fontSize: number;\n fontFamily: string;\n },\n containerMaxWidth: number = 10000\n) {\n containerMaxWidth = ceilToDecimal(containerMaxWidth, 0);\n const canvas = getCanvasForBoard(board);\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n const textEntries = Node.texts(element);\n const lines: CustomText[][] = [[]];\n for (const textEntry of textEntries) {\n const [text] = textEntry;\n const textString = Node.string(text);\n const textArray = textString.split('\\n');\n textArray.forEach((segmentTextString: string, index: number) => {\n const segmentText = { ...text, text: segmentTextString };\n if (index === 0) {\n const currentLine = lines[lines.length - 1];\n currentLine.push(segmentText);\n } else {\n const newLine: CustomText[] = [];\n newLine.push(segmentText);\n lines.push(newLine);\n }\n });\n }\n\n let finalWidth = 0;\n let finalHeight = 0;\n lines.forEach((lineTexts: CustomText[], index: number) => {\n let lineWidth = 0;\n let lineHeight = 0;\n let maxLineHeight = getLineHeightByFontSize(options.fontSize);\n let hasBreakLine = false;\n const lineText: string[][] = [[]];\n lineTexts.forEach((text: CustomText, index: number) => {\n const isLast = index === lineTexts.length - 1;\n if (text['font-size'] && (isLast || text.text !== '')) {\n const lineHeight = getLineHeightByFontSize(parseFloat(text['font-size']));\n if (lineHeight > maxLineHeight) {\n maxLineHeight = lineHeight;\n }\n }\n const font = getFont(text, { fontFamily: options.fontFamily, fontSize: options.fontSize });\n ctx.font = font;\n const textString = text.text;\n for (let i = 0; i < textString.length; i++) {\n const char = textString[i];\n const width = ctx.measureText(char).width;\n if (lineWidth + width > containerMaxWidth) {\n finalWidth = Math.max(finalWidth, lineWidth);\n lineWidth = width;\n lineHeight += maxLineHeight;\n hasBreakLine = true;\n lineText.push([]);\n lineText[lineText.length - 1].push(char);\n } else {\n lineText[lineText.length - 1].push(char);\n lineWidth += width;\n }\n }\n });\n lineHeight += maxLineHeight;\n finalHeight += lineHeight;\n if (!hasBreakLine) {\n finalWidth = Math.max(finalWidth, lineWidth);\n }\n });\n return { width: finalWidth, height: finalHeight };\n}\n\nconst getFont = (\n text: CustomText,\n options: {\n fontSize: number;\n fontFamily: string;\n }\n) => {\n return `${text.italic ? 'italic ' : ''} ${text.bold ? 'bold ' : ''} ${text['font-size'] || options.fontSize}px ${options.fontFamily} `;\n};\n","import {\n IS_TEXT_EDITABLE,\n MERGING,\n PlaitBoard,\n Point,\n RectangleClient,\n createForeignObject,\n createG,\n isInVisibleViewport,\n isTouchDevice,\n scrollToVisibleWhenKeyboardOpening,\n setAngleForG,\n toHostPoint,\n toViewBoxPoint,\n updateForeignObject,\n updateForeignObjectWidth\n} from '@plait/core';\nimport { Editor, Element, NodeEntry, Range, Text, Node, Transforms, Operation } from 'slate';\nimport { PlaitTextBoard, TextPlugin } from './with-text';\nimport { clearElementSizeCache, measureElement, updateElementSizeCache } from './text-measure';\nimport { TextChangeData, TextComponentRef, TextProps } from './with-text';\nimport { ParagraphElement } from './types';\nimport scrollIntoView from 'scroll-into-view-if-needed';\nimport { DOMEditor } from 'slate-dom';\n\nexport interface TextManageChangeData {\n newText?: Element;\n operations?: Operation[];\n width: number;\n height: number;\n}\n\nexport class TextManage {\n isEditing = false;\n\n editor!: Editor;\n\n g!: SVGGElement;\n\n foreignObject!: SVGForeignObjectElement;\n\n textComponentRef!: TextComponentRef;\n\n exitCallback?: () => void;\n\n constructor(\n private board: PlaitBoard,\n private options: {\n getRectangle: () => RectangleClient;\n onChange?: (data: TextManageChangeData) => void;\n getRenderRectangle?: () => RectangleClient;\n getMaxWidth?: () => number;\n textPlugins?: TextPlugin[];\n }\n ) {\n if (!this.options.getMaxWidth) {\n this.options.getMaxWidth = () => 999;\n }\n }\n\n draw(text: Element) {\n const _rectangle = this.options.getRectangle();\n this.g = createG();\n this.foreignObject = createForeignObject(_rectangle.x, _rectangle.y, _rectangle.width, _rectangle.height);\n this.g.append(this.foreignObject);\n this.g.classList.add('text');\n const props: TextProps = {\n board: this.board,\n text,\n textPlugins: this.options.textPlugins,\n onChange: (data: TextChangeData) => {\n if (data.operations.some((op) => !Operation.isSelectionOperation(op))) {\n const { width: newWidth, height: newHeight } = this.getSize();\n this.options.onChange && this.options.onChange({ ...data, width: newWidth, height: newHeight });\n MERGING.set(this.board, true);\n }\n },\n afterInit: (editor: Editor) => {\n this.editor = editor;\n },\n onComposition: (event: CompositionEvent) => {\n if (event.type === 'compositionend') {\n clearElementSizeCache(this.board, this.editor.children[0] as ParagraphElement);\n return;\n }\n const fakeRoot = buildCompositionData(this.editor, event.data);\n if (fakeRoot) {\n const sizeData = this.getSize(fakeRoot.children[0]);\n updateElementSizeCache(this.board, this.editor.children[0] as ParagraphElement, sizeData);\n // invoking onChange asap to avoid blinking on typing chinese\n this.options.onChange && this.options.onChange({ ...sizeData });\n MERGING.set(this.board, true);\n }\n }\n };\n this.textComponentRef = (this.board as unknown as PlaitTextBoard).renderText(this.foreignObject, props);\n }\n\n updateRectangleWidth(width: number) {\n updateForeignObjectWidth(this.g, width);\n }\n\n updateAngle(centerPoint: Point, angle: number = 0) {\n setAngleForG(this.g, centerPoint, angle);\n }\n\n updateRectangle(rectangle?: RectangleClient) {\n const { x, y, width, height } = rectangle || this.options.getRectangle();\n updateForeignObject(this.g, width, height, x, y);\n }\n\n updateText(newText: Element) {\n const props = {\n text: newText\n };\n this.textComponentRef.update(props);\n }\n\n edit(callback?: () => void, exitEdit?: (event: Event) => boolean) {\n this.isEditing = true;\n IS_TEXT_EDITABLE.set(this.board, true);\n const props: Partial<TextProps> = {\n readonly: false\n };\n this.textComponentRef.update(props);\n\n if (isTouchDevice()) {\n setTimeout(() => {\n const end = Editor.end(this.editor, [0]);\n Transforms.select(this.editor, end);\n }, 0);\n } else {\n Transforms.select(this.editor, [0]);\n }\n\n const pointerDownHandler = (event: PointerEvent) => {\n const point = toViewBoxPoint(this.board, toHostPoint(this.board, event.x, event.y));\n const textRec = this.options.getRenderRectangle ? this.options.getRenderRectangle() : this.options.getRectangle();\n const clickInText = RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), textRec);\n const isAttached = (event.target as HTMLElement).closest('.plait-board-attached');\n if (!clickInText && !isAttached) {\n // handle composition input state, like: Chinese IME Composition Input\n setTimeout(() => {\n exitCallback();\n }, 0);\n }\n };\n const keyDownHandler = (event: KeyboardEvent) => {\n if (event.isComposing) {\n return;\n }\n if (event.key === 'Escape' || event.key === 'Tab' || (exitEdit ? exitEdit(event) : false)) {\n event.preventDefault();\n event.stopPropagation();\n exitCallback();\n return;\n }\n };\n const exitCallback = () => {\n if (this.isEditing) {\n this.updateRectangle();\n document.removeEventListener('pointerdown', pointerDownHandler);\n document.removeEventListener('keydown', keyDownHandler);\n IS_TEXT_EDITABLE.set(this.board, false);\n MERGING.set(this.board, false);\n callback && callback();\n const props = {\n readonly: true\n };\n this.textComponentRef.update(props);\n this.isEditing = false;\n this.exitCallback = undefined;\n }\n };\n document.addEventListener('pointerdown', pointerDownHandler);\n document.addEventListener('keydown', keyDownHandler);\n this.exitCallback = exitCallback;\n return exitCallback;\n }\n\n getSize = (element?: Element, maxWidth?: number) => {\n const computedStyle = window.getComputedStyle(this.foreignObject.children[0]);\n const fontFamily = computedStyle.fontFamily;\n const fontSize = parseFloat(computedStyle.fontSize);\n const target = element || (this.editor.children[0] as Element);\n return measureElement(\n this.board,\n target,\n {\n fontSize: fontSize,\n fontFamily\n },\n maxWidth || this.options.getMaxWidth!()\n );\n };\n\n getText = () => {\n return this.editor.children[0];\n };\n\n destroy() {\n this.g?.remove();\n this.textComponentRef?.destroy();\n this.exitCallback && this.exitCallback();\n }\n}\n\nexport const buildCompositionData = (editor: Editor, data: string) => {\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [textNode, textPath] = Editor.node(editor, editor.selection) as NodeEntry<Text>;\n const offset = editor.selection.anchor.offset;\n const clonedElement = JSON.parse(JSON.stringify(editor.children[0]));\n const root = { children: [clonedElement] };\n const newTextString = textNode.text.slice(0, offset + 1) + data + textNode.text.slice(offset + 1);\n const clonedTextNode = Node.get(root, textPath) as Text;\n clonedTextNode.text = newTextString;\n return root;\n }\n return null;\n};\n","import { PlaitBoard, WithPluginOptions } from '@plait/core';\nimport { Editor, Operation, Element as SlateElement } from 'slate';\nimport { RenderComponentRef } from '../core/render-component';\n\nexport interface PlaitTextBoard {\n renderText: (container: Element | DocumentFragment, props: TextProps) => TextComponentRef;\n}\n\nexport const withText = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & PlaitTextBoard;\n\n newBoard.renderText = (container: Element | DocumentFragment, props: TextProps) => {\n throw new Error('No implementation for renderText method.');\n };\n return newBoard;\n};\n\nexport type TextComponentRef = RenderComponentRef<TextProps>;\n\nexport interface TextProps {\n board: PlaitBoard;\n text: SlateElement;\n textPlugins?: TextPlugin[];\n readonly?: boolean;\n onChange?: (data: TextChangeData) => void;\n afterInit?: (data: Editor) => void;\n onComposition?: (data: CompositionEvent) => void;\n}\n\nexport type TextChangeData = { newText: SlateElement; operations: Operation[] };\n\nexport interface WithTextPluginOptions extends WithPluginOptions {\n textPlugins?: TextPlugin[];\n}\n\nexport type TextPlugin = (editor: Editor) => Editor;\n","import { BaseElement } from 'slate';\n\nexport type ElementSize = {\n width: number;\n height: number;\n}\n\nexport enum Alignment {\n left = 'left',\n center = 'center',\n right = 'right'\n}\n\nexport type CustomText = {\n bold?: boolean;\n italic?: boolean;\n strike?: boolean;\n code?: boolean;\n text: string;\n underlined?: boolean;\n color?: string;\n [`font-size`]?: string;\n};\n\nexport interface LinkElement extends BaseElement {\n type: 'link';\n url: string;\n}\n\nexport interface ParagraphElement extends BaseElement {\n align?: Alignment;\n}\n\nexport type CustomElement = ParagraphElement | LinkElement;\n","import { PlaitBoard, PlaitElement, RectangleClient } from '@plait/core';\nimport { RenderComponentRef } from '../core/render-component';\nimport { CommonImageItem } from '../utils/image';\n\nexport interface PlaitImageBoard {\n renderImage: (container: Element | DocumentFragment, props: ImageProps) => ImageComponentRef;\n}\n\nexport const withImage = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & PlaitImageBoard;\n\n newBoard.renderImage = (container: Element | DocumentFragment, props: ImageProps) => {\n throw new Error('No implementation for renderImage method.');\n };\n return newBoard;\n};\n\nexport type ImageComponentRef = RenderComponentRef<ImageProps>;\n\nexport interface ImageProps {\n board: PlaitBoard;\n imageItem: CommonImageItem;\n element: PlaitElement;\n isFocus?: boolean;\n getRectangle: () => RectangleClient;\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 './image/image-base.component';\nexport * from './core';\nexport * from './algorithms';\nexport * from './text';\nexport * from './image';\nexport * from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Transforms"],"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/constants/property.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/utils/drawing/resize-handle.ts","../../../packages/common/src/utils/drawing/rotate-handle.ts","../../../packages/common/src/generators/active.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/utils/elements.ts","../../../packages/common/src/utils/animate.ts","../../../packages/common/src/utils/stroke.ts","../../../packages/common/src/utils/clipboard.ts","../../../packages/common/src/utils/point-placement.ts","../../../packages/common/src/image/image.generator.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/transforms/align.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/element-ref.ts","../../../packages/common/src/core/element-flavour.ts","../../../packages/common/src/core/group.component.ts","../../../packages/common/src/plugins/with-group.ts","../../../packages/common/src/image/image-base.component.ts","../../../packages/common/src/text/text-measure.ts","../../../packages/common/src/text/text-manage.ts","../../../packages/common/src/text/with-text.ts","../../../packages/common/src/text/types.ts","../../../packages/common/src/image/with-image.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';\nexport const ROTATE_HANDLE_DISTANCE_TO_ELEMENT = 4;\nexport const ROTATE_HANDLE_SIZE = 18;\nexport const DEFAULT_FONT_FAMILY = `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'PingFang SC', 'Noto Sans', 'Noto Sans CJK SC', 'Microsoft Yahei', 'Hiragino Sans GB', Arial, sans-serif`;\nexport const DEFAULT_FILL = 'none';\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","export enum StrokeStyle {\n solid = 'solid',\n dashed = 'dashed',\n dotted = 'dotted'\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitGroupElement,\n RectangleClient,\n getElementsInGroup,\n getSelectionAngle,\n setAngleForG,\n toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {\n prepend?: boolean;\n active?: boolean;\n}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions,\n P extends PlaitBoard = PlaitBoard\n> {\n g?: SVGGElement;\n\n protected options?: V;\n\n constructor(protected board: P, 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.g) {\n this.g.remove();\n }\n if (this.options?.prepend) {\n parentG.prepend(g);\n } else {\n parentG.appendChild(g);\n }\n }\n this.g = g;\n const rectangle = this.board.getRectangle(element);\n if (!rectangle) {\n return;\n }\n let centerPoint = RectangleClient.getCenterPoint(rectangle);\n if (this.options?.active) {\n const activeRectangle = toActiveRectangleFromViewBoxRectangle(this.board, rectangle);\n centerPoint = RectangleClient.getCenterPoint(activeRectangle);\n }\n let angle;\n if (PlaitGroupElement.isGroup(element)) {\n angle = getSelectionAngle(getElementsInGroup(this.board, element, true));\n } else {\n angle = element.angle;\n }\n if (angle) {\n setAngleForG(g, centerPoint, 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 { RESIZE_HANDLE_CLASS_NAME, 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 const handleG = drawCircle(PlaitBoard.getRoughSVG(board), centerPoint, RESIZE_HANDLE_DIAMETER, options);\n handleG.classList.add(RESIZE_HANDLE_CLASS_NAME);\n return handleG;\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}\n","import { DEFAULT_COLOR, PlaitBoard, RectangleClient, createG, setStrokeLinecap } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { ROTATE_HANDLE_DISTANCE_TO_ELEMENT, ROTATE_HANDLE_SIZE } from '../../constants';\n\nconst rotateHandleRadius = 6;\n\nexport const drawRotateHandle = (board: PlaitBoard, rectangle: RectangleClient) => {\n const options: Options = { stroke: DEFAULT_COLOR, strokeWidth: 1, fillStyle: 'solid' };\n const handleCenterPoint = [\n rectangle.x - ROTATE_HANDLE_DISTANCE_TO_ELEMENT - ROTATE_HANDLE_SIZE / 2,\n rectangle.y + rectangle.height + ROTATE_HANDLE_DISTANCE_TO_ELEMENT + ROTATE_HANDLE_SIZE / 2\n ];\n const rs = PlaitBoard.getRoughSVG(board);\n const handleG = createG();\n const line = rs.path(\n `M ${handleCenterPoint[0] + rotateHandleRadius} ${handleCenterPoint[1]} A ${rotateHandleRadius} ${rotateHandleRadius}, 0, 1, 0, ${\n handleCenterPoint[0]\n } ${handleCenterPoint[1] + rotateHandleRadius}`,\n options\n );\n const arrow = rs.polygon(\n [\n [handleCenterPoint[0], handleCenterPoint[1] + rotateHandleRadius - 2],\n [handleCenterPoint[0], handleCenterPoint[1] + rotateHandleRadius + 2],\n [handleCenterPoint[0] + 4.5, handleCenterPoint[1] + rotateHandleRadius]\n ],\n { ...options, fill: DEFAULT_COLOR }\n );\n setStrokeLinecap(arrow, 'round');\n handleG.append(line, arrow);\n return handleG;\n};\n","import {\n ACTIVE_STROKE_WIDTH,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n SELECTION_RECTANGLE_CLASS_NAME,\n createG,\n drawRectangle,\n toActiveRectangleFromViewBoxRectangle\n} 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> extends GeneratorOptions {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n active: true;\n}\n\nexport const createActiveGenerator = <T extends PlaitElement = PlaitElement>(\n board: PlaitBoard,\n options: Omit<ActiveGeneratorOptions<T>, 'active'>\n) => {\n return new ActiveGenerator<T>(board, { ...options, active: true });\n};\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T>\n> {\n static key = 'active-generator';\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 activeRectangle = toActiveRectangleFromViewBoxRectangle(this.board, this.options.getRectangle(element));\n\n const delta = this.options.getStrokeWidth() * this.board.viewport.zoom;\n const activeRectangleWithDelta = RectangleClient.inflate(activeRectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangleWithDelta, {\n stroke: PRIMARY_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH\n });\n\n activeG.append(strokeG);\n strokeG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // draw resize handle\n RectangleClient.getCornerPoints(activeRectangleWithDelta).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 Point,\n RectangleClient,\n ResizeCursorClass,\n setDragging,\n RESIZE_CURSORS,\n rotatePoints,\n PlaitElement,\n getSelectedElements,\n isSelectionMoving\n} 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) => {\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, 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, P>(board: PlaitBoard, resizeRef: ResizeRef<T, K, P>, 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\nexport const hasMoreThanOnePoint = (element: PlaitElement) => {\n const points = element.points as Point[];\n return points && points.length > 1;\n};\n\nexport const hasResizeHandle = (board: PlaitBoard, element: PlaitElement) => {\n if (PlaitBoard.hasBeenTextEditing(board) || isSelectionMoving(board)) {\n return false;\n }\n const selectedElements = getSelectedElements(board);\n return selectedElements.length === 1 && selectedElements[0] === element && hasMoreThanOnePoint(element);\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 { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { Editor, Node, Element } from 'slate';\nimport { TextManage } from '../text/text-manage';\nimport { Alignment, CustomText, ParagraphElement } from '../text/types';\nimport { PlaitCommonElementRef } from '../core';\n\nexport interface TextInterface {\n getTextEditors: (board: PlaitBoard, elements?: PlaitElement[]) => Editor[] | undefined;\n findFirstTextEditor: (board: PlaitBoard) => null;\n getFirstTextEditor: (element: PlaitElement) => Editor;\n getTextEditorsByElement: (element: PlaitElement) => Editor[];\n getEditingTextEditor: (board: PlaitBoard, elements?: PlaitElement[]) => Editor | undefined;\n}\n\nexport const getTextManages = (element: PlaitElement) => {\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n return ref?.getTextManages() || [];\n};\n\nexport const getFirstTextManage = (element: PlaitElement) => {\n const textManage = getTextManages(element)[0];\n if (!textManage) {\n console.warn('can not find textManage');\n }\n return textManage;\n};\n\nexport const getTextEditorsByElement: TextInterface['getTextEditorsByElement'] = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.editor;\n });\n};\n\nexport const getFirstTextEditor: TextInterface['getFirstTextEditor'] = (element: PlaitElement) => {\n const textEditor = getTextEditorsByElement(element)[0];\n if (!textEditor) {\n console.warn('can not find textManage');\n }\n return textEditor;\n};\n\nexport const findFirstTextEditor: TextInterface['findFirstTextEditor'] = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board);\n let firstEditor: Editor | null = null;\n selectedElements.forEach(element => {\n const editors = getTextEditorsByElement(element);\n if (!firstEditor && editors && editors.length > 0) {\n firstEditor = editors[0];\n }\n });\n return firstEditor;\n};\n\nexport const getElementsText = (elements: PlaitElement[]) => {\n return elements\n .map(item => {\n try {\n const editors = getTextEditorsByElement(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\nexport const getTextEditors: TextInterface['getTextEditors'] = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements || getSelectedElements(board);\n if (selectedElements.length) {\n const textManages: TextManage[] = [];\n selectedElements.forEach(item => {\n textManages.push(...getTextManages(item));\n });\n const editingTextManage = textManages.find(textManage => textManage.isEditing);\n if (editingTextManage) {\n return [editingTextManage.editor];\n }\n return textManages.map(item => {\n return item.editor;\n });\n }\n return undefined;\n};\n\nexport const getEditingTextEditor: TextInterface['getEditingTextEditor'] = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements || getSelectedElements(board);\n const textManages: TextManage[] = [];\n selectedElements.forEach(item => {\n textManages.push(...getTextManages(item));\n });\n const editingTextManage = textManages.find(textManage => textManage.isEditing);\n if (editingTextManage) {\n return editingTextManage.editor;\n }\n return undefined;\n};\n\nexport const buildText = (text: string | Element, align?: Alignment, properties?: Partial<CustomText>) => {\n properties = properties || {};\n const plaitText = typeof text === 'string' ? { children: [{ text, ...properties }], type: 'paragraph' } : text;\n if (align) {\n (plaitText as ParagraphElement).align = align;\n }\n return plaitText;\n};\n\nexport const getLineHeightByFontSize = (fontSize: number) => {\n if (fontSize === 14) {\n return 20;\n }\n return fontSize * 1.5;\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\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.getBoardContext(board);\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};\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, PlaitBoard, Point, RectangleClient, createDebugGenerator, DebugGenerator } from '@plait/core';\nimport { removeDuplicatePoints, simplifyOrthogonalPoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nconst debugGenerator = createDebugGenerator('debug:plait:elbow-line-routing');\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, board?: PlaitBoard) => {\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 }, board);\n return route;\n};\n\nexport const routeAdjust = (path: Point[], options: RouteAdjustOptions, board?: PlaitBoard) => {\n const { sourceRectangle, targetRectangle, centerX, centerY } = options;\n if (board) {\n debugGenerator.clear();\n }\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 }, board);\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 }, board);\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions, board?: PlaitBoard): 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.getCornerPointsByPoints(tempRectPoints);\n if (board) {\n debugGenerator.drawRectangle(board, tempRect);\n }\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 simplifyPoints = simplifyOrthogonalPoints([...newPath]);\n // if (board) {\n // debugGenerator.drawLine(board, simplifyPoints);\n // }\n const newTurnCount = simplifyPoints.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 { PlaitBoard, setDragging } from '@plait/core';\nimport { RotateRef } from '../types';\n\nexport const IS_ROTATING = new WeakMap<PlaitBoard, RotateRef>();\n\nexport const isRotating = (board: PlaitBoard) => {\n return !!IS_ROTATING.get(board);\n};\n\nexport const addRotating = (board: PlaitBoard, rotateRef: RotateRef) => {\n PlaitBoard.getBoardContainer(board).classList.add(`draw-elements-rotating`);\n IS_ROTATING.set(board, rotateRef);\n setDragging(board, true);\n};\n\nexport const removeRotating = (board: PlaitBoard) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`draw-elements-rotating`);\n IS_ROTATING.delete(board);\n setDragging(board, false);\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { DEFAULT_FILL, TRANSPARENT } from '../constants';\n\nexport const getElementArea = (board: PlaitBoard, element: PlaitElement) => {\n const rectangle = board.getRectangle(element);\n if (rectangle) {\n return rectangle.width * rectangle.height;\n }\n return 0;\n};\n\nexport const sortElementsByArea = (board: PlaitBoard, elements: PlaitElement[], direction: 'desc' | 'asc' = 'asc') => {\n return elements.sort((a, b) => {\n const areaA = getElementArea(board, a);\n const areaB = getElementArea(board, b);\n return direction === 'asc' ? areaA - areaB : areaB - areaA;\n });\n};\n\nexport const isFilled = (fill: string) => {\n return fill && fill !== DEFAULT_FILL && fill !== TRANSPARENT;\n};\n","export type AnimateOption = { stop: () => void; start: () => void };\n\nexport function animate(tween: (t: number) => void, duration: number, ease: Function, callback: Function): AnimateOption {\n const start = getTimestamp();\n let stopAnimation = false;\n\n function tick(now: number) {\n if (stopAnimation) {\n return;\n }\n const elapsed = now - start;\n const t = Math.min(elapsed / duration, 1);\n tween(ease(t));\n if (t < 1) {\n requestAnimationFrame(tick);\n } else if (callback) {\n callback();\n }\n }\n\n requestAnimationFrame(tick);\n return {\n stop: () => (stopAnimation = true),\n start: () => {\n stopAnimation = false;\n requestAnimationFrame(tick);\n }\n };\n}\n\nexport function getTimestamp() {\n if (window.performance && window.performance.now) {\n return window.performance.now();\n } else {\n return Date.now();\n }\n}\n\nexport function linear(t: number) {\n return t;\n}\n","import { StrokeStyle } from '../constants';\n\nexport const getStrokeLineDash = (strokeStyle: StrokeStyle, strokeWidth: number) => {\n switch (strokeStyle) {\n case StrokeStyle.dashed:\n return [8, 8 + strokeWidth];\n case StrokeStyle.dotted:\n return [2, 4 + strokeWidth];\n default:\n return undefined;\n }\n};\n","import { idCreator, PlaitBoard, PlaitElement, Point, Transforms } from '@plait/core';\n\nexport const buildClipboardData = (\n board: PlaitBoard,\n elements: PlaitElement[],\n startPoint: Point,\n elementBuilder?: (element: PlaitElement) => PlaitElement | undefined\n) => {\n return elements.map(element => {\n const newElement = elementBuilder && elementBuilder(element);\n if (newElement) {\n return newElement;\n }\n if (element.points) {\n const points = element.points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);\n return { ...element, points };\n }\n return element;\n });\n};\n\nexport const insertClipboardData = (\n board: PlaitBoard,\n elements: PlaitElement[],\n startPoint: Point,\n elementHandler?: (element: PlaitElement, idsMap: Record<string, string>) => void\n) => {\n const idsMap: Record<string, string> = {};\n elements.forEach(element => {\n idsMap[element.id] = idCreator();\n });\n elements.forEach(element => {\n element.id = idsMap[element.id];\n elementHandler && elementHandler(element, idsMap);\n if (element.points) {\n element.points = element.points.map(point => [startPoint[0] + point[0], startPoint[1] + point[1]]) as [Point, Point];\n }\n Transforms.insertNode(board, element, [board.children.length]);\n });\n Transforms.addSelectionWithTemporaryElements(board, elements);\n};\n","import { Direction, Point } from '@plait/core';\n\n// Based on right\n// Right -> Left:\n// 1. End point -> starting point/start point -> end point\n// 2. Add -> Subtract\n\n// Horizontal -> Vertical:\n// 1. Starting point/end point -> vertical axis\n// 2. Addition and subtraction -> vertical axis\n\n// Bottom -> Top:\n// 1. End point -> starting point/end point -> starting point\n// 2. Add -> Subtract\nexport const moveXOfPoint = (point: Point, distance: number, direction: Direction = Direction.right): Point => {\n if (direction === Direction.left) {\n return [point[0] - distance, point[1]];\n }\n if (direction === Direction.bottom) {\n return [point[0], point[1] + distance];\n }\n if (direction === Direction.top) {\n return [point[0], point[1] - distance];\n }\n return [point[0] + distance, point[1]];\n};\n\nexport const moveYOfPoint = (point: Point, distance: number, direction: Direction = Direction.right): Point => {\n if (direction === Direction.bottom) {\n return [point[0] + distance, point[1]];\n }\n if (direction === Direction.top) {\n return [point[0] + distance, point[1]];\n }\n return [point[0], point[1] + distance];\n};\n\nexport const getDirectionByIndex = (index: number) => {\n if (index === 0) {\n return Direction.top;\n }\n if (index === 1) {\n return Direction.right;\n }\n if (index === 2) {\n return Direction.bottom;\n }\n if (index === 3) {\n return Direction.left;\n }\n return Direction.right;\n};\n\nexport const getXDistanceBetweenPoint = (point1: Point, point2: Point, isHorizontal: boolean) => {\n if (isHorizontal) {\n return Math.abs(point1[0] - point2[0]);\n } else {\n return Math.abs(point1[1] - point2[1]);\n }\n};\n","import {\n ACTIVE_STROKE_WIDTH,\n PlaitBoard,\n PlaitElement,\n RectangleClient,\n createForeignObject,\n createG,\n getSelectedElements,\n isSelectionMoving,\n setAngleForG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator, GeneratorExtraData, GeneratorOptions } from '../generators/generator';\nimport { CommonImageItem, hasResizeHandle, getElementOfFocusedImage } from '../utils';\nimport { ActiveGenerator, createActiveGenerator } from '../generators/active.generator';\nimport { PlaitImageBoard, ImageComponentRef, ImageProps } from './with-image';\n\nexport const FOREIGN_OBJECT_IMAGE_CLASS_NAME = 'foreign-object-image';\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 GeneratorExtraData,\n ImageGeneratorOptions<T> & GeneratorOptions\n> {\n static key = 'image-generator';\n\n foreignObject!: SVGForeignObjectElement;\n\n imageComponentRef!: ImageComponentRef;\n\n activeGenerator!: ActiveGenerator;\n\n isFocus = false;\n\n element!: T;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T): boolean {\n return !!this.options.getImageItem(element);\n }\n\n draw(element: T): SVGGElement {\n this.element = element;\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n this.foreignObject.classList.add(FOREIGN_OBJECT_IMAGE_CLASS_NAME);\n g.append(this.foreignObject);\n const props: ImageProps = {\n board: this.board,\n imageItem: this.options.getImageItem(element),\n element,\n getRectangle: () => {\n return this.options.getRectangle(element);\n }\n };\n this.imageComponentRef = (this.board as unknown as PlaitImageBoard).renderImage(this.foreignObject, props);\n\n this.activeGenerator = createActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (!(selectedElements.length === 1 && !isSelectionMoving(this.board))) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if ((selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.options.getRectangle(this.element);\n },\n hasResizeHandle: () => {\n const isSelectedImageElement = hasResizeHandle(this.board, this.element);\n const isSelectedImage = !!getElementOfFocusedImage(this.board);\n return isSelectedImage || isSelectedImageElement;\n }\n });\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n this.element = current;\n if (previous !== current && this.imageComponentRef) {\n const props = {\n imageItem: this.options.getImageItem(current),\n element: current,\n getRectangle: () => {\n return this.options.getRectangle(current);\n }\n };\n this.imageComponentRef.update(props);\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 !== undefined) {\n setAngleForG(this.g!, RectangleClient.getCenterPoint(currentForeignObject), current.angle);\n }\n const activeG = PlaitBoard.getActiveHost(this.board);\n this.activeGenerator.processDrawing(current, activeG, { selected: this.isFocus });\n }\n\n setFocus(element: PlaitElement, isFocus: boolean) {\n this.isFocus = isFocus;\n const activeG = PlaitBoard.getActiveHost(this.board);\n this.activeGenerator.processDrawing(element, activeG, { selected: isFocus });\n const props: Partial<ImageProps> = {\n isFocus\n };\n this.imageComponentRef.update(props);\n }\n\n destroy(): void {\n super.destroy();\n this.imageComponentRef?.destroy();\n this.activeGenerator?.destroy();\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 | null, options: SetOptions) => {\n setProperty(board, { fill }, options);\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string | null, 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 { 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 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, ResizeOptions, 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, P = ResizeOptions>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K, P>\n) => {\n const { pointerDown, pointerMove, globalPointerUp, touchStart } = board;\n let resizeHitTestRef: ResizeHitTestRef<T, K, P> | null = null;\n let resizeRef: ResizeRef<T, K, P> | null = null;\n let startPoint: Point | null = null;\n let hoverHitTestRef: ResizeHitTestRef<T, K, P> | null = null;\n\n board.touchStart = (event: TouchEvent) => {\n if (resizeRef) {\n event.preventDefault();\n return;\n }\n touchStart(event);\n };\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 options: resizeHitTestRef.options\n };\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n clearHoverHitTestRef();\n pointerMove(event);\n return;\n }\n if (startPoint && resizeHitTestRef && !isResizing(board)) {\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 clearHoverHitTestRef();\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 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 }\n };\n\n const clearHoverHitTestRef = () => {\n if (hoverHitTestRef) {\n if (hoverHitTestRef.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n }\n hoverHitTestRef = null;\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 static key = 'GroupGenerator';\n\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 { PlaitElementRef } from '@plait/core';\nimport { Generator } from '../generators';\nimport { TextManage } from '../text';\n\nexport class PlaitCommonElementRef implements PlaitElementRef {\n private textManages: TextManage[] = [];\n\n private generatorMap = new Map<string, Generator | Object>();\n\n addGenerator<T extends Object = Generator>(key: string, generator: T) {\n this.generatorMap.set(key, generator);\n }\n\n getGenerator<T extends Object = Generator>(key: string) {\n return this.generatorMap.get(key) as T;\n }\n\n initializeTextManage(textManage: TextManage | TextManage[]) {\n this.textManages = [];\n if (Array.isArray(textManage)) {\n this.textManages.push(...textManage);\n } else {\n this.textManages.push(textManage);\n }\n }\n\n getTextManages() {\n return this.textManages;\n }\n\n updateActiveSection = () => {};\n\n destroyTextManage() {\n this.textManages.forEach((textManage) => {\n textManage.destroy();\n });\n this.textManages = [];\n }\n}\n","import { ElementFlavour, PlaitBoard, PlaitElement } from '@plait/core';\nimport { PlaitCommonElementRef } from './element-ref';\n\nexport class CommonElementFlavour<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard,\n R extends PlaitCommonElementRef = PlaitCommonElementRef\n> extends ElementFlavour<T, K, R> {\n constructor(elementRef = new PlaitCommonElementRef()) {\n super(elementRef as R);\n }\n}\n","import { OnContextChanged, PlaitBoard, PlaitGroup, PlaitPluginElementContext, getRectangleByGroup, isSelectionMoving } from '@plait/core';\nimport { GroupGenerator } from '../generators/group.generator';\nimport { ActiveGenerator, createActiveGenerator } from '../generators';\nimport { CommonElementFlavour } from './element-flavour';\n\nexport class GroupComponent extends CommonElementFlavour<PlaitGroup, PlaitBoard> implements OnContextChanged<PlaitGroup, PlaitBoard> {\n constructor() {\n super();\n }\n\n activeGenerator!: ActiveGenerator<PlaitGroup>;\n\n groupGenerator!: GroupGenerator;\n\n initializeGenerator() {\n this.activeGenerator = createActiveGenerator<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 this.getRef().addGenerator(GroupGenerator.key, this.groupGenerator);\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<PlaitGroup, PlaitBoard>,\n previous: PlaitPluginElementContext<PlaitGroup, PlaitBoard>\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 PlaitPointerType,\n WritableClipboardOperationType,\n throttleRAF,\n isMovingElements,\n getAllGroups,\n isSelectedElementOrGroup\n} from '@plait/core';\nimport { GroupComponent } from '../core/group.component';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { isResizing } from '../utils';\nimport { PlaitCommonElementRef } from '../core';\nimport { GroupGenerator } from '../generators/group.generator';\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 onChange\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 throttleRAF(board, 'with-group', () => {\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 pointer = PlaitBoard.getPointer(board);\n if (!isResizing(board) && !isMovingElements(board) && pointer === PlaitPointerType.selection) {\n const hitElements = getHitElementsBySelection(board, selection);\n if (hitElements.length) {\n groupRectangleG = createGroupRectangleG(board, hitElements);\n groupRectangleG && PlaitBoard.getElementTopHost(board).append(groupRectangleG);\n }\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[], originData?: PlaitElement[]) => {\n const groups = getSelectedGroups(board, elements, originData);\n return getRelatedFragment([...elements, ...groups], originData);\n };\n\n board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n let elements: PlaitElement[] = [];\n if (clipboardData?.elements?.length) {\n elements = new Array(clipboardData?.elements?.length);\n const groups = getHighestSelectedGroups(board, clipboardData?.elements);\n const selectedIsolatedElements = getSelectedIsolatedElements(board, clipboardData?.elements);\n selectedIsolatedElements.forEach((item) => {\n const index = clipboardData.elements!.map((element) => element.id).indexOf(item.id);\n elements.splice(index, 1, !item.groupId ? item : updateGroupId(item, undefined));\n });\n if (groups.length) {\n groups.forEach((item) => {\n const index = clipboardData.elements!.map((element) => element.id).indexOf(item.id);\n const newGroup = { ...updateGroupId(item, undefined), id: idCreator() };\n elements.splice(index, 1, newGroup);\n updateElementsGroupId(item, clipboardData.elements!, newGroup.id, elements);\n });\n }\n clipboardData.elements = elements;\n }\n insertFragment(clipboardData, targetPoint, operationType);\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 removeGroups = getRemoveGroups(board);\n if (removeGroups && removeGroups.length) {\n data.push(...removeGroups);\n }\n return getDeletedFragment(data);\n };\n\n board.deleteFragment = (elements: PlaitElement[]) => {\n if (removeGroups?.length) {\n updateSiblingElementGroupId(board, removeGroups);\n }\n deleteFragment(elements);\n removeGroups = null;\n };\n\n board.getRectangle = (element: PlaitElement) => {\n if (PlaitGroupElement.isGroup(element)) {\n return getRectangleByGroup(board, element, true);\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 Transforms.addGroup(board);\n return;\n }\n if (isKeyHotkey('mod+shift+g', event)) {\n event.preventDefault();\n Transforms.removeGroup(board);\n return;\n }\n }\n keyDown(event);\n };\n\n board.onChange = () => {\n onChange();\n const groups = getAllGroups(board);\n groups.forEach((group) => {\n const elementsInGroup = getElementsInGroup(board, group, false, true);\n const isPartialSelectGroup =\n elementsInGroup.some((item) => isSelectedElementOrGroup(board, item)) &&\n !elementsInGroup.every((item) => isSelectedElementOrGroup(board, item));\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(group);\n const g = PlaitElement.getElementG(group);\n ref.getGenerator(GroupGenerator.key).processDrawing(group, g, isPartialSelectGroup);\n });\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, elements: PlaitElement[]) => {\n const elementsInGroup = clipboardDataElements.filter((item) => item.groupId === group.id);\n if (elementsInGroup.length) {\n elementsInGroup.forEach((item) => {\n const index = clipboardDataElements.map((item) => item.id).indexOf(item.id);\n if (PlaitGroupElement.isGroup(item)) {\n const newGroup = { ...updateGroupId(item, newGroupId), id: idCreator() };\n elements.splice(index, 1, newGroup);\n updateElementsGroupId(item, clipboardDataElements, newGroup.id, elements);\n } else {\n elements.splice(index, 1, 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 { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport abstract class ImageBaseComponent {\n _isFocus!: boolean;\n\n element!: PlaitElement;\n\n board!: PlaitBoard;\n\n set isFocus(value: boolean) {\n this._isFocus = value;\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n abstract nativeElement(): HTMLElement;\n}\n","import { Node } from 'slate';\nimport { CustomText, ElementSize, ParagraphElement } from './types';\nimport { getLineHeightByFontSize } from '../utils/text';\nimport { ceilToDecimal, PlaitBoard } from '@plait/core';\n\nconst BOARD_TO_CANVAS_MAP = new WeakMap<PlaitBoard, HTMLCanvasElement>();\n\nconst ELEMENT_TO_SIZE_MAP = new WeakMap<ParagraphElement, ElementSize>();\n\nconst getCanvasForBoard = (board: PlaitBoard | null): HTMLCanvasElement => {\n if (board) {\n if (!BOARD_TO_CANVAS_MAP.get(board)) {\n const canvas = document.createElement('canvas');\n BOARD_TO_CANVAS_MAP.set(board, canvas);\n return canvas;\n }\n return BOARD_TO_CANVAS_MAP.get(board) as HTMLCanvasElement;\n }\n return document.createElement('canvas');\n};\n\nexport const getElementSize = (\n board: PlaitBoard | null,\n element: ParagraphElement,\n options: {\n fontSize: number;\n fontFamily: string;\n },\n containerMaxWidth: number = 10000\n) => {\n let size = ELEMENT_TO_SIZE_MAP.get(element);\n if (size) {\n return size;\n }\n size = measureElement(board, element, options, containerMaxWidth);\n ELEMENT_TO_SIZE_MAP.set(element, size);\n return size;\n};\n\nexport const updateElementSizeCache = (board: PlaitBoard | null, element: ParagraphElement, size: ElementSize) => {\n ELEMENT_TO_SIZE_MAP.set(element, size);\n};\n\nexport const clearElementSizeCache = (board: PlaitBoard | null, element: ParagraphElement) => {\n ELEMENT_TO_SIZE_MAP.delete(element);\n};\n\nexport function measureElement(\n board: PlaitBoard | null,\n element: ParagraphElement,\n options: {\n fontSize: number;\n fontFamily: string;\n },\n containerMaxWidth: number = 10000\n) {\n containerMaxWidth = ceilToDecimal(containerMaxWidth, 0);\n const canvas = getCanvasForBoard(board);\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n const textEntries = Node.texts(element);\n const lines: CustomText[][] = [[]];\n for (const textEntry of textEntries) {\n const [text] = textEntry;\n const textString = Node.string(text);\n const textArray = textString.split('\\n');\n textArray.forEach((segmentTextString: string, index: number) => {\n const segmentText = { ...text, text: segmentTextString };\n if (index === 0) {\n const currentLine = lines[lines.length - 1];\n currentLine.push(segmentText);\n } else {\n const newLine: CustomText[] = [];\n newLine.push(segmentText);\n lines.push(newLine);\n }\n });\n }\n\n let finalWidth = 0;\n let finalHeight = 0;\n lines.forEach((lineTexts: CustomText[], index: number) => {\n let lineWidth = 0;\n let lineHeight = 0;\n let maxLineHeight = getLineHeightByFontSize(options.fontSize);\n let hasBreakLine = false;\n const lineText: string[][] = [[]];\n lineTexts.forEach((text: CustomText, index: number) => {\n const isLast = index === lineTexts.length - 1;\n if (text['font-size'] && (isLast || text.text !== '')) {\n const lineHeight = getLineHeightByFontSize(parseFloat(text['font-size']));\n if (lineHeight > maxLineHeight) {\n maxLineHeight = lineHeight;\n }\n }\n const font = getFont(text, { fontFamily: options.fontFamily, fontSize: options.fontSize });\n ctx.font = font;\n const textString = text.text;\n for (let i = 0; i < textString.length; i++) {\n const char = textString[i];\n const width = ctx.measureText(char).width;\n if (lineWidth + width > containerMaxWidth) {\n finalWidth = Math.max(finalWidth, lineWidth);\n lineWidth = width;\n lineHeight += maxLineHeight;\n hasBreakLine = true;\n lineText.push([]);\n lineText[lineText.length - 1].push(char);\n } else {\n lineText[lineText.length - 1].push(char);\n lineWidth += width;\n }\n }\n });\n lineHeight += maxLineHeight;\n finalHeight += lineHeight;\n if (!hasBreakLine) {\n finalWidth = Math.max(finalWidth, lineWidth);\n }\n });\n return { width: finalWidth, height: finalHeight };\n}\n\nconst getFont = (\n text: CustomText,\n options: {\n fontSize: number;\n fontFamily: string;\n }\n) => {\n return `${text.italic ? 'italic ' : ''} ${text.bold ? 'bold ' : ''} ${text['font-size'] || options.fontSize}px ${options.fontFamily} `;\n};\n","import {\n IS_TEXT_EDITABLE,\n MERGING,\n PlaitBoard,\n Point,\n RectangleClient,\n createForeignObject,\n createG,\n isDebug,\n isTouchDevice,\n setAngleForG,\n toHostPoint,\n toViewBoxPoint,\n updateForeignObject,\n updateForeignObjectWidth\n} from '@plait/core';\nimport { Editor, Element, NodeEntry, Range, Text, Node, Transforms, Operation } from 'slate';\nimport { PlaitTextBoard, TextPlugin } from './with-text';\nimport { clearElementSizeCache, measureElement, updateElementSizeCache } from './text-measure';\nimport { TextChangeData, TextComponentRef, TextProps } from './with-text';\nimport { ParagraphElement } from './types';\n\nexport interface TextManageChangeData {\n newText?: Element;\n operations?: Operation[];\n width: number;\n height: number;\n}\n\nexport class TextManage {\n isEditing = false;\n\n editor!: Editor;\n\n g!: SVGGElement;\n\n foreignObject!: SVGForeignObjectElement;\n\n textComponentRef!: TextComponentRef;\n\n exitCallback?: () => void;\n\n constructor(\n private board: PlaitBoard,\n private options: {\n getRectangle: () => RectangleClient;\n onChange?: (data: TextManageChangeData) => void;\n getRenderRectangle?: () => RectangleClient;\n getMaxWidth?: () => number;\n textPlugins?: TextPlugin[];\n }\n ) {\n if (!this.options.getMaxWidth) {\n this.options.getMaxWidth = () => 999;\n }\n }\n\n draw(text: Element) {\n const _rectangle = this.options.getRectangle();\n this.g = createG();\n this.foreignObject = createForeignObject(_rectangle.x, _rectangle.y, _rectangle.width, _rectangle.height);\n this.g.append(this.foreignObject);\n this.g.classList.add('text');\n const props: TextProps = {\n board: this.board,\n text,\n textPlugins: this.options.textPlugins,\n onChange: (data: TextChangeData) => {\n if (data.operations.some((op) => !Operation.isSelectionOperation(op))) {\n const { width: newWidth, height: newHeight } = this.getSize();\n this.options.onChange && this.options.onChange({ ...data, width: newWidth, height: newHeight });\n MERGING.set(this.board, true);\n }\n },\n afterInit: (editor: Editor) => {\n this.editor = editor;\n },\n onComposition: (event: CompositionEvent) => {\n if (event.type === 'compositionend') {\n clearElementSizeCache(this.board, this.editor.children[0] as ParagraphElement);\n return;\n }\n const fakeRoot = buildCompositionData(this.editor, event.data);\n if (fakeRoot) {\n const sizeData = this.getSize(fakeRoot.children[0]);\n updateElementSizeCache(this.board, this.editor.children[0] as ParagraphElement, sizeData);\n // invoking onChange asap to avoid blinking on typing chinese\n this.options.onChange && this.options.onChange({ ...sizeData });\n MERGING.set(this.board, true);\n }\n }\n };\n this.textComponentRef = (this.board as unknown as PlaitTextBoard).renderText(this.foreignObject, props);\n }\n\n updateRectangleWidth(width: number) {\n updateForeignObjectWidth(this.g, width);\n }\n\n updateAngle(centerPoint: Point, angle: number = 0) {\n setAngleForG(this.g, centerPoint, angle);\n }\n\n updateRectangle(rectangle?: RectangleClient) {\n const { x, y, width, height } = rectangle || this.options.getRectangle();\n updateForeignObject(this.g, width, height, x, y);\n }\n\n updateText(newText: Element) {\n const props = {\n text: newText\n };\n this.textComponentRef.update(props);\n }\n\n edit(callback?: () => void, exitEdit?: (event: Event) => boolean) {\n this.isEditing = true;\n IS_TEXT_EDITABLE.set(this.board, true);\n if (isDebug()) {\n console.log('text-manage', 'set text editing to ', true);\n }\n const props: Partial<TextProps> = {\n readonly: false\n };\n this.textComponentRef.update(props);\n\n if (isTouchDevice()) {\n setTimeout(() => {\n const end = Editor.end(this.editor, [0]);\n Transforms.select(this.editor, end);\n }, 0);\n } else {\n Transforms.select(this.editor, [0]);\n }\n\n const pointerDownHandler = (event: PointerEvent) => {\n const point = toViewBoxPoint(this.board, toHostPoint(this.board, event.x, event.y));\n const textRec = this.options.getRenderRectangle ? this.options.getRenderRectangle() : this.options.getRectangle();\n const clickInText = RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), textRec);\n const isAttached = (event.target as HTMLElement).closest('.plait-board-attached');\n if (!clickInText && !isAttached) {\n // handle composition input state, like: Chinese IME Composition Input\n setTimeout(() => {\n exitCallback();\n }, 0);\n }\n };\n const keyDownHandler = (event: KeyboardEvent) => {\n if (event.isComposing) {\n return;\n }\n if (event.key === 'Escape' || event.key === 'Tab' || (exitEdit ? exitEdit(event) : false)) {\n event.preventDefault();\n event.stopPropagation();\n exitCallback();\n return;\n }\n };\n const exitCallback = () => {\n if (this.isEditing) {\n this.updateRectangle();\n document.removeEventListener('pointerdown', pointerDownHandler);\n document.removeEventListener('keydown', keyDownHandler);\n IS_TEXT_EDITABLE.set(this.board, false);\n if (isDebug()) {\n console.log('text-manage', 'set IS_TEXT_EDITABLE to ', false);\n }\n MERGING.set(this.board, false);\n callback && callback();\n const props = {\n readonly: true\n };\n this.textComponentRef.update(props);\n this.isEditing = false;\n this.exitCallback = undefined;\n }\n };\n document.addEventListener('pointerdown', pointerDownHandler);\n document.addEventListener('keydown', keyDownHandler);\n this.exitCallback = exitCallback;\n return exitCallback;\n }\n\n getSize = (element?: Element, maxWidth?: number) => {\n const computedStyle = window.getComputedStyle(this.foreignObject.children[0]);\n const fontFamily = computedStyle.fontFamily;\n const fontSize = parseFloat(computedStyle.fontSize);\n const target = element || (this.editor.children[0] as Element);\n return measureElement(\n this.board,\n target,\n {\n fontSize: fontSize,\n fontFamily\n },\n maxWidth || this.options.getMaxWidth!()\n );\n };\n\n getText = () => {\n return this.editor.children[0];\n };\n\n destroy() {\n this.g?.remove();\n this.textComponentRef?.destroy();\n this.exitCallback && this.exitCallback();\n }\n}\n\nexport const buildCompositionData = (editor: Editor, data: string) => {\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [textNode, textPath] = Editor.node(editor, editor.selection) as NodeEntry<Text>;\n const offset = editor.selection.anchor.offset;\n const clonedElement = JSON.parse(JSON.stringify(editor.children[0]));\n const root = { children: [clonedElement] };\n const newTextString = textNode.text.slice(0, offset + 1) + data + textNode.text.slice(offset + 1);\n const clonedTextNode = Node.get(root, textPath) as Text;\n clonedTextNode.text = newTextString;\n return root;\n }\n return null;\n};\n","import { PlaitBoard, WithPluginOptions } from '@plait/core';\nimport { Editor, Operation, Element as SlateElement } from 'slate';\nimport { RenderComponentRef } from '../core/render-component';\n\nexport interface PlaitTextBoard {\n renderText: (container: Element | DocumentFragment, props: TextProps) => TextComponentRef;\n}\n\nexport const withText = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & PlaitTextBoard;\n\n newBoard.renderText = (container: Element | DocumentFragment, props: TextProps) => {\n throw new Error('No implementation for renderText method.');\n };\n return newBoard;\n};\n\nexport type TextComponentRef = RenderComponentRef<TextProps>;\n\nexport interface TextProps {\n board: PlaitBoard;\n text: SlateElement;\n textPlugins?: TextPlugin[];\n readonly?: boolean;\n onChange?: (data: TextChangeData) => void;\n afterInit?: (data: Editor) => void;\n onComposition?: (data: CompositionEvent) => void;\n}\n\nexport type TextChangeData = { newText: SlateElement; operations: Operation[] };\n\nexport interface WithTextPluginOptions extends WithPluginOptions {\n textPlugins?: TextPlugin[];\n}\n\nexport type TextPlugin = (editor: Editor) => Editor;\n","import { BaseElement } from 'slate';\n\nexport type ElementSize = {\n width: number;\n height: number;\n}\n\nexport enum Alignment {\n left = 'left',\n center = 'center',\n right = 'right'\n}\n\nexport type CustomText = {\n bold?: boolean;\n italic?: boolean;\n strike?: boolean;\n code?: boolean;\n text: string;\n underlined?: boolean;\n color?: string;\n [`font-size`]?: string;\n};\n\nexport interface LinkElement extends BaseElement {\n type: 'link';\n url: string;\n}\n\nexport interface ParagraphElement extends BaseElement {\n align?: Alignment;\n}\n\nexport type CustomElement = ParagraphElement | LinkElement;\n","import { PlaitBoard, PlaitElement, RectangleClient } from '@plait/core';\nimport { RenderComponentRef } from '../core/render-component';\nimport { CommonImageItem } from '../utils/image';\n\nexport interface PlaitImageBoard {\n renderImage: (container: Element | DocumentFragment, props: ImageProps) => ImageComponentRef;\n}\n\nexport const withImage = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & PlaitImageBoard;\n\n newBoard.renderImage = (container: Element | DocumentFragment, props: ImageProps) => {\n throw new Error('No implementation for renderImage method.');\n };\n return newBoard;\n};\n\nexport type ImageComponentRef = RenderComponentRef<ImageProps>;\n\nexport interface ImageProps {\n board: PlaitBoard;\n imageItem: CommonImageItem;\n element: PlaitElement;\n isFocus?: boolean;\n getRectangle: () => RectangleClient;\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 './image/image-base.component';\nexport * from './core';\nexport * from './algorithms';\nexport * from './text';\nexport * from './image';\nexport * from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Transforms"],"mappings":"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"}
|