@plait/core 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plait-core.mjs","sources":["../../../packages/plait/src/utils/weak-maps.ts","../../../packages/plait/src/utils/tree.ts","../../../packages/plait/src/utils/element.ts","../../../packages/plait/src/interfaces/board.ts","../../../packages/plait/src/interfaces/pointer.ts","../../../packages/plait/src/utils/helper.ts","../../../packages/plait/src/interfaces/viewport.ts","../../../packages/plait/src/interfaces/path.ts","../../../packages/plait/src/interfaces/node.ts","../../../packages/plait/src/transforms/general.ts","../../../packages/plait/src/transforms/node.ts","../../../packages/plait/src/transforms/selection.ts","../../../packages/plait/src/transforms/viewport.ts","../../../packages/plait/src/utils/math.ts","../../../packages/plait/src/utils/board.ts","../../../packages/plait/src/utils/dom/common.ts","../../../packages/plait/src/utils/dom/foreign.ts","../../../packages/plait/src/utils/environment.ts","../../../packages/plait/src/utils/selected-element.ts","../../../packages/plait/src/core/element/context-change.ts","../../../packages/plait/src/core/element/plugin-element.ts","../../../packages/plait/src/interfaces/element.ts","../../../packages/plait/src/interfaces/rectangle-client.ts","../../../packages/plait/src/interfaces/operation.ts","../../../packages/plait/src/interfaces/point.ts","../../../packages/plait/src/interfaces/selection.ts","../../../packages/plait/src/interfaces/history.ts","../../../packages/plait/src/utils/history.ts","../../../packages/plait/src/utils/hotkeys.ts","../../../packages/plait/src/utils/id-creator.ts","../../../packages/plait/src/constants/index.ts","../../../packages/plait/src/utils/draw/rectangle.ts","../../../packages/plait/src/utils/draw/arrow.ts","../../../packages/plait/src/utils/draw/circle.ts","../../../packages/plait/src/utils/draw/line.ts","../../../packages/plait/src/utils/viewport.ts","../../../packages/plait/src/utils/common.ts","../../../packages/plait/src/utils/moving-element.ts","../../../packages/plait/src/transforms/board.ts","../../../packages/plait/src/transforms/index.ts","../../../packages/plait/src/plugins/create-board.ts","../../../packages/plait/src/plugins/with-board.ts","../../../packages/plait/src/plugins/with-history.ts","../../../packages/plait/src/plugins/with-hand.ts","../../../packages/plait/src/constants/selection.ts","../../../packages/plait/src/plugins/with-selection.ts","../../../packages/plait/src/plugins/with-viewport.ts","../../../packages/plait/src/plugins/with-moving.ts","../../../packages/plait/src/core/element/element.component.ts","../../../packages/plait/src/core/children/children.component.ts","../../../packages/plait/src/core/toolbar/toolbar.component.ts","../../../packages/plait/src/core/toolbar/toolbar.component.html","../../../packages/plait/src/board/board.component.ts","../../../packages/plait/src/plait.module.ts","../../../packages/plait/src/public-api.ts","../../../packages/plait/src/plait-core.ts"],"sourcesContent":["import { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\n\n// record richtext type status\nexport const IS_BOARD_CACHE = new WeakMap<Object, boolean>();\n\nexport const FLUSHING = new WeakMap<PlaitBoard, boolean>();\n\nexport const NODE_TO_INDEX = new WeakMap<PlaitNode, number>();\n\nexport const NODE_TO_PARENT = new WeakMap<PlaitNode, Ancestor>();\n\nexport const IS_TEXT_EDITABLE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ON_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n\nexport const BOARD_TO_ROUGH_SVG = new WeakMap<PlaitBoard, RoughSVG>();\n\nexport const BOARD_TO_HOST = new WeakMap<PlaitBoard, SVGSVGElement>();\n\nexport const BOARD_TO_ELEMENT_HOST = new WeakMap<PlaitBoard, SVGGElement>();\n\nexport const BOARD_TO_SELECTED_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_POINT = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_VIEWPORT_ORIGINATION = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_IS_SELECTION_MOVING = new WeakMap<PlaitBoard, boolean>();\n\n// save no standard selected elements\nexport const BOARD_TO_TEMPORARY_ELEMENTS = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n","export function depthFirstRecursion<T extends TreeNode = TreeNode>(node: T, callback: (node: T) => void, recursion?: (node: T) => boolean) {\n if (!recursion || recursion(node)) {\n node.children?.forEach(child => {\n depthFirstRecursion(child as T, callback, recursion);\n });\n }\n callback(node);\n}\n\nexport interface TreeNode {\n children?: TreeNode[];\n}\n","import { PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';\nimport { depthFirstRecursion } from './tree';\n\nexport function getRectangleByElements(board: PlaitBoard, elements: PlaitElement[], recursion: boolean): RectangleClient {\n const boundaryBox = {\n left: Number.MAX_VALUE,\n top: Number.MAX_VALUE,\n right: Number.NEGATIVE_INFINITY,\n bottom: Number.NEGATIVE_INFINITY\n };\n\n const calcRectangleClient = (node: PlaitElement) => {\n const nodeRectangle = board.getRectangle(node);\n if (nodeRectangle) {\n boundaryBox.left = Math.min(boundaryBox.left, nodeRectangle.x);\n boundaryBox.top = Math.min(boundaryBox.top, nodeRectangle.y);\n boundaryBox.right = Math.max(boundaryBox.right, nodeRectangle.x + nodeRectangle.width);\n boundaryBox.bottom = Math.max(boundaryBox.bottom, nodeRectangle.y + nodeRectangle.height);\n }\n };\n\n elements.forEach(element => {\n if (recursion) {\n depthFirstRecursion(\n element,\n node => calcRectangleClient(node),\n node => board.isRecursion(node)\n );\n } else {\n calcRectangleClient(element);\n }\n });\n\n return {\n x: boundaryBox.left,\n y: boundaryBox.top,\n width: boundaryBox.right - boundaryBox.left,\n height: boundaryBox.bottom - boundaryBox.top\n };\n}\n\nexport function getBoardRectangle(board: PlaitBoard): RectangleClient {\n return getRectangleByElements(board, board.children, true);\n}\n","import { PlaitPointerType } from './pointer';\nimport { ComponentType, PlaitElement } from './element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitHistory } from './history';\nimport { PlaitOperation } from './operation';\nimport { Selection, Range } from './selection';\nimport { Viewport } from './viewport';\nimport { PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport {\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_ROUGH_SVG,\n IS_BOARD_CACHE,\n IS_TEXT_EDITABLE,\n NODE_TO_INDEX,\n NODE_TO_PARENT\n} from '../utils/weak-maps';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { Point } from './point';\nimport { RectangleClient } from './rectangle-client';\nimport { getRectangleByElements } from '../utils/element';\nimport { Path } from './path';\nimport { Ancestor, PlaitNode } from './node';\n\nexport interface PlaitBoard {\n viewport: Viewport;\n children: PlaitElement[];\n operations: PlaitOperation[];\n // record pointer selection or drag selection\n // it will be dirty when board viewport change\n selection: Selection | null;\n pointer: PlaitPointerType;\n history: PlaitHistory;\n options: PlaitBoardOptions;\n undo: () => void;\n redo: () => void;\n apply: (operation: PlaitOperation) => void;\n onChange: () => void;\n mousedown: (event: MouseEvent) => void;\n mousemove: (event: MouseEvent) => void;\n globalMousemove: (event: MouseEvent) => void;\n mouseup: (event: MouseEvent) => void;\n globalMouseup: (event: MouseEvent) => void;\n keydown: (event: KeyboardEvent) => void;\n keyup: (event: KeyboardEvent) => void;\n setFragment: (data: DataTransfer | null) => void;\n insertFragment: (data: DataTransfer | null, targetPoint?: Point) => void;\n deleteFragment: (data: DataTransfer | null) => void;\n dblclick: (event: MouseEvent) => void;\n drawElement: (context: PlaitPluginElementContext) => SVGGElement[] | ComponentType<PlaitPluginElementComponent>;\n redrawElement: (context: PlaitPluginElementContext, previousContext?: PlaitPluginElementContext) => SVGGElement[] | void;\n destroyElement: (context: PlaitPluginElementContext) => void;\n isHitSelection: (element: PlaitElement, range: Range) => boolean;\n isRecursion: (element: PlaitElement) => boolean;\n isMovable: (element: PlaitElement) => boolean;\n getRectangle: (element: PlaitElement) => RectangleClient | null;\n isWithinSelection: (element: PlaitElement) => boolean;\n}\n\nexport interface PlaitBoardChangeEvent {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n}\n\nexport interface PlaitBoardOptions {\n readonly: boolean;\n hideScrollbar: boolean;\n}\n\nexport interface PlaitBoardMove {\n x: number;\n y: number;\n}\n\nexport const PlaitBoard = {\n isBoard(value: any): value is PlaitBoard {\n const cachedIsBoard = IS_BOARD_CACHE.get(value);\n if (cachedIsBoard !== undefined) {\n return cachedIsBoard;\n }\n const isBoard = typeof value.onChange === 'function' && typeof value.apply === 'function';\n IS_BOARD_CACHE.set(value, isBoard);\n return isBoard;\n },\n findPath(board: PlaitBoard, node: PlaitNode): Path {\n const path: Path = [];\n let child: Ancestor = node;\n while (true) {\n const parent = NODE_TO_PARENT.get(child as PlaitElement);\n if (parent == null) {\n if (PlaitBoard.isBoard(child)) {\n return path;\n } else {\n break;\n }\n }\n const i = NODE_TO_INDEX.get(child as PlaitElement);\n if (i == null) {\n break;\n }\n path.unshift(i);\n child = parent;\n }\n throw new Error(`Unable to find the path for Plait node: ${JSON.stringify(node)}`);\n },\n getHost(board: PlaitBoard) {\n return BOARD_TO_HOST.get(board) as SVGSVGElement;\n },\n getElementHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board) as SVGGElement;\n },\n getRoughSVG(board: PlaitBoard) {\n return BOARD_TO_ROUGH_SVG.get(board) as RoughSVG;\n },\n getComponent(board: PlaitBoard) {\n return BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n },\n getBoardNativeElement(board: PlaitBoard) {\n return PlaitBoard.getComponent(board).nativeElement;\n },\n getRectangle(board: PlaitBoard) {\n return getRectangleByElements(board, board.children, true);\n },\n getViewportContainer(board: PlaitBoard) {\n return PlaitBoard.getHost(board).parentElement as HTMLElement;\n },\n isFocus(board: PlaitBoard) {\n return !!board.selection;\n },\n isReadonly(board: PlaitBoard) {\n return board.options.readonly;\n },\n hasBeenTextEditing(board: PlaitBoard) {\n return !!IS_TEXT_EDITABLE.get(board);\n }\n};\n","export enum PlaitPointerType {\n 'hand' = 'hand',\n 'selection' = 'selection'\n}\n","export function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n\n/**\n * 规范 point\n * @param point\n * @returns point\n */\nexport function normalizePoint(point: number[]) {\n return Array.isArray(point)\n ? {\n x: point[0],\n y: point[1]\n }\n : point;\n}\n","import { isNullOrUndefined } from '../utils/helper';\nimport { ExtendedType } from './custom-types';\nimport { Point } from './point';\n\nexport interface BaseViewport {\n [key: string]: any;\n viewBackgroundColor: string;\n zoom: number;\n origination?: Point;\n}\n\nexport type Viewport = ExtendedType<'Viewport', BaseViewport>;\n\nexport interface ViewportInterface {\n isViewport: (value: any) => value is Viewport;\n}\n\nexport const Viewport: ViewportInterface = {\n isViewport: (value: any): value is Viewport => {\n return !isNullOrUndefined(value.zoom) && !isNullOrUndefined(value.viewBackgroundColor);\n },\n};\n","import produce from 'immer';\nimport { PlaitOperation } from './operation';\n\nexport interface PathLevelsOptions {\n reverse?: boolean;\n}\n\nexport type Path = number[];\n\nexport const Path = {\n /**\n * Get a list of ancestor paths for a given path.\n *\n * The paths are sorted from shallowest to deepest ancestor. However, if the\n * `reverse: true` option is passed, they are reversed.\n */\n ancestors(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n let paths = Path.levels(path, options);\n\n if (reverse) {\n paths = paths.slice(1);\n } else {\n paths = paths.slice(0, -1);\n }\n\n return paths;\n },\n /**\n * Get a list of paths at every level down to a path. Note: this is the same\n * as `Path.ancestors`, but including the path itself.\n *\n * The paths are sorted from shallowest to deepest. However, if the `reverse:\n * true` option is passed, they are reversed.\n */\n levels(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n const list: Path[] = [];\n\n for (let i = 0; i <= path.length; i++) {\n list.push(path.slice(0, i));\n }\n\n if (reverse) {\n list.reverse();\n }\n\n return list;\n },\n parent(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the parent path of the root path [${path}].`);\n }\n\n return path.slice(0, -1);\n },\n next(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no next index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last + 1);\n },\n previous(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no previous index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last - 1);\n },\n /**\n * Check if a path is an ancestor of another.\n */\n\n isAncestor(path: Path, another: Path): boolean {\n return path.length < another.length && Path.compare(path, another) === 0;\n },\n /**\n * Compare a path to another, returning an integer indicating whether the path\n * was before, at, or after the other.\n *\n * Note: Two paths of unequal length can still receive a `0` result if one is\n * directly above or below the other. If you want exact matching, use\n * [[Path.equals]] instead.\n */\n compare(path: Path, another: Path): -1 | 0 | 1 {\n const min = Math.min(path.length, another.length);\n\n for (let i = 0; i < min; i++) {\n if (path[i] < another[i]) return -1;\n if (path[i] > another[i]) return 1;\n }\n\n return 0;\n },\n\n /**\n * Check if a path is exactly equal to another.\n */\n\n equals(path: Path, another: Path): boolean {\n return path.length === another.length && path.every((n, i) => n === another[i]);\n },\n /**\n * Check if a path ends before one of the indexes in another.\n */\n\n endsBefore(path: Path, another: Path): boolean {\n const i = path.length - 1;\n const as = path.slice(0, i);\n const bs = another.slice(0, i);\n const av = path[i];\n const bv = another[i];\n return Path.equals(as, bs) && av < bv;\n },\n /**\n * Check if a path is a sibling of another.\n */\n isSibling(path: Path, another: Path): boolean {\n if (path.length !== another.length) {\n return false;\n }\n\n const as = path.slice(0, -1);\n const bs = another.slice(0, -1);\n const al = path[path.length - 1];\n const bl = another[another.length - 1];\n return al !== bl && Path.equals(as, bs);\n },\n transform(path: Path | null, operation: PlaitOperation): Path | null {\n return produce(path, p => {\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (!path || path?.length === 0) {\n return;\n }\n\n if (p === null) {\n return null;\n }\n\n switch (operation.type) {\n case 'insert_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.endsBefore(op, p) || Path.isAncestor(op, p)) {\n p[op.length - 1] += 1;\n }\n\n break;\n }\n\n case 'remove_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.isAncestor(op, p)) {\n return null;\n } else if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n\n case 'move_node': {\n const { path: op, newPath: onp } = operation;\n\n // If the old and new path are the same, it's a no-op.\n if (Path.equals(op, onp)) {\n return;\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice();\n // op.length <= onp.length is different for slate\n // resolve drag from [0, 0] to [0, 3] issue\n if (Path.endsBefore(op, onp) && op.length <= onp.length) {\n copy[op.length - 1] -= 1;\n }\n\n return copy.concat(p.slice(op.length));\n } else if (Path.isSibling(op, onp) && (Path.isAncestor(onp, p) || Path.equals(onp, p))) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n } else {\n p[op.length - 1] += 1;\n }\n } else if (Path.endsBefore(onp, p) || Path.equals(onp, p) || Path.isAncestor(onp, p)) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n p[onp.length - 1] += 1;\n } else if (Path.endsBefore(op, p)) {\n if (Path.equals(onp, p)) {\n p[onp.length - 1] += 1;\n }\n\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n }\n return p;\n });\n }\n};\n","import { PlaitElement } from './element';\nimport { PlaitBoard } from './board';\nimport { Path } from './path';\n\nexport type PlaitNode = PlaitElement;\n\nexport type Ancestor = PlaitBoard | PlaitElement;\n\nexport interface NodeParentsOptions {\n reverse?: boolean;\n}\n\nexport const PlaitNode = {\n parent: (board: PlaitBoard, path: Path) => {\n const parentPath = Path.parent(path);\n const p = PlaitNode.get(board, parentPath);\n return p;\n },\n /**\n * Return a generator of all the ancestor nodes above a specific path.\n *\n * By default the order is top-down, from highest to lowest ancestor in\n * the tree, but you can pass the `reverse: true` option to go bottom-up.\n */\n *parents(root: PlaitBoard, path: Path, options: NodeParentsOptions = {}): Generator<PlaitNode, void, undefined> {\n for (const p of Path.ancestors(path, options)) {\n const n = PlaitNode.get(root, p);\n yield n;\n }\n },\n get(root: PlaitBoard, path: Path): PlaitNode {\n let node: Ancestor = root;\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n node = node.children[p];\n }\n return node as PlaitNode;\n },\n last(board: PlaitBoard, path: Path) {\n let n = PlaitNode.get(board, path);\n while (n && n.children && n.children.length > 0) {\n const i = n.children.length - 1;\n n = n.children[i];\n }\n return n;\n }\n};\n","import { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { createDraft, finishDraft, isDraft } from 'immer';\nimport { Viewport } from '../interfaces/viewport';\nimport { Selection } from '../interfaces/selection';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport interface GeneralTransforms {\n transform: (board: PlaitBoard, op: PlaitOperation) => void;\n}\n\nconst applyToDraft = (board: PlaitBoard, selection: Selection | null, viewport: Viewport, op: PlaitOperation) => {\n switch (op.type) {\n case 'insert_node': {\n const { path, node } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n\n parent.children.splice(index, 0, node);\n break;\n }\n case 'remove_node': {\n const { path } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n parent.children.splice(index, 1);\n break;\n }\n case 'move_node': {\n const { path, newPath } = op;\n\n if (Path.isAncestor(path, newPath)) {\n throw new Error(`Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.`);\n }\n\n const node = PlaitNode.get(board, path);\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n // This is tricky, but since the `path` and `newPath` both refer to\n // the same snapshot in time, there's a mismatch. After either\n // removing the original position, the second step's path can be out\n // of date. So instead of using the `op.newPath` directly, we\n // transform `op.path` to ascertain what the `newPath` would be after\n // the operation was applied.\n parent.children?.splice(index, 1);\n const truePath = Path.transform(path, op)!;\n const newParent = PlaitNode.get(board, Path.parent(truePath)) as Ancestor;\n const newIndex = truePath[truePath.length - 1];\n\n newParent.children?.splice(newIndex, 0, node);\n break;\n }\n case 'set_node': {\n const { path, properties, newProperties } = op;\n\n if (path.length === 0) {\n throw new Error(`Cannot set properties on the root node!`);\n }\n\n const node = PlaitNode.get(board, path);\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete node[key];\n } else {\n node[key] = value;\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete node[key];\n }\n }\n\n break;\n }\n case 'set_viewport': {\n const { newProperties } = op;\n if (newProperties == null) {\n viewport = newProperties;\n } else {\n if (viewport == null) {\n if (!Viewport.isViewport(newProperties)) {\n throw new Error(\n `Cannot apply an incomplete \"set_viewport\" operation properties ${JSON.stringify(\n newProperties\n )} when there is no current viewport.`\n );\n }\n viewport = { ...newProperties };\n }\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete viewport[key];\n } else {\n viewport[key] = value;\n }\n }\n }\n break;\n }\n case 'set_selection': {\n const { newProperties } = op;\n if (newProperties == null) {\n selection = newProperties;\n } else {\n if (selection === null) {\n selection = op.newProperties;\n } else {\n selection.ranges = newProperties.ranges;\n }\n }\n break;\n }\n }\n return { selection, viewport };\n};\n\nexport const GeneralTransforms: GeneralTransforms = {\n /**\n * Transform the board by an operation.\n */\n transform(board: PlaitBoard, op: PlaitOperation): void {\n board.children = createDraft(board.children);\n let viewport = board.viewport && createDraft(board.viewport);\n let selection = board.selection && createDraft(board.selection);\n\n try {\n const state = applyToDraft(board, selection, viewport, op);\n viewport = state.viewport;\n selection = state.selection;\n } finally {\n board.children = finishDraft(board.children);\n\n if (selection) {\n board.selection = isDraft(selection) ? (finishDraft(selection) as Selection) : selection;\n } else {\n board.selection = null;\n }\n\n board.viewport = isDraft(viewport) ? (finishDraft(viewport) as Viewport) : viewport;\n }\n }\n};\n","import { InsertNodeOperation, MoveNodeOperation, RemoveNodeOperation, SetNodeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport function insertNode(board: PlaitBoard, node: PlaitNode, path: Path) {\n const operation: InsertNodeOperation = { type: 'insert_node', node, path };\n board.apply(operation);\n}\n\nexport function setNode(board: PlaitBoard, props: Partial<PlaitNode>, path: Path) {\n const properties: Partial<PlaitNode> = {};\n const newProperties: Partial<PlaitNode> = {};\n const node = PlaitNode.get(board, path);\n for (const k in props) {\n if (node[k] !== props[k]) {\n if (node.hasOwnProperty(k)) {\n properties[k] = node[k];\n }\n if (props[k] != null) newProperties[k] = props[k];\n }\n }\n const operation: SetNodeOperation = { type: 'set_node', properties, newProperties, path };\n board.apply(operation);\n}\n\nexport function removeNode(board: PlaitBoard, path: Path) {\n const node = PlaitNode.get(board, path);\n const operation: RemoveNodeOperation = { type: 'remove_node', path, node };\n board.apply(operation);\n}\n\nexport function moveNode(board: PlaitBoard, path: Path, newPath: Path) {\n const operation: MoveNodeOperation = { type: 'move_node', path, newPath };\n board.apply(operation);\n}\n\nexport interface NodeTransforms {\n insertNode: (board: PlaitBoard, node: PlaitNode, path: Path) => void;\n setNode: (board: PlaitBoard, node: Partial<PlaitNode>, path: Path) => void;\n removeNode: (board: PlaitBoard, path: Path) => void;\n moveNode: (board: PlaitBoard, path: Path, newPath: Path) => void;\n}\n\nexport const NodeTransforms: NodeTransforms = {\n insertNode,\n setNode,\n removeNode,\n moveNode\n};\n","import { SetSelectionOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Selection } from '../interfaces/selection';\nimport { BOARD_TO_TEMPORARY_ELEMENTS } from '../utils/weak-maps';\nimport { PlaitElement } from '../interfaces/element';\n\nexport function setSelection(board: PlaitBoard, selection: Selection | null) {\n const operation: SetSelectionOperation = { type: 'set_selection', properties: board.selection, newProperties: selection };\n board.apply(operation);\n}\n\nexport interface SelectionTransforms {\n setSelection: (board: PlaitBoard, selection: Selection | null) => void;\n setSelectionWithTemporaryElements: (board: PlaitBoard, elements: PlaitElement[]) => void;\n}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection,\n setSelectionWithTemporaryElements\n};\n\n\nexport function setSelectionWithTemporaryElements(board: PlaitBoard, elements: PlaitElement[]) {\n setTimeout(() => {\n BOARD_TO_TEMPORARY_ELEMENTS.set(board, elements);\n setSelection(board, { ranges: [] });\n });\n}","import { SetViewportOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Viewport } from '../interfaces/viewport';\n\nexport function setViewport(board: PlaitBoard, viewport: Viewport) {\n const operation: SetViewportOperation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };\n board.apply(operation);\n}\n\nexport interface ViewportTransforms {\n setViewport: (board: PlaitBoard, viewport: Viewport) => void;\n}\n\nexport const ViewportTransforms: ViewportTransforms = {\n setViewport\n};\n","import { RectangleClient } from '../interfaces/rectangle-client';\n\n// https://stackoverflow.com/a/6853926/232122\nexport function distanceBetweenPointAndSegment(x: number, y: number, x1: number, y1: number, x2: number, y2: number) {\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSquare = C * C + D * D;\n let param = -1;\n if (lenSquare !== 0) {\n // in case of 0 length line\n param = dot / lenSquare;\n }\n\n let xx, yy;\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n const dx = x - xx;\n const dy = y - yy;\n return Math.hypot(dx, dy);\n}\n\nexport function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) {\n // 𝑎′𝑥=(𝑎𝑥−𝑐𝑥)cos𝜃−(𝑎𝑦−𝑐𝑦)sin𝜃+𝑐𝑥\n // 𝑎′𝑦=(𝑎𝑥−𝑐𝑥)sin𝜃+(𝑎𝑦−𝑐𝑦)cos𝜃+𝑐𝑦.\n // https://math.stackexchange.com/questions/2204520/how-do-i-rotate-a-line-segment-in-a-specific-point-on-the-line\n return [(x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2];\n}\n\nexport function distanceBetweenPointAndPoint(x1: number, y1: number, x2: number, y2: number) {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.hypot(dx, dy);\n}\n\n// https://stackoverflow.com/questions/5254838/calculating-distance-between-a-point-and-a-rectangular-box-nearest-point\nexport function distanceBetweenPointAndRectangle(x: number, y: number, rect: RectangleClient) {\n var dx = Math.max(rect.x - x, 0, x - (rect.x + rect.width));\n var dy = Math.max(rect.y - y, 0, y - (rect.y + rect.height));\n return Math.sqrt(dx * dx + dy * dy);\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { distanceBetweenPointAndRectangle } from './math';\n\nexport type ViewBox = {\n minX: number;\n minY: number;\n width: number;\n height: number;\n viewportWidth: number;\n viewportHeight: number;\n};\n\nexport function transformPoints(board: PlaitBoard, points: Point[]) {\n const newPoints = points.map(point => {\n return transformPoint(board, point);\n });\n return newPoints;\n}\n\nexport function transformPoint(board: PlaitBoard, point: Point) {\n const { width, height } = PlaitBoard.getHost(board).getBoundingClientRect();\n const viewBox = PlaitBoard.getHost(board).viewBox.baseVal;\n const x = (point[0] / width) * viewBox.width + viewBox.x;\n const y = (point[1] / height) * viewBox.height + viewBox.y;\n const newPoint = [x, y] as Point;\n\n return newPoint;\n}\n\nexport function isInPlaitBoard(board: PlaitBoard, x: number, y: number) {\n const plaitBoardElement = PlaitBoard.getBoardNativeElement(board);\n const plaitBoardRect = plaitBoardElement.getBoundingClientRect();\n const distances = distanceBetweenPointAndRectangle(x, y, plaitBoardRect);\n return distances === 0;\n}\n","import { Point } from '../../interfaces/point';\n\nexport const NS = 'http://www.w3.org/2000/svg';\n\nexport function toPoint(x: number, y: number, container: SVGElement): Point {\n const rect = container.getBoundingClientRect();\n return [x - rect.x, y - rect.y];\n}\n\nexport function createG() {\n const newG = document.createElementNS(NS, 'g');\n return newG;\n}\n\nexport function createSVG() {\n const svg = document.createElementNS(NS, 'svg');\n return svg;\n}\n\nexport function createText(x: number, y: number, fill: string, textContent: string) {\n var text = document.createElementNS(NS, 'text');\n text.setAttribute('x', `${x}`);\n text.setAttribute('y', `${y}`);\n text.setAttribute('fill', fill);\n text.textContent = textContent;\n return text;\n}\n\n/**\n * Check if a DOM node is an element node.\n */\nexport const isDOMElement = (value: any): value is Element => {\n return isDOMNode(value) && value.nodeType === 1;\n};\n\n/**\n * Check if a value is a DOM node.\n */\nexport const isDOMNode = (value: any): value is Node => {\n return value instanceof window.Node;\n};\n\nexport const hasInputOrTextareaTarget = (target: EventTarget | null) => {\n if (isDOMElement(target)) {\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\n return true;\n }\n }\n return false;\n};\n","import { NS } from './common';\n\nexport function createForeignObject(x: number, y: number, width: number, height: number) {\n var newForeignObject = document.createElementNS(NS, 'foreignObject');\n newForeignObject.setAttribute('x', `${x}`);\n newForeignObject.setAttribute('y', `${y}`);\n newForeignObject.setAttribute('width', `${width}`);\n newForeignObject.setAttribute('height', `${height}`);\n return newForeignObject;\n}\n\nexport function updateForeignObject(g: SVGGElement, width: number, height: number, x: number, y: number) {\n const foreignObject = g.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${width}`);\n foreignObject.setAttribute('height', `${height}`);\n foreignObject.setAttribute('x', `${x}`);\n foreignObject.setAttribute('y', `${y}`);\n }\n}\n","export const IS_IOS =\n typeof navigator !== 'undefined' &&\n typeof window !== 'undefined' &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !(window as any).MSStream;\n\nexport const IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent);\n\nexport const IS_FIREFOX = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);\n\nexport const IS_SAFARI = typeof navigator !== 'undefined' && /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent);\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent);\n\nexport const IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent);\n\n// Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput\nexport const IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent);\n","import { PlaitBoard } from '../interfaces/board';\nimport { Ancestor } from '../interfaces/node';\nimport { depthFirstRecursion } from './tree';\nimport { BOARD_TO_SELECTED_ELEMENT } from './weak-maps';\nimport { Range } from '../interfaces/selection';\nimport { PlaitElement } from '../interfaces/element';\n\nexport const getHitElements = (board: PlaitBoard) => {\n const selectedElements: PlaitElement[] = [];\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (\n !PlaitBoard.isBoard(node) &&\n board.selection?.ranges.some(range => {\n return board.isHitSelection(node, range);\n })\n ) {\n selectedElements.push(node);\n }\n },\n node => {\n if (PlaitBoard.isBoard(node) || board.isRecursion(node)) {\n return true;\n } else {\n return false;\n }\n }\n );\n return selectedElements;\n};\n\nexport const isIntersectionElements = (board: PlaitBoard, elements: PlaitElement[], ranges: Range[]) => {\n let isIntersectionElements = false;\n if (elements.length) {\n elements.map(item => {\n if (!isIntersectionElements) {\n isIntersectionElements = ranges.some(range => {\n return board.isHitSelection(item, range);\n });\n }\n });\n }\n return isIntersectionElements;\n};\n\nexport const cacheSelectedElements = (board: PlaitBoard, selectedElements: PlaitElement[]) => {\n BOARD_TO_SELECTED_ELEMENT.set(board, selectedElements);\n};\n\nexport const getSelectedElements = (board: PlaitBoard) => {\n return BOARD_TO_SELECTED_ELEMENT.get(board) || [];\n};\n\nexport const addSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n cacheSelectedElements(board, [...selectedElements, element]);\n};\n\nexport const removeSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n const newSelectedElements = selectedElements.filter(value => value !== element);\n cacheSelectedElements(board, newSelectedElements);\n};\n\nexport const clearSelectedElement = (board: PlaitBoard) => {\n cacheSelectedElements(board, []);\n};\n\nexport const isSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n return !!selectedElements.find(value => value === element);\n};\n","import { PlaitBoard, PlaitElement } from '../../interfaces';\nimport { PlaitPluginElementContext } from './context';\n\nexport interface BeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n beforeContextChange: (value: PlaitPluginElementContext<T>) => void;\n}\n\nexport interface OnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n onContextChanged: (value: PlaitPluginElementContext<T, K>, previous: PlaitPluginElementContext<T, K>) => void;\n}\n\nexport function hasBeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is BeforeContextChange<T, K> {\n if (value.beforeContextChange) {\n return true;\n }\n return false;\n}\n\nexport function hasOnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is OnContextChanged<T, K> {\n if (value.onContextChanged) {\n return true;\n }\n return false;\n}\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard, PlaitElement, PlaitPluginElementContext } from '../../interfaces';\nimport { removeSelectedElement } from '../../utils/selected-element';\nimport { createG } from '../../utils/dom/common';\nimport { hasBeforeContextChange, hasOnContextChanged } from './context-change';\n\n@Directive()\nexport abstract class PlaitPluginElementComponent<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>\n implements OnInit, OnDestroy {\n g!: SVGGElement;\n\n rootG?: SVGGElement;\n\n initialized = false;\n\n protected _context!: PlaitPluginElementContext<T, K>;\n\n @Input()\n set context(value: PlaitPluginElementContext<T, K>) {\n if (hasBeforeContextChange<T, K>(this)) {\n this.beforeContextChange(value);\n }\n const previousContext = this._context;\n this._context = value;\n if (this.element) {\n ELEMENT_TO_COMPONENT.set(this.element, this);\n }\n if (this.initialized) {\n this.cdr.markForCheck();\n if (hasOnContextChanged<T>(this)) {\n this.onContextChanged(value, previousContext);\n }\n } else {\n if (PlaitElement.isRootElement(this.element) && this.element.children && this.element.children.length > 0) {\n this.g = createG();\n this.rootG = createG();\n this.rootG.append(this.g);\n } else {\n this.g = createG();\n }\n }\n }\n\n get context() {\n return this._context;\n }\n\n get element() {\n return this.context && this.context.element;\n }\n\n get board() {\n return this.context && this.context.board;\n }\n\n get selected() {\n return this.context && this.context.selected;\n }\n\n get effect() {\n return this.context && this.context.effect;\n }\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n if (this.element.type) {\n (this.rootG || this.g).setAttribute(`plait-${this.element.type}`, 'true');\n }\n this.initialized = true;\n }\n\n ngOnDestroy(): void {\n if (ELEMENT_TO_COMPONENT.get(this.element) === this) {\n ELEMENT_TO_COMPONENT.delete(this.element);\n }\n removeSelectedElement(this.board, this.element);\n (this.rootG || this.g).remove();\n }\n}\n\nexport const ELEMENT_TO_COMPONENT = new WeakMap<PlaitElement, PlaitPluginElementComponent>();\n","import { ELEMENT_TO_COMPONENT, PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport { NODE_TO_PARENT } from '../utils';\nimport { PlaitBoard } from './board';\nimport { Point } from './point';\n\nexport interface PlaitElement {\n [key: string]: any;\n id: string;\n children?: PlaitElement[];\n points?: Point[];\n type?: string;\n}\n\nexport const PlaitElement = {\n isRootElement(value: PlaitElement) {\n const parent = NODE_TO_PARENT.get(value);\n if (parent && PlaitBoard.isBoard(parent)) {\n return true;\n } else {\n return false;\n }\n },\n getComponent(value: PlaitElement) {\n return ELEMENT_TO_COMPONENT.get(value) as PlaitPluginElementComponent;\n }\n}\n\nexport interface ComponentType<T> {\n new (...args: any[]): T;\n}\n","import { Point } from './point';\n\nexport interface RectangleClient {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport const RectangleClient = {\n isHit: (origin: RectangleClient, target: RectangleClient) => {\n const minX = origin.x < target.x ? origin.x : target.x;\n const maxX = origin.x + origin.width > target.x + target.width ? origin.x + origin.width : target.x + target.width;\n const minY = origin.y < target.y ? origin.y : target.y;\n const maxY = origin.y + origin.height > target.y + target.height ? origin.y + origin.height : target.y + target.height;\n // float calculate error( eg: 1.4210854715202004e-14 > 0)\n if (Math.floor(maxX - minX - origin.width - target.width) <= 0 && Math.floor(maxY - minY - origin.height - target.height) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n toRectangleClient: (points: [Point, Point]) => {\n const xArray = points.map(ele => ele[0]);\n const yArray = points.map(ele => ele[1]);\n const xMin = Math.min(...xArray);\n const xMax = Math.max(...xArray);\n const yMin = Math.min(...yArray);\n const yMax = Math.max(...yArray);\n const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n return rect;\n },\n getOutlineRectangle: (rectangle: RectangleClient, offset: number) => {\n return {\n x: rectangle.x + offset,\n y: rectangle.y + offset,\n width: rectangle.width + Math.abs(offset) * 2,\n height: rectangle.height + Math.abs(offset) * 2\n };\n },\n isEqual: (rectangle: RectangleClient, otherRectangle: RectangleClient) => {\n return (\n rectangle.x === otherRectangle.x &&\n rectangle.y === otherRectangle.y &&\n rectangle.width === otherRectangle.width &&\n rectangle.height === otherRectangle.height\n );\n }\n};\n","import { PlaitNode } from '../interfaces/node';\nimport { Path } from './path';\nimport { Selection } from './selection';\nimport { Viewport } from './viewport';\n\nexport type InsertNodeOperation = {\n type: 'insert_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type RemoveNodeOperation = {\n type: 'remove_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type MoveNodeOperation = {\n type: 'move_node';\n path: Path;\n newPath: Path;\n};\n\nexport type SetViewportOperation = {\n type: 'set_viewport';\n properties: Partial<Viewport>;\n newProperties: Partial<Viewport>;\n};\n\nexport type SetSelectionOperation = {\n type: 'set_selection';\n properties: Selection | null;\n newProperties: Selection | null;\n};\n\nexport type SetNodeOperation = {\n type: 'set_node';\n path: Path;\n properties: Partial<PlaitNode>;\n newProperties: Partial<PlaitNode>;\n};\n\nexport type PlaitOperation =\n | InsertNodeOperation\n | SetViewportOperation\n | SetSelectionOperation\n | SetNodeOperation\n | RemoveNodeOperation\n | MoveNodeOperation;\n\nexport interface PlaitOperationInterface {\n inverse: (op: PlaitOperation) => PlaitOperation;\n isSetViewportOperation: (value: any) => boolean;\n}\n\nexport const isSetViewportOperation = (value: any): value is SetViewportOperation => {\n return value.type === 'set_viewport';\n};\n\nexport const inverse = (op: PlaitOperation): PlaitOperation => {\n switch (op.type) {\n case 'insert_node': {\n return { ...op, type: 'remove_node' };\n }\n\n case 'remove_node': {\n return { ...op, type: 'insert_node' };\n }\n\n case 'move_node': {\n const { newPath, path } = op;\n\n // PERF: in this case the move operation is a no-op anyways.\n if (Path.equals(newPath, path)) {\n return op;\n }\n\n // when operation path is [0,0] -> [0,2], should exec Path.transform to get [0,1] -> [0,0]\n // shoud not return [0,2] -> [0,0] #WIK-8981\n // if (Path.isSibling(path, newPath)) {\n // return { ...op, path: newPath, newPath: path };\n // }\n\n // If the move does not happen within a single parent it is possible\n // for the move to impact the true path to the location where the node\n // was removed from and where it was inserted. We have to adjust for this\n // and find the original path. We can accomplish this (only in non-sibling)\n // moves by looking at the impact of the move operation on the node\n // after the original move path.\n const inversePath = Path.transform(path, op)!;\n const inverseNewPath = Path.transform(Path.next(path), op)!;\n return { ...op, path: inversePath, newPath: inverseNewPath };\n }\n\n case 'set_node': {\n const { properties, newProperties } = op;\n return { ...op, properties: newProperties, newProperties: properties };\n }\n\n case 'set_selection': {\n const { properties, newProperties } = op;\n\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: null\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: null,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n\n case 'set_viewport': {\n const { properties, newProperties } = op;\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: newProperties\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: properties,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n }\n};\n\nexport const PlaitOperation: PlaitOperationInterface = {\n isSetViewportOperation,\n inverse\n};\n","export type Point = [number, number];\n\nexport interface XYPosition {\n x: number;\n y: number;\n}\n\nexport const Point = {\n isEquals(point?: Point, otherPoint?: Point) {\n return point && otherPoint && point[0] === otherPoint[0] && point[1] === otherPoint[1];\n }\n};","import { Point } from './point';\n\nexport const SELECTION_BORDER_COLOR = '#6698FF';\nexport const SELECTION_FILL_COLOR = '#6698FF19'; // 主色 0.1 透明度\n\nexport interface Range {\n anchor: Point;\n focus: Point;\n}\n\nexport interface Selection {\n ranges: Range[];\n}\n\nexport const Selection = {\n isCollapsed(selection: Range) {\n if (selection.anchor[0] == selection.focus[0] && selection.anchor[1] === selection.focus[1]) {\n return true;\n } else {\n return false;\n }\n }\n};\n","import { PlaitBoard } from './board';\nimport { PlaitOperation } from './operation';\n\nexport interface PlaitHistory {\n redos: PlaitOperation[][];\n undos: PlaitOperation[][];\n}\n\nexport const SAVING = new WeakMap<PlaitBoard, boolean | undefined>();\nexport const MERGING = new WeakMap<PlaitBoard, boolean | undefined>();\n","import { MERGING, PlaitBoard, PlaitOperation, SAVING } from '../interfaces';\n\n/**\n * Check whether to merge an operation into the previous operation.\n */\n\nexport const shouldMerge = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_viewport' && op.type === prev?.type) {\n return true;\n }\n return false;\n};\n\n/**\n * Check whether an operation needs to be saved to the history.\n */\n\nexport const shouldSave = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_selection' || op.type === 'set_viewport') {\n return false;\n }\n\n return true;\n};\n\n/**\n * Check whether an operation should clear the redos stack.\n */\n\nexport const shouldClear = (op: PlaitOperation): boolean => {\n if (op.type === 'set_selection') {\n return false;\n }\n\n return true;\n};\n\nexport const PlaitHistoryBoard = {\n /**\n * Get the saving flag's current value.\n */\n isSaving(board: PlaitBoard): boolean | undefined {\n return SAVING.get(board);\n },\n\n /**\n * Get the merge flag's current value.\n */\n\n isMerging(board: PlaitBoard): boolean | undefined {\n return MERGING.get(board);\n },\n\n /**\n * Apply a series of changes inside a synchronous `fn`, without merging any of\n * the new operations into previous save point in the history.\n */\n\n withoutMerging(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isMerging(board);\n MERGING.set(board, false);\n fn();\n MERGING.set(board, prev);\n },\n /**\n * Apply a series of changes inside a synchronous `fn`, without saving any of\n * their operations into the history.\n */\n\n withoutSaving(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isSaving(board);\n SAVING.set(board, false);\n fn();\n SAVING.set(board, prev);\n }\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { IS_APPLE } from './environment';\n\n/**\n * Hotkey mappings for each platform.\n */\n\nconst HOTKEYS: any = {\n bold: 'mod+b',\n compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],\n moveBackward: 'left',\n moveForward: 'right',\n moveUp: 'up',\n moveDown: 'down',\n moveWordBackward: 'ctrl+left',\n moveWordForward: 'ctrl+right',\n deleteBackward: 'shift?+backspace',\n deleteForward: 'shift?+delete',\n extendBackward: 'shift+left',\n extendForward: 'shift+right',\n italic: 'mod+i',\n splitBlock: 'shift?+enter',\n undo: 'mod+z'\n};\n\nconst APPLE_HOTKEYS: any = {\n moveLineBackward: 'opt+up',\n moveLineForward: 'opt+down',\n moveWordBackward: 'opt+left',\n moveWordForward: 'opt+right',\n deleteBackward: ['ctrl+backspace', 'ctrl+h'],\n deleteForward: ['ctrl+delete', 'ctrl+d'],\n deleteLineBackward: 'cmd+shift?+backspace',\n deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],\n deleteWordBackward: 'opt+shift?+backspace',\n deleteWordForward: 'opt+shift?+delete',\n extendLineBackward: 'opt+shift+up',\n extendLineForward: 'opt+shift+down',\n redo: 'cmd+shift+z',\n transposeCharacter: 'ctrl+t'\n};\n\nconst WINDOWS_HOTKEYS: any = {\n deleteWordBackward: 'ctrl+shift?+backspace',\n deleteWordForward: 'ctrl+shift?+delete',\n redo: ['ctrl+y', 'ctrl+shift+z']\n};\n\n/**\n * Create a platform-aware hotkey checker.\n */\n\nconst create = (key: string) => {\n const generic = HOTKEYS[key];\n const apple = APPLE_HOTKEYS[key];\n const windows = WINDOWS_HOTKEYS[key];\n const isGeneric = generic && isKeyHotkey(generic);\n const isApple = apple && isKeyHotkey(apple);\n const isWindows = windows && isKeyHotkey(windows);\n\n return (event: KeyboardEvent) => {\n if (isGeneric && isGeneric(event)) {\n return true;\n }\n if (IS_APPLE && isApple && isApple(event)) {\n return true;\n }\n if (!IS_APPLE && isWindows && isWindows(event)) {\n return true;\n }\n return false;\n };\n};\n\n/**\n * Hotkeys.\n */\n\nconst hotkeys = {\n isBold: create('bold'),\n isCompose: create('compose'),\n isMoveBackward: create('moveBackward'),\n isMoveForward: create('moveForward'),\n isMoveUp: create('moveUp'),\n isMoveDown: create('moveDown'),\n isDeleteBackward: create('deleteBackward'),\n isDeleteForward: create('deleteForward'),\n isDeleteLineBackward: create('deleteLineBackward'),\n isDeleteLineForward: create('deleteLineForward'),\n isDeleteWordBackward: create('deleteWordBackward'),\n isDeleteWordForward: create('deleteWordForward'),\n isExtendBackward: create('extendBackward'),\n isExtendForward: create('extendForward'),\n isExtendLineBackward: create('extendLineBackward'),\n isExtendLineForward: create('extendLineForward'),\n isItalic: create('italic'),\n isMoveLineBackward: create('moveLineBackward'),\n isMoveLineForward: create('moveLineForward'),\n isMoveWordBackward: create('moveWordBackward'),\n isMoveWordForward: create('moveWordForward'),\n isRedo: create('redo'),\n isSplitBlock: create('splitBlock'),\n isTransposeCharacter: create('transposeCharacter'),\n isUndo: create('undo')\n};\nexport default hotkeys;\nexport { hotkeys };\n","export function idCreator(length = 5) {\n // remove numeral\n const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/\n const maxPosition = $chars.length;\n let key = '';\n for (let i = 0; i < length; i++) {\n key += $chars.charAt(Math.floor(Math.random() * maxPosition));\n }\n return key;\n}\n","export const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';\n\nexport const SCROLL_BAR_WIDTH = 20;\n\nexport const MAX_RADIUS = 16;\n","import { Options } from 'roughjs/bin/core';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MAX_RADIUS } from '../../constants';\n\n/**\n * drawRoundRectangle\n */\nexport function drawRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n options: Options,\n outline = false,\n borderRadius?: number\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n const defaultRadius = Math.min(width, height) / 8;\n let radius = borderRadius || defaultRadius;\n if (defaultRadius > MAX_RADIUS) {\n radius = outline ? MAX_RADIUS + 2 : MAX_RADIUS;\n }\n\n const point1 = [x1 + radius, y1];\n const point2 = [x2 - radius, y1];\n const point3 = [x2, y1 + radius];\n const point4 = [x2, y2 - radius];\n const point5 = [x2 - radius, y2];\n const point6 = [x1 + radius, y2];\n const point7 = [x1, y2 - radius];\n const point8 = [x1, y1 + radius];\n\n return rs.path(\n `M${point2[0]} ${point2[1]} A ${radius} ${radius}, 0, 0, 1, ${point3[0]} ${point3[1]} L ${point4[0]} ${point4[1]} A ${radius} ${radius}, 0, 0, 1, ${point5[0]} ${point5[1]} L ${point6[0]} ${point6[1]} A ${radius} ${radius}, 0, 0, 1, ${point7[0]} ${point7[1]} L ${point8[0]} ${point8[1]} A ${radius} ${radius}, 0, 0, 1, ${point1[0]} ${point1[1]} Z`,\n options\n );\n}\n\nexport function drawAbstractRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n isHorizontal: boolean,\n options: Options\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n const radius = 5;\n const handleGap = 4;\n const handleLength = 10;\n\n const handleSpace = handleLength + handleGap * 2;\n\n if (isHorizontal) {\n const handleSideLine = (width - handleSpace - radius * 2) / 2;\n const sideLine = height - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${handleSideLine},0\n m${handleSpace},0\n l${handleSideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${sideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${handleSideLine},0\n m-${handleSpace},0\n l-${handleSideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${sideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n } else {\n const handleSideLine = (height - handleSpace - radius * 2) / 2;\n const sideLine = width - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${sideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${handleSideLine}\n m0,${handleSpace}\n l0,${handleSideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${sideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${handleSideLine}\n m0,-${handleSpace}\n l0,-${handleSideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n }\n}\n","import { rotate } from '../math';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { Options } from 'roughjs/bin/core';\nimport { Point } from '../../interfaces';\n\nexport function arrowPoints(start: Point, end: Point, maxHypotenuseLength = 10, degree = 40) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n let hypotenuse = Math.hypot(width, height); // 斜边\n const realRotateLine = hypotenuse > maxHypotenuseLength * 2 ? maxHypotenuseLength : hypotenuse / 2;\n const rotateWidth = (realRotateLine / hypotenuse) * width;\n const rotateHeight = (realRotateLine / hypotenuse) * height;\n const rotatePoint = [\n end[0] > start[0] ? end[0] - rotateWidth : end[0] + rotateWidth,\n end[1] > start[1] ? end[1] - rotateHeight : end[1] + rotateHeight\n ];\n const pointRight = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (degree * Math.PI) / 180) as Point;\n const pointLeft = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (-degree * Math.PI) / 180) as Point;\n return { pointLeft, pointRight };\n}\n\nexport function drawArrow(rs: RoughSVG, start: Point, end: Point, options: Options, maxHypotenuseLength = 10, degree = 40): SVGGElement[] {\n const { pointLeft, pointRight } = arrowPoints(start, end, maxHypotenuseLength, degree);\n const arrowLineLeft = rs.linearPath([pointLeft, end], options);\n const arrowLineRight = rs.linearPath([pointRight, end], options);\n return [arrowLineLeft, arrowLineRight];\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\n\nexport function drawCircle(roughSVG: RoughSVG, point: Point, diameter: number, options: Options): SVGGElement {\n return roughSVG.circle(point[0], point[1], diameter, options);\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\n\nexport function drawLine(rs: RoughSVG, start: Point, end: Point, options: Options): SVGGElement {\n return rs.linearPath([start, end], options);\n}\n","import { SCROLL_BAR_WIDTH } from '../constants';\nimport { PlaitBoard, Point, RectangleClient } from '../interfaces';\nimport { Transforms } from '../transforms';\nimport { toPoint } from './dom/common';\nimport { getRectangleByElements } from './element';\nimport { distanceBetweenPointAndRectangle } from './math';\nimport { BOARD_TO_MOVING_POINT, BOARD_TO_VIEWPORT_ORIGINATION } from './weak-maps';\n\nconst IS_FROM_SCROLLING = new WeakMap<PlaitBoard, boolean>();\n\nconst IS_FROM_VIEWPORT_CHANGE = new WeakMap<PlaitBoard, boolean>();\n\nexport function getViewportContainerRect(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const viewportRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n\n return {\n width: viewportRect.width + scrollBarWidth,\n height: viewportRect.height + scrollBarWidth\n };\n}\n\nexport function getElementHostBBox(board: PlaitBoard, zoom: number) {\n const childrenRect = getRectangleByElements(board, board.children, true);\n const viewportContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const containerWidth = viewportContainerRect.width / zoom;\n const containerHeight = viewportContainerRect.height / zoom;\n let left: number;\n let right: number;\n let top: number;\n let bottom: number;\n\n if (childrenRect.width < containerWidth) {\n const centerX = childrenRect.x + childrenRect.width / 2;\n const halfContainerWidth = containerWidth / 2;\n left = centerX - halfContainerWidth;\n right = centerX + halfContainerWidth;\n } else {\n left = childrenRect.x;\n right = childrenRect.x + childrenRect.width;\n }\n if (childrenRect.height < containerHeight) {\n const centerY = childrenRect.y + childrenRect.height / 2;\n const halfContainerHeight = containerHeight / 2;\n top = centerY - halfContainerHeight;\n bottom = centerY + halfContainerHeight;\n } else {\n top = childrenRect.y;\n bottom = childrenRect.y + childrenRect.height;\n }\n return {\n left,\n right,\n top,\n bottom\n };\n}\n\n/**\n * 验证缩放比是否符合限制,如果超出限制,则返回合适的缩放比\n * @param zoom 缩放比\n * @param minZoom 最小缩放比\n * @param maxZoom 最大缩放比\n * @returns 正确的缩放比\n */\nexport function clampZoomLevel(zoom: number, minZoom = 0.2, maxZoom = 4) {\n return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;\n}\n\nexport function getViewBox(board: PlaitBoard, zoom: number) {\n const { hideScrollbar } = board.options;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const viewportContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const elementHostBBox = getElementHostBBox(board, zoom);\n const horizontalPadding = viewportContainerRect.width / 2;\n const verticalPadding = viewportContainerRect.height / 2;\n const viewportWidth = (elementHostBBox.right - elementHostBBox.left) * zoom + 2 * horizontalPadding + scrollBarWidth;\n const viewportHeight = (elementHostBBox.bottom - elementHostBBox.top) * zoom + 2 * verticalPadding + scrollBarWidth;\n const viewBox = [\n elementHostBBox.left - horizontalPadding / zoom,\n elementHostBBox.top - verticalPadding / zoom,\n viewportWidth / zoom,\n viewportHeight / zoom\n ];\n return viewBox;\n}\n\nexport function setSVGViewBox(board: PlaitBoard, viewBox: number[]) {\n const zoom = board.viewport.zoom;\n const hostElement = PlaitBoard.getHost(board);\n hostElement.style.display = 'block';\n hostElement.style.width = `${viewBox[2] * zoom}px`;\n hostElement.style.height = `${viewBox[3] * zoom}px`;\n\n if (viewBox && viewBox[2] > 0 && viewBox[3] > 0) {\n hostElement.setAttribute('viewBox', viewBox.join(' '));\n }\n}\n\nexport function updateViewportOffset(board: PlaitBoard) {\n const origination = getViewportOrigination(board);\n if (!origination) return;\n\n const { zoom } = board.viewport;\n const viewBox = getViewBox(board, zoom);\n const scrollLeft = (origination![0] - viewBox[0]) * zoom;\n const scrollTop = (origination![1] - viewBox[1]) * zoom;\n updateViewportContainerScroll(board, scrollLeft, scrollTop);\n}\n\nexport function updateViewportContainerScroll(board: PlaitBoard, left: number, top: number, isFromViewportChange: boolean = true) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n if (viewportContainer.scrollLeft !== left || viewportContainer.scrollTop !== top) {\n viewportContainer.scrollLeft = left;\n viewportContainer.scrollTop = top;\n isFromViewportChange && setIsFromViewportChange(board, true);\n }\n}\n\nexport function initializeViewportContainer(board: PlaitBoard) {\n const { width, height } = getViewportContainerRect(board);\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n viewportContainer.style.width = `${width}px`;\n viewportContainer.style.height = `${height}px`;\n}\n\nexport function initializeViewBox(board: PlaitBoard) {\n const zoom = board.viewport.zoom;\n const viewBox = getViewBox(board, zoom);\n setSVGViewBox(board, viewBox);\n}\n\nexport function initializeViewportOffset(board: PlaitBoard) {\n if (!board.viewport?.origination) {\n const zoom = board.viewport.zoom;\n const viewportContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const viewBox = getViewBox(board, zoom);\n const centerX = viewBox[0] + viewBox[2] / 2;\n const centerY = viewBox[1] + viewBox[3] / 2;\n const origination = [centerX - viewportContainerRect.width / 2 / zoom, centerY - viewportContainerRect.height / 2 / zoom] as Point;\n updateViewportOrigination(board, origination);\n updateViewportOffset(board);\n return;\n }\n updateViewportOffset(board);\n}\n\nexport function setViewport(board: PlaitBoard, origination: Point, zoom?: number) {\n zoom = zoom ?? board.viewport.zoom;\n Transforms.setViewport(board, {\n ...board.viewport,\n zoom,\n origination\n });\n clearViewportOrigination(board);\n}\n\nexport function changeZoom(board: PlaitBoard, newZoom: number, isCenter = true) {\n newZoom = clampZoomLevel(newZoom);\n\n const mousePoint = BOARD_TO_MOVING_POINT.get(board);\n const nativeElement = PlaitBoard.getBoardNativeElement(board);\n const nativeElementRect = nativeElement.getBoundingClientRect();\n const viewportContainerRect = getViewportContainerRect(board);\n let focusPoint = [viewportContainerRect.width / 2, viewportContainerRect.height / 2];\n\n if (!isCenter && mousePoint && distanceBetweenPointAndRectangle(mousePoint[0], mousePoint[1], nativeElementRect) === 0) {\n focusPoint = toPoint(mousePoint[0], mousePoint[1], (nativeElement as unknown) as SVGElement);\n }\n\n const zoom = board.viewport.zoom;\n const origination = getViewportOrigination(board);\n const centerX = origination![0] + focusPoint[0] / zoom;\n const centerY = origination![1] + focusPoint[1] / zoom;\n const newOrigination = [centerX - focusPoint[0] / newZoom, centerY - focusPoint[1] / newZoom] as Point;\n setViewport(board, newOrigination, newZoom);\n}\n\nexport function fitViewport(board: PlaitBoard) {\n const nativeElementRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const viewportContainerRect = getViewportContainerRect(board);\n const elementHostBox = getRectangleByElements(board, board.children, true);\n const zoom = board.viewport.zoom;\n const autoFitPadding = 16;\n const viewportWidth = nativeElementRect.width - 2 * autoFitPadding;\n const viewportHeight = nativeElementRect.height - 2 * autoFitPadding;\n\n let newZoom = zoom;\n if (viewportWidth < elementHostBox.width || viewportHeight < elementHostBox.height) {\n newZoom = Math.min(viewportWidth / elementHostBox.width, viewportHeight / elementHostBox.height);\n } else {\n newZoom = 1;\n }\n\n const viewBox = getViewBox(board, newZoom);\n const centerX = viewBox[0] + viewBox[2] / 2;\n const centerY = viewBox[1] + viewBox[3] / 2;\n const newOrigination = [\n centerX - viewportContainerRect.width / 2 / newZoom,\n centerY - viewportContainerRect.height / 2 / newZoom\n ] as Point;\n setViewport(board, newOrigination, newZoom);\n}\n\nexport const updateViewportOrigination = (board: PlaitBoard, origination: Point) => {\n BOARD_TO_VIEWPORT_ORIGINATION.set(board, origination);\n};\n\nexport const clearViewportOrigination = (board: PlaitBoard) => {\n BOARD_TO_VIEWPORT_ORIGINATION.delete(board);\n};\n\nexport const getViewportOrigination = (board: PlaitBoard) => {\n const origination = BOARD_TO_VIEWPORT_ORIGINATION.get(board);\n if (origination) {\n return origination;\n } else {\n return board.viewport.origination;\n }\n};\n\nexport const isFromScrolling = (board: PlaitBoard) => {\n return !!IS_FROM_SCROLLING.get(board);\n};\n\nexport const setIsFromScrolling = (board: PlaitBoard, state: boolean) => {\n IS_FROM_SCROLLING.set(board, state);\n};\n\nexport const isFromViewportChange = (board: PlaitBoard) => {\n return !!IS_FROM_VIEWPORT_CHANGE.get(board);\n};\n\nexport const setIsFromViewportChange = (board: PlaitBoard, state: boolean) => {\n IS_FROM_VIEWPORT_CHANGE.set(board, state);\n};\n\nexport function scrollToRectangle(board: PlaitBoard, client: RectangleClient) {}\n","import { Subscription, timer } from 'rxjs';\n\nlet timerId: number | null = null;\n\nexport const throttleRAF = (fn: () => void) => {\n const scheduleFunc = () => {\n timerId = requestAnimationFrame(() => {\n timerId = null;\n fn();\n });\n };\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n scheduleFunc();\n};\n\nexport const debounce = (func: () => void, wait: number, options?: { leading: boolean }) => {\n let timerSubscription: Subscription | null = null;\n return () => {\n if (timerSubscription && !timerSubscription.closed) {\n timerSubscription.unsubscribe();\n timerSubscription = timer(wait).subscribe(() => {\n func();\n });\n } else {\n if (options?.leading) {\n func();\n }\n timerSubscription = timer(wait).subscribe();\n }\n };\n};\n","import { PlaitBoard, PlaitElement } from '../interfaces';\nimport { BOARD_TO_MOVING_ELEMENT } from './weak-maps';\n\nexport const getMovingElements = (board: PlaitBoard) => {\n return BOARD_TO_MOVING_ELEMENT.get(board) || [];\n};\n\nexport const addMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n const movingElements = getMovingElements(board);\n const newElements = elements.filter(item => !movingElements.find(movingElement => movingElement.key === item.key));\n cacheMovingElements(board, [...movingElements, ...newElements]);\n};\n\nexport const removeMovingElements = (board: PlaitBoard) => {\n BOARD_TO_MOVING_ELEMENT.delete(board);\n};\n\nexport const cacheMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n BOARD_TO_MOVING_ELEMENT.set(board, elements);\n};\n","import { PlaitBoard } from '../interfaces/board';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { BOARD_TO_COMPONENT } from '../utils';\n\nexport const updatePointerType = (board: PlaitBoard, pointer: PlaitPointerType) => {\n board.pointer = pointer;\n const boardComponent = BOARD_TO_COMPONENT.get(board);\n boardComponent?.markForCheck();\n};\n\nexport const BoardTransforms = {\n updatePointerType\n};\n","import { GeneralTransforms } from './general';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\n\nexport { BoardTransforms } from './board';\nexport const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms\n};\n","import { PlaitBoard, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { Transforms } from '../transforms';\nimport { FLUSHING } from '../utils/weak-maps';\n\nexport function createBoard(children: PlaitElement[], options: PlaitBoardOptions): PlaitBoard {\n const board: PlaitBoard = {\n viewport: {\n zoom: 1,\n viewBackgroundColor: '#000'\n },\n children,\n operations: [],\n history: {\n redos: [],\n undos: []\n },\n selection: null,\n pointer: PlaitPointerType.selection,\n options: options || {\n readonly: false,\n hideScrollbar: false\n },\n undo: () => {},\n redo: () => {},\n apply: (operation: PlaitOperation) => {\n board.operations.push(operation);\n\n Transforms.transform(board, operation);\n\n if (!FLUSHING.get(board)) {\n FLUSHING.set(board, true);\n\n Promise.resolve().then(() => {\n FLUSHING.set(board, false);\n board.onChange();\n board.operations = [];\n });\n }\n },\n onChange: () => {},\n mousedown: (event: MouseEvent) => {},\n mousemove: (event: MouseEvent) => {},\n globalMousemove: (event: MouseEvent) => {},\n mouseup: (event: MouseEvent) => {},\n globalMouseup: (event: MouseEvent) => {},\n keydown: (event: KeyboardEvent) => {},\n keyup: (event: KeyboardEvent) => {},\n dblclick: (event: MouseEvent) => {},\n setFragment: (data: DataTransfer | null) => {},\n insertFragment: (data: DataTransfer | null) => {},\n deleteFragment: (data: DataTransfer | null) => {},\n drawElement: (context: PlaitPluginElementContext) => [],\n redrawElement: (context: PlaitPluginElementContext, previousContext) => {},\n destroyElement: (context: PlaitPluginElementContext) => {},\n isWithinSelection: element => false,\n isHitSelection: element => false,\n isRecursion: element => true,\n isMovable: element => false,\n getRectangle: element => null\n };\n return board;\n}\n","import { BOARD_TO_ON_CHANGE } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\n\nexport function withBoard(board: PlaitBoard) {\n const { onChange } = board;\n\n board.onChange = () => {\n const onContextChange = BOARD_TO_ON_CHANGE.get(board);\n\n if (onContextChange) {\n onContextChange();\n }\n\n onChange();\n };\n\n return board;\n}\n","import { PlaitBoard, PlaitOperation } from '../interfaces';\nimport { isHotkey } from 'is-hotkey';\nimport { PlaitHistoryBoard, shouldClear, shouldMerge, shouldSave } from '../utils';\n\nexport function withHistory<T extends PlaitBoard>(board: T) {\n const { apply, keydown } = board;\n board.history = { undos: [], redos: [] };\n\n board.redo = () => {\n const { history } = board;\n const { redos } = history;\n\n if (redos.length > 0) {\n const batch = redos[redos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n for (const op of batch) {\n board.apply(op);\n }\n });\n\n history.redos.pop();\n history.undos.push(batch);\n }\n };\n\n board.undo = () => {\n const { history } = board;\n const { undos } = history;\n\n if (undos.length > 0) {\n const batch = undos[undos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n const inverseOps = batch.map(PlaitOperation.inverse).reverse();\n for (const op of inverseOps) {\n board.apply(op);\n }\n });\n\n history.redos.push(batch);\n history.undos.pop();\n }\n };\n\n board.apply = (op: PlaitOperation) => {\n const { operations, history } = board;\n const { undos } = history;\n const lastBatch = undos[undos.length - 1];\n const lastOp = lastBatch && lastBatch[lastBatch.length - 1];\n let save = PlaitHistoryBoard.isSaving(board);\n let merge = PlaitHistoryBoard.isMerging(board);\n\n if (save == null) {\n save = shouldSave(op, lastOp);\n }\n\n if (save) {\n if (!merge) {\n if (lastBatch == null) {\n merge = false;\n } else if (operations.length !== 0) {\n merge = true;\n } else {\n merge = shouldMerge(op, lastOp);\n }\n }\n\n if (lastBatch && merge) {\n lastBatch.push(op);\n } else {\n const batch = [op];\n undos.push(batch);\n }\n\n while (undos.length > 100) {\n undos.shift();\n }\n\n if (shouldClear(op)) {\n history.redos = [];\n }\n }\n apply(op);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (isHotkey('mod+z', event)) {\n board.undo();\n return;\n }\n if (isHotkey('mod+shift+z', event)) {\n board.redo();\n return;\n }\n keydown(event);\n };\n\n return board;\n}\n","import { PlaitPointerType, PlaitBoard, PlaitBoardMove, Point } from '../interfaces';\nimport { updatePointerType } from '../transforms/board';\nimport { updateViewportContainerScroll } from '../utils/viewport';\n\nexport function withHandPointer<T extends PlaitBoard>(board: T) {\n const { mousedown, mousemove, globalMouseup, keydown, keyup } = board;\n\n let isMoving: boolean = false;\n const plaitBoardMove: PlaitBoardMove = {\n x: 0,\n y: 0\n };\n\n board.mousedown = (event: MouseEvent) => {\n if (board.options.readonly) {\n updatePointerType(board, PlaitPointerType.hand);\n } else if (!board.selection) {\n updatePointerType(board, PlaitPointerType.selection);\n }\n if (board.pointer === PlaitPointerType.hand && board.selection) {\n isMoving = true;\n PlaitBoard.getBoardNativeElement(board).classList.add('viewport-moving');\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n if (board.pointer === PlaitPointerType.hand && board.selection && isMoving) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n const left = viewportContainer.scrollLeft - (event.x - plaitBoardMove.x);\n const top = viewportContainer.scrollTop - (event.y - plaitBoardMove.y);\n updateViewportContainerScroll(board, left, top, false);\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n mousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (board.selection) {\n isMoving = false;\n PlaitBoard.getBoardNativeElement(board).classList.remove('viewport-moving');\n plaitBoardMove.x = 0;\n plaitBoardMove.y = 0;\n }\n globalMouseup(event);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (board.selection && event.code === 'Space') {\n if (board.pointer !== PlaitPointerType.hand) {\n updatePointerType(board, PlaitPointerType.hand);\n }\n event.preventDefault();\n }\n keydown(event);\n };\n\n board.keyup = (event: KeyboardEvent) => {\n if (board.selection && !board.options.readonly && event.code === 'Space') {\n updatePointerType(board, PlaitPointerType.selection);\n }\n keyup(event);\n };\n\n return board;\n}\n","export const ATTACHED_ELEMENT_CLASS_NAME = 'plait-board-attached';","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { transformPoint } from '../utils/board';\nimport { toPoint } from '../utils/dom/common';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport {\n cacheSelectedElements,\n getHitElements,\n getSelectedElements,\n isIntersectionElements\n} from '../utils/selected-element';\nimport { PlaitElement, PlaitPointerType, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, Selection } from '../interfaces';\nimport { getRectangleByElements } from '../utils/element';\nimport { BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_TEMPORARY_ELEMENTS } from '../utils/weak-maps';\nimport { ATTACHED_ELEMENT_CLASS_NAME } from '../constants/selection';\nimport { throttleRAF } from '../utils';\n\nexport function withSelection(board: PlaitBoard) {\n const { mousedown, globalMousemove, globalMouseup, onChange } = board;\n\n let start: Point | null = null;\n let end: Point | null = null;\n let selectionMovingG: SVGGElement;\n let selectionOuterG: SVGGElement;\n let previousSelectedElements: PlaitElement[];\n\n board.mousedown = (event: MouseEvent) => {\n if (event.button === 0) {\n start = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n }\n\n if (start) {\n const ranges = [{ anchor: start, focus: start }];\n const selectedElements = getSelectedElements(board);\n\n if (isIntersectionElements(board, selectedElements, ranges)) {\n start = null;\n mousedown(event);\n return;\n }\n\n Transforms.setSelection(board, { ranges: ranges });\n\n if (board.pointer === PlaitPointerType.hand || getHitElements(board).length) {\n start = null;\n }\n }\n\n mousedown(event);\n };\n\n board.globalMousemove = (event: MouseEvent) => {\n if (start) {\n const movedTarget = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const { x, y, width, height } = RectangleClient.toRectangleClient([start, movedTarget]);\n selectionMovingG?.remove();\n if (Math.hypot(width, height) > 5) {\n end = movedTarget;\n throttleRAF(() => {\n if (start && end) {\n Transforms.setSelection(board, { ranges: [{ anchor: start, focus: end }] });\n }\n });\n setSelectionMoving(board);\n const rough = PlaitBoard.getRoughSVG(board);\n selectionMovingG = rough.rectangle(x, y, width, height, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n PlaitBoard.getHost(board).append(selectionMovingG);\n }\n }\n globalMousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (start && end) {\n selectionMovingG?.remove();\n clearSelectionMoving(board);\n Transforms.setSelection(board, { ranges: [{ anchor: start, focus: end }] });\n }\n\n if (PlaitBoard.isFocus(board)) {\n const isInBoard = event.target instanceof Node && PlaitBoard.getBoardNativeElement(board).contains(event.target);\n const isInDocument = event.target instanceof Node && document.contains(event.target);\n const isAttachedElement = event.target instanceof Element && event.target.closest(`.${ATTACHED_ELEMENT_CLASS_NAME}`);\n // Clear selection when mouse board outside area\n // The framework needs to determine whether the board is focused through selection\n if (!isInBoard && !start && !isAttachedElement && isInDocument) {\n Transforms.setSelection(board, null);\n }\n }\n\n start = null;\n end = null;\n globalMouseup(event);\n };\n\n board.onChange = () => {\n // calc selected elements entry\n if (board.pointer !== PlaitPointerType.hand) {\n try {\n if (board.operations.find(value => value.type === 'set_selection')) {\n selectionOuterG?.remove();\n const temporaryElements = getTemporaryElements(board);\n const elements = temporaryElements ? temporaryElements : getHitElements(board);\n cacheSelectedElements(board, elements);\n previousSelectedElements = elements;\n const { width, height } = getRectangleByElements(board, elements, false);\n if (width > 0 && height > 0 && elements.length > 1) {\n selectionOuterG = createSelectionOuterG(board, elements);\n selectionOuterG.classList.add('selection-outer');\n PlaitBoard.getHost(board).append(selectionOuterG);\n }\n deleteTemporaryElements(board);\n } else {\n // wait node destroy and remove selected element state\n setTimeout(() => {\n const currentSelectedElements = getSelectedElements(board);\n if (currentSelectedElements.length && currentSelectedElements.length > 1) {\n const selectedElementChange = currentSelectedElements.some(item => !previousSelectedElements.includes(item));\n if (selectedElementChange) {\n selectionOuterG?.remove();\n selectionOuterG = createSelectionOuterG(board, currentSelectedElements);\n selectionOuterG.classList.add('selection-outer');\n PlaitBoard.getHost(board).append(selectionOuterG);\n }\n } else {\n selectionOuterG?.remove();\n }\n });\n }\n } catch (error) {\n console.error(error);\n }\n }\n onChange();\n };\n\n return board;\n}\n\nexport function getTemporaryElements(board: PlaitBoard) {\n return BOARD_TO_TEMPORARY_ELEMENTS.get(board);\n}\n\nexport function deleteTemporaryElements(board: PlaitBoard) {\n BOARD_TO_TEMPORARY_ELEMENTS.delete(board);\n}\n\nexport function isSelectionMoving(board: PlaitBoard) {\n return !!BOARD_TO_IS_SELECTION_MOVING.get(board);\n}\n\nexport function setSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardNativeElement(board).classList.add('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.set(board, true);\n}\n\nexport function clearSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardNativeElement(board).classList.remove('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.delete(board);\n}\n\nexport function createSelectionOuterG(board: PlaitBoard, selectElements: PlaitElement[]) {\n const { x, y, width, height } = getRectangleByElements(board, selectElements, false);\n const rough = PlaitBoard.getRoughSVG(board);\n return rough.rectangle(x - 2.5, y - 2.5, width + 5, height + 5, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fillStyle: 'solid'\n });\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { debounce } from '../utils/common';\nimport { initializeViewBox, isFromScrolling, setIsFromScrolling, updateViewportOffset } from '../utils/viewport';\n\nexport function withViewport(board: PlaitBoard) {\n const { onChange } = board;\n\n const throttleUpdate = debounce(\n () => {\n initializeViewBox(board);\n updateViewportOffset(board);\n },\n 500,\n { leading: true }\n );\n\n board.onChange = () => {\n const isSetViewport = board.operations.some(op => op.type === 'set_viewport');\n const isOnlySetSelection = board.operations.some(op => op.type === 'set_selection');\n if (isOnlySetSelection) {\n return onChange();\n }\n if (isSetViewport && isFromScrolling(board)) {\n setIsFromScrolling(board, false);\n return onChange();\n }\n if (isSetViewport) {\n initializeViewBox(board);\n updateViewportOffset(board);\n } else {\n throttleUpdate();\n }\n onChange();\n };\n\n return board;\n}\n","import { BOARD_TO_HOST } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\nimport { isInPlaitBoard, transformPoint } from '../utils/board';\nimport { toPoint } from '../utils/dom/common';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { PlaitElement } from '../interfaces/element';\nimport { getSelectedElements, isIntersectionElements } from '../utils/selected-element';\nimport { PlaitNode } from '../interfaces/node';\nimport { throttleRAF } from '../utils/common';\nimport { addMovingElements, removeMovingElements } from '../utils/moving-element';\nimport { MERGING } from '../interfaces/history';\n\nexport function withMoving(board: PlaitBoard) {\n const { mousedown, mousemove, globalMouseup, globalMousemove } = board;\n\n let offsetX = 0;\n let offsetY = 0;\n let isPreventDefault = false;\n let startPoint: Point | null;\n let activeElements: PlaitElement[] | null = [];\n\n board.mousedown = event => {\n const host = BOARD_TO_HOST.get(board);\n const point = transformPoint(board, toPoint(event.x, event.y, host!));\n const ranges = [{ anchor: point, focus: point }];\n let movableElements = board.children.filter(item => board.isMovable(item));\n if (movableElements.length) {\n startPoint = point;\n const selectedRootElements = getSelectedElements(board).filter(item => movableElements.includes(item));\n const intersectionSelectedElement = isIntersectionElements(board, selectedRootElements, ranges);\n if (intersectionSelectedElement) {\n activeElements = selectedRootElements;\n } else {\n activeElements = movableElements.filter(item =>\n ranges.some(range => {\n return board.isHitSelection(item, range);\n })\n );\n }\n }\n\n mousedown(event);\n };\n\n board.mousemove = event => {\n if (startPoint && activeElements?.length && !PlaitBoard.hasBeenTextEditing(board)) {\n if (!isPreventDefault) {\n isPreventDefault = true;\n }\n const host = BOARD_TO_HOST.get(board);\n const endPoint = transformPoint(board, toPoint(event.x, event.y, host!));\n offsetX = endPoint[0] - startPoint[0];\n offsetY = endPoint[1] - startPoint[1];\n throttleRAF(() => {\n const currentElements = activeElements!.map(activeElement => {\n const [x, y] = activeElement?.points![0];\n const index = board.children.findIndex(item => item.id === activeElement.id);\n Transforms.setNode(\n board,\n {\n points: [[x + offsetX, y + offsetY]]\n },\n [index]\n );\n MERGING.set(board, true);\n return PlaitNode.get(board, [index]);\n });\n PlaitBoard.getBoardNativeElement(board).classList.add('element-moving');\n addMovingElements(board, currentElements as PlaitElement[]);\n });\n }\n if (isPreventDefault) {\n // 阻止 move 过程中触发画布滚动行为\n event.preventDefault();\n }\n mousemove(event);\n };\n\n board.globalMousemove = event => {\n if (startPoint) {\n const inPlaitBoardElement = isInPlaitBoard(board, event.x, event.y);\n if (!inPlaitBoardElement) {\n cancelMove(board);\n }\n }\n globalMousemove(event);\n };\n\n board.globalMouseup = event => {\n isPreventDefault = false;\n if (startPoint) {\n cancelMove(board);\n }\n globalMouseup(event);\n };\n\n function cancelMove(board: PlaitBoard) {\n startPoint = null;\n offsetX = 0;\n offsetY = 0;\n activeElements = [];\n removeMovingElements(board);\n MERGING.set(board, false);\n PlaitBoard.getBoardNativeElement(board).classList.remove('element-moving');\n }\n\n return board;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitPluginElementContext } from './context';\nimport { PlaitPluginElementComponent } from './plugin-element';\nimport { PlaitEffect } from '../children/effect';\nimport { Ancestor, PlaitNode } from '../../interfaces/node';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../../utils/weak-maps';\nimport { addSelectedElement, isSelectedElement, removeSelectedElement } from '../../utils';\n\n@Component({\n selector: 'plait-element',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitElementComponent implements OnInit, OnChanges, OnDestroy {\n initialized = false;\n\n instance?: PlaitPluginElementComponent<PlaitElement>;\n\n @Input() index!: number;\n\n @Input() element!: PlaitElement;\n\n @Input() parent!: Ancestor;\n\n @Input() board!: PlaitBoard;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor(public renderer2: Renderer2, public viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.initialize();\n this.drawElement();\n }\n\n initialize() {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n this.initialized = true;\n }\n\n drawElement() {\n const context = this.getContext();\n const result = this.board.drawElement(context);\n if (Array.isArray(result)) {\n } else {\n const componentRef = this.viewContainerRef.createComponent(result);\n const instance = componentRef.instance;\n instance.context = context;\n this.insertG(instance.rootG ? instance.rootG : instance.g);\n this.instance = instance;\n }\n }\n\n insertG(g: SVGGElement) {\n if (PlaitBoard.isBoard(this.parent)) {\n this.parentG.append(g);\n } else {\n let siblingG = PlaitElement.getComponent(this.parent).g;\n if (this.index > 0) {\n const brotherElement = (this.parent.children as PlaitElement[])[this.index - 1];\n const lastElement = PlaitNode.last(this.board, PlaitBoard.findPath(this.board, brotherElement));\n let component = PlaitElement.getComponent(lastElement) || PlaitElement.getComponent(brotherElement);\n siblingG = component.g;\n }\n this.parentG.insertBefore(g, siblingG);\n }\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n if (this.initialized) {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n const elementChanged = simpleChanges['element'];\n const context = this.getContext();\n if (elementChanged && isSelectedElement(this.board, elementChanged.previousValue)) {\n context.selected = true;\n removeSelectedElement(this.board, elementChanged.previousValue);\n addSelectedElement(this.board, this.element);\n }\n if (this.instance) {\n this.instance.context = context;\n }\n }\n }\n\n getContext(): PlaitPluginElementContext {\n const isSelected = isSelectedElement(this.board, this.element);\n const context: PlaitPluginElementContext = {\n element: this.element,\n parent: this.parent,\n board: this.board,\n selected: isSelected,\n effect: this.effect\n };\n return context;\n }\n\n ngOnDestroy(): void {\n this.board.destroyElement(this.getContext());\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitEffect } from './effect';\nimport { Ancestor } from '../../interfaces/node';\n\n@Component({\n selector: 'plait-children',\n template: `\n <plait-element\n *ngFor=\"let item of parent.children; let index = index; trackBy: trackBy\"\n [index]=\"index\"\n [element]=\"item\"\n [parent]=\"parent\"\n [board]=\"board\"\n [effect]=\"effect\"\n [parentG]=\"parentG\"\n ></plait-element>\n `\n})\nexport class PlaitChildrenElement implements OnInit {\n @Input() board!: PlaitBoard;\n\n @Input() parent!: Ancestor;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor() {}\n\n ngOnInit(): void {\n if (!this.parent) {\n this.parent = this.board;\n }\n if (!this.parentG) {\n this.parentG = PlaitBoard.getElementHost(this.board);\n }\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { PlaitBoard, PlaitPointerType } from '../../interfaces';\nimport { updatePointerType } from '../../transforms/board';\n\n@Component({\n selector: 'plait-toolbar',\n templateUrl: './toolbar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitToolbarComponent {\n PlaitPointerType = PlaitPointerType;\n\n @HostBinding('class') hostClass = `plait-board-toolbar`;\n\n @Input() board!: PlaitBoard;\n\n get zoom() {\n const zoom = this.board?.viewport.zoom || 1;\n return Number((zoom * 100).toFixed(0));\n }\n\n get isHand() {\n return this.board.pointer === PlaitPointerType.hand;\n }\n\n @Output() adaptHandle = new EventEmitter();\n\n @Output() zoomInHandle = new EventEmitter();\n\n @Output() zoomOutHandle = new EventEmitter();\n\n @Output() resetZoomHandel = new EventEmitter();\n\n activeHand() {\n updatePointerType(this.board, this.isHand ? PlaitPointerType.selection : PlaitPointerType.hand);\n }\n\n // 适应画布\n adapt() {\n this.adaptHandle.emit();\n }\n\n // 放大\n zoomIn() {\n this.zoomInHandle.emit();\n }\n\n // 缩小\n zoomOut() {\n this.zoomOutHandle.emit();\n }\n\n resetZoom() {\n this.resetZoomHandel.emit();\n }\n}\n","<div class=\"zoom-toolbar island plait-board-attached\">\n <a class=\"toolbar-item plait-action-icon\" [ngClass]=\"{ 'icon-active': isHand }\" (click)=\"activeHand()\">\n <ng-template [ngTemplateOutlet]=\"dragMoveTemplate\"></ng-template>\n </a>\n <div class=\"divider\"></div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"adapt()\">\n <ng-template [ngTemplateOutlet]=\"adaptTemplate\"></ng-template>\n </a>\n <div class=\"divider\"></div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"zoomOut()\">\n <ng-template [ngTemplateOutlet]=\"zoomOutTemplate\"></ng-template>\n </a>\n <div class=\"toolbar-item zoom-value\" (mousedown)=\"resetZoom()\">{{ zoom }}%</div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"zoomIn()\">\n <ng-template [ngTemplateOutlet]=\"zoomInTemplate\"></ng-template>\n </a>\n</div>\n\n<ng-template #dragMoveTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>1.Base基础/1.icon图标/2.normal/hand</title>\n <g id=\"1.Base基础/1.icon图标/2.normal/hand\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M8.44583468,0.500225887 C9.07406934,0.510185679 9.54739531,0.839591366 9.86192311,1.34305279 C9.89696656,1.39914649 9.92878401,1.45492964 9.9576026,1.50991157 L9.9576026,1.50991157 L10.0210033,1.64201027 L10.061978,1.62350755 C10.1972891,1.56834247 10.3444107,1.53218464 10.5027907,1.51755353 L10.5027907,1.51755353 L10.6649031,1.51019133 C11.4883708,1.51019133 12.0208782,1.99343346 12.3023042,2.66393278 C12.3903714,2.87392911 12.4344191,3.10047818 12.4339446,3.3257952 L12.4339446,3.3257952 L12.4360033,3.80501027 L12.5160535,3.78341501 C12.6124478,3.76124046 12.7138812,3.74739854 12.820201,3.74250274 L12.820201,3.74250274 L12.9833264,3.74194533 C13.6121166,3.7657478 14.0645887,4.0801724 14.3087062,4.56112689 C14.4521117,4.8436609 14.4987984,5.11349437 14.4999262,5.33449618 L14.4999262,5.33449618 L14.3922653,12.049414 C14.3784752,12.909177 14.0717787,13.7360948 13.5212406,14.3825228 C13.4055676,14.5183496 13.2843697,14.643961 13.1582361,14.7596335 C12.4634771,15.3967716 11.755103,15.6538706 11.1897396,15.7000055 L11.1897396,15.7000055 L7.4723083,15.6798158 C7.14276373,15.634268 6.81580098,15.5154267 6.49455235,15.3472501 C6.25643701,15.2225944 6.06881706,15.0975452 5.88705731,14.9494308 L5.88705731,14.9494308 L2.55198782,11.500873 C2.39559475,11.3769079 2.17626793,11.1748532 1.9548636,10.9139403 C1.57867502,10.4706225 1.33501976,10.0139923 1.30330257,9.52833025 C1.28093191,9.18578476 1.37200912,8.85641102 1.5826788,8.56872564 C1.82538833,8.23725279 2.12881965,8.02107162 2.47470569,7.92957033 C2.95807982,7.80169771 3.42705723,7.92468989 3.86509644,8.18731167 C4.04431391,8.29475961 4.1816109,8.40304483 4.26225571,8.47866867 L4.26225571,8.47866867 L4.61400328,8.79701027 L4.57247249,3.59275349 L4.57628524,3.46204923 C4.5897691,3.23444442 4.64087578,2.95701848 4.75937106,2.66961597 C5.01017272,2.06131302 5.49670227,1.64692543 6.21363856,1.60818786 C6.44223508,1.59583681 6.65042099,1.62176802 6.83696985,1.68057551 L6.83696985,1.68057551 L6.86400328,1.69001027 C6.88501862,1.63593052 6.90764242,1.58175442 6.9331867,1.52672633 L6.9331867,1.52672633 L7.01883595,1.35955614 C7.31549194,0.832047939 7.79476072,0.48993549 8.44583468,0.500225887 Z M8.42684173,1.70001476 C8.26825412,1.69756905 8.16339456,1.77242008 8.06478367,1.94776814 C8.03967773,1.99241107 8.01831703,2.03811495 8.00083464,2.07855067 L8.00083464,2.07855067 L7.94879157,2.2035905 L7.94354455,2.20731401 L7.943,3.161 L7.97170661,3.16123746 L7.97170661,7.60991883 L6.77170661,7.60991883 L6.771,3.338 L6.74362358,3.33880359 C6.74284189,3.29064626 6.73014163,3.20282206 6.7002616,3.11094408 L6.66446012,3.01903385 C6.58982025,2.85766739 6.49843292,2.79455071 6.27838133,2.80644008 C6.07001018,2.81769881 5.95642108,2.91444507 5.86877664,3.12702089 C5.79792279,3.29887224 5.77228127,3.48655908 5.77246879,3.58977183 L5.77246879,3.58977183 L5.83613619,11.5252021 L3.41863956,9.33477657 L3.31637296,9.25979571 L3.24805011,9.21651224 C3.06096922,9.10434987 2.89279975,9.06024641 2.78159879,9.0896637 C2.71007735,9.10858411 2.63607367,9.1613084 2.55086305,9.27768211 C2.51020424,9.33320478 2.49638061,9.38319687 2.50075171,9.4501283 C2.51206889,9.62341997 2.64503022,9.87260054 2.86983366,10.1375191 C3.03268834,10.3294345 3.19762053,10.4813781 3.35554956,10.6131022 L3.35554956,10.6131022 L6.68454317,14.0569073 C6.71106575,14.0773808 6.74806086,14.1037158 6.79369091,14.1335929 L6.79369091,14.1335929 L6.95464838,14.2315311 L7.05111031,14.2841211 C7.25978123,14.3933622 7.46253523,14.4670573 7.55685495,14.4854708 L7.55685495,14.4854708 L11.1407985,14.5022108 C11.1503576,14.5013899 11.1627905,14.4997539 11.1779002,14.4971772 L11.1779002,14.4971772 L11.2991076,14.4694224 C11.3491682,14.4557375 11.4083624,14.437284 11.4751158,14.4130563 C11.769383,14.3062543 12.066676,14.1324596 12.3471758,13.8752234 C12.4371203,13.7927386 12.5240597,13.7026333 12.607654,13.6044743 C12.9760464,13.1719172 13.183059,12.6137678 13.1924195,12.030173 L13.1924195,12.030173 L13.3000132,5.32832551 C13.2997939,5.29016685 13.2826117,5.19085946 13.2386527,5.10425262 C13.1843838,4.99733326 13.1129774,4.94771265 12.9379578,4.94108739 C12.6814739,4.93138871 12.534132,5.11189595 12.4756792,5.39480062 L12.4768718,7.52734922 L11.2768718,7.52734922 L11.276,5.688 L11.2462883,5.6883208 L11.2339541,3.32771285 C11.2341,3.2560396 11.2209054,3.18817621 11.1957482,3.12818892 C11.0820579,2.85732094 10.9199288,2.71019133 10.6649031,2.71019133 C10.456829,2.71019133 10.3197487,2.87378067 10.2524297,3.11264939 L10.2530225,7.512783 L9.05302254,7.512783 L9.053,3.288 L9.01554331,3.28724203 L8.98800328,2.29901027 L8.9629175,2.22263368 C8.94515567,2.17417174 8.92167756,2.11937748 8.8924232,2.06330056 L8.8924232,2.06330056 L8.84420197,1.9788544 C8.72758855,1.79219249 8.59915015,1.70280728 8.42684173,1.70001476 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n\n<ng-template #adaptTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>1.Base基础/1.icon图标/2.normal/Fit canvas</title>\n <g id=\"1.Base基础/1.icon图标/2.normal/Fit-canvas\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M14.9971494,10.4 L14.9971494,13.4020516 C14.9971494,14.2366152 14.3581879,14.9219414 13.542782,14.9955129 L13.3971494,15.0020516 L10.4,15.0020516 L10.4,13.8020516 L13.3971494,13.8020516 C13.590449,13.8020516 13.7517243,13.6649388 13.7890228,13.4826656 L13.7971494,13.4020516 L13.7971494,10.4 L14.9971494,10.4 Z M2.2,10.4 L2.2,13.3971494 C2.2,13.590449 2.3371128,13.7517243 2.51938605,13.7890228 L2.6,13.7971494 L5.60205161,13.7971494 L5.60205161,14.9971494 L2.6,14.9971494 C1.76543638,14.9971494 1.08011021,14.3581879 1.00653868,13.542782 L1,13.3971494 L1,10.4 L2.2,10.4 Z M10.5024511,4.9 C11.3861067,4.9 12.1024511,5.6163444 12.1024511,6.5 L12.1024511,6.5 L12.1024511,9.5 C12.1024511,10.3836556 11.3861067,11.1 10.5024511,11.1 L10.5024511,11.1 L5.50245112,11.1 C4.61879552,11.1 3.90245112,10.3836556 3.90245112,9.5 L3.90245112,9.5 L3.90245112,6.5 C3.90245112,5.6163444 4.61879552,4.9 5.50245112,4.9 L5.50245112,4.9 Z M10.5024511,6.1 L5.50245112,6.1 C5.28153722,6.1 5.10245112,6.2790861 5.10245112,6.5 L5.10245112,6.5 L5.10245112,9.5 C5.10245112,9.7209139 5.28153722,9.9 5.50245112,9.9 L5.50245112,9.9 L10.5024511,9.9 C10.723365,9.9 10.9024511,9.7209139 10.9024511,9.5 L10.9024511,9.5 L10.9024511,6.5 C10.9024511,6.2790861 10.723365,6.1 10.5024511,6.1 L10.5024511,6.1 Z M5.59714938,1 L5.59714938,2.2 L2.6,2.2 C2.40670034,2.2 2.24542508,2.3371128 2.20812658,2.51938605 L2.2,2.6 L2.2,5.60205161 L1,5.60205161 L1,2.6 C1,1.76543638 1.63896152,1.08011021 2.45436739,1.00653868 L2.6,1 L5.59714938,1 Z M13.3971494,1 L13.542782,1.00653868 C14.3581879,1.08011021 14.9971494,1.76543638 14.9971494,2.6 L14.9971494,2.6 L14.9971494,5.60205161 L13.7971494,5.60205161 L13.7971494,2.6 L13.7890228,2.51938605 C13.7517243,2.3371128 13.590449,2.2 13.3971494,2.2 L13.3971494,2.2 L10.4,2.2 L10.4,1 L13.3971494,1 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n<ng-template #zoomOutTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>action/zoom-out</title>\n <desc>Created with Sketch.</desc>\n <g id=\"action/zoom-out\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M6.85,2.73225886e-13 C10.6331505,2.73225886e-13 13.7,3.06684946 13.7,6.85 C13.7,8.54194045 13.0865836,10.0906098 12.0700142,11.2857448 L15.4201976,14.5717081 C15.6567367,14.8037768 15.6603607,15.1836585 15.4282919,15.4201976 C15.1962232,15.6567367 14.8163415,15.6603607 14.5798024,15.4282919 L14.5798024,15.4282919 L11.2163456,12.128262 C10.0309427,13.1099691 8.50937591,13.7 6.85,13.7 C3.06684946,13.7 4.58522109e-14,10.6331505 4.58522109e-14,6.85 C4.58522109e-14,3.06684946 3.06684946,2.73225886e-13 6.85,2.73225886e-13 Z M6.85,1.2 C3.72959116,1.2 1.2,3.72959116 1.2,6.85 C1.2,9.97040884 3.72959116,12.5 6.85,12.5 C8.31753357,12.5 9.65438791,11.9404957 10.6588859,11.0231643 C10.6855412,10.9625408 10.7245275,10.9050898 10.7743982,10.8542584 C10.8288931,10.7987137 10.8915387,10.7560124 10.9585649,10.7261903 C11.9144009,9.71595758 12.5,8.35136579 12.5,6.85 C12.5,3.72959116 9.97040884,1.2 6.85,1.2 Z M4.6,6.2 L9.12944565,6.2 C9.4608165,6.2 9.72944565,6.46862915 9.72944565,6.8 C9.72944565,7.09823376 9.51185604,7.34564675 9.22676876,7.39214701 L9.12944565,7.4 L4.6,7.4 C4.26862915,7.4 4,7.13137085 4,6.8 C4,6.50176624 4.21758961,6.25435325 4.50267688,6.20785299 L4.6,6.2 L9.12944565,6.2 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n\n<ng-template #zoomInTemplate\n ><svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>action/zoom-in</title>\n <desc>Created with Sketch.</desc>\n <g id=\"action/zoom-in\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M6.85,-1.81188398e-13 C10.6331505,-1.81188398e-13 13.7,3.06684946 13.7,6.85 C13.7,8.54194045 13.0865836,10.0906098 12.0700142,11.2857448 L15.4201976,14.5717081 C15.6567367,14.8037768 15.6603607,15.1836585 15.4282919,15.4201976 C15.1962232,15.6567367 14.8163415,15.6603607 14.5798024,15.4282919 L14.5798024,15.4282919 L11.2163456,12.128262 C10.0309427,13.1099691 8.50937591,13.7 6.85,13.7 C3.06684946,13.7 4.61852778e-14,10.6331505 4.61852778e-14,6.85 C4.61852778e-14,3.06684946 3.06684946,-1.81188398e-13 6.85,-1.81188398e-13 Z M6.85,1.2 C3.72959116,1.2 1.2,3.72959116 1.2,6.85 C1.2,9.97040884 3.72959116,12.5 6.85,12.5 C8.31753357,12.5 9.65438791,11.9404957 10.6588859,11.0231643 C10.6855412,10.9625408 10.7245275,10.9050898 10.7743982,10.8542584 C10.8288931,10.7987137 10.8915387,10.7560124 10.9585649,10.7261903 C11.9144009,9.71595758 12.5,8.35136579 12.5,6.85 C12.5,3.72959116 9.97040884,1.2 6.85,1.2 Z M6.86472282,3.93527718 C7.16295659,3.93527718 7.41036958,4.15286679 7.45686984,4.43795406 L7.46472282,4.53527718 L7.464,6.19927718 L9.12944565,6.2 C9.42767941,6.2 9.6750924,6.41758961 9.72159266,6.70267688 L9.72944565,6.8 C9.72944565,7.09823376 9.51185604,7.34564675 9.22676876,7.39214701 L9.12944565,7.4 L7.464,7.39927718 L7.46472282,9.06472282 C7.46472282,9.36295659 7.24713321,9.61036958 6.96204594,9.65686984 L6.86472282,9.66472282 C6.56648906,9.66472282 6.31907607,9.44713321 6.27257581,9.16204594 L6.26472282,9.06472282 L6.264,7.39927718 L4.6,7.4 C4.30176624,7.4 4.05435325,7.18241039 4.00785299,6.89732312 L4,6.8 C4,6.50176624 4.21758961,6.25435325 4.50267688,6.20785299 L4.6,6.2 L6.264,6.19927718 L6.26472282,4.53527718 C6.26472282,4.2701805 6.43664548,4.0452385 6.67507642,3.96586557 L6.76739971,3.94313016 L6.86472282,3.93527718 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { PlaitBoard, PlaitBoardChangeEvent, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPlugin } from '../interfaces/plugin';\nimport { Viewport } from '../interfaces/viewport';\nimport { createBoard } from '../plugins/create-board';\nimport { withBoard } from '../plugins/with-board';\nimport { withHistory } from '../plugins/with-history';\nimport { withHandPointer } from '../plugins/with-hand';\nimport { withSelection } from '../plugins/with-selection';\nimport { toPoint, transformPoint, distanceBetweenPointAndRectangle } from '../utils';\nimport {\n BOARD_TO_ON_CHANGE,\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_ROUGH_SVG,\n BOARD_TO_MOVING_POINT\n} from '../utils/weak-maps';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n fitViewport,\n getViewBox,\n initializeViewportOffset,\n initializeViewBox,\n setViewport,\n changeZoom,\n isFromViewportChange,\n setIsFromViewportChange,\n initializeViewportContainer,\n updateViewportOffset,\n setIsFromScrolling\n} from '../utils/viewport';\nimport { isHotkey } from 'is-hotkey';\nimport { withViewport } from '../plugins/with-viewport';\nimport { Point } from '../interfaces/point';\nimport { withMoving } from '../plugins/with-moving';\nimport { hasInputOrTextareaTarget } from '../utils/dom/common';\n\nconst ElementHostClass = 'element-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\"><g class=\"element-host\"></g></svg>\n <plait-children [board]=\"board\" [effect]=\"effect\"></plait-children>\n </div>\n <plait-toolbar\n *ngIf=\"isFocused && !toolbarTemplateRef\"\n [board]=\"board\"\n (adaptHandle)=\"adaptHandle()\"\n (zoomInHandle)=\"zoomInHandle()\"\n (zoomOutHandle)=\"zoomOutHandle()\"\n (resetZoomHandel)=\"resetZoomHandel()\"\n ></plait-toolbar>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, OnDestroy {\n hasInitialized = false;\n\n effect = {};\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions!: PlaitBoardOptions;\n\n @Output() plaitChange: EventEmitter<PlaitBoardChangeEvent> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `plait-board-container ${this.board.pointer}`;\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n @ContentChild('plaitToolbar')\n public toolbarTemplateRef!: TemplateRef<any>;\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n constructor(public cdr: ChangeDetectorRef, private elementRef: ElementRef<HTMLElement>, private ngZone: NgZone) {}\n\n ngOnInit(): void {\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.elementResizeListener();\n this.mouseLeaveListener();\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n BOARD_TO_ELEMENT_HOST.set(this.board, elementHost);\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n this.detect();\n });\n const changeEvent: PlaitBoardChangeEvent = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection\n };\n this.plaitChange.emit(changeEvent);\n });\n this.hasInitialized = true;\n }\n\n detect() {\n this.effect = {};\n this.cdr.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) this.board.children = valueChange.currentValue;\n if (options) this.board.options = options.currentValue;\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withHandPointer(\n withHistory(withSelection(withMoving(withBoard(withViewport(createBoard(this.plaitValue, this.plaitOptions))))))\n );\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousemove(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalMousemove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.dblclick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n filter(\n event =>\n this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target)\n )\n )\n .subscribe((event: KeyboardEvent) => {\n if (isHotkey(['mod+=', 'mod++'], { byKey: true })(event)) {\n event.preventDefault();\n this.zoomInHandle(false);\n }\n if (isHotkey('mod+-', { byKey: true })(event)) {\n this.zoomOutHandle();\n event.preventDefault();\n }\n this.board?.keydown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyup(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((clipboardEvent: ClipboardEvent) => {\n const mousePoint = BOARD_TO_MOVING_POINT.get(this.board);\n const rect = this.nativeElement.getBoundingClientRect();\n if (mousePoint && distanceBetweenPointAndRectangle(mousePoint[0], mousePoint[1], rect) === 0) {\n const targetPoint = transformPoint(this.board, toPoint(mousePoint[0], mousePoint[1], this.host));\n this.board.insertFragment(clipboardEvent.clipboardData, targetPoint);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n this.board?.deleteFragment(event.clipboardData);\n });\n }\n\n private viewportScrollListener() {\n this.ngZone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return this.isFocused;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n const zoom = this.board.viewport.zoom;\n const viewBox = getViewBox(this.board, zoom);\n const origination = [scrollLeft / zoom + viewBox[0], scrollTop / zoom + viewBox[1]] as Point;\n if (Point.isEquals(origination, this.board.viewport.origination)) {\n return;\n }\n setViewport(this.board, origination);\n setIsFromScrolling(this.board, true);\n });\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private mouseLeaveListener() {\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n adaptHandle() {\n fitViewport(this.board);\n }\n\n zoomInHandle(isCenter = true) {\n changeZoom(this.board, this.board.viewport.zoom + 0.1, isCenter);\n }\n\n zoomOutHandle() {\n changeZoom(this.board, this.board.viewport.zoom - 0.1);\n }\n\n resetZoomHandel() {\n changeZoom(this.board, 1);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n BOARD_TO_ON_CHANGE.delete(this.board);\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlaitBoardComponent } from './board/board.component';\nimport { PlaitElementComponent } from './core/element/element.component';\nimport { PlaitToolbarComponent } from './core/toolbar/toolbar.component';\nimport { PlaitChildrenElement } from './core/children/children.component';\n\nconst COMPONENTS = [PlaitBoardComponent, PlaitChildrenElement, PlaitElementComponent, PlaitToolbarComponent];\n\n@NgModule({\n declarations: [...COMPONENTS],\n imports: [CommonModule],\n exports: [...COMPONENTS]\n})\nexport class PlaitModule {}\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './constants';\nexport * from './core/element/plugin-element';\nexport * from './core/element/element.component';\nexport * from './core/children/children.component';\nexport * from './core/element/context-change';\nexport * from './core/toolbar/toolbar.component';\nexport * from './interfaces';\nexport * from './plait.module';\nexport * from './transforms';\nexport * from './utils';\nexport * from './plugins/with-selection';\nexport * from './plugins/with-moving';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["setViewport","i2.PlaitElementComponent","i2.PlaitChildrenElement","i3.PlaitToolbarComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plait-core.mjs","sources":["../../../packages/plait/src/utils/weak-maps.ts","../../../packages/plait/src/utils/tree.ts","../../../packages/plait/src/utils/element.ts","../../../packages/plait/src/interfaces/board.ts","../../../packages/plait/src/interfaces/pointer.ts","../../../packages/plait/src/utils/helper.ts","../../../packages/plait/src/interfaces/viewport.ts","../../../packages/plait/src/interfaces/path.ts","../../../packages/plait/src/interfaces/node.ts","../../../packages/plait/src/transforms/general.ts","../../../packages/plait/src/transforms/node.ts","../../../packages/plait/src/transforms/selection.ts","../../../packages/plait/src/transforms/viewport.ts","../../../packages/plait/src/utils/math.ts","../../../packages/plait/src/utils/board.ts","../../../packages/plait/src/utils/dom/common.ts","../../../packages/plait/src/utils/dom/foreign.ts","../../../packages/plait/src/utils/environment.ts","../../../packages/plait/src/utils/selected-element.ts","../../../packages/plait/src/core/element/context-change.ts","../../../packages/plait/src/core/element/plugin-element.ts","../../../packages/plait/src/interfaces/element.ts","../../../packages/plait/src/interfaces/rectangle-client.ts","../../../packages/plait/src/interfaces/operation.ts","../../../packages/plait/src/interfaces/point.ts","../../../packages/plait/src/interfaces/selection.ts","../../../packages/plait/src/interfaces/history.ts","../../../packages/plait/src/utils/history.ts","../../../packages/plait/src/utils/hotkeys.ts","../../../packages/plait/src/utils/id-creator.ts","../../../packages/plait/src/constants/index.ts","../../../packages/plait/src/utils/draw/rectangle.ts","../../../packages/plait/src/utils/draw/arrow.ts","../../../packages/plait/src/utils/draw/circle.ts","../../../packages/plait/src/utils/draw/line.ts","../../../packages/plait/src/utils/viewport.ts","../../../packages/plait/src/utils/common.ts","../../../packages/plait/src/utils/moving-element.ts","../../../packages/plait/src/transforms/board.ts","../../../packages/plait/src/transforms/index.ts","../../../packages/plait/src/plugins/create-board.ts","../../../packages/plait/src/plugins/with-board.ts","../../../packages/plait/src/plugins/with-history.ts","../../../packages/plait/src/plugins/with-hand.ts","../../../packages/plait/src/constants/selection.ts","../../../packages/plait/src/plugins/with-selection.ts","../../../packages/plait/src/plugins/with-viewport.ts","../../../packages/plait/src/plugins/with-moving.ts","../../../packages/plait/src/core/element/element.component.ts","../../../packages/plait/src/core/children/children.component.ts","../../../packages/plait/src/core/toolbar/toolbar.component.ts","../../../packages/plait/src/core/toolbar/toolbar.component.html","../../../packages/plait/src/board/board.component.ts","../../../packages/plait/src/plait.module.ts","../../../packages/plait/src/public-api.ts","../../../packages/plait/src/plait-core.ts"],"sourcesContent":["import { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\n\n// record richtext type status\nexport const IS_BOARD_CACHE = new WeakMap<Object, boolean>();\n\nexport const FLUSHING = new WeakMap<PlaitBoard, boolean>();\n\nexport const NODE_TO_INDEX = new WeakMap<PlaitNode, number>();\n\nexport const NODE_TO_PARENT = new WeakMap<PlaitNode, Ancestor>();\n\nexport const IS_TEXT_EDITABLE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ON_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n\nexport const BOARD_TO_ROUGH_SVG = new WeakMap<PlaitBoard, RoughSVG>();\n\nexport const BOARD_TO_HOST = new WeakMap<PlaitBoard, SVGSVGElement>();\n\nexport const BOARD_TO_ELEMENT_HOST = new WeakMap<PlaitBoard, SVGGElement>();\n\nexport const BOARD_TO_SELECTED_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_POINT = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_VIEWPORT_ORIGINATION = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_IS_SELECTION_MOVING = new WeakMap<PlaitBoard, boolean>();\n\n// save no standard selected elements\nexport const BOARD_TO_TEMPORARY_ELEMENTS = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n","export function depthFirstRecursion<T extends TreeNode = TreeNode>(node: T, callback: (node: T) => void, recursion?: (node: T) => boolean) {\n if (!recursion || recursion(node)) {\n node.children?.forEach(child => {\n depthFirstRecursion(child as T, callback, recursion);\n });\n }\n callback(node);\n}\n\nexport interface TreeNode {\n children?: TreeNode[];\n}\n","import { PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';\nimport { depthFirstRecursion } from './tree';\n\nexport function getRectangleByElements(board: PlaitBoard, elements: PlaitElement[], recursion: boolean): RectangleClient {\n const boundaryBox = {\n left: Number.MAX_VALUE,\n top: Number.MAX_VALUE,\n right: Number.NEGATIVE_INFINITY,\n bottom: Number.NEGATIVE_INFINITY\n };\n\n const calcRectangleClient = (node: PlaitElement) => {\n const nodeRectangle = board.getRectangle(node);\n if (nodeRectangle) {\n boundaryBox.left = Math.min(boundaryBox.left, nodeRectangle.x);\n boundaryBox.top = Math.min(boundaryBox.top, nodeRectangle.y);\n boundaryBox.right = Math.max(boundaryBox.right, nodeRectangle.x + nodeRectangle.width);\n boundaryBox.bottom = Math.max(boundaryBox.bottom, nodeRectangle.y + nodeRectangle.height);\n }\n };\n\n elements.forEach(element => {\n if (recursion) {\n depthFirstRecursion(\n element,\n node => calcRectangleClient(node),\n node => board.isRecursion(node)\n );\n } else {\n calcRectangleClient(element);\n }\n });\n\n return {\n x: boundaryBox.left,\n y: boundaryBox.top,\n width: boundaryBox.right - boundaryBox.left,\n height: boundaryBox.bottom - boundaryBox.top\n };\n}\n\nexport function getBoardRectangle(board: PlaitBoard): RectangleClient {\n return getRectangleByElements(board, board.children, true);\n}\n","import { PlaitPointerType } from './pointer';\nimport { ComponentType, PlaitElement } from './element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitHistory } from './history';\nimport { PlaitOperation } from './operation';\nimport { Selection, Range } from './selection';\nimport { Viewport } from './viewport';\nimport { PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport {\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_ROUGH_SVG,\n IS_BOARD_CACHE,\n IS_TEXT_EDITABLE,\n NODE_TO_INDEX,\n NODE_TO_PARENT\n} from '../utils/weak-maps';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { Point } from './point';\nimport { RectangleClient } from './rectangle-client';\nimport { getRectangleByElements } from '../utils/element';\nimport { Path } from './path';\nimport { Ancestor, PlaitNode } from './node';\n\nexport interface PlaitBoard {\n viewport: Viewport;\n children: PlaitElement[];\n operations: PlaitOperation[];\n // record pointer selection or drag selection\n // it will be dirty when board viewport change\n selection: Selection | null;\n pointer: PlaitPointerType;\n history: PlaitHistory;\n options: PlaitBoardOptions;\n undo: () => void;\n redo: () => void;\n apply: (operation: PlaitOperation) => void;\n onChange: () => void;\n mousedown: (event: MouseEvent) => void;\n mousemove: (event: MouseEvent) => void;\n globalMousemove: (event: MouseEvent) => void;\n mouseup: (event: MouseEvent) => void;\n globalMouseup: (event: MouseEvent) => void;\n keydown: (event: KeyboardEvent) => void;\n keyup: (event: KeyboardEvent) => void;\n setFragment: (data: DataTransfer | null) => void;\n insertFragment: (data: DataTransfer | null, targetPoint?: Point) => void;\n deleteFragment: (data: DataTransfer | null) => void;\n dblclick: (event: MouseEvent) => void;\n drawElement: (context: PlaitPluginElementContext) => SVGGElement[] | ComponentType<PlaitPluginElementComponent>;\n redrawElement: (context: PlaitPluginElementContext, previousContext?: PlaitPluginElementContext) => SVGGElement[] | void;\n destroyElement: (context: PlaitPluginElementContext) => void;\n isHitSelection: (element: PlaitElement, range: Range) => boolean;\n isRecursion: (element: PlaitElement) => boolean;\n isMovable: (element: PlaitElement) => boolean;\n getRectangle: (element: PlaitElement) => RectangleClient | null;\n isWithinSelection: (element: PlaitElement) => boolean;\n}\n\nexport interface PlaitBoardChangeEvent {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n}\n\nexport interface PlaitBoardOptions {\n readonly: boolean;\n hideScrollbar: boolean;\n}\n\nexport interface PlaitBoardMove {\n x: number;\n y: number;\n}\n\nexport const PlaitBoard = {\n isBoard(value: any): value is PlaitBoard {\n const cachedIsBoard = IS_BOARD_CACHE.get(value);\n if (cachedIsBoard !== undefined) {\n return cachedIsBoard;\n }\n const isBoard = typeof value.onChange === 'function' && typeof value.apply === 'function';\n IS_BOARD_CACHE.set(value, isBoard);\n return isBoard;\n },\n findPath(board: PlaitBoard, node: PlaitNode): Path {\n const path: Path = [];\n let child: Ancestor = node;\n while (true) {\n const parent = NODE_TO_PARENT.get(child as PlaitElement);\n if (parent == null) {\n if (PlaitBoard.isBoard(child)) {\n return path;\n } else {\n break;\n }\n }\n const i = NODE_TO_INDEX.get(child as PlaitElement);\n if (i == null) {\n break;\n }\n path.unshift(i);\n child = parent;\n }\n throw new Error(`Unable to find the path for Plait node: ${JSON.stringify(node)}`);\n },\n getHost(board: PlaitBoard) {\n return BOARD_TO_HOST.get(board) as SVGSVGElement;\n },\n getElementHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board) as SVGGElement;\n },\n getRoughSVG(board: PlaitBoard) {\n return BOARD_TO_ROUGH_SVG.get(board) as RoughSVG;\n },\n getComponent(board: PlaitBoard) {\n return BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n },\n getBoardNativeElement(board: PlaitBoard) {\n return PlaitBoard.getComponent(board).nativeElement;\n },\n getRectangle(board: PlaitBoard) {\n return getRectangleByElements(board, board.children, true);\n },\n getViewportContainer(board: PlaitBoard) {\n return PlaitBoard.getHost(board).parentElement as HTMLElement;\n },\n isFocus(board: PlaitBoard) {\n return !!board.selection;\n },\n isReadonly(board: PlaitBoard) {\n return board.options.readonly;\n },\n hasBeenTextEditing(board: PlaitBoard) {\n return !!IS_TEXT_EDITABLE.get(board);\n }\n};\n","export enum PlaitPointerType {\n 'hand' = 'hand',\n 'selection' = 'selection'\n}\n","export function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n\n/**\n * 规范 point\n * @param point\n * @returns point\n */\nexport function normalizePoint(point: number[]) {\n return Array.isArray(point)\n ? {\n x: point[0],\n y: point[1]\n }\n : point;\n}\n","import { isNullOrUndefined } from '../utils/helper';\nimport { ExtendedType } from './custom-types';\nimport { Point } from './point';\n\nexport interface BaseViewport {\n [key: string]: any;\n viewBackgroundColor: string;\n zoom: number;\n origination?: Point;\n}\n\nexport type Viewport = ExtendedType<'Viewport', BaseViewport>;\n\nexport interface ViewportInterface {\n isViewport: (value: any) => value is Viewport;\n}\n\nexport const Viewport: ViewportInterface = {\n isViewport: (value: any): value is Viewport => {\n return !isNullOrUndefined(value.zoom) && !isNullOrUndefined(value.viewBackgroundColor);\n },\n};\n","import produce from 'immer';\nimport { PlaitOperation } from './operation';\n\nexport interface PathLevelsOptions {\n reverse?: boolean;\n}\n\nexport type Path = number[];\n\nexport const Path = {\n /**\n * Get a list of ancestor paths for a given path.\n *\n * The paths are sorted from shallowest to deepest ancestor. However, if the\n * `reverse: true` option is passed, they are reversed.\n */\n ancestors(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n let paths = Path.levels(path, options);\n\n if (reverse) {\n paths = paths.slice(1);\n } else {\n paths = paths.slice(0, -1);\n }\n\n return paths;\n },\n /**\n * Get a list of paths at every level down to a path. Note: this is the same\n * as `Path.ancestors`, but including the path itself.\n *\n * The paths are sorted from shallowest to deepest. However, if the `reverse:\n * true` option is passed, they are reversed.\n */\n levels(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n const list: Path[] = [];\n\n for (let i = 0; i <= path.length; i++) {\n list.push(path.slice(0, i));\n }\n\n if (reverse) {\n list.reverse();\n }\n\n return list;\n },\n parent(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the parent path of the root path [${path}].`);\n }\n\n return path.slice(0, -1);\n },\n next(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no next index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last + 1);\n },\n previous(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no previous index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last - 1);\n },\n /**\n * Check if a path is an ancestor of another.\n */\n\n isAncestor(path: Path, another: Path): boolean {\n return path.length < another.length && Path.compare(path, another) === 0;\n },\n /**\n * Compare a path to another, returning an integer indicating whether the path\n * was before, at, or after the other.\n *\n * Note: Two paths of unequal length can still receive a `0` result if one is\n * directly above or below the other. If you want exact matching, use\n * [[Path.equals]] instead.\n */\n compare(path: Path, another: Path): -1 | 0 | 1 {\n const min = Math.min(path.length, another.length);\n\n for (let i = 0; i < min; i++) {\n if (path[i] < another[i]) return -1;\n if (path[i] > another[i]) return 1;\n }\n\n return 0;\n },\n\n /**\n * Check if a path is exactly equal to another.\n */\n\n equals(path: Path, another: Path): boolean {\n return path.length === another.length && path.every((n, i) => n === another[i]);\n },\n /**\n * Check if a path ends before one of the indexes in another.\n */\n\n endsBefore(path: Path, another: Path): boolean {\n const i = path.length - 1;\n const as = path.slice(0, i);\n const bs = another.slice(0, i);\n const av = path[i];\n const bv = another[i];\n return Path.equals(as, bs) && av < bv;\n },\n /**\n * Check if a path is a sibling of another.\n */\n isSibling(path: Path, another: Path): boolean {\n if (path.length !== another.length) {\n return false;\n }\n\n const as = path.slice(0, -1);\n const bs = another.slice(0, -1);\n const al = path[path.length - 1];\n const bl = another[another.length - 1];\n return al !== bl && Path.equals(as, bs);\n },\n transform(path: Path | null, operation: PlaitOperation): Path | null {\n return produce(path, p => {\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (!path || path?.length === 0) {\n return;\n }\n\n if (p === null) {\n return null;\n }\n\n switch (operation.type) {\n case 'insert_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.endsBefore(op, p) || Path.isAncestor(op, p)) {\n p[op.length - 1] += 1;\n }\n\n break;\n }\n\n case 'remove_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.isAncestor(op, p)) {\n return null;\n } else if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n\n case 'move_node': {\n const { path: op, newPath: onp } = operation;\n\n // If the old and new path are the same, it's a no-op.\n if (Path.equals(op, onp)) {\n return;\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice();\n // op.length <= onp.length is different for slate\n // resolve drag from [0, 0] to [0, 3] issue\n if (Path.endsBefore(op, onp) && op.length <= onp.length) {\n copy[op.length - 1] -= 1;\n }\n\n return copy.concat(p.slice(op.length));\n } else if (Path.isSibling(op, onp) && (Path.isAncestor(onp, p) || Path.equals(onp, p))) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n } else {\n p[op.length - 1] += 1;\n }\n } else if (Path.endsBefore(onp, p) || Path.equals(onp, p) || Path.isAncestor(onp, p)) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n p[onp.length - 1] += 1;\n } else if (Path.endsBefore(op, p)) {\n if (Path.equals(onp, p)) {\n p[onp.length - 1] += 1;\n }\n\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n }\n return p;\n });\n }\n};\n","import { PlaitElement } from './element';\nimport { PlaitBoard } from './board';\nimport { Path } from './path';\n\nexport type PlaitNode = PlaitElement;\n\nexport type Ancestor = PlaitBoard | PlaitElement;\n\nexport interface NodeParentsOptions {\n reverse?: boolean;\n}\n\nexport const PlaitNode = {\n parent: (board: PlaitBoard, path: Path) => {\n const parentPath = Path.parent(path);\n const p = PlaitNode.get(board, parentPath);\n return p;\n },\n /**\n * Return a generator of all the ancestor nodes above a specific path.\n *\n * By default the order is top-down, from highest to lowest ancestor in\n * the tree, but you can pass the `reverse: true` option to go bottom-up.\n */\n *parents(root: PlaitBoard, path: Path, options: NodeParentsOptions = {}): Generator<PlaitNode, void, undefined> {\n for (const p of Path.ancestors(path, options)) {\n const n = PlaitNode.get(root, p);\n yield n;\n }\n },\n get(root: PlaitBoard, path: Path): PlaitNode {\n let node: Ancestor = root;\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n node = node.children[p];\n }\n return node as PlaitNode;\n },\n last(board: PlaitBoard, path: Path) {\n let n = PlaitNode.get(board, path);\n while (n && n.children && n.children.length > 0) {\n const i = n.children.length - 1;\n n = n.children[i];\n }\n return n;\n }\n};\n","import { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { createDraft, finishDraft, isDraft } from 'immer';\nimport { Viewport } from '../interfaces/viewport';\nimport { Selection } from '../interfaces/selection';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport interface GeneralTransforms {\n transform: (board: PlaitBoard, op: PlaitOperation) => void;\n}\n\nconst applyToDraft = (board: PlaitBoard, selection: Selection | null, viewport: Viewport, op: PlaitOperation) => {\n switch (op.type) {\n case 'insert_node': {\n const { path, node } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n\n parent.children.splice(index, 0, node);\n break;\n }\n case 'remove_node': {\n const { path } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n parent.children.splice(index, 1);\n break;\n }\n case 'move_node': {\n const { path, newPath } = op;\n\n if (Path.isAncestor(path, newPath)) {\n throw new Error(`Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.`);\n }\n\n const node = PlaitNode.get(board, path);\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n // This is tricky, but since the `path` and `newPath` both refer to\n // the same snapshot in time, there's a mismatch. After either\n // removing the original position, the second step's path can be out\n // of date. So instead of using the `op.newPath` directly, we\n // transform `op.path` to ascertain what the `newPath` would be after\n // the operation was applied.\n parent.children?.splice(index, 1);\n const truePath = Path.transform(path, op)!;\n const newParent = PlaitNode.get(board, Path.parent(truePath)) as Ancestor;\n const newIndex = truePath[truePath.length - 1];\n\n newParent.children?.splice(newIndex, 0, node);\n break;\n }\n case 'set_node': {\n const { path, properties, newProperties } = op;\n\n if (path.length === 0) {\n throw new Error(`Cannot set properties on the root node!`);\n }\n\n const node = PlaitNode.get(board, path);\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete node[key];\n } else {\n node[key] = value;\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete node[key];\n }\n }\n\n break;\n }\n case 'set_viewport': {\n const { newProperties } = op;\n if (newProperties == null) {\n viewport = newProperties;\n } else {\n if (viewport == null) {\n if (!Viewport.isViewport(newProperties)) {\n throw new Error(\n `Cannot apply an incomplete \"set_viewport\" operation properties ${JSON.stringify(\n newProperties\n )} when there is no current viewport.`\n );\n }\n viewport = { ...newProperties };\n }\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete viewport[key];\n } else {\n viewport[key] = value;\n }\n }\n }\n break;\n }\n case 'set_selection': {\n const { newProperties } = op;\n if (newProperties == null) {\n selection = newProperties;\n } else {\n if (selection === null) {\n selection = op.newProperties;\n } else {\n selection.ranges = newProperties.ranges;\n }\n }\n break;\n }\n }\n return { selection, viewport };\n};\n\nexport const GeneralTransforms: GeneralTransforms = {\n /**\n * Transform the board by an operation.\n */\n transform(board: PlaitBoard, op: PlaitOperation): void {\n board.children = createDraft(board.children);\n let viewport = board.viewport && createDraft(board.viewport);\n let selection = board.selection && createDraft(board.selection);\n\n try {\n const state = applyToDraft(board, selection, viewport, op);\n viewport = state.viewport;\n selection = state.selection;\n } finally {\n board.children = finishDraft(board.children);\n\n if (selection) {\n board.selection = isDraft(selection) ? (finishDraft(selection) as Selection) : selection;\n } else {\n board.selection = null;\n }\n\n board.viewport = isDraft(viewport) ? (finishDraft(viewport) as Viewport) : viewport;\n }\n }\n};\n","import { InsertNodeOperation, MoveNodeOperation, RemoveNodeOperation, SetNodeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport function insertNode(board: PlaitBoard, node: PlaitNode, path: Path) {\n const operation: InsertNodeOperation = { type: 'insert_node', node, path };\n board.apply(operation);\n}\n\nexport function setNode(board: PlaitBoard, props: Partial<PlaitNode>, path: Path) {\n const properties: Partial<PlaitNode> = {};\n const newProperties: Partial<PlaitNode> = {};\n const node = PlaitNode.get(board, path);\n for (const k in props) {\n if (node[k] !== props[k]) {\n if (node.hasOwnProperty(k)) {\n properties[k] = node[k];\n }\n if (props[k] != null) newProperties[k] = props[k];\n }\n }\n const operation: SetNodeOperation = { type: 'set_node', properties, newProperties, path };\n board.apply(operation);\n}\n\nexport function removeNode(board: PlaitBoard, path: Path) {\n const node = PlaitNode.get(board, path);\n const operation: RemoveNodeOperation = { type: 'remove_node', path, node };\n board.apply(operation);\n}\n\nexport function moveNode(board: PlaitBoard, path: Path, newPath: Path) {\n const operation: MoveNodeOperation = { type: 'move_node', path, newPath };\n board.apply(operation);\n}\n\nexport interface NodeTransforms {\n insertNode: (board: PlaitBoard, node: PlaitNode, path: Path) => void;\n setNode: (board: PlaitBoard, node: Partial<PlaitNode>, path: Path) => void;\n removeNode: (board: PlaitBoard, path: Path) => void;\n moveNode: (board: PlaitBoard, path: Path, newPath: Path) => void;\n}\n\nexport const NodeTransforms: NodeTransforms = {\n insertNode,\n setNode,\n removeNode,\n moveNode\n};\n","import { SetSelectionOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Selection } from '../interfaces/selection';\nimport { BOARD_TO_TEMPORARY_ELEMENTS } from '../utils/weak-maps';\nimport { PlaitElement } from '../interfaces/element';\n\nexport function setSelection(board: PlaitBoard, selection: Selection | null) {\n const operation: SetSelectionOperation = { type: 'set_selection', properties: board.selection, newProperties: selection };\n board.apply(operation);\n}\n\nexport interface SelectionTransforms {\n setSelection: (board: PlaitBoard, selection: Selection | null) => void;\n setSelectionWithTemporaryElements: (board: PlaitBoard, elements: PlaitElement[]) => void;\n}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection,\n setSelectionWithTemporaryElements\n};\n\n\nexport function setSelectionWithTemporaryElements(board: PlaitBoard, elements: PlaitElement[]) {\n setTimeout(() => {\n BOARD_TO_TEMPORARY_ELEMENTS.set(board, elements);\n setSelection(board, { ranges: [] });\n });\n}","import { SetViewportOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Viewport } from '../interfaces/viewport';\n\nexport function setViewport(board: PlaitBoard, viewport: Viewport) {\n const operation: SetViewportOperation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };\n board.apply(operation);\n}\n\nexport interface ViewportTransforms {\n setViewport: (board: PlaitBoard, viewport: Viewport) => void;\n}\n\nexport const ViewportTransforms: ViewportTransforms = {\n setViewport\n};\n","import { RectangleClient } from '../interfaces/rectangle-client';\n\n// https://stackoverflow.com/a/6853926/232122\nexport function distanceBetweenPointAndSegment(x: number, y: number, x1: number, y1: number, x2: number, y2: number) {\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSquare = C * C + D * D;\n let param = -1;\n if (lenSquare !== 0) {\n // in case of 0 length line\n param = dot / lenSquare;\n }\n\n let xx, yy;\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n const dx = x - xx;\n const dy = y - yy;\n return Math.hypot(dx, dy);\n}\n\nexport function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) {\n // 𝑎′𝑥=(𝑎𝑥−𝑐𝑥)cos𝜃−(𝑎𝑦−𝑐𝑦)sin𝜃+𝑐𝑥\n // 𝑎′𝑦=(𝑎𝑥−𝑐𝑥)sin𝜃+(𝑎𝑦−𝑐𝑦)cos𝜃+𝑐𝑦.\n // https://math.stackexchange.com/questions/2204520/how-do-i-rotate-a-line-segment-in-a-specific-point-on-the-line\n return [(x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2];\n}\n\nexport function distanceBetweenPointAndPoint(x1: number, y1: number, x2: number, y2: number) {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.hypot(dx, dy);\n}\n\n// https://stackoverflow.com/questions/5254838/calculating-distance-between-a-point-and-a-rectangular-box-nearest-point\nexport function distanceBetweenPointAndRectangle(x: number, y: number, rect: RectangleClient) {\n var dx = Math.max(rect.x - x, 0, x - (rect.x + rect.width));\n var dy = Math.max(rect.y - y, 0, y - (rect.y + rect.height));\n return Math.sqrt(dx * dx + dy * dy);\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { distanceBetweenPointAndRectangle } from './math';\n\nexport type ViewBox = {\n minX: number;\n minY: number;\n width: number;\n height: number;\n viewportWidth: number;\n viewportHeight: number;\n};\n\nexport function transformPoints(board: PlaitBoard, points: Point[]) {\n const newPoints = points.map(point => {\n return transformPoint(board, point);\n });\n return newPoints;\n}\n\nexport function transformPoint(board: PlaitBoard, point: Point) {\n const { width, height } = PlaitBoard.getHost(board).getBoundingClientRect();\n const viewBox = PlaitBoard.getHost(board).viewBox.baseVal;\n const x = (point[0] / width) * viewBox.width + viewBox.x;\n const y = (point[1] / height) * viewBox.height + viewBox.y;\n const newPoint = [x, y] as Point;\n\n return newPoint;\n}\n\nexport function isInPlaitBoard(board: PlaitBoard, x: number, y: number) {\n const plaitBoardElement = PlaitBoard.getBoardNativeElement(board);\n const plaitBoardRect = plaitBoardElement.getBoundingClientRect();\n const distances = distanceBetweenPointAndRectangle(x, y, plaitBoardRect);\n return distances === 0;\n}\n","import { Point } from '../../interfaces/point';\n\nexport const NS = 'http://www.w3.org/2000/svg';\n\nexport function toPoint(x: number, y: number, container: SVGElement): Point {\n const rect = container.getBoundingClientRect();\n return [x - rect.x, y - rect.y];\n}\n\nexport function createG() {\n const newG = document.createElementNS(NS, 'g');\n return newG;\n}\n\nexport function createSVG() {\n const svg = document.createElementNS(NS, 'svg');\n return svg;\n}\n\nexport function createText(x: number, y: number, fill: string, textContent: string) {\n var text = document.createElementNS(NS, 'text');\n text.setAttribute('x', `${x}`);\n text.setAttribute('y', `${y}`);\n text.setAttribute('fill', fill);\n text.textContent = textContent;\n return text;\n}\n\n/**\n * Check if a DOM node is an element node.\n */\nexport const isDOMElement = (value: any): value is Element => {\n return isDOMNode(value) && value.nodeType === 1;\n};\n\n/**\n * Check if a value is a DOM node.\n */\nexport const isDOMNode = (value: any): value is Node => {\n return value instanceof window.Node;\n};\n\nexport const hasInputOrTextareaTarget = (target: EventTarget | null) => {\n if (isDOMElement(target)) {\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\n return true;\n }\n }\n return false;\n};\n","import { NS } from './common';\n\nexport function createForeignObject(x: number, y: number, width: number, height: number) {\n var newForeignObject = document.createElementNS(NS, 'foreignObject');\n newForeignObject.setAttribute('x', `${x}`);\n newForeignObject.setAttribute('y', `${y}`);\n newForeignObject.setAttribute('width', `${width}`);\n newForeignObject.setAttribute('height', `${height}`);\n return newForeignObject;\n}\n\nexport function updateForeignObject(g: SVGGElement, width: number, height: number, x: number, y: number) {\n const foreignObject = g.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${width}`);\n foreignObject.setAttribute('height', `${height}`);\n foreignObject.setAttribute('x', `${x}`);\n foreignObject.setAttribute('y', `${y}`);\n }\n}\n","export const IS_IOS =\n typeof navigator !== 'undefined' &&\n typeof window !== 'undefined' &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !(window as any).MSStream;\n\nexport const IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent);\n\nexport const IS_FIREFOX = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);\n\nexport const IS_SAFARI = typeof navigator !== 'undefined' && /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent);\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent);\n\nexport const IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent);\n\n// Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput\nexport const IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent);\n","import { PlaitBoard } from '../interfaces/board';\nimport { Ancestor } from '../interfaces/node';\nimport { depthFirstRecursion } from './tree';\nimport { BOARD_TO_SELECTED_ELEMENT } from './weak-maps';\nimport { Range } from '../interfaces/selection';\nimport { PlaitElement } from '../interfaces/element';\n\nexport const getHitElements = (board: PlaitBoard) => {\n const selectedElements: PlaitElement[] = [];\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (\n !PlaitBoard.isBoard(node) &&\n board.selection?.ranges.some(range => {\n return board.isHitSelection(node, range);\n })\n ) {\n selectedElements.push(node);\n }\n },\n node => {\n if (PlaitBoard.isBoard(node) || board.isRecursion(node)) {\n return true;\n } else {\n return false;\n }\n }\n );\n return selectedElements;\n};\n\nexport const isIntersectionElements = (board: PlaitBoard, elements: PlaitElement[], ranges: Range[]) => {\n let isIntersectionElements = false;\n if (elements.length) {\n elements.map(item => {\n if (!isIntersectionElements) {\n isIntersectionElements = ranges.some(range => {\n return board.isHitSelection(item, range);\n });\n }\n });\n }\n return isIntersectionElements;\n};\n\nexport const cacheSelectedElements = (board: PlaitBoard, selectedElements: PlaitElement[]) => {\n BOARD_TO_SELECTED_ELEMENT.set(board, selectedElements);\n};\n\nexport const getSelectedElements = (board: PlaitBoard) => {\n return BOARD_TO_SELECTED_ELEMENT.get(board) || [];\n};\n\nexport const addSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n cacheSelectedElements(board, [...selectedElements, element]);\n};\n\nexport const removeSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n const newSelectedElements = selectedElements.filter(value => value !== element);\n cacheSelectedElements(board, newSelectedElements);\n};\n\nexport const clearSelectedElement = (board: PlaitBoard) => {\n cacheSelectedElements(board, []);\n};\n\nexport const isSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n return !!selectedElements.find(value => value === element);\n};\n","import { PlaitBoard, PlaitElement } from '../../interfaces';\nimport { PlaitPluginElementContext } from './context';\n\nexport interface BeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n beforeContextChange: (value: PlaitPluginElementContext<T>) => void;\n}\n\nexport interface OnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n onContextChanged: (value: PlaitPluginElementContext<T, K>, previous: PlaitPluginElementContext<T, K>) => void;\n}\n\nexport function hasBeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is BeforeContextChange<T, K> {\n if (value.beforeContextChange) {\n return true;\n }\n return false;\n}\n\nexport function hasOnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is OnContextChanged<T, K> {\n if (value.onContextChanged) {\n return true;\n }\n return false;\n}\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard, PlaitElement, PlaitPluginElementContext } from '../../interfaces';\nimport { removeSelectedElement } from '../../utils/selected-element';\nimport { createG } from '../../utils/dom/common';\nimport { hasBeforeContextChange, hasOnContextChanged } from './context-change';\n\n@Directive()\nexport abstract class PlaitPluginElementComponent<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>\n implements OnInit, OnDestroy {\n g!: SVGGElement;\n\n rootG?: SVGGElement;\n\n initialized = false;\n\n protected _context!: PlaitPluginElementContext<T, K>;\n\n @Input()\n set context(value: PlaitPluginElementContext<T, K>) {\n if (hasBeforeContextChange<T, K>(this)) {\n this.beforeContextChange(value);\n }\n const previousContext = this._context;\n this._context = value;\n if (this.element) {\n ELEMENT_TO_COMPONENT.set(this.element, this);\n }\n if (this.initialized) {\n this.cdr.markForCheck();\n if (hasOnContextChanged<T>(this)) {\n this.onContextChanged(value, previousContext);\n }\n } else {\n if (PlaitElement.isRootElement(this.element) && this.element.children && this.element.children.length > 0) {\n this.g = createG();\n this.rootG = createG();\n this.rootG.append(this.g);\n } else {\n this.g = createG();\n }\n }\n }\n\n get context() {\n return this._context;\n }\n\n get element() {\n return this.context && this.context.element;\n }\n\n get board() {\n return this.context && this.context.board;\n }\n\n get selected() {\n return this.context && this.context.selected;\n }\n\n get effect() {\n return this.context && this.context.effect;\n }\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n if (this.element.type) {\n (this.rootG || this.g).setAttribute(`plait-${this.element.type}`, 'true');\n }\n this.initialized = true;\n }\n\n ngOnDestroy(): void {\n if (ELEMENT_TO_COMPONENT.get(this.element) === this) {\n ELEMENT_TO_COMPONENT.delete(this.element);\n }\n removeSelectedElement(this.board, this.element);\n (this.rootG || this.g).remove();\n }\n}\n\nexport const ELEMENT_TO_COMPONENT = new WeakMap<PlaitElement, PlaitPluginElementComponent>();\n","import { ELEMENT_TO_COMPONENT, PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport { NODE_TO_PARENT } from '../utils';\nimport { PlaitBoard } from './board';\nimport { Point } from './point';\n\nexport interface PlaitElement {\n [key: string]: any;\n id: string;\n children?: PlaitElement[];\n points?: Point[];\n type?: string;\n}\n\nexport const PlaitElement = {\n isRootElement(value: PlaitElement) {\n const parent = NODE_TO_PARENT.get(value);\n if (parent && PlaitBoard.isBoard(parent)) {\n return true;\n } else {\n return false;\n }\n },\n getComponent(value: PlaitElement) {\n return ELEMENT_TO_COMPONENT.get(value) as PlaitPluginElementComponent;\n }\n}\n\nexport interface ComponentType<T> {\n new (...args: any[]): T;\n}\n","import { Point } from './point';\n\nexport interface RectangleClient {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport const RectangleClient = {\n isHit: (origin: RectangleClient, target: RectangleClient) => {\n const minX = origin.x < target.x ? origin.x : target.x;\n const maxX = origin.x + origin.width > target.x + target.width ? origin.x + origin.width : target.x + target.width;\n const minY = origin.y < target.y ? origin.y : target.y;\n const maxY = origin.y + origin.height > target.y + target.height ? origin.y + origin.height : target.y + target.height;\n // float calculate error( eg: 1.4210854715202004e-14 > 0)\n if (Math.floor(maxX - minX - origin.width - target.width) <= 0 && Math.floor(maxY - minY - origin.height - target.height) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n toRectangleClient: (points: [Point, Point]) => {\n const xArray = points.map(ele => ele[0]);\n const yArray = points.map(ele => ele[1]);\n const xMin = Math.min(...xArray);\n const xMax = Math.max(...xArray);\n const yMin = Math.min(...yArray);\n const yMax = Math.max(...yArray);\n const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n return rect;\n },\n getOutlineRectangle: (rectangle: RectangleClient, offset: number) => {\n return {\n x: rectangle.x + offset,\n y: rectangle.y + offset,\n width: rectangle.width + Math.abs(offset) * 2,\n height: rectangle.height + Math.abs(offset) * 2\n };\n },\n isEqual: (rectangle: RectangleClient, otherRectangle: RectangleClient) => {\n return (\n rectangle.x === otherRectangle.x &&\n rectangle.y === otherRectangle.y &&\n rectangle.width === otherRectangle.width &&\n rectangle.height === otherRectangle.height\n );\n }\n};\n","import { PlaitNode } from '../interfaces/node';\nimport { Path } from './path';\nimport { Selection } from './selection';\nimport { Viewport } from './viewport';\n\nexport type InsertNodeOperation = {\n type: 'insert_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type RemoveNodeOperation = {\n type: 'remove_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type MoveNodeOperation = {\n type: 'move_node';\n path: Path;\n newPath: Path;\n};\n\nexport type SetViewportOperation = {\n type: 'set_viewport';\n properties: Partial<Viewport>;\n newProperties: Partial<Viewport>;\n};\n\nexport type SetSelectionOperation = {\n type: 'set_selection';\n properties: Selection | null;\n newProperties: Selection | null;\n};\n\nexport type SetNodeOperation = {\n type: 'set_node';\n path: Path;\n properties: Partial<PlaitNode>;\n newProperties: Partial<PlaitNode>;\n};\n\nexport type PlaitOperation =\n | InsertNodeOperation\n | SetViewportOperation\n | SetSelectionOperation\n | SetNodeOperation\n | RemoveNodeOperation\n | MoveNodeOperation;\n\nexport interface PlaitOperationInterface {\n inverse: (op: PlaitOperation) => PlaitOperation;\n isSetViewportOperation: (value: any) => boolean;\n}\n\nexport const isSetViewportOperation = (value: any): value is SetViewportOperation => {\n return value.type === 'set_viewport';\n};\n\nexport const inverse = (op: PlaitOperation): PlaitOperation => {\n switch (op.type) {\n case 'insert_node': {\n return { ...op, type: 'remove_node' };\n }\n\n case 'remove_node': {\n return { ...op, type: 'insert_node' };\n }\n\n case 'move_node': {\n const { newPath, path } = op;\n\n // PERF: in this case the move operation is a no-op anyways.\n if (Path.equals(newPath, path)) {\n return op;\n }\n\n // when operation path is [0,0] -> [0,2], should exec Path.transform to get [0,1] -> [0,0]\n // shoud not return [0,2] -> [0,0] #WIK-8981\n // if (Path.isSibling(path, newPath)) {\n // return { ...op, path: newPath, newPath: path };\n // }\n\n // If the move does not happen within a single parent it is possible\n // for the move to impact the true path to the location where the node\n // was removed from and where it was inserted. We have to adjust for this\n // and find the original path. We can accomplish this (only in non-sibling)\n // moves by looking at the impact of the move operation on the node\n // after the original move path.\n const inversePath = Path.transform(path, op)!;\n const inverseNewPath = Path.transform(Path.next(path), op)!;\n return { ...op, path: inversePath, newPath: inverseNewPath };\n }\n\n case 'set_node': {\n const { properties, newProperties } = op;\n return { ...op, properties: newProperties, newProperties: properties };\n }\n\n case 'set_selection': {\n const { properties, newProperties } = op;\n\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: null\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: null,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n\n case 'set_viewport': {\n const { properties, newProperties } = op;\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: newProperties\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: properties,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n }\n};\n\nexport const PlaitOperation: PlaitOperationInterface = {\n isSetViewportOperation,\n inverse\n};\n","export type Point = [number, number];\n\nexport interface XYPosition {\n x: number;\n y: number;\n}\n\nexport const Point = {\n isEquals(point?: Point, otherPoint?: Point) {\n return point && otherPoint && point[0] === otherPoint[0] && point[1] === otherPoint[1];\n }\n};","import { Point } from './point';\n\nexport const SELECTION_BORDER_COLOR = '#6698FF';\nexport const SELECTION_FILL_COLOR = '#6698FF19'; // 主色 0.1 透明度\n\nexport interface Range {\n anchor: Point;\n focus: Point;\n}\n\nexport interface Selection {\n ranges: Range[];\n}\n\nexport const Selection = {\n isCollapsed(selection: Range) {\n if (selection.anchor[0] == selection.focus[0] && selection.anchor[1] === selection.focus[1]) {\n return true;\n } else {\n return false;\n }\n }\n};\n","import { PlaitBoard } from './board';\nimport { PlaitOperation } from './operation';\n\nexport interface PlaitHistory {\n redos: PlaitOperation[][];\n undos: PlaitOperation[][];\n}\n\nexport const SAVING = new WeakMap<PlaitBoard, boolean | undefined>();\nexport const MERGING = new WeakMap<PlaitBoard, boolean | undefined>();\n","import { MERGING, PlaitBoard, PlaitOperation, SAVING } from '../interfaces';\n\n/**\n * Check whether to merge an operation into the previous operation.\n */\n\nexport const shouldMerge = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_viewport' && op.type === prev?.type) {\n return true;\n }\n return false;\n};\n\n/**\n * Check whether an operation needs to be saved to the history.\n */\n\nexport const shouldSave = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_selection' || op.type === 'set_viewport') {\n return false;\n }\n\n return true;\n};\n\n/**\n * Check whether an operation should clear the redos stack.\n */\n\nexport const shouldClear = (op: PlaitOperation): boolean => {\n if (op.type === 'set_selection') {\n return false;\n }\n\n return true;\n};\n\nexport const PlaitHistoryBoard = {\n /**\n * Get the saving flag's current value.\n */\n isSaving(board: PlaitBoard): boolean | undefined {\n return SAVING.get(board);\n },\n\n /**\n * Get the merge flag's current value.\n */\n\n isMerging(board: PlaitBoard): boolean | undefined {\n return MERGING.get(board);\n },\n\n /**\n * Apply a series of changes inside a synchronous `fn`, without merging any of\n * the new operations into previous save point in the history.\n */\n\n withoutMerging(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isMerging(board);\n MERGING.set(board, false);\n fn();\n MERGING.set(board, prev);\n },\n /**\n * Apply a series of changes inside a synchronous `fn`, without saving any of\n * their operations into the history.\n */\n\n withoutSaving(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isSaving(board);\n SAVING.set(board, false);\n fn();\n SAVING.set(board, prev);\n }\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { IS_APPLE } from './environment';\n\n/**\n * Hotkey mappings for each platform.\n */\n\nconst HOTKEYS: any = {\n bold: 'mod+b',\n compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],\n moveBackward: 'left',\n moveForward: 'right',\n moveUp: 'up',\n moveDown: 'down',\n moveWordBackward: 'ctrl+left',\n moveWordForward: 'ctrl+right',\n deleteBackward: 'shift?+backspace',\n deleteForward: 'shift?+delete',\n extendBackward: 'shift+left',\n extendForward: 'shift+right',\n italic: 'mod+i',\n splitBlock: 'shift?+enter',\n undo: 'mod+z'\n};\n\nconst APPLE_HOTKEYS: any = {\n moveLineBackward: 'opt+up',\n moveLineForward: 'opt+down',\n moveWordBackward: 'opt+left',\n moveWordForward: 'opt+right',\n deleteBackward: ['ctrl+backspace', 'ctrl+h'],\n deleteForward: ['ctrl+delete', 'ctrl+d'],\n deleteLineBackward: 'cmd+shift?+backspace',\n deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],\n deleteWordBackward: 'opt+shift?+backspace',\n deleteWordForward: 'opt+shift?+delete',\n extendLineBackward: 'opt+shift+up',\n extendLineForward: 'opt+shift+down',\n redo: 'cmd+shift+z',\n transposeCharacter: 'ctrl+t'\n};\n\nconst WINDOWS_HOTKEYS: any = {\n deleteWordBackward: 'ctrl+shift?+backspace',\n deleteWordForward: 'ctrl+shift?+delete',\n redo: ['ctrl+y', 'ctrl+shift+z']\n};\n\n/**\n * Create a platform-aware hotkey checker.\n */\n\nconst create = (key: string) => {\n const generic = HOTKEYS[key];\n const apple = APPLE_HOTKEYS[key];\n const windows = WINDOWS_HOTKEYS[key];\n const isGeneric = generic && isKeyHotkey(generic);\n const isApple = apple && isKeyHotkey(apple);\n const isWindows = windows && isKeyHotkey(windows);\n\n return (event: KeyboardEvent) => {\n if (isGeneric && isGeneric(event)) {\n return true;\n }\n if (IS_APPLE && isApple && isApple(event)) {\n return true;\n }\n if (!IS_APPLE && isWindows && isWindows(event)) {\n return true;\n }\n return false;\n };\n};\n\n/**\n * Hotkeys.\n */\n\nconst hotkeys = {\n isBold: create('bold'),\n isCompose: create('compose'),\n isMoveBackward: create('moveBackward'),\n isMoveForward: create('moveForward'),\n isMoveUp: create('moveUp'),\n isMoveDown: create('moveDown'),\n isDeleteBackward: create('deleteBackward'),\n isDeleteForward: create('deleteForward'),\n isDeleteLineBackward: create('deleteLineBackward'),\n isDeleteLineForward: create('deleteLineForward'),\n isDeleteWordBackward: create('deleteWordBackward'),\n isDeleteWordForward: create('deleteWordForward'),\n isExtendBackward: create('extendBackward'),\n isExtendForward: create('extendForward'),\n isExtendLineBackward: create('extendLineBackward'),\n isExtendLineForward: create('extendLineForward'),\n isItalic: create('italic'),\n isMoveLineBackward: create('moveLineBackward'),\n isMoveLineForward: create('moveLineForward'),\n isMoveWordBackward: create('moveWordBackward'),\n isMoveWordForward: create('moveWordForward'),\n isRedo: create('redo'),\n isSplitBlock: create('splitBlock'),\n isTransposeCharacter: create('transposeCharacter'),\n isUndo: create('undo')\n};\nexport default hotkeys;\nexport { hotkeys };\n","export function idCreator(length = 5) {\n // remove numeral\n const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/\n const maxPosition = $chars.length;\n let key = '';\n for (let i = 0; i < length; i++) {\n key += $chars.charAt(Math.floor(Math.random() * maxPosition));\n }\n return key;\n}\n","export const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';\n\nexport const SCROLL_BAR_WIDTH = 20;\n\nexport const MAX_RADIUS = 16;\n","import { Options } from 'roughjs/bin/core';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MAX_RADIUS } from '../../constants';\n\n/**\n * drawRoundRectangle\n */\nexport function drawRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n options: Options,\n outline = false,\n borderRadius?: number\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n const defaultRadius = Math.min(width, height) / 8;\n let radius = borderRadius || defaultRadius;\n if (defaultRadius > MAX_RADIUS) {\n radius = outline ? MAX_RADIUS + 2 : MAX_RADIUS;\n }\n\n const point1 = [x1 + radius, y1];\n const point2 = [x2 - radius, y1];\n const point3 = [x2, y1 + radius];\n const point4 = [x2, y2 - radius];\n const point5 = [x2 - radius, y2];\n const point6 = [x1 + radius, y2];\n const point7 = [x1, y2 - radius];\n const point8 = [x1, y1 + radius];\n\n return rs.path(\n `M${point2[0]} ${point2[1]} A ${radius} ${radius}, 0, 0, 1, ${point3[0]} ${point3[1]} L ${point4[0]} ${point4[1]} A ${radius} ${radius}, 0, 0, 1, ${point5[0]} ${point5[1]} L ${point6[0]} ${point6[1]} A ${radius} ${radius}, 0, 0, 1, ${point7[0]} ${point7[1]} L ${point8[0]} ${point8[1]} A ${radius} ${radius}, 0, 0, 1, ${point1[0]} ${point1[1]} Z`,\n options\n );\n}\n\nexport function drawAbstractRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n isHorizontal: boolean,\n options: Options\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n const radius = 5;\n const handleGap = 4;\n const handleLength = 10;\n\n const handleSpace = handleLength + handleGap * 2;\n\n if (isHorizontal) {\n const handleSideLine = (width - handleSpace - radius * 2) / 2;\n const sideLine = height - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${handleSideLine},0\n m${handleSpace},0\n l${handleSideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${sideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${handleSideLine},0\n m-${handleSpace},0\n l-${handleSideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${sideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n } else {\n const handleSideLine = (height - handleSpace - radius * 2) / 2;\n const sideLine = width - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${sideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${handleSideLine}\n m0,${handleSpace}\n l0,${handleSideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${sideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${handleSideLine}\n m0,-${handleSpace}\n l0,-${handleSideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n }\n}\n","import { rotate } from '../math';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { Options } from 'roughjs/bin/core';\nimport { Point } from '../../interfaces';\n\nexport function arrowPoints(start: Point, end: Point, maxHypotenuseLength = 10, degree = 40) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n let hypotenuse = Math.hypot(width, height); // 斜边\n const realRotateLine = hypotenuse > maxHypotenuseLength * 2 ? maxHypotenuseLength : hypotenuse / 2;\n const rotateWidth = (realRotateLine / hypotenuse) * width;\n const rotateHeight = (realRotateLine / hypotenuse) * height;\n const rotatePoint = [\n end[0] > start[0] ? end[0] - rotateWidth : end[0] + rotateWidth,\n end[1] > start[1] ? end[1] - rotateHeight : end[1] + rotateHeight\n ];\n const pointRight = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (degree * Math.PI) / 180) as Point;\n const pointLeft = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (-degree * Math.PI) / 180) as Point;\n return { pointLeft, pointRight };\n}\n\nexport function drawArrow(rs: RoughSVG, start: Point, end: Point, options: Options, maxHypotenuseLength = 10, degree = 40): SVGGElement[] {\n const { pointLeft, pointRight } = arrowPoints(start, end, maxHypotenuseLength, degree);\n const arrowLineLeft = rs.linearPath([pointLeft, end], options);\n const arrowLineRight = rs.linearPath([pointRight, end], options);\n return [arrowLineLeft, arrowLineRight];\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\n\nexport function drawCircle(roughSVG: RoughSVG, point: Point, diameter: number, options: Options): SVGGElement {\n return roughSVG.circle(point[0], point[1], diameter, options);\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\n\nexport function drawLine(rs: RoughSVG, start: Point, end: Point, options: Options): SVGGElement {\n return rs.linearPath([start, end], options);\n}\n","import { SCROLL_BAR_WIDTH } from '../constants';\nimport { PlaitBoard, Point, RectangleClient } from '../interfaces';\nimport { Transforms } from '../transforms';\nimport { toPoint } from './dom/common';\nimport { getRectangleByElements } from './element';\nimport { distanceBetweenPointAndRectangle } from './math';\nimport { BOARD_TO_MOVING_POINT, BOARD_TO_VIEWPORT_ORIGINATION } from './weak-maps';\n\nconst IS_FROM_SCROLLING = new WeakMap<PlaitBoard, boolean>();\n\nconst IS_FROM_VIEWPORT_CHANGE = new WeakMap<PlaitBoard, boolean>();\n\nexport function getViewportContainerRect(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const viewportRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n\n return {\n width: viewportRect.width + scrollBarWidth,\n height: viewportRect.height + scrollBarWidth\n };\n}\n\nexport function getElementHostBBox(board: PlaitBoard, zoom: number) {\n const childrenRect = getRectangleByElements(board, board.children, true);\n const viewportContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const containerWidth = viewportContainerRect.width / zoom;\n const containerHeight = viewportContainerRect.height / zoom;\n let left: number;\n let right: number;\n let top: number;\n let bottom: number;\n\n if (childrenRect.width < containerWidth) {\n const centerX = childrenRect.x + childrenRect.width / 2;\n const halfContainerWidth = containerWidth / 2;\n left = centerX - halfContainerWidth;\n right = centerX + halfContainerWidth;\n } else {\n left = childrenRect.x;\n right = childrenRect.x + childrenRect.width;\n }\n if (childrenRect.height < containerHeight) {\n const centerY = childrenRect.y + childrenRect.height / 2;\n const halfContainerHeight = containerHeight / 2;\n top = centerY - halfContainerHeight;\n bottom = centerY + halfContainerHeight;\n } else {\n top = childrenRect.y;\n bottom = childrenRect.y + childrenRect.height;\n }\n return {\n left,\n right,\n top,\n bottom\n };\n}\n\n/**\n * 验证缩放比是否符合限制,如果超出限制,则返回合适的缩放比\n * @param zoom 缩放比\n * @param minZoom 最小缩放比\n * @param maxZoom 最大缩放比\n * @returns 正确的缩放比\n */\nexport function clampZoomLevel(zoom: number, minZoom = 0.2, maxZoom = 4) {\n return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;\n}\n\nexport function getViewBox(board: PlaitBoard, zoom: number) {\n const { hideScrollbar } = board.options;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const viewportContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const elementHostBBox = getElementHostBBox(board, zoom);\n const horizontalPadding = viewportContainerRect.width / 2;\n const verticalPadding = viewportContainerRect.height / 2;\n const viewportWidth = (elementHostBBox.right - elementHostBBox.left) * zoom + 2 * horizontalPadding + scrollBarWidth;\n const viewportHeight = (elementHostBBox.bottom - elementHostBBox.top) * zoom + 2 * verticalPadding + scrollBarWidth;\n const viewBox = [\n elementHostBBox.left - horizontalPadding / zoom,\n elementHostBBox.top - verticalPadding / zoom,\n viewportWidth / zoom,\n viewportHeight / zoom\n ];\n return viewBox;\n}\n\nexport function setSVGViewBox(board: PlaitBoard, viewBox: number[]) {\n const zoom = board.viewport.zoom;\n const hostElement = PlaitBoard.getHost(board);\n hostElement.style.display = 'block';\n hostElement.style.width = `${viewBox[2] * zoom}px`;\n hostElement.style.height = `${viewBox[3] * zoom}px`;\n\n if (viewBox && viewBox[2] > 0 && viewBox[3] > 0) {\n hostElement.setAttribute('viewBox', viewBox.join(' '));\n }\n}\n\nexport function updateViewportOffset(board: PlaitBoard) {\n const origination = getViewportOrigination(board);\n if (!origination) return;\n\n const { zoom } = board.viewport;\n const viewBox = getViewBox(board, zoom);\n const scrollLeft = (origination![0] - viewBox[0]) * zoom;\n const scrollTop = (origination![1] - viewBox[1]) * zoom;\n updateViewportContainerScroll(board, scrollLeft, scrollTop);\n}\n\nexport function updateViewportContainerScroll(board: PlaitBoard, left: number, top: number, isFromViewportChange: boolean = true) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n if (viewportContainer.scrollLeft !== left || viewportContainer.scrollTop !== top) {\n viewportContainer.scrollLeft = left;\n viewportContainer.scrollTop = top;\n isFromViewportChange && setIsFromViewportChange(board, true);\n }\n}\n\nexport function initializeViewportContainer(board: PlaitBoard) {\n const { width, height } = getViewportContainerRect(board);\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n viewportContainer.style.width = `${width}px`;\n viewportContainer.style.height = `${height}px`;\n}\n\nexport function initializeViewBox(board: PlaitBoard) {\n const zoom = board.viewport.zoom;\n const viewBox = getViewBox(board, zoom);\n setSVGViewBox(board, viewBox);\n}\n\nexport function initializeViewportOffset(board: PlaitBoard) {\n if (!board.viewport?.origination) {\n const zoom = board.viewport.zoom;\n const viewportContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const viewBox = getViewBox(board, zoom);\n const centerX = viewBox[0] + viewBox[2] / 2;\n const centerY = viewBox[1] + viewBox[3] / 2;\n const origination = [centerX - viewportContainerRect.width / 2 / zoom, centerY - viewportContainerRect.height / 2 / zoom] as Point;\n updateViewportOrigination(board, origination);\n updateViewportOffset(board);\n return;\n }\n updateViewportOffset(board);\n}\n\nexport function setViewport(board: PlaitBoard, origination: Point, zoom?: number) {\n zoom = zoom ?? board.viewport.zoom;\n Transforms.setViewport(board, {\n ...board.viewport,\n zoom,\n origination\n });\n clearViewportOrigination(board);\n}\n\nexport function changeZoom(board: PlaitBoard, newZoom: number, isCenter = true) {\n newZoom = clampZoomLevel(newZoom);\n\n const mousePoint = BOARD_TO_MOVING_POINT.get(board);\n const nativeElement = PlaitBoard.getBoardNativeElement(board);\n const nativeElementRect = nativeElement.getBoundingClientRect();\n const viewportContainerRect = getViewportContainerRect(board);\n let focusPoint = [viewportContainerRect.width / 2, viewportContainerRect.height / 2];\n\n if (!isCenter && mousePoint && distanceBetweenPointAndRectangle(mousePoint[0], mousePoint[1], nativeElementRect) === 0) {\n focusPoint = toPoint(mousePoint[0], mousePoint[1], (nativeElement as unknown) as SVGElement);\n }\n\n const zoom = board.viewport.zoom;\n const origination = getViewportOrigination(board);\n const centerX = origination![0] + focusPoint[0] / zoom;\n const centerY = origination![1] + focusPoint[1] / zoom;\n const newOrigination = [centerX - focusPoint[0] / newZoom, centerY - focusPoint[1] / newZoom] as Point;\n setViewport(board, newOrigination, newZoom);\n}\n\nexport function fitViewport(board: PlaitBoard) {\n const nativeElementRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const viewportContainerRect = getViewportContainerRect(board);\n const elementHostBox = getRectangleByElements(board, board.children, true);\n const zoom = board.viewport.zoom;\n const autoFitPadding = 16;\n const viewportWidth = nativeElementRect.width - 2 * autoFitPadding;\n const viewportHeight = nativeElementRect.height - 2 * autoFitPadding;\n\n let newZoom = zoom;\n if (viewportWidth < elementHostBox.width || viewportHeight < elementHostBox.height) {\n newZoom = Math.min(viewportWidth / elementHostBox.width, viewportHeight / elementHostBox.height);\n } else {\n newZoom = 1;\n }\n\n const viewBox = getViewBox(board, newZoom);\n const centerX = viewBox[0] + viewBox[2] / 2;\n const centerY = viewBox[1] + viewBox[3] / 2;\n const newOrigination = [\n centerX - viewportContainerRect.width / 2 / newZoom,\n centerY - viewportContainerRect.height / 2 / newZoom\n ] as Point;\n setViewport(board, newOrigination, newZoom);\n}\n\nexport const updateViewportOrigination = (board: PlaitBoard, origination: Point) => {\n BOARD_TO_VIEWPORT_ORIGINATION.set(board, origination);\n};\n\nexport const clearViewportOrigination = (board: PlaitBoard) => {\n BOARD_TO_VIEWPORT_ORIGINATION.delete(board);\n};\n\nexport const getViewportOrigination = (board: PlaitBoard) => {\n const origination = BOARD_TO_VIEWPORT_ORIGINATION.get(board);\n if (origination) {\n return origination;\n } else {\n return board.viewport.origination;\n }\n};\n\nexport const isFromScrolling = (board: PlaitBoard) => {\n return !!IS_FROM_SCROLLING.get(board);\n};\n\nexport const setIsFromScrolling = (board: PlaitBoard, state: boolean) => {\n IS_FROM_SCROLLING.set(board, state);\n};\n\nexport const isFromViewportChange = (board: PlaitBoard) => {\n return !!IS_FROM_VIEWPORT_CHANGE.get(board);\n};\n\nexport const setIsFromViewportChange = (board: PlaitBoard, state: boolean) => {\n IS_FROM_VIEWPORT_CHANGE.set(board, state);\n};\n\nexport function scrollToRectangle(board: PlaitBoard, client: RectangleClient) {}\n","import { Subscription, timer } from 'rxjs';\n\nlet timerId: number | null = null;\n\nexport const throttleRAF = (fn: () => void) => {\n const scheduleFunc = () => {\n timerId = requestAnimationFrame(() => {\n timerId = null;\n fn();\n });\n };\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n scheduleFunc();\n};\n\nexport const debounce = (func: () => void, wait: number, options?: { leading: boolean }) => {\n let timerSubscription: Subscription | null = null;\n return () => {\n if (timerSubscription && !timerSubscription.closed) {\n timerSubscription.unsubscribe();\n timerSubscription = timer(wait).subscribe(() => {\n func();\n });\n } else {\n if (options?.leading) {\n func();\n }\n timerSubscription = timer(wait).subscribe();\n }\n };\n};\n","import { PlaitBoard, PlaitElement } from '../interfaces';\nimport { BOARD_TO_MOVING_ELEMENT } from './weak-maps';\n\nexport const getMovingElements = (board: PlaitBoard) => {\n return BOARD_TO_MOVING_ELEMENT.get(board) || [];\n};\n\nexport const addMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n const movingElements = getMovingElements(board);\n const newElements = elements.filter(item => !movingElements.find(movingElement => movingElement.key === item.key));\n cacheMovingElements(board, [...movingElements, ...newElements]);\n};\n\nexport const removeMovingElements = (board: PlaitBoard) => {\n BOARD_TO_MOVING_ELEMENT.delete(board);\n};\n\nexport const cacheMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n BOARD_TO_MOVING_ELEMENT.set(board, elements);\n};\n","import { PlaitBoard } from '../interfaces/board';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { BOARD_TO_COMPONENT } from '../utils';\n\nexport const updatePointerType = (board: PlaitBoard, pointer: PlaitPointerType) => {\n board.pointer = pointer;\n const boardComponent = BOARD_TO_COMPONENT.get(board);\n boardComponent?.markForCheck();\n};\n\nexport const BoardTransforms = {\n updatePointerType\n};\n","import { GeneralTransforms } from './general';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\n\nexport { BoardTransforms } from './board';\nexport const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms\n};\n","import { PlaitBoard, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { Transforms } from '../transforms';\nimport { FLUSHING } from '../utils/weak-maps';\n\nexport function createBoard(children: PlaitElement[], options: PlaitBoardOptions): PlaitBoard {\n const board: PlaitBoard = {\n viewport: {\n zoom: 1,\n viewBackgroundColor: '#000'\n },\n children,\n operations: [],\n history: {\n redos: [],\n undos: []\n },\n selection: null,\n pointer: PlaitPointerType.selection,\n options: options || {\n readonly: false,\n hideScrollbar: false\n },\n undo: () => {},\n redo: () => {},\n apply: (operation: PlaitOperation) => {\n board.operations.push(operation);\n\n Transforms.transform(board, operation);\n\n if (!FLUSHING.get(board)) {\n FLUSHING.set(board, true);\n\n Promise.resolve().then(() => {\n FLUSHING.set(board, false);\n board.onChange();\n board.operations = [];\n });\n }\n },\n onChange: () => {},\n mousedown: (event: MouseEvent) => {},\n mousemove: (event: MouseEvent) => {},\n globalMousemove: (event: MouseEvent) => {},\n mouseup: (event: MouseEvent) => {},\n globalMouseup: (event: MouseEvent) => {},\n keydown: (event: KeyboardEvent) => {},\n keyup: (event: KeyboardEvent) => {},\n dblclick: (event: MouseEvent) => {},\n setFragment: (data: DataTransfer | null) => {},\n insertFragment: (data: DataTransfer | null) => {},\n deleteFragment: (data: DataTransfer | null) => {},\n drawElement: (context: PlaitPluginElementContext) => [],\n redrawElement: (context: PlaitPluginElementContext, previousContext) => {},\n destroyElement: (context: PlaitPluginElementContext) => {},\n isWithinSelection: element => false,\n isHitSelection: element => false,\n isRecursion: element => true,\n isMovable: element => false,\n getRectangle: element => null\n };\n return board;\n}\n","import { BOARD_TO_ON_CHANGE } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\n\nexport function withBoard(board: PlaitBoard) {\n const { onChange } = board;\n\n board.onChange = () => {\n const onContextChange = BOARD_TO_ON_CHANGE.get(board);\n\n if (onContextChange) {\n onContextChange();\n }\n\n onChange();\n };\n\n return board;\n}\n","import { PlaitBoard, PlaitOperation } from '../interfaces';\nimport { isHotkey } from 'is-hotkey';\nimport { PlaitHistoryBoard, shouldClear, shouldMerge, shouldSave } from '../utils';\n\nexport function withHistory<T extends PlaitBoard>(board: T) {\n const { apply, keydown } = board;\n board.history = { undos: [], redos: [] };\n\n board.redo = () => {\n const { history } = board;\n const { redos } = history;\n\n if (redos.length > 0) {\n const batch = redos[redos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n for (const op of batch) {\n board.apply(op);\n }\n });\n\n history.redos.pop();\n history.undos.push(batch);\n }\n };\n\n board.undo = () => {\n const { history } = board;\n const { undos } = history;\n\n if (undos.length > 0) {\n const batch = undos[undos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n const inverseOps = batch.map(PlaitOperation.inverse).reverse();\n for (const op of inverseOps) {\n board.apply(op);\n }\n });\n\n history.redos.push(batch);\n history.undos.pop();\n }\n };\n\n board.apply = (op: PlaitOperation) => {\n const { operations, history } = board;\n const { undos } = history;\n const lastBatch = undos[undos.length - 1];\n const lastOp = lastBatch && lastBatch[lastBatch.length - 1];\n let save = PlaitHistoryBoard.isSaving(board);\n let merge = PlaitHistoryBoard.isMerging(board);\n\n if (save == null) {\n save = shouldSave(op, lastOp);\n }\n\n if (save) {\n if (!merge) {\n if (lastBatch == null) {\n merge = false;\n } else if (operations.length !== 0) {\n merge = true;\n } else {\n merge = shouldMerge(op, lastOp);\n }\n }\n\n if (lastBatch && merge) {\n lastBatch.push(op);\n } else {\n const batch = [op];\n undos.push(batch);\n }\n\n while (undos.length > 100) {\n undos.shift();\n }\n\n if (shouldClear(op)) {\n history.redos = [];\n }\n }\n apply(op);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (isHotkey('mod+z', event)) {\n board.undo();\n return;\n }\n if (isHotkey('mod+shift+z', event)) {\n board.redo();\n return;\n }\n keydown(event);\n };\n\n return board;\n}\n","import { PlaitPointerType, PlaitBoard, PlaitBoardMove, Point } from '../interfaces';\nimport { updatePointerType } from '../transforms/board';\nimport { updateViewportContainerScroll } from '../utils/viewport';\n\nexport function withHandPointer<T extends PlaitBoard>(board: T) {\n const { mousedown, mousemove, globalMouseup, keydown, keyup } = board;\n\n let isMoving: boolean = false;\n const plaitBoardMove: PlaitBoardMove = {\n x: 0,\n y: 0\n };\n\n board.mousedown = (event: MouseEvent) => {\n if (board.options.readonly) {\n updatePointerType(board, PlaitPointerType.hand);\n } else if (!board.selection) {\n updatePointerType(board, PlaitPointerType.selection);\n }\n if (board.pointer === PlaitPointerType.hand && board.selection) {\n isMoving = true;\n PlaitBoard.getBoardNativeElement(board).classList.add('viewport-moving');\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n if (board.pointer === PlaitPointerType.hand && board.selection && isMoving) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n const left = viewportContainer.scrollLeft - (event.x - plaitBoardMove.x);\n const top = viewportContainer.scrollTop - (event.y - plaitBoardMove.y);\n updateViewportContainerScroll(board, left, top, false);\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n mousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (board.selection) {\n isMoving = false;\n PlaitBoard.getBoardNativeElement(board).classList.remove('viewport-moving');\n plaitBoardMove.x = 0;\n plaitBoardMove.y = 0;\n }\n globalMouseup(event);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (board.selection && event.code === 'Space') {\n if (board.pointer !== PlaitPointerType.hand) {\n updatePointerType(board, PlaitPointerType.hand);\n }\n event.preventDefault();\n }\n keydown(event);\n };\n\n board.keyup = (event: KeyboardEvent) => {\n if (board.selection && !board.options.readonly && event.code === 'Space') {\n updatePointerType(board, PlaitPointerType.selection);\n }\n keyup(event);\n };\n\n return board;\n}\n","export const ATTACHED_ELEMENT_CLASS_NAME = 'plait-board-attached';","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { transformPoint } from '../utils/board';\nimport { toPoint } from '../utils/dom/common';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport {\n cacheSelectedElements,\n getHitElements,\n getSelectedElements,\n isIntersectionElements\n} from '../utils/selected-element';\nimport { PlaitElement, PlaitPointerType, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, Selection } from '../interfaces';\nimport { getRectangleByElements } from '../utils/element';\nimport { BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_TEMPORARY_ELEMENTS } from '../utils/weak-maps';\nimport { ATTACHED_ELEMENT_CLASS_NAME } from '../constants/selection';\nimport { throttleRAF } from '../utils';\n\nexport function withSelection(board: PlaitBoard) {\n const { mousedown, globalMousemove, globalMouseup, onChange } = board;\n\n let start: Point | null = null;\n let end: Point | null = null;\n let selectionMovingG: SVGGElement;\n let selectionOuterG: SVGGElement;\n let previousSelectedElements: PlaitElement[];\n\n board.mousedown = (event: MouseEvent) => {\n if (event.button === 0) {\n start = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n }\n\n if (start) {\n const ranges = [{ anchor: start, focus: start }];\n const selectedElements = getSelectedElements(board);\n\n if (isIntersectionElements(board, selectedElements, ranges)) {\n start = null;\n mousedown(event);\n return;\n }\n\n Transforms.setSelection(board, { ranges: ranges });\n\n if (board.pointer === PlaitPointerType.hand || getHitElements(board).length) {\n start = null;\n }\n }\n\n mousedown(event);\n };\n\n board.globalMousemove = (event: MouseEvent) => {\n if (start) {\n const movedTarget = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const { x, y, width, height } = RectangleClient.toRectangleClient([start, movedTarget]);\n selectionMovingG?.remove();\n if (Math.hypot(width, height) > 5) {\n end = movedTarget;\n throttleRAF(() => {\n if (start && end) {\n Transforms.setSelection(board, { ranges: [{ anchor: start, focus: end }] });\n }\n });\n setSelectionMoving(board);\n const rough = PlaitBoard.getRoughSVG(board);\n selectionMovingG = rough.rectangle(x, y, width, height, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n PlaitBoard.getHost(board).append(selectionMovingG);\n }\n }\n globalMousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (start && end) {\n selectionMovingG?.remove();\n clearSelectionMoving(board);\n Transforms.setSelection(board, { ranges: [{ anchor: start, focus: end }] });\n }\n\n if (PlaitBoard.isFocus(board)) {\n const isInBoard = event.target instanceof Node && PlaitBoard.getBoardNativeElement(board).contains(event.target);\n const isInDocument = event.target instanceof Node && document.contains(event.target);\n const isAttachedElement = event.target instanceof Element && event.target.closest(`.${ATTACHED_ELEMENT_CLASS_NAME}`);\n // Clear selection when mouse board outside area\n // The framework needs to determine whether the board is focused through selection\n if (!isInBoard && !start && !isAttachedElement && isInDocument) {\n Transforms.setSelection(board, null);\n }\n }\n\n start = null;\n end = null;\n globalMouseup(event);\n };\n\n board.onChange = () => {\n // calc selected elements entry\n if (board.pointer !== PlaitPointerType.hand) {\n try {\n if (board.operations.find(value => value.type === 'set_selection')) {\n selectionOuterG?.remove();\n const temporaryElements = getTemporaryElements(board);\n const elements = temporaryElements ? temporaryElements : getHitElements(board);\n cacheSelectedElements(board, elements);\n previousSelectedElements = elements;\n const { width, height } = getRectangleByElements(board, elements, false);\n if (width > 0 && height > 0 && elements.length > 1) {\n selectionOuterG = createSelectionOuterG(board, elements);\n selectionOuterG.classList.add('selection-outer');\n PlaitBoard.getHost(board).append(selectionOuterG);\n }\n deleteTemporaryElements(board);\n } else {\n // wait node destroy and remove selected element state\n setTimeout(() => {\n const currentSelectedElements = getSelectedElements(board);\n if (currentSelectedElements.length && currentSelectedElements.length > 1) {\n const selectedElementChange = currentSelectedElements.some(item => !previousSelectedElements.includes(item));\n if (selectedElementChange) {\n selectionOuterG?.remove();\n selectionOuterG = createSelectionOuterG(board, currentSelectedElements);\n selectionOuterG.classList.add('selection-outer');\n PlaitBoard.getHost(board).append(selectionOuterG);\n }\n } else {\n selectionOuterG?.remove();\n }\n });\n }\n } catch (error) {\n console.error(error);\n }\n }\n onChange();\n };\n\n return board;\n}\n\nexport function getTemporaryElements(board: PlaitBoard) {\n return BOARD_TO_TEMPORARY_ELEMENTS.get(board);\n}\n\nexport function deleteTemporaryElements(board: PlaitBoard) {\n BOARD_TO_TEMPORARY_ELEMENTS.delete(board);\n}\n\nexport function isSelectionMoving(board: PlaitBoard) {\n return !!BOARD_TO_IS_SELECTION_MOVING.get(board);\n}\n\nexport function setSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardNativeElement(board).classList.add('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.set(board, true);\n}\n\nexport function clearSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardNativeElement(board).classList.remove('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.delete(board);\n}\n\nexport function createSelectionOuterG(board: PlaitBoard, selectElements: PlaitElement[]) {\n const { x, y, width, height } = getRectangleByElements(board, selectElements, false);\n const rough = PlaitBoard.getRoughSVG(board);\n return rough.rectangle(x - 2.5, y - 2.5, width + 5, height + 5, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fillStyle: 'solid'\n });\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { debounce } from '../utils/common';\nimport { initializeViewBox, isFromScrolling, setIsFromScrolling, updateViewportOffset } from '../utils/viewport';\n\nexport function withViewport(board: PlaitBoard) {\n const { onChange } = board;\n\n const throttleUpdate = debounce(\n () => {\n initializeViewBox(board);\n updateViewportOffset(board);\n },\n 500,\n { leading: true }\n );\n\n board.onChange = () => {\n const isSetViewport = board.operations.some(op => op.type === 'set_viewport');\n const isOnlySetSelection = board.operations.some(op => op.type === 'set_selection');\n if (isOnlySetSelection) {\n return onChange();\n }\n if (isSetViewport && isFromScrolling(board)) {\n setIsFromScrolling(board, false);\n return onChange();\n }\n if (isSetViewport) {\n initializeViewBox(board);\n updateViewportOffset(board);\n } else {\n throttleUpdate();\n }\n onChange();\n };\n\n return board;\n}\n","import { BOARD_TO_HOST } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\nimport { isInPlaitBoard, transformPoint } from '../utils/board';\nimport { toPoint } from '../utils/dom/common';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { PlaitElement } from '../interfaces/element';\nimport { getSelectedElements, isIntersectionElements } from '../utils/selected-element';\nimport { PlaitNode } from '../interfaces/node';\nimport { throttleRAF } from '../utils/common';\nimport { addMovingElements, removeMovingElements } from '../utils/moving-element';\nimport { MERGING } from '../interfaces/history';\n\nexport function withMoving(board: PlaitBoard) {\n const { mousedown, mousemove, globalMouseup, globalMousemove } = board;\n\n let offsetX = 0;\n let offsetY = 0;\n let isPreventDefault = false;\n let startPoint: Point | null;\n let activeElements: PlaitElement[] | null = [];\n\n board.mousedown = event => {\n const host = BOARD_TO_HOST.get(board);\n const point = transformPoint(board, toPoint(event.x, event.y, host!));\n const ranges = [{ anchor: point, focus: point }];\n let movableElements = board.children.filter(item => board.isMovable(item));\n if (movableElements.length) {\n startPoint = point;\n const selectedRootElements = getSelectedElements(board).filter(item => movableElements.includes(item));\n const intersectionSelectedElement = isIntersectionElements(board, selectedRootElements, ranges);\n if (intersectionSelectedElement) {\n activeElements = selectedRootElements;\n } else {\n activeElements = movableElements.filter(item =>\n ranges.some(range => {\n return board.isHitSelection(item, range);\n })\n );\n }\n }\n\n mousedown(event);\n };\n\n board.mousemove = event => {\n if (startPoint && activeElements?.length && !PlaitBoard.hasBeenTextEditing(board)) {\n if (!isPreventDefault) {\n isPreventDefault = true;\n }\n const host = BOARD_TO_HOST.get(board);\n const endPoint = transformPoint(board, toPoint(event.x, event.y, host!));\n offsetX = endPoint[0] - startPoint[0];\n offsetY = endPoint[1] - startPoint[1];\n throttleRAF(() => {\n const currentElements = activeElements!.map(activeElement => {\n const [x, y] = activeElement?.points![0];\n const index = board.children.findIndex(item => item.id === activeElement.id);\n Transforms.setNode(\n board,\n {\n points: [[x + offsetX, y + offsetY]]\n },\n [index]\n );\n MERGING.set(board, true);\n return PlaitNode.get(board, [index]);\n });\n PlaitBoard.getBoardNativeElement(board).classList.add('element-moving');\n addMovingElements(board, currentElements as PlaitElement[]);\n });\n }\n if (isPreventDefault) {\n // 阻止 move 过程中触发画布滚动行为\n event.preventDefault();\n }\n mousemove(event);\n };\n\n board.globalMousemove = event => {\n if (startPoint) {\n const inPlaitBoardElement = isInPlaitBoard(board, event.x, event.y);\n if (!inPlaitBoardElement) {\n cancelMove(board);\n }\n }\n globalMousemove(event);\n };\n\n board.globalMouseup = event => {\n isPreventDefault = false;\n if (startPoint) {\n cancelMove(board);\n }\n globalMouseup(event);\n };\n\n function cancelMove(board: PlaitBoard) {\n startPoint = null;\n offsetX = 0;\n offsetY = 0;\n activeElements = [];\n removeMovingElements(board);\n MERGING.set(board, false);\n PlaitBoard.getBoardNativeElement(board).classList.remove('element-moving');\n }\n\n return board;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitPluginElementContext } from './context';\nimport { PlaitPluginElementComponent } from './plugin-element';\nimport { PlaitEffect } from '../children/effect';\nimport { Ancestor, PlaitNode } from '../../interfaces/node';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../../utils/weak-maps';\nimport { addSelectedElement, isSelectedElement, removeSelectedElement } from '../../utils';\n\n@Component({\n selector: 'plait-element',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitElementComponent implements OnInit, OnChanges, OnDestroy {\n initialized = false;\n\n instance?: PlaitPluginElementComponent<PlaitElement>;\n\n @Input() index!: number;\n\n @Input() element!: PlaitElement;\n\n @Input() parent!: Ancestor;\n\n @Input() board!: PlaitBoard;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor(public renderer2: Renderer2, public viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.initialize();\n this.drawElement();\n }\n\n initialize() {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n this.initialized = true;\n }\n\n drawElement() {\n const context = this.getContext();\n const result = this.board.drawElement(context);\n if (Array.isArray(result)) {\n } else {\n const componentRef = this.viewContainerRef.createComponent(result);\n const instance = componentRef.instance;\n instance.context = context;\n this.insertG(instance.rootG ? instance.rootG : instance.g);\n this.instance = instance;\n }\n }\n\n insertG(g: SVGGElement) {\n if (PlaitBoard.isBoard(this.parent)) {\n this.parentG.append(g);\n } else {\n let siblingG = PlaitElement.getComponent(this.parent).g;\n if (this.index > 0) {\n const brotherElement = (this.parent.children as PlaitElement[])[this.index - 1];\n const lastElement = PlaitNode.last(this.board, PlaitBoard.findPath(this.board, brotherElement));\n let component = PlaitElement.getComponent(lastElement) || PlaitElement.getComponent(brotherElement);\n siblingG = component.g;\n }\n this.parentG.insertBefore(g, siblingG);\n }\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n if (this.initialized) {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n const elementChanged = simpleChanges['element'];\n const context = this.getContext();\n if (elementChanged && isSelectedElement(this.board, elementChanged.previousValue)) {\n context.selected = true;\n removeSelectedElement(this.board, elementChanged.previousValue);\n addSelectedElement(this.board, this.element);\n }\n if (this.instance) {\n this.instance.context = context;\n }\n }\n }\n\n getContext(): PlaitPluginElementContext {\n const isSelected = isSelectedElement(this.board, this.element);\n const context: PlaitPluginElementContext = {\n element: this.element,\n parent: this.parent,\n board: this.board,\n selected: isSelected,\n effect: this.effect\n };\n return context;\n }\n\n ngOnDestroy(): void {\n this.board.destroyElement(this.getContext());\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitEffect } from './effect';\nimport { Ancestor } from '../../interfaces/node';\n\n@Component({\n selector: 'plait-children',\n template: `\n <plait-element\n *ngFor=\"let item of parent.children; let index = index; trackBy: trackBy\"\n [index]=\"index\"\n [element]=\"item\"\n [parent]=\"parent\"\n [board]=\"board\"\n [effect]=\"effect\"\n [parentG]=\"parentG\"\n ></plait-element>\n `\n})\nexport class PlaitChildrenElement implements OnInit {\n @Input() board!: PlaitBoard;\n\n @Input() parent!: Ancestor;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor() {}\n\n ngOnInit(): void {\n if (!this.parent) {\n this.parent = this.board;\n }\n if (!this.parentG) {\n this.parentG = PlaitBoard.getElementHost(this.board);\n }\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { PlaitBoard, PlaitPointerType } from '../../interfaces';\nimport { updatePointerType } from '../../transforms/board';\n\n@Component({\n selector: 'plait-toolbar',\n templateUrl: './toolbar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitToolbarComponent {\n PlaitPointerType = PlaitPointerType;\n\n @HostBinding('class') hostClass = `plait-board-toolbar`;\n\n @Input() board!: PlaitBoard;\n\n get zoom() {\n const zoom = this.board?.viewport.zoom || 1;\n return Number((zoom * 100).toFixed(0));\n }\n\n get isHand() {\n return this.board.pointer === PlaitPointerType.hand;\n }\n\n @Output() adaptHandle = new EventEmitter();\n\n @Output() zoomInHandle = new EventEmitter();\n\n @Output() zoomOutHandle = new EventEmitter();\n\n @Output() resetZoomHandel = new EventEmitter();\n\n activeHand() {\n updatePointerType(this.board, this.isHand ? PlaitPointerType.selection : PlaitPointerType.hand);\n }\n\n // 适应画布\n adapt() {\n this.adaptHandle.emit();\n }\n\n // 放大\n zoomIn() {\n this.zoomInHandle.emit();\n }\n\n // 缩小\n zoomOut() {\n this.zoomOutHandle.emit();\n }\n\n resetZoom() {\n this.resetZoomHandel.emit();\n }\n}\n","<div class=\"zoom-toolbar island plait-board-attached\">\n <a class=\"toolbar-item plait-action-icon\" [ngClass]=\"{ 'icon-active': isHand }\" (click)=\"activeHand()\">\n <ng-template [ngTemplateOutlet]=\"dragMoveTemplate\"></ng-template>\n </a>\n <div class=\"divider\"></div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"adapt()\">\n <ng-template [ngTemplateOutlet]=\"adaptTemplate\"></ng-template>\n </a>\n <div class=\"divider\"></div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"zoomOut()\">\n <ng-template [ngTemplateOutlet]=\"zoomOutTemplate\"></ng-template>\n </a>\n <div class=\"toolbar-item zoom-value\" (mousedown)=\"resetZoom()\">{{ zoom }}%</div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"zoomIn()\">\n <ng-template [ngTemplateOutlet]=\"zoomInTemplate\"></ng-template>\n </a>\n</div>\n\n<ng-template #dragMoveTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>1.Base基础/1.icon图标/2.normal/hand</title>\n <g id=\"1.Base基础/1.icon图标/2.normal/hand\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M8.44583468,0.500225887 C9.07406934,0.510185679 9.54739531,0.839591366 9.86192311,1.34305279 C9.89696656,1.39914649 9.92878401,1.45492964 9.9576026,1.50991157 L9.9576026,1.50991157 L10.0210033,1.64201027 L10.061978,1.62350755 C10.1972891,1.56834247 10.3444107,1.53218464 10.5027907,1.51755353 L10.5027907,1.51755353 L10.6649031,1.51019133 C11.4883708,1.51019133 12.0208782,1.99343346 12.3023042,2.66393278 C12.3903714,2.87392911 12.4344191,3.10047818 12.4339446,3.3257952 L12.4339446,3.3257952 L12.4360033,3.80501027 L12.5160535,3.78341501 C12.6124478,3.76124046 12.7138812,3.74739854 12.820201,3.74250274 L12.820201,3.74250274 L12.9833264,3.74194533 C13.6121166,3.7657478 14.0645887,4.0801724 14.3087062,4.56112689 C14.4521117,4.8436609 14.4987984,5.11349437 14.4999262,5.33449618 L14.4999262,5.33449618 L14.3922653,12.049414 C14.3784752,12.909177 14.0717787,13.7360948 13.5212406,14.3825228 C13.4055676,14.5183496 13.2843697,14.643961 13.1582361,14.7596335 C12.4634771,15.3967716 11.755103,15.6538706 11.1897396,15.7000055 L11.1897396,15.7000055 L7.4723083,15.6798158 C7.14276373,15.634268 6.81580098,15.5154267 6.49455235,15.3472501 C6.25643701,15.2225944 6.06881706,15.0975452 5.88705731,14.9494308 L5.88705731,14.9494308 L2.55198782,11.500873 C2.39559475,11.3769079 2.17626793,11.1748532 1.9548636,10.9139403 C1.57867502,10.4706225 1.33501976,10.0139923 1.30330257,9.52833025 C1.28093191,9.18578476 1.37200912,8.85641102 1.5826788,8.56872564 C1.82538833,8.23725279 2.12881965,8.02107162 2.47470569,7.92957033 C2.95807982,7.80169771 3.42705723,7.92468989 3.86509644,8.18731167 C4.04431391,8.29475961 4.1816109,8.40304483 4.26225571,8.47866867 L4.26225571,8.47866867 L4.61400328,8.79701027 L4.57247249,3.59275349 L4.57628524,3.46204923 C4.5897691,3.23444442 4.64087578,2.95701848 4.75937106,2.66961597 C5.01017272,2.06131302 5.49670227,1.64692543 6.21363856,1.60818786 C6.44223508,1.59583681 6.65042099,1.62176802 6.83696985,1.68057551 L6.83696985,1.68057551 L6.86400328,1.69001027 C6.88501862,1.63593052 6.90764242,1.58175442 6.9331867,1.52672633 L6.9331867,1.52672633 L7.01883595,1.35955614 C7.31549194,0.832047939 7.79476072,0.48993549 8.44583468,0.500225887 Z M8.42684173,1.70001476 C8.26825412,1.69756905 8.16339456,1.77242008 8.06478367,1.94776814 C8.03967773,1.99241107 8.01831703,2.03811495 8.00083464,2.07855067 L8.00083464,2.07855067 L7.94879157,2.2035905 L7.94354455,2.20731401 L7.943,3.161 L7.97170661,3.16123746 L7.97170661,7.60991883 L6.77170661,7.60991883 L6.771,3.338 L6.74362358,3.33880359 C6.74284189,3.29064626 6.73014163,3.20282206 6.7002616,3.11094408 L6.66446012,3.01903385 C6.58982025,2.85766739 6.49843292,2.79455071 6.27838133,2.80644008 C6.07001018,2.81769881 5.95642108,2.91444507 5.86877664,3.12702089 C5.79792279,3.29887224 5.77228127,3.48655908 5.77246879,3.58977183 L5.77246879,3.58977183 L5.83613619,11.5252021 L3.41863956,9.33477657 L3.31637296,9.25979571 L3.24805011,9.21651224 C3.06096922,9.10434987 2.89279975,9.06024641 2.78159879,9.0896637 C2.71007735,9.10858411 2.63607367,9.1613084 2.55086305,9.27768211 C2.51020424,9.33320478 2.49638061,9.38319687 2.50075171,9.4501283 C2.51206889,9.62341997 2.64503022,9.87260054 2.86983366,10.1375191 C3.03268834,10.3294345 3.19762053,10.4813781 3.35554956,10.6131022 L3.35554956,10.6131022 L6.68454317,14.0569073 C6.71106575,14.0773808 6.74806086,14.1037158 6.79369091,14.1335929 L6.79369091,14.1335929 L6.95464838,14.2315311 L7.05111031,14.2841211 C7.25978123,14.3933622 7.46253523,14.4670573 7.55685495,14.4854708 L7.55685495,14.4854708 L11.1407985,14.5022108 C11.1503576,14.5013899 11.1627905,14.4997539 11.1779002,14.4971772 L11.1779002,14.4971772 L11.2991076,14.4694224 C11.3491682,14.4557375 11.4083624,14.437284 11.4751158,14.4130563 C11.769383,14.3062543 12.066676,14.1324596 12.3471758,13.8752234 C12.4371203,13.7927386 12.5240597,13.7026333 12.607654,13.6044743 C12.9760464,13.1719172 13.183059,12.6137678 13.1924195,12.030173 L13.1924195,12.030173 L13.3000132,5.32832551 C13.2997939,5.29016685 13.2826117,5.19085946 13.2386527,5.10425262 C13.1843838,4.99733326 13.1129774,4.94771265 12.9379578,4.94108739 C12.6814739,4.93138871 12.534132,5.11189595 12.4756792,5.39480062 L12.4768718,7.52734922 L11.2768718,7.52734922 L11.276,5.688 L11.2462883,5.6883208 L11.2339541,3.32771285 C11.2341,3.2560396 11.2209054,3.18817621 11.1957482,3.12818892 C11.0820579,2.85732094 10.9199288,2.71019133 10.6649031,2.71019133 C10.456829,2.71019133 10.3197487,2.87378067 10.2524297,3.11264939 L10.2530225,7.512783 L9.05302254,7.512783 L9.053,3.288 L9.01554331,3.28724203 L8.98800328,2.29901027 L8.9629175,2.22263368 C8.94515567,2.17417174 8.92167756,2.11937748 8.8924232,2.06330056 L8.8924232,2.06330056 L8.84420197,1.9788544 C8.72758855,1.79219249 8.59915015,1.70280728 8.42684173,1.70001476 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n\n<ng-template #adaptTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>1.Base基础/1.icon图标/2.normal/Fit canvas</title>\n <g id=\"1.Base基础/1.icon图标/2.normal/Fit-canvas\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M14.9971494,10.4 L14.9971494,13.4020516 C14.9971494,14.2366152 14.3581879,14.9219414 13.542782,14.9955129 L13.3971494,15.0020516 L10.4,15.0020516 L10.4,13.8020516 L13.3971494,13.8020516 C13.590449,13.8020516 13.7517243,13.6649388 13.7890228,13.4826656 L13.7971494,13.4020516 L13.7971494,10.4 L14.9971494,10.4 Z M2.2,10.4 L2.2,13.3971494 C2.2,13.590449 2.3371128,13.7517243 2.51938605,13.7890228 L2.6,13.7971494 L5.60205161,13.7971494 L5.60205161,14.9971494 L2.6,14.9971494 C1.76543638,14.9971494 1.08011021,14.3581879 1.00653868,13.542782 L1,13.3971494 L1,10.4 L2.2,10.4 Z M10.5024511,4.9 C11.3861067,4.9 12.1024511,5.6163444 12.1024511,6.5 L12.1024511,6.5 L12.1024511,9.5 C12.1024511,10.3836556 11.3861067,11.1 10.5024511,11.1 L10.5024511,11.1 L5.50245112,11.1 C4.61879552,11.1 3.90245112,10.3836556 3.90245112,9.5 L3.90245112,9.5 L3.90245112,6.5 C3.90245112,5.6163444 4.61879552,4.9 5.50245112,4.9 L5.50245112,4.9 Z M10.5024511,6.1 L5.50245112,6.1 C5.28153722,6.1 5.10245112,6.2790861 5.10245112,6.5 L5.10245112,6.5 L5.10245112,9.5 C5.10245112,9.7209139 5.28153722,9.9 5.50245112,9.9 L5.50245112,9.9 L10.5024511,9.9 C10.723365,9.9 10.9024511,9.7209139 10.9024511,9.5 L10.9024511,9.5 L10.9024511,6.5 C10.9024511,6.2790861 10.723365,6.1 10.5024511,6.1 L10.5024511,6.1 Z M5.59714938,1 L5.59714938,2.2 L2.6,2.2 C2.40670034,2.2 2.24542508,2.3371128 2.20812658,2.51938605 L2.2,2.6 L2.2,5.60205161 L1,5.60205161 L1,2.6 C1,1.76543638 1.63896152,1.08011021 2.45436739,1.00653868 L2.6,1 L5.59714938,1 Z M13.3971494,1 L13.542782,1.00653868 C14.3581879,1.08011021 14.9971494,1.76543638 14.9971494,2.6 L14.9971494,2.6 L14.9971494,5.60205161 L13.7971494,5.60205161 L13.7971494,2.6 L13.7890228,2.51938605 C13.7517243,2.3371128 13.590449,2.2 13.3971494,2.2 L13.3971494,2.2 L10.4,2.2 L10.4,1 L13.3971494,1 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n<ng-template #zoomOutTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>action/zoom-out</title>\n <desc>Created with Sketch.</desc>\n <g id=\"action/zoom-out\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M6.85,2.73225886e-13 C10.6331505,2.73225886e-13 13.7,3.06684946 13.7,6.85 C13.7,8.54194045 13.0865836,10.0906098 12.0700142,11.2857448 L15.4201976,14.5717081 C15.6567367,14.8037768 15.6603607,15.1836585 15.4282919,15.4201976 C15.1962232,15.6567367 14.8163415,15.6603607 14.5798024,15.4282919 L14.5798024,15.4282919 L11.2163456,12.128262 C10.0309427,13.1099691 8.50937591,13.7 6.85,13.7 C3.06684946,13.7 4.58522109e-14,10.6331505 4.58522109e-14,6.85 C4.58522109e-14,3.06684946 3.06684946,2.73225886e-13 6.85,2.73225886e-13 Z M6.85,1.2 C3.72959116,1.2 1.2,3.72959116 1.2,6.85 C1.2,9.97040884 3.72959116,12.5 6.85,12.5 C8.31753357,12.5 9.65438791,11.9404957 10.6588859,11.0231643 C10.6855412,10.9625408 10.7245275,10.9050898 10.7743982,10.8542584 C10.8288931,10.7987137 10.8915387,10.7560124 10.9585649,10.7261903 C11.9144009,9.71595758 12.5,8.35136579 12.5,6.85 C12.5,3.72959116 9.97040884,1.2 6.85,1.2 Z M4.6,6.2 L9.12944565,6.2 C9.4608165,6.2 9.72944565,6.46862915 9.72944565,6.8 C9.72944565,7.09823376 9.51185604,7.34564675 9.22676876,7.39214701 L9.12944565,7.4 L4.6,7.4 C4.26862915,7.4 4,7.13137085 4,6.8 C4,6.50176624 4.21758961,6.25435325 4.50267688,6.20785299 L4.6,6.2 L9.12944565,6.2 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n\n<ng-template #zoomInTemplate\n ><svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>action/zoom-in</title>\n <desc>Created with Sketch.</desc>\n <g id=\"action/zoom-in\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M6.85,-1.81188398e-13 C10.6331505,-1.81188398e-13 13.7,3.06684946 13.7,6.85 C13.7,8.54194045 13.0865836,10.0906098 12.0700142,11.2857448 L15.4201976,14.5717081 C15.6567367,14.8037768 15.6603607,15.1836585 15.4282919,15.4201976 C15.1962232,15.6567367 14.8163415,15.6603607 14.5798024,15.4282919 L14.5798024,15.4282919 L11.2163456,12.128262 C10.0309427,13.1099691 8.50937591,13.7 6.85,13.7 C3.06684946,13.7 4.61852778e-14,10.6331505 4.61852778e-14,6.85 C4.61852778e-14,3.06684946 3.06684946,-1.81188398e-13 6.85,-1.81188398e-13 Z M6.85,1.2 C3.72959116,1.2 1.2,3.72959116 1.2,6.85 C1.2,9.97040884 3.72959116,12.5 6.85,12.5 C8.31753357,12.5 9.65438791,11.9404957 10.6588859,11.0231643 C10.6855412,10.9625408 10.7245275,10.9050898 10.7743982,10.8542584 C10.8288931,10.7987137 10.8915387,10.7560124 10.9585649,10.7261903 C11.9144009,9.71595758 12.5,8.35136579 12.5,6.85 C12.5,3.72959116 9.97040884,1.2 6.85,1.2 Z M6.86472282,3.93527718 C7.16295659,3.93527718 7.41036958,4.15286679 7.45686984,4.43795406 L7.46472282,4.53527718 L7.464,6.19927718 L9.12944565,6.2 C9.42767941,6.2 9.6750924,6.41758961 9.72159266,6.70267688 L9.72944565,6.8 C9.72944565,7.09823376 9.51185604,7.34564675 9.22676876,7.39214701 L9.12944565,7.4 L7.464,7.39927718 L7.46472282,9.06472282 C7.46472282,9.36295659 7.24713321,9.61036958 6.96204594,9.65686984 L6.86472282,9.66472282 C6.56648906,9.66472282 6.31907607,9.44713321 6.27257581,9.16204594 L6.26472282,9.06472282 L6.264,7.39927718 L4.6,7.4 C4.30176624,7.4 4.05435325,7.18241039 4.00785299,6.89732312 L4,6.8 C4,6.50176624 4.21758961,6.25435325 4.50267688,6.20785299 L4.6,6.2 L6.264,6.19927718 L6.26472282,4.53527718 C6.26472282,4.2701805 6.43664548,4.0452385 6.67507642,3.96586557 L6.76739971,3.94313016 L6.86472282,3.93527718 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { PlaitBoard, PlaitBoardChangeEvent, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPlugin } from '../interfaces/plugin';\nimport { Viewport } from '../interfaces/viewport';\nimport { createBoard } from '../plugins/create-board';\nimport { withBoard } from '../plugins/with-board';\nimport { withHistory } from '../plugins/with-history';\nimport { withHandPointer } from '../plugins/with-hand';\nimport { withSelection } from '../plugins/with-selection';\nimport { toPoint, transformPoint, distanceBetweenPointAndRectangle } from '../utils';\nimport {\n BOARD_TO_ON_CHANGE,\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_ROUGH_SVG,\n BOARD_TO_MOVING_POINT\n} from '../utils/weak-maps';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n fitViewport,\n getViewBox,\n initializeViewportOffset,\n initializeViewBox,\n setViewport,\n changeZoom,\n isFromViewportChange,\n setIsFromViewportChange,\n initializeViewportContainer,\n updateViewportOffset,\n setIsFromScrolling\n} from '../utils/viewport';\nimport { isHotkey } from 'is-hotkey';\nimport { withViewport } from '../plugins/with-viewport';\nimport { Point } from '../interfaces/point';\nimport { withMoving } from '../plugins/with-moving';\nimport { hasInputOrTextareaTarget } from '../utils/dom/common';\n\nconst ElementHostClass = 'element-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\"><g class=\"element-host\"></g></svg>\n <plait-children [board]=\"board\" [effect]=\"effect\"></plait-children>\n </div>\n <plait-toolbar\n *ngIf=\"isFocused && !toolbarTemplateRef\"\n [board]=\"board\"\n (adaptHandle)=\"adaptHandle()\"\n (zoomInHandle)=\"zoomInHandle()\"\n (zoomOutHandle)=\"zoomOutHandle()\"\n (resetZoomHandel)=\"resetZoomHandel()\"\n ></plait-toolbar>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, OnDestroy {\n hasInitialized = false;\n\n effect = {};\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions!: PlaitBoardOptions;\n\n @Output() plaitChange: EventEmitter<PlaitBoardChangeEvent> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `plait-board-container ${this.board.pointer}`;\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n @ContentChild('plaitToolbar')\n public toolbarTemplateRef!: TemplateRef<any>;\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n constructor(public cdr: ChangeDetectorRef, private elementRef: ElementRef<HTMLElement>, private ngZone: NgZone) {}\n\n ngOnInit(): void {\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.elementResizeListener();\n this.mouseLeaveListener();\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n BOARD_TO_ELEMENT_HOST.set(this.board, elementHost);\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n this.detect();\n const changeEvent: PlaitBoardChangeEvent = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection\n };\n this.plaitChange.emit(changeEvent);\n });\n });\n this.hasInitialized = true;\n }\n\n detect() {\n this.effect = {};\n this.cdr.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) this.board.children = valueChange.currentValue;\n if (options) this.board.options = options.currentValue;\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withHandPointer(\n withHistory(withSelection(withMoving(withBoard(withViewport(createBoard(this.plaitValue, this.plaitOptions))))))\n );\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousemove(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalMousemove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.dblclick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n filter(event => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target))\n )\n .subscribe((event: KeyboardEvent) => {\n if (isHotkey(['mod+=', 'mod++'], { byKey: true })(event)) {\n event.preventDefault();\n this.zoomInHandle(false);\n }\n if (isHotkey('mod+-', { byKey: true })(event)) {\n this.zoomOutHandle();\n event.preventDefault();\n }\n this.board?.keydown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyup(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((clipboardEvent: ClipboardEvent) => {\n const mousePoint = BOARD_TO_MOVING_POINT.get(this.board);\n const rect = this.nativeElement.getBoundingClientRect();\n if (mousePoint && distanceBetweenPointAndRectangle(mousePoint[0], mousePoint[1], rect) === 0) {\n const targetPoint = transformPoint(this.board, toPoint(mousePoint[0], mousePoint[1], this.host));\n this.board.insertFragment(clipboardEvent.clipboardData, targetPoint);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n this.board?.deleteFragment(event.clipboardData);\n });\n }\n\n private viewportScrollListener() {\n this.ngZone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return this.isFocused;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n const zoom = this.board.viewport.zoom;\n const viewBox = getViewBox(this.board, zoom);\n const origination = [scrollLeft / zoom + viewBox[0], scrollTop / zoom + viewBox[1]] as Point;\n if (Point.isEquals(origination, this.board.viewport.origination)) {\n return;\n }\n setViewport(this.board, origination);\n setIsFromScrolling(this.board, true);\n });\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private mouseLeaveListener() {\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n adaptHandle() {\n fitViewport(this.board);\n }\n\n zoomInHandle(isCenter = true) {\n changeZoom(this.board, this.board.viewport.zoom + 0.1, isCenter);\n }\n\n zoomOutHandle() {\n changeZoom(this.board, this.board.viewport.zoom - 0.1);\n }\n\n resetZoomHandel() {\n changeZoom(this.board, 1);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n BOARD_TO_ON_CHANGE.delete(this.board);\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlaitBoardComponent } from './board/board.component';\nimport { PlaitElementComponent } from './core/element/element.component';\nimport { PlaitToolbarComponent } from './core/toolbar/toolbar.component';\nimport { PlaitChildrenElement } from './core/children/children.component';\n\nconst COMPONENTS = [PlaitBoardComponent, PlaitChildrenElement, PlaitElementComponent, PlaitToolbarComponent];\n\n@NgModule({\n declarations: [...COMPONENTS],\n imports: [CommonModule],\n exports: [...COMPONENTS]\n})\nexport class PlaitModule {}\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './constants';\nexport * from './core/element/plugin-element';\nexport * from './core/element/element.component';\nexport * from './core/children/children.component';\nexport * from './core/element/context-change';\nexport * from './core/toolbar/toolbar.component';\nexport * from './interfaces';\nexport * from './plait.module';\nexport * from './transforms';\nexport * from './utils';\nexport * from './plugins/with-selection';\nexport * from './plugins/with-moving';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["setViewport","i2.PlaitElementComponent","i2.PlaitChildrenElement","i3.PlaitToolbarComponent"],"mappings":"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"}
|