@plait/core 0.0.55 → 0.0.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/board/board.component.d.ts +19 -41
- package/board/board.component.interface.d.ts +5 -0
- package/core/element/before-context-change.d.ts +6 -0
- package/core/element/context.d.ts +7 -0
- package/core/element/element.component.d.ts +11 -3
- package/core/element/plugin-element.d.ts +22 -0
- package/core/toolbar/toolbar.component.d.ts +7 -8
- package/esm2020/board/board.component.interface.mjs +2 -0
- package/esm2020/board/board.component.mjs +217 -230
- package/esm2020/core/element/before-context-change.mjs +7 -0
- package/esm2020/core/element/context.mjs +2 -0
- package/esm2020/core/element/element.component.mjs +48 -12
- package/esm2020/core/element/plugin-element.mjs +60 -0
- package/esm2020/core/toolbar/toolbar.component.mjs +14 -22
- package/esm2020/interfaces/board.mjs +1 -1
- package/esm2020/interfaces/element.mjs +1 -1
- package/esm2020/interfaces/index.mjs +3 -3
- package/esm2020/interfaces/node.mjs +1 -1
- package/esm2020/interfaces/operation.mjs +15 -6
- package/esm2020/interfaces/path.mjs +2 -2
- package/esm2020/interfaces/pointer.mjs +6 -0
- package/esm2020/interfaces/viewport.mjs +2 -2
- package/esm2020/plugins/create-board.mjs +6 -7
- package/esm2020/plugins/with-hand.mjs +68 -0
- package/esm2020/plugins/with-selection.mjs +4 -2
- package/esm2020/public-api.mjs +3 -1
- package/esm2020/transforms/board.mjs +7 -0
- package/esm2020/transforms/general.mjs +1 -1
- package/esm2020/utils/board.mjs +1 -9
- package/esm2020/utils/matrix.mjs +131 -78
- package/esm2020/utils/weak-maps.mjs +1 -1
- package/fesm2015/plait-core.mjs +573 -433
- package/fesm2015/plait-core.mjs.map +1 -1
- package/fesm2020/plait-core.mjs +595 -456
- package/fesm2020/plait-core.mjs.map +1 -1
- package/interfaces/board.d.ts +19 -8
- package/interfaces/element.d.ts +5 -2
- package/interfaces/index.d.ts +2 -2
- package/interfaces/node.d.ts +0 -1
- package/interfaces/pointer.d.ts +4 -0
- package/interfaces/viewport.d.ts +1 -1
- package/package.json +1 -1
- package/plugins/with-hand.d.ts +2 -0
- package/public-api.d.ts +2 -0
- package/transforms/board.d.ts +3 -0
- package/utils/board.d.ts +2 -3
- package/utils/matrix.d.ts +66 -16
- package/utils/weak-maps.d.ts +2 -2
- package/esm2020/interfaces/cursor.mjs +0 -7
- package/esm2020/interfaces/element-context.mjs +0 -2
- package/esm2020/plugins/with-move.mjs +0 -66
- package/interfaces/cursor.d.ts +0 -6
- package/interfaces/element-context.d.ts +0 -4
- package/plugins/with-move.d.ts +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plait-core.mjs","sources":["../../../packages/plait/src/constants/index.ts","../../../packages/plait/src/interfaces/cursor.ts","../../../packages/plait/src/interfaces/path.ts","../../../packages/plait/src/interfaces/node.ts","../../../packages/plait/src/interfaces/operation.ts","../../../packages/plait/src/utils/helper.ts","../../../packages/plait/src/interfaces/viewport.ts","../../../packages/plait/src/interfaces/history.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/transforms/index.ts","../../../packages/plait/src/utils/weak-maps.ts","../../../packages/plait/src/plugins/create-board.ts","../../../packages/plait/src/plugins/with-board.ts","../../../packages/plait/src/utils/board.ts","../../../packages/plait/src/utils/dom.ts","../../../packages/plait/src/utils/environment.ts","../../../packages/plait/src/utils/graph.ts","../../../packages/plait/src/utils/history.ts","../../../packages/plait/src/utils/hotkeys.ts","../../../packages/plait/src/utils/id-creator.ts","../../../packages/plait/src/utils/math.ts","../../../packages/plait/src/utils/matrix.ts","../../../packages/plait/src/plugins/with-history.ts","../../../packages/plait/src/plugins/with-move.ts","../../../packages/plait/src/plugins/with-selection.ts","../../../packages/plait/src/core/element/element.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":["export const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';\nexport const SCROLL_BAR_WIDTH = 20;\n","export type CursorStatus = BaseCursorStatus | string;\nexport enum BaseCursorStatus {\n 'move' = 'move',\n 'select' = 'select',\n 'drag' = 'drag'\n}\n","import produce from 'immer';\nimport { PlaitOperation } from './operation';\n\nexport type Path = number[];\n\nexport const Path = {\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 /**\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 null;\n });\n }\n};\n","import { PlaitBoard } from './board';\nimport { Path } from './path';\n\nexport interface PlaitNode {\n [key: string]: any;\n children?: PlaitNode[];\n id?: string;\n}\n\nexport type Ancestor = PlaitBoard | PlaitNode;\n\nexport interface PlaitNodeInterface {\n parent: (board: PlaitBoard, path: Path) => Ancestor;\n get: (board: PlaitBoard, path: Path) => PlaitNode;\n}\n\nexport const PlaitNode: PlaitNodeInterface = {\n parent: (board: PlaitBoard, path: Path) => {\n const parentPath = Path.parent(path);\n const p = PlaitNode.get(board, parentPath);\n return p;\n },\n get(board: PlaitBoard, path: Path): Ancestor {\n let node: PlaitBoard | PlaitNode = board;\n\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n\n node = node.children[p];\n }\n\n return node;\n }\n};\n","import { PlaitNode } from './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 if (Path.isSibling(path, newPath)) {\n const inversePath = Path.transform(path, op)!;\n return { ...op, path: inversePath, newPath: path };\n }\n\n return { ...op, path: newPath, newPath: path };\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 function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n","import { isNullOrUndefined } from '../utils/helper';\nimport { ExtendedType } from './custom-types';\n\nexport interface BaseViewport {\n [key: string]: any;\n zoom: number;\n viewBackgroundColor: string;\n canvasPoint: number[];\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) && !isNullOrUndefined(value.canvasPoint);\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 { 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.anchor = newProperties.anchor;\n selection.focus = newProperties.focus;\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 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';\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}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection\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 { GeneralTransforms } from './general';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\n\nexport const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms\n};\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { PlaitBoardComponent } from '../board/board.component';\nimport { PlaitBoard } from '../interfaces/board';\n\n// record richtext type status\nexport const FLUSHING: WeakMap<PlaitBoard, boolean> = new WeakMap();\n\nexport const IS_TEXT_EDITABLE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ON_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const HOST_TO_ROUGH_SVG = new WeakMap<SVGElement, RoughSVG>();\n\nexport const PLAIT_BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, PlaitBoardComponent>();\n","import { SimpleChanges } from '@angular/core';\nimport { PlaitBoard, PlaitBoardOptions } from '../interfaces/board';\nimport { BaseCursorStatus } from '../interfaces/cursor';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitElementContext } from '../interfaces/element-context';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { Transforms } from '../transforms';\nimport { FLUSHING } from '../utils/weak-maps';\n\nexport function createBoard(host: SVGElement, children: PlaitElement[], options: PlaitBoardOptions): PlaitBoard {\n const board: PlaitBoard = {\n host,\n viewport: {\n zoom: 1,\n viewBackgroundColor: '#000',\n canvasPoint: []\n },\n children,\n operations: [],\n history: {\n redos: [],\n undos: []\n },\n selection: null,\n cursor: BaseCursorStatus.select,\n options: options || {\n readonly: false,\n allowClearBoard: 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 globalMouseup: (event: MouseEvent) => {},\n mousemove: (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: PlaitElementContext) => [],\n redrawElement: (context: PlaitElementContext, changes: SimpleChanges) => [],\n destroyElement: () => {}\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 { BaseCursorStatus, PlaitBoard, Point } from '../interfaces';\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 } = board.host.getBoundingClientRect();\n const viewBox = (board.host as SVGSVGElement).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 calculateZoom(zoom: number, minZoom = 0.2, maxZoom = 4) {\n return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;\n}\n\nexport function isNoSelectionElement(e: Event) {\n return (e.target as HTMLElement)?.closest('.plait-board-attached');\n}\n\nexport const updateCursorStatus = (board: PlaitBoard, cursor: BaseCursorStatus) => {\n if (cursor) {\n board.cursor = cursor;\n }\n};\n","import { Point } from 'roughjs/bin/geometry';\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","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 { RectangleClient } from '../interfaces/graph';\nimport { Point } from '../interfaces/point';\n\nexport function toRectangleClient(points: [Point, Point]): RectangleClient {\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","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","// 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}","import { SCROLL_BAR_WIDTH } from '../constants';\nimport { PlaitBoard } from '../interfaces';\nimport { PLAIT_BOARD_TO_COMPONENT } from './weak-maps';\n\nexport function invert(oldMatrix: number[], newMatrix: number[]) {\n let n = newMatrix[0],\n r = newMatrix[1],\n a = newMatrix[2],\n i = newMatrix[3],\n o = newMatrix[4],\n c = newMatrix[5],\n l = newMatrix[6],\n s = newMatrix[7],\n u = newMatrix[8],\n d = u * o - c * s,\n h = -u * i + c * l,\n f = s * i - o * l,\n p = n * d + r * h + a * f;\n\n return p\n ? ((p = 1 / p),\n (oldMatrix[0] = d * p),\n (oldMatrix[1] = (-u * r + a * s) * p),\n (oldMatrix[2] = (c * r - a * o) * p),\n (oldMatrix[3] = h * p),\n (oldMatrix[4] = (u * n - a * l) * p),\n (oldMatrix[5] = (-c * n + a * i) * p),\n (oldMatrix[6] = f * p),\n (oldMatrix[7] = (-s * n + r * l) * p),\n (oldMatrix[8] = (o * n - r * i) * p),\n oldMatrix)\n : null;\n}\n\nexport function transformMat3(e: number[], t: number[], n: number[]) {\n e = [t[0] * n[0] + t[1] * n[3] + t[2] * n[6], t[0] * n[1] + t[1] * n[4] + t[2] * n[7], t[0] * n[2] + t[1] * n[5] + t[2] * n[8]];\n return e;\n}\n\nexport function convertPoint(arr: number[]) {\n return Array.isArray(arr)\n ? {\n x: arr[0],\n y: arr[1]\n }\n : arr;\n}\n\nexport function invertClient(board: PlaitBoard, point: number[], matrix: number[]) {\n const convert = convertPoint(point);\n const clientBox = getViewportClientBox(board);\n const newPoint = [convert.x - clientBox.x, convert.y - clientBox.y, 1];\n const invertMatrix = invert([], matrix);\n const newMatrix = transformMat3([], [newPoint[0], newPoint[1], 1], invertMatrix as []);\n\n return [newMatrix[0], newMatrix[1]];\n}\n\nexport function invertViewport(point: number[], matrix: number[]) {\n const newPoint = convertPoint(point);\n const invertMatrix = invert([], matrix);\n return transformMat3([], [newPoint.x, newPoint.y, 1], invertMatrix as []);\n}\n\nexport function convertViewport(point: number[], matrix: number[]) {\n const newPoint = convertPoint(point);\n return transformMat3([], [newPoint.x, newPoint.y, 1], matrix);\n}\n\nexport function getViewportCanvasBox(board: PlaitBoard, matrix: number[]) {\n const clientBox = getViewportClientBox(board);\n const client = invertClient(board, [clientBox.minX, clientBox.minY], matrix);\n const newClient = invertClient(board, [clientBox.maxX, clientBox.maxY], matrix);\n\n return {\n minX: client[0],\n minY: client[1],\n maxX: newClient[0],\n maxY: newClient[1],\n x: client[0],\n y: client[1],\n width: newClient[0] - client[0],\n height: newClient[1] - client[1]\n };\n}\n\nexport function getViewportClientBox(board: PlaitBoard) {\n const container = board.host?.parentElement as HTMLElement;\n const containerRect = container?.getBoundingClientRect();\n const x = containerRect.x || containerRect.left;\n const y = containerRect.y || containerRect.top;\n const width = containerRect.width - SCROLL_BAR_WIDTH;\n const height = containerRect.height - SCROLL_BAR_WIDTH;\n\n return {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height,\n x,\n y,\n width,\n height\n };\n}\n\nexport function getGraphicsBBox(board: PlaitBoard) {\n const rootGroup = board.host.firstChild;\n const rootGroupBox = (rootGroup as SVGGraphicsElement).getBBox();\n return rootGroupBox;\n}\n\nexport function calculateBBox(board: PlaitBoard, zoom: number) {\n const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board);\n // const clientBox = getViewportClientBox(board);\n const rootGroup = board.host.firstChild;\n const rootGroupBox = (rootGroup as SVGGraphicsElement).getBBox();\n\n let box = {} as any;\n const containerWidth = boardComponent!.width / zoom;\n const containerHeight = boardComponent!.height / zoom;\n\n if (rootGroupBox.width < containerWidth) {\n const offsetX = rootGroupBox.x + rootGroupBox.width / 2;\n const containerX = containerWidth / 2;\n box.left = offsetX - containerX;\n box.right = offsetX + containerX;\n } else {\n box.left = rootGroupBox.x;\n box.right = rootGroupBox.x + rootGroupBox.width;\n }\n\n if (rootGroupBox.height < containerHeight) {\n const offsetY = rootGroupBox.y + rootGroupBox.height / 2;\n const containerY = containerHeight / 2;\n box.top = offsetY - containerY;\n box.bottom = offsetY + containerY;\n } else {\n box.top = rootGroupBox.y;\n box.bottom = rootGroupBox.y + rootGroupBox.height;\n }\n\n // 在新的缩放比容器宽高下的内容盒子位置\n return box;\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 { PlaitBoardComponent } from '../board/board.component';\nimport { BaseCursorStatus, PlaitBoard, PlaitBoardMove } from '../interfaces';\nimport { PLAIT_BOARD_TO_COMPONENT, updateCursorStatus } from '../utils';\n\nexport function withMove<T extends PlaitBoard>(board: T) {\n const { mousedown, mousemove, globalMouseup, keydown, keyup } = board;\n\n const plaitBoardMove: PlaitBoardMove = {\n x: 0,\n y: 0\n };\n\n board.mousedown = (event: MouseEvent) => {\n if (board.options.readonly) {\n updateCursorStatus(board, BaseCursorStatus.move);\n } else if (!board.selection) {\n updateCursorStatus(board, BaseCursorStatus.select);\n }\n if (board.cursor === BaseCursorStatus.move && board.selection) {\n const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board) as PlaitBoardComponent;\n boardComponent.movingChange(true);\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n boardComponent.cdr.markForCheck();\n }\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board) as PlaitBoardComponent;\n if (board.cursor === BaseCursorStatus.move && board.selection && boardComponent.isMoving) {\n const left = event.x - plaitBoardMove.x;\n const top = event.y - plaitBoardMove.y;\n boardComponent.setScroll(boardComponent.scrollLeft - left, boardComponent.scrollTop - top);\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 const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board) as PlaitBoardComponent;\n boardComponent.movingChange(false);\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.cursor !== BaseCursorStatus.move) {\n updateCursorStatus(board, BaseCursorStatus.move);\n const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board) as PlaitBoardComponent;\n boardComponent.cdr.markForCheck();\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 updateCursorStatus(board, BaseCursorStatus.select);\n const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board) as PlaitBoardComponent;\n boardComponent.cdr.markForCheck();\n }\n keyup(event);\n };\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { isNoSelectionElement } from '../utils/board';\nimport { toPoint } from '../utils/dom';\nimport { toRectangleClient } from '../utils/graph';\n\nexport function withSelection<T extends PlaitBoard>(board: T) {\n const { mousedown, mousemove, globalMouseup } = board;\n\n let start: Point | null = null;\n let end: Point | null = null;\n\n board.mousedown = (event: MouseEvent) => {\n if (isNoSelectionElement(event)) {\n mousedown(event);\n return;\n }\n if (event.target instanceof Node && board.host.contains(event.target)) {\n start = toPoint(event.x, event.y, board.host);\n }\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n const movedTarget = toPoint(event.x, event.y, board.host);\n if (start) {\n const rectangleClient = toRectangleClient([start, movedTarget]);\n if (start && Math.hypot(rectangleClient.width, rectangleClient.height) > 5) {\n end = movedTarget;\n }\n }\n mousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (isNoSelectionElement(event)) {\n return globalMouseup(event);\n }\n if (start) {\n Transforms.setSelection(board, { anchor: start, focus: start });\n } else {\n Transforms.setSelection(board, null);\n }\n start = null;\n end = null;\n\n globalMouseup(event);\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 { Selection } from '../../interfaces/selection';\nimport { Viewport } from '../../interfaces/viewport';\nimport { createG } from '../../utils/dom';\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 groupG!: SVGGElement;\n\n @Input() index!: number;\n\n @Input() element!: PlaitElement;\n\n @Input() board!: PlaitBoard;\n\n @Input() viewport!: Viewport;\n\n @Input() selection: Selection | null = null;\n\n @Input() host!: SVGElement;\n\n constructor(public renderer2: Renderer2, public viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.initialize();\n this.drawElement();\n }\n\n initialize() {\n this.initialized = true;\n this.groupG = createG();\n this.renderer2.setAttribute(this.groupG, 'plait-element-group', this.index.toString());\n this.host.append(this.groupG);\n }\n\n drawElement() {\n const gArray = this.board.drawElement({ elementInstance: this });\n gArray.forEach(g => {\n this.groupG.appendChild(g);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.initialized) {\n this.board.redrawElement({ elementInstance: this }, changes);\n }\n }\n\n ngOnDestroy(): void {\n this.board.destroyElement();\n this.groupG.remove();\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { BaseCursorStatus, CursorStatus } from '../../interfaces';\n\n@Component({\n selector: 'plait-toolbar',\n templateUrl: './toolbar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitToolbarComponent {\n _viewZoom = 100;\n\n @HostBinding('class') hostClass = `plait-board-toolbar`;\n\n @Input() cursorStatus!: CursorStatus;\n\n @Input()\n set viewZoom(zoom: number) {\n this._viewZoom = Number(((zoom ?? 1) * 100).toFixed(0));\n }\n get viewZoom() {\n return this._viewZoom;\n }\n\n @Output() moveHandle: EventEmitter<BaseCursorStatus> = new EventEmitter();\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 dragMove() {\n if (this.cursorStatus !== BaseCursorStatus.move) {\n this.moveHandle.emit(BaseCursorStatus.move);\n } else {\n this.moveHandle.emit(BaseCursorStatus.select);\n }\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': cursorStatus === 'move' }\" (click)=\"dragMove()\">\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()\">{{ viewZoom }}%</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 OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\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 { SCROLL_BAR_WIDTH } from '../constants';\nimport { BaseCursorStatus } from '../interfaces';\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 { withMove } from '../plugins/with-move';\nimport { withSelection } from '../plugins/with-selection';\nimport { Transforms } from '../transforms';\nimport {\n calculateBBox,\n calculateZoom,\n convertViewport,\n getViewportCanvasBox,\n getViewportClientBox,\n invert,\n invertViewport,\n transformMat3,\n updateCursorStatus\n} from '../utils';\nimport { BOARD_TO_ON_CHANGE, HOST_TO_ROUGH_SVG, IS_TEXT_EDITABLE, PLAIT_BOARD_TO_COMPONENT } from '../utils/weak-maps';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #container>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\"></svg>\n <plait-element\n *ngFor=\"let item of board.children; let index = index; trackBy: trackBy\"\n [index]=\"index\"\n [element]=\"item\"\n [board]=\"board\"\n [viewport]=\"board.viewport\"\n [selection]=\"board.selection\"\n [host]=\"host\"\n ></plait-element>\n </div>\n <plait-toolbar\n *ngIf=\"isFocused && !toolbarTemplateRef\"\n [cursorStatus]=\"board.cursor\"\n [viewZoom]=\"board.viewport!.zoom\"\n (moveHandle)=\"changeMoveMode($event)\"\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 OnInit, OnChanges, AfterViewInit, OnDestroy {\n hasInitialized = false;\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$: Subject<any> = new Subject();\n\n public autoFitPadding = 8;\n\n public isMoving: boolean = false;\n\n private zoom = 1;\n\n private viewportCanvasBox = {};\n\n private canvasWidth!: number;\n\n private canvasHeight!: number;\n\n private viewBox!: number[];\n\n private focusPoint: number[] = [0, 0];\n\n private matrix!: number[];\n\n private resizeObserver!: ResizeObserver;\n\n width = 0;\n\n height = 0;\n\n scrollLeft!: number;\n\n scrollTop!: number;\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 public get isMoveMode(): boolean {\n return this.board.cursor === BaseCursorStatus.move;\n }\n\n get host(): SVGElement {\n return this.svg.nativeElement;\n }\n\n get isFocused() {\n return this.board?.selection;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `plait-board-container ${this.board.cursor}`;\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.moving')\n get moving() {\n return this.board.cursor === BaseCursorStatus.move && this.isMoving;\n }\n\n @HostBinding('class.focused')\n get focused() {\n return this.isFocused;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n @ContentChild('plaitToolbar')\n public toolbarTemplateRef!: TemplateRef<any>;\n\n @ViewChild('container', { read: ElementRef, static: true })\n contentContainer!: ElementRef;\n\n constructor(public cdr: ChangeDetectorRef, private renderer2: Renderer2, private elementRef: ElementRef) {}\n\n ngOnInit(): void {\n const roughSVG = rough.svg(this.host as SVGSVGElement, { options: { roughness: 0, strokeWidth: 1 } });\n HOST_TO_ROUGH_SVG.set(this.host, roughSVG);\n this.initializePlugins();\n this.initializeEvents();\n PLAIT_BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.cdr.detectChanges();\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 if (this.board.operations.length > 0) {\n this.updateViewport();\n }\n this.plaitChange.emit(changeEvent);\n });\n this.hasInitialized = true;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) {\n this.board.children = valueChange.currentValue;\n }\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 this.initContainerSize();\n this.setViewport(1);\n this.plaitViewport ? this.initCanvas(this.plaitViewport) : this.focusGraphicCenter();\n }\n\n private initializePlugins() {\n let board = withMove(withHistory(withSelection(withBoard(createBoard(this.host, this.plaitValue, this.plaitOptions)))));\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n }\n\n private initializeEvents() {\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, '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 return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keydown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\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(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\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(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: ClipboardEvent) => {\n this.board?.insertFragment(event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n this.board?.deleteFragment(event.clipboardData);\n });\n\n fromEvent<MouseEvent>(this.contentContainer.nativeElement, 'mousemove')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !!this.isFocused;\n })\n )\n .subscribe((e: MouseEvent) => {\n this.focusPoint = [e.clientX, e.clientY];\n });\n\n fromEvent<MouseEvent>(this.contentContainer.nativeElement, 'mouseleave')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !!this.isFocused;\n })\n )\n .subscribe((e: MouseEvent) => {\n this.resetFocusPoint();\n });\n\n fromEvent<MouseEvent>(this.contentContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !!this.isFocused;\n })\n )\n .subscribe((event: Event) => {\n const scrollLeft = (event.target as HTMLElement).scrollLeft;\n const scrollTop = (event.target as HTMLElement).scrollTop;\n\n (Math.abs(this.scrollLeft - scrollLeft) <= 1 && Math.abs(this.scrollTop - scrollTop) <= 1) ||\n this.setScroll(scrollLeft, scrollTop);\n });\n this.resizeElement();\n }\n\n resizeElement() {\n this.resizeObserver = new ResizeObserver(entries => {\n for (let entry of entries) {\n const { width, height } = entry.contentRect;\n const hideScrollbar = this.board.options.hideScrollbar;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n this.width = width + scrollBarWidth;\n this.height = height + scrollBarWidth;\n this.changeSize();\n }\n });\n this.resizeObserver.observe(this.elementRef.nativeElement);\n }\n\n initContainerSize() {\n const clientBox = getViewportClientBox(this.board);\n this.width = clientBox.width;\n this.height = clientBox.height;\n this.resizeViewport();\n }\n\n resizeViewport() {\n const container = this.elementRef.nativeElement?.parentElement;\n const containerRect = container?.getBoundingClientRect();\n const hideScrollbar = this.board.options.hideScrollbar;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const width = `${containerRect.width + scrollBarWidth}px`;\n const height = `${containerRect.height + scrollBarWidth}px`;\n\n this.renderer2.setStyle(this.contentContainer.nativeElement, 'width', width);\n this.renderer2.setStyle(this.contentContainer.nativeElement, 'height', height);\n this.renderer2.setStyle(this.contentContainer.nativeElement, 'maxWidth', width);\n this.renderer2.setStyle(this.contentContainer.nativeElement, 'maxHeight', height);\n }\n\n setMatrix() {\n const viewBox = this.viewBox;\n const zoom = this.zoom;\n this.matrix = [zoom, 0, 0, 0, zoom, 0, -this.scrollLeft - zoom * viewBox[0], -this.scrollTop - zoom * viewBox[1], 1];\n }\n\n updateViewport() {\n const clientBox = getViewportClientBox(this.board);\n this.setViewport(this.board.viewport.zoom, [clientBox.x, clientBox.y]);\n }\n\n setViewport(zoom?: number, focusPoint?: number[]) {\n zoom = zoom ?? this.zoom;\n zoom = calculateZoom(zoom);\n if (zoom !== this.zoom) {\n this.zoom = zoom;\n }\n\n focusPoint = focusPoint ?? this.focusPoint;\n\n let scrollLeft;\n let scrollTop;\n const clientBox = getViewportClientBox(this.board);\n const matrix = this.matrix;\n const box = calculateBBox(this.board, zoom);\n const padding = [this.height / 2, this.width / 2];\n const rootGroupWidth = box.right - box.left;\n const rootGroupHeight = box.bottom - box.top;\n const canvasWidth = rootGroupWidth * zoom + 2 * padding[1];\n const canvasHeight = rootGroupHeight * zoom + 2 * padding[0];\n const viewBox = [box.left - padding[1] / zoom, box.top - padding[0] / zoom, canvasWidth / zoom, canvasHeight / zoom];\n\n if (matrix) {\n const canvasPoint = [focusPoint[0] - clientBox.x, focusPoint[1] - clientBox.y, 1];\n const invertMatrix = invert([], matrix);\n const matrix1 = transformMat3([], [canvasPoint[0], canvasPoint[1], 1], invertMatrix as []);\n const matrix2 = [zoom, 0, 0, 0, zoom, 0, -zoom * viewBox[0], -zoom * viewBox[1], 1];\n const newMatrix = transformMat3([], matrix1, matrix2);\n\n scrollLeft = newMatrix[0] - canvasPoint[0];\n scrollTop = newMatrix[1] - canvasPoint[1];\n } else {\n scrollLeft = (canvasWidth - clientBox.width) / 2;\n scrollTop = padding[0] / 2 - box.top;\n }\n\n this.canvasWidth = canvasWidth;\n this.canvasHeight = canvasHeight;\n this.zoom = zoom;\n this.viewBox = viewBox;\n this.setScrollLeft(scrollLeft);\n this.setScrollTop(scrollTop);\n this.change();\n }\n\n setScrollLeft(left: number) {\n const hideScrollbar = this.board.options.hideScrollbar;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const width = this.canvasWidth - this.width + scrollBarWidth;\n this.scrollLeft = left < 0 ? 0 : left > width ? width : left;\n }\n\n setScrollTop(top: number) {\n const hideScrollbar = this.board.options.hideScrollbar;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const height = this.canvasHeight - this.height + scrollBarWidth;\n this.scrollTop = top < 0 ? 0 : top > height ? height : top;\n }\n\n setScroll(left: number, top: number) {\n this.setScrollLeft(left);\n this.setScrollTop(top);\n this.change();\n }\n\n moveTo(point: number[], zoom: number) {\n zoom = zoom ?? this.zoom;\n const r = invertViewport([0, 0], this.matrix);\n this.setScroll(this.scrollLeft + (point[0] - r[0]) * zoom, this.scrollTop + (point[1] - r[1]) * zoom);\n }\n\n scrollIntoView(node: { x: number; y: number; width: number; height: number }) {\n const canvasRect = this.host.getBoundingClientRect();\n\n if (!(canvasRect.width <= this.width && canvasRect.height <= this.height)) {\n const point = convertViewport([node.x, node.y], this.matrix);\n const fullPoint = convertViewport([node.x + node.width, node.y + node.height], this.matrix);\n const width = this.width;\n const height = this.height;\n let left = this.scrollLeft;\n let top = this.scrollTop;\n\n if (fullPoint[0] > width - SCROLL_BAR_WIDTH) {\n left += fullPoint[0] - width + SCROLL_BAR_WIDTH;\n }\n if (fullPoint[1] > height - SCROLL_BAR_WIDTH) {\n top += fullPoint[1] - height + SCROLL_BAR_WIDTH;\n }\n (left === this.scrollLeft && top === this.scrollTop) || this.setScroll(left, top);\n }\n }\n\n change() {\n this.resizeViewport();\n this.renderer2.setStyle(this.host, 'display', 'block');\n this.renderer2.setStyle(this.host, 'width', `${this.canvasWidth}px`);\n this.renderer2.setStyle(this.host, 'height', `${this.canvasHeight}px`);\n if (this.viewBox && this.viewBox[2] > 0 && this.viewBox[3] > 0) {\n this.renderer2.setAttribute(this.host, 'viewBox', this.viewBox.join(','));\n }\n\n this.contentContainer.nativeElement.scrollLeft = this.scrollLeft;\n this.contentContainer.nativeElement.scrollTop = this.scrollTop;\n\n this.setMatrix();\n this.setViewportSetting();\n this.viewportCanvasBox = getViewportCanvasBox(this.board, this.matrix);\n }\n\n restoreCanvasPoint(point: number[], zoom?: number) {\n zoom = zoom ?? this.zoom;\n this.setViewport(zoom);\n this.moveTo(point, zoom);\n }\n\n initCanvas(viewport: Viewport) {\n const canvasPoint = viewport?.canvasPoint;\n\n if (canvasPoint) {\n this.restoreCanvasPoint(canvasPoint, viewport.zoom);\n } else {\n this.setViewport(viewport.zoom);\n this.setScroll(this.scrollLeft, this.scrollTop);\n }\n }\n\n focusGraphicCenter() {\n const rootGroup = this.board.host.firstChild;\n const rootGroupBox = (rootGroup as SVGGraphicsElement).getBBox();\n this.focus([rootGroupBox.x + rootGroupBox.width / 2, rootGroupBox.y + rootGroupBox.height / 2]);\n this.change();\n this.setViewport(1);\n }\n\n focus(point: number[]) {\n const clientBox = getViewportClientBox(this.board);\n const matrix = transformMat3([], [point[0], point[1], 1], this.matrix);\n const newPoint = [clientBox.width / 2, clientBox.height / 2];\n const scrollLeft = newPoint[0] - matrix[0];\n const scrollTop = newPoint[1] - matrix[1];\n\n this.setScrollLeft(this.scrollLeft - scrollLeft);\n this.setScrollTop(this.scrollTop - scrollTop);\n this.setMatrix();\n }\n\n resetFocusPoint() {\n const clientBox = getViewportClientBox(this.board);\n this.focusPoint = [clientBox.x + clientBox.width / 2, clientBox.y + clientBox.height / 2];\n }\n\n setViewportSetting() {\n const viewport = this.board?.viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n zoom: this.zoom,\n canvasPoint: invertViewport([0, 0], this.matrix)\n });\n }\n\n changeSize() {\n this.updateViewport();\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return index;\n };\n\n // 拖拽模式\n changeMoveMode(cursorStatus: BaseCursorStatus) {\n updateCursorStatus(this.board, cursorStatus);\n this.cdr.markForCheck();\n }\n\n // 适应画布\n adaptHandle() {\n const clientBox = getViewportClientBox(this.board);\n const rootGroup = this.host.firstChild;\n const rootGroupBox = (rootGroup as SVGGraphicsElement).getBBox();\n const viewportWidth = clientBox.width - 2 * this.autoFitPadding;\n const viewportHeight = clientBox.height - 2 * this.autoFitPadding;\n\n let zoom = this.zoom;\n if (viewportWidth < rootGroupBox.width || viewportHeight < rootGroupBox.height) {\n zoom = Math.min(viewportWidth / rootGroupBox.width, viewportHeight / rootGroupBox.height);\n } else {\n zoom = 1;\n }\n this.focus([rootGroupBox.x + rootGroupBox.width / 2, rootGroupBox.y + rootGroupBox.height / 2]);\n this.resetFocusPoint();\n this.setViewport(zoom);\n }\n\n // 放大\n zoomInHandle() {\n this.setViewport(this.zoom + 0.1);\n }\n\n // 缩小\n zoomOutHandle() {\n this.setViewport(this.zoom - 0.1);\n }\n\n resetZoomHandel() {\n this.setViewport(1);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n HOST_TO_ROUGH_SVG.delete(this.host);\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n }\n\n movingChange(isMoving: boolean) {\n this.isMoving = isMoving;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { PlaitBoardComponent } from './board/board.component';\nimport { PlaitElementComponent } from './core/element/element.component';\nimport { PlaitToolbarComponent } from './core/toolbar/toolbar.component';\n\nconst COMPONENTS = [PlaitBoardComponent, PlaitElementComponent, PlaitToolbarComponent];\n\n@NgModule({\n declarations: [...COMPONENTS],\n imports: [BrowserModule],\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/base/detector';\nexport * from './core/element/element.component';\nexport * from './core/toolbar/toolbar.component';\nexport * from './interfaces';\nexport * from './plait.module';\nexport * from './transforms';\nexport * from './utils';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PlaitElementComponent","i2.PlaitToolbarComponent","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plait-core.mjs","sources":["../../../packages/plait/src/constants/index.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/transforms/index.ts","../../../packages/plait/src/utils/weak-maps.ts","../../../packages/plait/src/plugins/create-board.ts","../../../packages/plait/src/plugins/with-board.ts","../../../packages/plait/src/interfaces/operation.ts","../../../packages/plait/src/interfaces/history.ts","../../../packages/plait/src/utils/board.ts","../../../packages/plait/src/utils/dom.ts","../../../packages/plait/src/utils/environment.ts","../../../packages/plait/src/utils/graph.ts","../../../packages/plait/src/utils/history.ts","../../../packages/plait/src/utils/hotkeys.ts","../../../packages/plait/src/utils/id-creator.ts","../../../packages/plait/src/utils/math.ts","../../../packages/plait/src/utils/matrix.ts","../../../packages/plait/src/plugins/with-history.ts","../../../packages/plait/src/transforms/board.ts","../../../packages/plait/src/plugins/with-hand.ts","../../../packages/plait/src/plugins/with-selection.ts","../../../packages/plait/src/core/element/element.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/core/element/before-context-change.ts","../../../packages/plait/src/core/element/plugin-element.ts","../../../packages/plait/src/plait.module.ts","../../../packages/plait/src/public-api.ts","../../../packages/plait/src/plait-core.ts"],"sourcesContent":["export const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';\nexport const SCROLL_BAR_WIDTH = 20;\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","import { isNullOrUndefined } from '../utils/helper';\nimport { ExtendedType } from './custom-types';\n\nexport interface BaseViewport {\n [key: string]: any;\n zoom: number;\n viewBackgroundColor: string;\n // viewportContainer 左上角在 SVG 坐标系中的位置\n originationCoord?: number[];\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 (\n !isNullOrUndefined(value.zoom) && !isNullOrUndefined(value.viewBackgroundColor) && !isNullOrUndefined(value.originationCoord)\n );\n }\n};\n","import produce from 'immer';\nimport { PlaitOperation } from './operation';\n\nexport type Path = number[];\n\nexport const Path = {\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 /**\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 { PlaitBoard } from './board';\nimport { Path } from './path';\n\nexport interface PlaitNode {\n [key: string]: any;\n children?: PlaitNode[];\n}\n\nexport type Ancestor = PlaitBoard | PlaitNode;\n\nexport interface PlaitNodeInterface {\n parent: (board: PlaitBoard, path: Path) => Ancestor;\n get: (board: PlaitBoard, path: Path) => PlaitNode;\n}\n\nexport const PlaitNode: PlaitNodeInterface = {\n parent: (board: PlaitBoard, path: Path) => {\n const parentPath = Path.parent(path);\n const p = PlaitNode.get(board, parentPath);\n return p;\n },\n get(board: PlaitBoard, path: Path): Ancestor {\n let node: PlaitBoard | PlaitNode = board;\n\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n\n node = node.children[p];\n }\n\n return node;\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.anchor = newProperties.anchor;\n selection.focus = newProperties.focus;\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';\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}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection\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 { GeneralTransforms } from './general';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\n\nexport const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms\n};\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { PlaitBoard } from '../interfaces/board';\n\n// record richtext type status\nexport const FLUSHING: WeakMap<PlaitBoard, boolean> = new WeakMap();\n\nexport const IS_TEXT_EDITABLE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ON_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const HOST_TO_ROUGH_SVG = new WeakMap<SVGElement, RoughSVG>();\n\nexport const PLAIT_BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();","import { SimpleChanges, ViewContainerRef } from '@angular/core';\nimport { 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(host: SVGElement, children: PlaitElement[], options: PlaitBoardOptions): PlaitBoard {\n const board: PlaitBoard = {\n host,\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 allowClearBoard: 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 globalMouseup: (event: MouseEvent) => {},\n mousemove: (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 };\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 { PlaitNode } from './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","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 { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\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 } = board.host.getBoundingClientRect();\n const viewBox = (board.host as SVGSVGElement).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 isNoSelectionElement(e: Event) {\n return (e.target as HTMLElement)?.closest('.plait-board-attached');\n}\n","import { Point } from 'roughjs/bin/geometry';\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","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 { RectangleClient } from '../interfaces/graph';\nimport { Point } from '../interfaces/point';\n\nexport function toRectangleClient(points: [Point, Point]): RectangleClient {\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","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","// 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}","import { SCROLL_BAR_WIDTH } from '../constants';\nimport { PlaitBoard } from '../interfaces';\n\n/**\n * 逆矩阵\n * [a c e]\n * [b d f]\n * [0 0 1]\n * @param newMatrix 输出返回矩阵\n * @param matrix 新矩阵\n * @returns 逆矩阵\n */\nexport function invertMatrix(newMatrix: number[], matrix: number[]) {\n const [n, r, a, i, o, c, l, s, u] = matrix;\n const determinant = u * o - c * s;\n const h = -u * i + c * l;\n const f = s * i - o * l;\n const product = n * determinant + r * h + a * f;\n\n if (!product) {\n return null;\n }\n\n const reciprocal = 1 / product;\n newMatrix[0] = determinant * reciprocal;\n newMatrix[1] = (-u * r + a * s) * reciprocal;\n newMatrix[2] = (c * r - a * o) * reciprocal;\n newMatrix[3] = h * reciprocal;\n newMatrix[4] = (u * n - a * l) * reciprocal;\n newMatrix[5] = (-c * n + a * i) * reciprocal;\n newMatrix[6] = f * reciprocal;\n newMatrix[7] = (-s * n + r * l) * reciprocal;\n newMatrix[8] = (o * n - r * i) * reciprocal;\n\n return newMatrix;\n}\n\n/**\n * 将视图坐标与反转矩阵相乘,以得到原始坐标\n * 使用给定的矩阵进行转换\n * 矩阵与向量乘法,3 维向量与3x3矩阵的乘积\n * [m11 m12 m13][v1]\n * [m21 m22 m23][v2]\n * [m31 m32 m33][v3]\n * @param out 输出结果向量\n * @param t 要转换的向量\n * @param n 矩阵转换\n * @returns [v1 * m11 + v2 * m12 + v3 * m13, v1 * m21 + v2 * m22 + v3 * m23, v1 * m31 + v2 * m32 + v3 * m33];\n */\nexport function transformMat3(out: number[], vector: number[], matrix: number[]) {\n out = [\n vector[0] * matrix[0] + vector[1] * matrix[3] + vector[2] * matrix[6],\n vector[0] * matrix[1] + vector[1] * matrix[4] + vector[2] * matrix[7],\n vector[0] * matrix[2] + vector[1] * matrix[5] + vector[2] * matrix[8]\n ];\n return out;\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\n/**\n * 将一个点坐标反转回它的原始坐标\n * @param point 表示要反转的点的视图坐标,它是一个长度为 2 的数组,存储点的 x 和 y 坐标\n * @param matrix 表示视图矩阵,是在视图中对图形进行缩放和平移时使用的矩阵\n * @returns 最终结果是一个长度为 3 的数组,存储点的 x,y 和 w 坐标(w 坐标是点的齐次坐标)\n */\nexport function invertViewportCoordinates(point: number[], matrix: number[]) {\n const { x, y } = normalizePoint(point);\n const invertedMatrix = invertMatrix([], matrix);\n return transformMat3([], [x, y, 1], invertedMatrix as []);\n}\n\nexport function convertToViewportCoordinates(point: number[], matrix: number[]) {\n const { x, y } = normalizePoint(point);\n return transformMat3([], [x, y, 1], matrix);\n}\n\n/**\n * 获取 contentContainer 的 clientBox\n * @param board\n * @returns\n */\nexport function getViewportContainerBox(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const container = board.host?.parentElement as HTMLElement;\n const containerRect = container?.getBoundingClientRect();\n const x = containerRect.x || containerRect.left;\n const y = containerRect.y || containerRect.top;\n const width = containerRect.width - scrollBarWidth;\n const height = containerRect.height - scrollBarWidth;\n\n return {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height,\n x,\n y,\n width,\n height\n };\n}\n\n/**\n * 获取 board.plait-board 的 clientBox\n * @param board\n * @returns\n */\nexport function getBoardClientBox(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const boardEl = board.host?.parentElement?.parentElement as HTMLElement;\n const elRect = boardEl?.getBoundingClientRect();\n\n return {\n width: elRect.width + scrollBarWidth,\n height: elRect.height + scrollBarWidth\n };\n}\n\n/**\n * 获取 rootGroup 相对于当前 svg 空间的最小矩阵坐标\n */\nexport function getRootGroupBBox(board: PlaitBoard, zoom: number) {\n const rootGroup = board.host.firstChild as SVGGraphicsElement;\n const rootGroupBox = rootGroup.getBBox();\n const viewportContainerBox = getViewportContainerBox(board);\n const containerWidth = viewportContainerBox.width / zoom;\n const containerHeight = viewportContainerBox.height / zoom;\n let left: number;\n let right: number;\n let top: number;\n let bottom: number;\n\n if (rootGroupBox.width < containerWidth) {\n const offsetX = rootGroupBox.x + rootGroupBox.width / 2;\n const containerX = containerWidth / 2;\n left = offsetX - containerX;\n right = offsetX + containerX;\n } else {\n left = rootGroupBox.x;\n right = rootGroupBox.x + rootGroupBox.width;\n }\n if (rootGroupBox.height < containerHeight) {\n const offsetY = rootGroupBox.y + rootGroupBox.height / 2;\n const containerY = containerHeight / 2;\n top = offsetY - containerY;\n bottom = offsetY + containerY;\n } else {\n top = rootGroupBox.y;\n bottom = rootGroupBox.y + rootGroupBox.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","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 { PlaitBoard } from \"../interfaces/board\";\nimport { PlaitPointerType } from \"../interfaces/pointer\";\nimport { PLAIT_BOARD_TO_COMPONENT } from \"../utils\";\n\nexport const updatePointerType = (board: PlaitBoard, pointer: PlaitPointerType) => {\n board.pointer = pointer;\n const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board);\n boardComponent?.markForCheck();\n};\n\n","import { PlaitBoardComponent } from '../board/board.component';\nimport { PlaitPointerType, PlaitBoard, PlaitBoardMove } from '../interfaces';\nimport { updatePointerType } from '../transforms/board';\nimport { PLAIT_BOARD_TO_COMPONENT } from '../utils';\n\nexport function withHandPointer<T extends PlaitBoard>(board: T) {\n const { mousedown, mousemove, globalMouseup, keydown, keyup } = board;\n\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 const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board) as PlaitBoardComponent;\n boardComponent.movingChange(true);\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n boardComponent.cdr.markForCheck();\n }\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board) as PlaitBoardComponent;\n if (board.pointer === PlaitPointerType.hand && board.selection && boardComponent.isMoving) {\n const left = event.x - plaitBoardMove.x;\n const top = event.y - plaitBoardMove.y;\n const { scrollLeft, scrollTop } = boardComponent.viewportState;\n boardComponent.setScroll(scrollLeft! - left, scrollTop! - top);\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 const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board) as PlaitBoardComponent;\n boardComponent.movingChange(false);\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 const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board) as PlaitBoardComponent;\n boardComponent.cdr.markForCheck();\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 const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board) as PlaitBoardComponent;\n boardComponent.cdr.markForCheck();\n }\n keyup(event);\n };\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { isNoSelectionElement } from '../utils/board';\nimport { toPoint } from '../utils/dom';\nimport { toRectangleClient } from '../utils/graph';\n\nexport function withSelection<T extends PlaitBoard>(board: T) {\n const { mousedown, mousemove, globalMouseup } = board;\n\n let start: Point | null = null;\n let end: Point | null = null;\n\n board.mousedown = (event: MouseEvent) => {\n if (isNoSelectionElement(event)) {\n mousedown(event);\n return;\n }\n if (event.target instanceof Node && board.host.contains(event.target)) {\n start = toPoint(event.x, event.y, board.host);\n }\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n const movedTarget = toPoint(event.x, event.y, board.host);\n if (start) {\n const rectangleClient = toRectangleClient([start, movedTarget]);\n if (start && Math.hypot(rectangleClient.width, rectangleClient.height) > 5) {\n end = movedTarget;\n }\n }\n mousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (isNoSelectionElement(event)) {\n return globalMouseup(event);\n }\n if (start) {\n Transforms.setSelection(board, { anchor: start, focus: start });\n } else {\n if (board.selection !== null) {\n Transforms.setSelection(board, null);\n }\n }\n start = null;\n end = null;\n\n globalMouseup(event);\n };\n\n return board;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewContainerRef\n} from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { Selection } from '../../interfaces/selection';\nimport { Viewport } from '../../interfaces/viewport';\nimport { createG } from '../../utils/dom';\nimport { PlaitPluginElementContext } from './context';\nimport { PlaitPluginElementComponent } from './plugin-element';\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 gGroup!: SVGGElement;\n\n instance?: PlaitPluginElementComponent<PlaitElement>;\n\n context?: PlaitPluginElementContext;\n\n @Input() index!: number;\n\n @Input() element!: PlaitElement;\n\n @Input() board!: PlaitBoard;\n\n @Input() viewport!: Viewport;\n\n @Input() selection: Selection | null = null;\n\n @Input() host!: SVGElement;\n\n constructor(public renderer2: Renderer2, public viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.initialize();\n this.drawElement();\n }\n\n initialize() {\n this.initialized = true;\n this.gGroup = createG();\n this.renderer2.setAttribute(this.gGroup, 'plait-element-group', this.index.toString());\n this.host.append(this.gGroup);\n }\n\n drawElement() {\n const context = this.getContext();\n const result = this.board.drawElement(context.current);\n if (Array.isArray(result)) {\n result.forEach(g => {\n this.gGroup.appendChild(g);\n });\n } else {\n const componentRef = this.viewContainerRef.createComponent(result);\n const instance = componentRef.instance;\n instance.context = context.current;\n this.gGroup.appendChild(instance.g);\n this.instance = instance;\n }\n }\n\n ngOnChanges(): void {\n if (this.initialized) {\n const context = this.getContext();\n if (this.instance) {\n this.instance.context = context.current;\n }\n const result = this.board.redrawElement(context.current, context.previous);\n if (result && result.length > 0) {\n this.gGroup.childNodes.forEach(g => g.remove());\n result.forEach(g => {\n this.gGroup.appendChild(g);\n });\n }\n }\n }\n\n getContext(): { current: PlaitPluginElementContext; previous?: PlaitPluginElementContext } {\n const current = {\n element: this.element,\n selection: this.selection,\n board: this.board,\n host: this.host\n };\n if (this.context) {\n const previous = { ...this.context };\n this.context = current;\n return { current, previous };\n } else {\n return { current };\n }\n }\n\n ngOnDestroy(): void {\n this.gGroup.remove();\n this.board.destroyElement(this.getContext().current);\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 pointerType() {\n return this.board.pointer || PlaitPointerType.selection;\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.pointerType === PlaitPointerType.hand ? 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': pointerType === PlaitPointerType.hand}\" (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 OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\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 { SCROLL_BAR_WIDTH } from '../constants';\nimport { PlaitBoard, PlaitBoardChangeEvent, PlaitBoardOptions, PlaitBoardViewport } 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 { Transforms } from '../transforms';\nimport {\n getRootGroupBBox,\n clampZoomLevel,\n convertToViewportCoordinates,\n getViewportContainerBox,\n invertViewportCoordinates,\n transformMat3,\n getBoardClientBox\n} from '../utils';\nimport { BOARD_TO_ON_CHANGE, HOST_TO_ROUGH_SVG, IS_TEXT_EDITABLE, PLAIT_BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from './board.component.interface';\nimport { RectangleClient } from '../interfaces/graph';\nimport { PlaitPointerType } from '../interfaces/pointer';\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;\"></svg>\n <plait-element\n *ngFor=\"let item of board.children; let index = index; trackBy: trackBy\"\n [index]=\"index\"\n [element]=\"item\"\n [board]=\"board\"\n [selection]=\"board.selection\"\n [host]=\"host\"\n ></plait-element>\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 board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$: Subject<any> = new Subject();\n\n viewportState: PlaitBoardViewport = {\n zoom: 1,\n autoFitPadding: 8,\n scrollBarWidth: SCROLL_BAR_WIDTH\n };\n\n public isMoving = false;\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(): SVGElement {\n return this.svg.nativeElement;\n }\n\n get isFocused() {\n return this.board?.selection;\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.moving')\n get moving() {\n return this.board.pointer === PlaitPointerType.hand && this.isMoving;\n }\n\n @HostBinding('class.focused')\n get focused() {\n return this.isFocused;\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 renderer2: Renderer2, private elementRef: ElementRef) {}\n\n ngOnInit(): void {\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n HOST_TO_ROUGH_SVG.set(this.host, roughSVG);\n this.initializePlugins();\n this.initializeEvents();\n PLAIT_BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.cdr.detectChanges();\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 ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) {\n this.board.children = valueChange.currentValue;\n }\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 this.initViewportContainer();\n this.calcViewBox(this.viewportState.zoom);\n this.initViewport();\n }\n\n private initializePlugins() {\n let board = withHandPointer(withHistory(withSelection(withBoard(createBoard(this.host, this.plaitValue, this.plaitOptions)))));\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 const scrollBarWidth = this.plaitOptions?.hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n this.updateViewportState({\n scrollBarWidth,\n zoom: this.board.viewport?.zoom ?? 1\n });\n }\n\n private initializeEvents() {\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, '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 return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keydown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\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(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\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(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: ClipboardEvent) => {\n this.board?.insertFragment(event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n this.board?.deleteFragment(event.clipboardData);\n });\n\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !!this.isFocused;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n const left = this.viewportState.scrollLeft!;\n const top = this.viewportState.scrollTop!;\n if (Math.abs(left - scrollLeft) >= 1 || Math.abs(top - scrollTop) >= 1) {\n this.setScrollLeft(scrollLeft);\n this.setScrollTop(scrollTop);\n this.setViewport();\n }\n });\n this.resizeElement();\n }\n\n resizeElement() {\n this.resizeObserver = new ResizeObserver(entries => {\n for (let entry of entries) {\n this.initViewportContainer();\n this.calcViewBox(this.board.viewport.zoom);\n this.updateViewBoxStyles();\n this.updateViewportScrolling();\n this.setViewport();\n }\n });\n this.resizeObserver.observe(this.elementRef.nativeElement);\n }\n\n private updateViewportState(state: Partial<PlaitBoardViewport>) {\n this.viewportState = {\n ...this.viewportState,\n ...state\n };\n }\n\n initViewportContainer() {\n const { width, height } = getBoardClientBox(this.board);\n this.renderer2.setStyle(this.viewportContainer.nativeElement, 'width', `${width}px`);\n this.renderer2.setStyle(this.viewportContainer.nativeElement, 'height', `${height}px`);\n }\n\n initViewport() {\n const viewport = this.board.viewport;\n const originationCoord = viewport?.originationCoord;\n const zoom = viewport?.zoom ?? this.viewportState.zoom;\n\n if (originationCoord) {\n const matrix = this.getMatrix();\n const [pointX, pointY] = invertViewportCoordinates([0, 0], matrix);\n const scrollLeft = this.viewportState.scrollLeft!;\n const scrollTop = this.viewportState.scrollTop!;\n const left = scrollLeft + (originationCoord[0] - pointX) * zoom;\n const top = scrollTop + (originationCoord[1] - pointY) * zoom;\n this.setScroll(left, top);\n } else {\n this.adaptHandle();\n }\n }\n\n calcViewBox(zoom = this.viewportState.zoom) {\n zoom = clampZoomLevel(zoom);\n\n const scrollBarWidth = this.viewportState.scrollBarWidth;\n const viewportContainerBox = getViewportContainerBox(this.board);\n const groupBBox = getRootGroupBBox(this.board, zoom);\n const horizontalPadding = viewportContainerBox.width / 2;\n const verticalPadding = viewportContainerBox.height / 2;\n const viewportWidth = (groupBBox.right - groupBBox.left) * zoom + 2 * horizontalPadding + scrollBarWidth;\n const viewportHeight = (groupBBox.bottom - groupBBox.top) * zoom + 2 * verticalPadding + scrollBarWidth;\n\n const viewBox = [\n groupBBox.left - horizontalPadding / zoom,\n groupBBox.top - verticalPadding / zoom,\n viewportWidth / zoom,\n viewportHeight / zoom\n ];\n const matrix = this.getMatrix();\n let scrollLeft;\n let scrollTop;\n\n if (matrix.length > 0) {\n // focusPoint\n const focusX = viewportContainerBox.x + viewportContainerBox.width / 2;\n const focusY = viewportContainerBox.y + viewportContainerBox.height / 2;\n const viewportContainerPoint = [focusX - viewportContainerBox.x, focusY - viewportContainerBox.y, 1];\n const point = invertViewportCoordinates([viewportContainerPoint[0], viewportContainerPoint[1]], matrix);\n const newMatrix = [zoom, 0, 0, 0, zoom, 0, -zoom * viewBox[0], -zoom * viewBox[1], 1];\n const newPoint = transformMat3([], point, newMatrix);\n\n scrollLeft = newPoint[0] - viewportContainerPoint[0];\n scrollTop = newPoint[1] - viewportContainerPoint[1];\n } else {\n scrollLeft = horizontalPadding;\n scrollTop = verticalPadding;\n }\n this.updateViewportState({\n viewportWidth,\n viewportHeight,\n zoom,\n viewBox\n });\n this.setScrollLeft(scrollLeft);\n this.setScrollTop(scrollTop);\n }\n\n getMatrix(): number[] {\n const { viewBox, zoom, scrollLeft, scrollTop } = this.viewportState;\n if (scrollLeft! >= 0 && scrollTop! >= 0) {\n return [zoom, 0, 0, 0, zoom, 0, -scrollLeft! - zoom * viewBox![0], -scrollTop! - zoom * viewBox![1], 1];\n }\n return [];\n }\n\n setScrollLeft(left: number) {\n const viewportContainerBox = getViewportContainerBox(this.board);\n const { viewportWidth, scrollBarWidth } = this.viewportState;\n const width = viewportWidth! - viewportContainerBox.width + scrollBarWidth;\n this.viewportState.scrollLeft = left < 0 ? 0 : left > width ? width : left;\n }\n\n setScrollTop(top: number) {\n const viewportContainerBox = getViewportContainerBox(this.board);\n const { viewportHeight, scrollBarWidth } = this.viewportState;\n const height = viewportHeight! - viewportContainerBox.height + scrollBarWidth;\n this.viewportState.scrollTop = top < 0 ? 0 : top > height ? height : top;\n }\n\n setScroll(left: number, top: number) {\n this.setScrollLeft(left);\n this.setScrollTop(top);\n this.updateViewBoxStyles();\n this.updateViewportScrolling();\n this.setViewport();\n }\n\n private updateViewBoxStyles() {\n const { host, viewportState } = this;\n const { viewportWidth, viewportHeight, viewBox } = viewportState;\n\n this.renderer2.setStyle(host, 'display', 'block');\n this.renderer2.setStyle(host, 'width', `${viewportWidth}px`);\n this.renderer2.setStyle(host, 'height', `${viewportHeight}px`);\n\n if (viewBox && viewBox[2] > 0 && viewBox[3] > 0) {\n this.renderer2.setAttribute(host, 'viewBox', viewBox.join(' '));\n }\n }\n\n private updateViewportScrolling() {\n const { viewportContainer, viewportState } = this;\n const { scrollLeft, scrollTop } = viewportState;\n viewportContainer.nativeElement.scrollLeft = scrollLeft!;\n viewportContainer.nativeElement.scrollTop = scrollTop!;\n }\n\n setViewport() {\n const viewport = this.board?.viewport;\n const oldOriginationCoord = viewport?.originationCoord ?? [];\n const matrix = this.getMatrix();\n const originationCoord = invertViewportCoordinates([0, 0], matrix);\n\n if (!originationCoord.every((item, index) => item === oldOriginationCoord[index])) {\n Transforms.setViewport(this.board, {\n ...viewport,\n zoom: this.viewportState.zoom,\n originationCoord\n });\n }\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return index;\n };\n\n adaptHandle() {\n const containerBox = getViewportContainerBox(this.board);\n const rootGroup = this.host.firstChild as SVGGraphicsElement;\n const matrix = this.getMatrix();\n\n const rootGroupBox = rootGroup.getBBox();\n const centerPoint = [containerBox.width / 2, containerBox.height / 2];\n const rootGroupCenterX = rootGroupBox.x + rootGroupBox.width / 2;\n const rootGroupCenterY = rootGroupBox.y + rootGroupBox.height / 2;\n const transformedPoint = transformMat3([], [rootGroupCenterX, rootGroupCenterY, 1], matrix);\n\n const offsetLeft = centerPoint[0] - transformedPoint[0];\n const offsetTop = centerPoint[1] - transformedPoint[1];\n\n const { autoFitPadding, zoom, scrollLeft, scrollTop } = this.viewportState;\n const viewportWidth = containerBox.width - 2 * autoFitPadding;\n const viewportHeight = containerBox.height - 2 * autoFitPadding;\n let newZoom = zoom;\n if (viewportWidth < rootGroupBox.width || viewportHeight < rootGroupBox.height) {\n newZoom = Math.min(viewportWidth / rootGroupBox.width, viewportHeight / rootGroupBox.height);\n } else {\n newZoom = 1;\n }\n\n this.setScrollLeft(scrollLeft! - offsetLeft);\n this.setScrollTop(scrollTop! - offsetTop);\n this.calcViewBox(newZoom);\n this.updateViewBoxStyles();\n this.updateViewportScrolling();\n this.setViewport();\n }\n\n zoomInHandle() {\n this.calcViewBox(this.viewportState.zoom + 0.1);\n this.updateViewBoxStyles();\n this.updateViewportScrolling();\n this.setViewport();\n }\n\n zoomOutHandle() {\n this.calcViewBox(this.viewportState.zoom - 0.1);\n this.updateViewBoxStyles();\n this.updateViewportScrolling();\n this.setViewport();\n }\n\n resetZoomHandel() {\n this.calcViewBox(1);\n this.updateViewBoxStyles();\n this.updateViewportScrolling();\n this.setViewport();\n }\n\n movingChange(isMoving: boolean) {\n this.isMoving = isMoving;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n HOST_TO_ROUGH_SVG.delete(this.host);\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n\n scrollToRectangle(client: RectangleClient) {\n this.calcViewBox();\n this.updateViewBoxStyles();\n this.updateViewportScrolling();\n this.setViewport();\n\n const svgRect = this.host.getBoundingClientRect();\n const viewportContainerBox = getViewportContainerBox(this.board);\n\n if (svgRect.width > viewportContainerBox.width || svgRect.height > viewportContainerBox.height) {\n const matrix = this.getMatrix();\n const scrollBarWidth = this.viewportState.scrollBarWidth;\n const [nodePointX, nodePointY] = convertToViewportCoordinates([client.x, client.y], matrix);\n const [fullNodePointX, fullNodePointY] = convertToViewportCoordinates(\n [client.x + client.width, client.y + client.height],\n matrix\n );\n\n let newLeft = this.viewportState.scrollLeft!;\n let newTop = this.viewportState.scrollTop!;\n\n if (nodePointX < 0) {\n newLeft -= Math.abs(nodePointX);\n }\n if (nodePointX > 0 && fullNodePointX > viewportContainerBox.width) {\n newLeft += fullNodePointX - viewportContainerBox.width + scrollBarWidth;\n }\n\n if (nodePointY < 0) {\n newTop -= Math.abs(nodePointY);\n }\n if (nodePointY > 0 && fullNodePointY > viewportContainerBox.height) {\n newTop += fullNodePointY - viewportContainerBox.height + scrollBarWidth;\n }\n\n if (newLeft !== this.viewportState.scrollLeft! || newTop !== this.viewportState.scrollTop!) {\n this.setScroll(newLeft, newTop);\n }\n }\n }\n}\n","import { PlaitElement } from \"../../interfaces\";\nimport { PlaitPluginElementContext } from \"./context\";\n\nexport interface BeforeContextChange<T extends PlaitElement = PlaitElement> {\n beforeContextChange: (value: PlaitPluginElementContext<T>) => void;\n}\n\nexport function hasBeforeContextChange<T extends PlaitElement = PlaitElement>(value: any): value is BeforeContextChange<T> {\n if (value.beforeContextChange) {\n return true;\n }\n return false;\n}\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitElement, PlaitPluginElementContext } from '../../interfaces';\nimport { createG } from '../../utils/dom';\nimport { hasBeforeContextChange } from './before-context-change';\n\n@Directive()\nexport abstract class PlaitPluginElementComponent<T extends PlaitElement = PlaitElement> implements OnInit, OnDestroy {\n g: SVGGElement;\n\n initialized = false;\n\n protected _context!: PlaitPluginElementContext<T>;\n\n @Input()\n set context(value: PlaitPluginElementContext<T>) {\n if (hasBeforeContextChange<T>(this)) {\n this.beforeContextChange(value);\n }\n this._context = value;\n if (this.element) {\n ELEMENT_TO_PLUGIN_COMPONENT.set(this.element, this);\n }\n this.onContextChange();\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 selection() {\n return this.context && this.context.selection;\n }\n\n get board() {\n return this.context && this.context.board;\n }\n\n get host() {\n return this.context && this.context.host;\n }\n\n constructor(public cdr: ChangeDetectorRef) {\n this.g = createG();\n }\n\n onContextChange() {\n if (!this.initialized) {\n return;\n }\n this.cdr.markForCheck();\n }\n\n ngOnInit(): void {\n const type = this.element?.type || 'default-plugin-element';\n this.g.setAttribute(`plait-${type}`, 'true');\n this.initialized = true;\n }\n\n ngOnDestroy(): void {\n ELEMENT_TO_PLUGIN_COMPONENT.delete(this.element);\n this.g.remove();\n }\n}\n\nexport const ELEMENT_TO_PLUGIN_COMPONENT = new WeakMap<PlaitElement, PlaitPluginElementComponent>();\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { PlaitBoardComponent } from './board/board.component';\nimport { PlaitElementComponent } from './core/element/element.component';\nimport { PlaitToolbarComponent } from './core/toolbar/toolbar.component';\n\nconst COMPONENTS = [PlaitBoardComponent, PlaitElementComponent, PlaitToolbarComponent];\n\n@NgModule({\n declarations: [...COMPONENTS],\n imports: [BrowserModule],\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/base/detector';\nexport * from './core/element/plugin-element';\nexport * from './core/element/element.component';\nexport * from './core/element/before-context-change';\nexport * from './core/toolbar/toolbar.component';\nexport * from './interfaces';\nexport * from './plait.module';\nexport * from './transforms';\nexport * from './utils';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PlaitElementComponent","i2.PlaitToolbarComponent","i3"],"mappings":"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"}
|