@plait/core 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"plait-core.mjs","sources":["../../../packages/plait/src/utils/weak-maps.ts","../../../packages/plait/src/utils/tree.ts","../../../packages/plait/src/utils/element.ts","../../../packages/plait/src/interfaces/theme.ts","../../../packages/plait/src/interfaces/board.ts","../../../packages/plait/src/interfaces/pointer.ts","../../../packages/plait/src/utils/helper.ts","../../../packages/plait/src/interfaces/viewport.ts","../../../packages/plait/src/interfaces/path.ts","../../../packages/plait/src/interfaces/node.ts","../../../packages/plait/src/transforms/general.ts","../../../packages/plait/src/transforms/node.ts","../../../packages/plait/src/transforms/selection.ts","../../../packages/plait/src/transforms/viewport.ts","../../../packages/plait/src/constants/index.ts","../../../packages/plait/src/utils/dom/common.ts","../../../packages/plait/src/utils/math.ts","../../../packages/plait/src/interfaces/custom-types.ts","../../../packages/plait/src/utils/selected-element.ts","../../../packages/plait/src/core/element/context-change.ts","../../../packages/plait/src/core/element/plugin-element.ts","../../../packages/plait/src/utils/board.ts","../../../packages/plait/src/utils/dom/foreign.ts","../../../packages/plait/src/utils/environment.ts","../../../packages/plait/src/utils/history.ts","../../../packages/plait/src/utils/hotkeys.ts","../../../packages/plait/src/utils/id-creator.ts","../../../packages/plait/src/utils/draw/rectangle.ts","../../../packages/plait/src/utils/draw/arrow.ts","../../../packages/plait/src/utils/draw/circle.ts","../../../packages/plait/src/utils/draw/line.ts","../../../packages/plait/src/utils/common.ts","../../../packages/plait/src/utils/moving-element.ts","../../../packages/plait/src/interfaces/element.ts","../../../packages/plait/src/interfaces/rectangle-client.ts","../../../packages/plait/src/interfaces/operation.ts","../../../packages/plait/src/interfaces/point.ts","../../../packages/plait/src/interfaces/selection.ts","../../../packages/plait/src/interfaces/history.ts","../../../packages/plait/src/interfaces/plugin-key.ts","../../../packages/plait/src/utils/viewport.ts","../../../packages/plait/src/transforms/theme.ts","../../../packages/plait/src/transforms/board.ts","../../../packages/plait/src/transforms/index.ts","../../../packages/plait/src/interfaces/path-ref.ts","../../../packages/plait/src/plugins/create-board.ts","../../../packages/plait/src/plugins/with-board.ts","../../../packages/plait/src/plugins/with-history.ts","../../../packages/plait/src/plugins/with-hand.ts","../../../packages/plait/src/constants/selection.ts","../../../packages/plait/src/plugins/with-selection.ts","../../../packages/plait/src/plugins/with-viewport.ts","../../../packages/plait/src/plugins/with-moving.ts","../../../packages/plait/src/plugins/with-options.ts","../../../packages/plait/src/core/island/island-base.component.ts","../../../packages/plait/src/core/element/element.component.ts","../../../packages/plait/src/core/children/children.component.ts","../../../packages/plait/src/board/board.component.ts","../../../packages/plait/src/plait.module.ts","../../../packages/plait/src/testing/core/create-board.ts","../../../packages/plait/src/testing/core/fake-weak-map.ts","../../../packages/plait/src/public-api.ts","../../../packages/plait/src/plait-core.ts"],"sourcesContent":["import { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { PathRef } from '../interfaces/path-ref';\n\n// record richtext type status\nexport const IS_BOARD_CACHE = new WeakMap<Object, boolean>();\n\nexport const FLUSHING = new WeakMap<PlaitBoard, boolean>();\n\nexport const NODE_TO_INDEX = new WeakMap<PlaitNode, number>();\n\nexport const NODE_TO_PARENT = new WeakMap<PlaitNode, Ancestor>();\n\nexport const IS_TEXT_EDITABLE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ON_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n\nexport const BOARD_TO_ROUGH_SVG = new WeakMap<PlaitBoard, RoughSVG>();\n\nexport const BOARD_TO_HOST = new WeakMap<PlaitBoard, SVGSVGElement>();\n\nexport const BOARD_TO_ELEMENT_HOST = new WeakMap<PlaitBoard, SVGGElement>();\n\nexport const BOARD_TO_SELECTED_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_POINT = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_VIEWPORT_ORIGINATION = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_IS_SELECTION_MOVING = new WeakMap<PlaitBoard, boolean>();\n\n// save no standard selected elements\nexport const BOARD_TO_TEMPORARY_ELEMENTS = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const PATH_REFS: WeakMap<PlaitBoard, Set<PathRef>> = new WeakMap();\n","export function depthFirstRecursion<T extends TreeNode = TreeNode>(node: T, callback: (node: T) => void, recursion?: (node: T) => boolean) {\n if (!recursion || recursion(node)) {\n node.children?.forEach(child => {\n depthFirstRecursion(child as T, callback, recursion);\n });\n }\n callback(node);\n}\n\nexport interface TreeNode {\n children?: TreeNode[];\n}\n","import { PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';\nimport { depthFirstRecursion } from './tree';\n\nexport function getRectangleByElements(board: PlaitBoard, elements: PlaitElement[], recursion: boolean): RectangleClient {\n const boundaryBox = {\n left: Number.MAX_VALUE,\n top: Number.MAX_VALUE,\n right: Number.NEGATIVE_INFINITY,\n bottom: Number.NEGATIVE_INFINITY\n };\n\n const calcRectangleClient = (node: PlaitElement) => {\n const nodeRectangle = board.getRectangle(node);\n if (nodeRectangle) {\n boundaryBox.left = Math.min(boundaryBox.left, nodeRectangle.x);\n boundaryBox.top = Math.min(boundaryBox.top, nodeRectangle.y);\n boundaryBox.right = Math.max(boundaryBox.right, nodeRectangle.x + nodeRectangle.width);\n boundaryBox.bottom = Math.max(boundaryBox.bottom, nodeRectangle.y + nodeRectangle.height);\n }\n };\n\n elements.forEach(element => {\n if (recursion) {\n depthFirstRecursion(\n element,\n node => calcRectangleClient(node),\n node => board.isRecursion(node)\n );\n } else {\n calcRectangleClient(element);\n }\n });\n\n if (boundaryBox.left === Number.MAX_VALUE) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n\n return {\n x: boundaryBox.left,\n y: boundaryBox.top,\n width: boundaryBox.right - boundaryBox.left,\n height: boundaryBox.bottom - boundaryBox.top\n };\n}\n\nexport function getBoardRectangle(board: PlaitBoard): RectangleClient {\n return getRectangleByElements(board, board.children, true);\n}\n","export interface PlaitTheme {\n themeColorMode: ThemeColorMode;\n}\n\nexport interface ThemeColor {\n mode: ThemeColorMode | string;\n boardBackground?: string;\n textColor: string;\n}\n\nexport enum ThemeColorMode {\n 'default' = 'default',\n 'colorful' = 'colorful',\n 'soft' = 'soft',\n 'retro' = 'retro',\n 'dark' = 'dark',\n 'starry' = 'starry'\n}\n\nexport const DefaultThemeColor: ThemeColor = {\n mode: ThemeColorMode.default,\n boardBackground: '#ffffff',\n textColor: '#333333'\n};\n\nexport const ColorfulThemeColor: ThemeColor = {\n mode: ThemeColorMode.colorful,\n boardBackground: '#ffffff',\n textColor: '#333333'\n};\n\nexport const SoftThemeColor: ThemeColor = {\n mode: ThemeColorMode.soft,\n boardBackground: '#f5f5f5',\n textColor: '#333333'\n};\n\nexport const RetroThemeColor: ThemeColor = {\n mode: ThemeColorMode.retro,\n boardBackground: '#f9f8ed',\n textColor: '#333333'\n};\n\nexport const DarkThemeColor: ThemeColor = {\n mode: ThemeColorMode.dark,\n boardBackground: '#141414',\n textColor: '#FFFFFF'\n};\n\nexport const StarryThemeColor: ThemeColor = {\n mode: ThemeColorMode.starry,\n boardBackground: '#0d2537',\n textColor: '#FFFFFF'\n};\n\nexport const ThemeColors: ThemeColor[] = [\n DefaultThemeColor,\n ColorfulThemeColor,\n SoftThemeColor,\n RetroThemeColor,\n DarkThemeColor,\n StarryThemeColor\n];\n","import { PlaitPointerType } from './pointer';\nimport { ComponentType, PlaitElement } from './element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitHistory } from './history';\nimport { PlaitOperation } from './operation';\nimport { Selection, Range } from './selection';\nimport { Viewport } from './viewport';\nimport { PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport {\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_ROUGH_SVG,\n IS_BOARD_CACHE,\n IS_TEXT_EDITABLE,\n NODE_TO_INDEX,\n NODE_TO_PARENT\n} from '../utils/weak-maps';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { Point } from './point';\nimport { RectangleClient } from './rectangle-client';\nimport { getRectangleByElements } from '../utils/element';\nimport { PathRef, PathRefOptions } from './path-ref';\nimport { Ancestor, PlaitNode } from './node';\nimport { Path } from './path';\nimport { PlaitTheme, ThemeColor, ThemeColors } from './theme';\n\nexport interface PlaitBoard {\n viewport: Viewport;\n children: PlaitElement[];\n theme: PlaitTheme;\n operations: PlaitOperation[];\n // record pointer selection or drag selection\n // it will be dirty when board viewport change\n selection: Selection | null;\n pointer: PlaitPointerType | string;\n history: PlaitHistory;\n options: PlaitBoardOptions;\n undo: () => void;\n redo: () => void;\n apply: (operation: PlaitOperation) => void;\n onChange: () => void;\n mousedown: (event: MouseEvent) => void;\n mousemove: (event: MouseEvent) => void;\n globalMousemove: (event: MouseEvent) => void;\n mouseup: (event: MouseEvent) => void;\n globalMouseup: (event: MouseEvent) => void;\n keydown: (event: KeyboardEvent) => void;\n keyup: (event: KeyboardEvent) => void;\n setFragment: (data: DataTransfer | null) => void;\n insertFragment: (data: DataTransfer | null, targetPoint?: Point) => void;\n deleteFragment: (data: DataTransfer | null) => void;\n dblclick: (event: MouseEvent) => void;\n drawElement: (context: PlaitPluginElementContext) => SVGGElement[] | ComponentType<PlaitPluginElementComponent>;\n redrawElement: (context: PlaitPluginElementContext, previousContext?: PlaitPluginElementContext) => SVGGElement[] | void;\n destroyElement: (context: PlaitPluginElementContext) => void;\n isHitSelection: (element: PlaitElement, range: Range) => boolean;\n isRecursion: (element: PlaitElement) => boolean;\n isMovable: (element: PlaitElement) => boolean;\n getRectangle: (element: PlaitElement) => RectangleClient | null;\n isWithinSelection: (element: PlaitElement) => boolean;\n pathRef: (path: Path, options?: PathRefOptions) => PathRef;\n pathRefs: () => Set<PathRef>;\n applyTheme: (element: PlaitElement) => void;\n}\n\nexport interface PlaitBoardChangeEvent {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n theme: PlaitTheme;\n}\n\nexport interface PlaitBoardOptions {\n readonly?: boolean;\n hideScrollbar?: boolean;\n disabledScrollOnNonFocus?: boolean;\n themeColors?: ThemeColor[];\n}\n\nexport interface PlaitBoardMove {\n x: number;\n y: number;\n}\n\nexport const PlaitBoard = {\n isBoard(value: any): value is PlaitBoard {\n const cachedIsBoard = IS_BOARD_CACHE.get(value);\n if (cachedIsBoard !== undefined) {\n return cachedIsBoard;\n }\n const isBoard = typeof value.onChange === 'function' && typeof value.apply === 'function';\n IS_BOARD_CACHE.set(value, isBoard);\n return isBoard;\n },\n findPath(board: PlaitBoard, node: PlaitNode): Path {\n const path: Path = [];\n let child: Ancestor = node;\n while (true) {\n const parent = NODE_TO_PARENT.get(child as PlaitElement);\n if (parent == null) {\n if (PlaitBoard.isBoard(child)) {\n return path;\n } else {\n break;\n }\n }\n const i = NODE_TO_INDEX.get(child as PlaitElement);\n if (i == null) {\n break;\n }\n path.unshift(i);\n child = parent;\n }\n throw new Error(`Unable to find the path for Plait node: ${JSON.stringify(node)}`);\n },\n getHost(board: PlaitBoard) {\n return BOARD_TO_HOST.get(board) as SVGSVGElement;\n },\n getElementHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board) as SVGGElement;\n },\n getRoughSVG(board: PlaitBoard) {\n return BOARD_TO_ROUGH_SVG.get(board) as RoughSVG;\n },\n getComponent(board: PlaitBoard) {\n return BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n },\n getBoardNativeElement(board: PlaitBoard) {\n return PlaitBoard.getComponent(board).nativeElement;\n },\n getRectangle(board: PlaitBoard) {\n return getRectangleByElements(board, board.children, true);\n },\n getViewportContainer(board: PlaitBoard) {\n return PlaitBoard.getHost(board).parentElement as HTMLElement;\n },\n isFocus(board: PlaitBoard) {\n return !!board.selection;\n },\n isReadonly(board: PlaitBoard) {\n return board.options.readonly;\n },\n hasBeenTextEditing(board: PlaitBoard) {\n return !!IS_TEXT_EDITABLE.get(board);\n },\n getPointer<T = PlaitPointerType>(board: PlaitBoard) {\n return board.pointer as T;\n },\n isPointer<T = PlaitPointerType>(board: PlaitBoard, pointer: T) {\n return board.pointer === pointer;\n },\n getMovingPoint(board: PlaitBoard) {\n return BOARD_TO_MOVING_POINT.get(board);\n },\n getThemeColors<T extends ThemeColor = ThemeColor>(board: PlaitBoard) {\n return (board.options.themeColors || ThemeColors) as T[];\n }\n};\n","export enum PlaitPointerType {\n 'hand' = 'hand',\n 'selection' = 'selection'\n}\n","export function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n\n/**\n * 规范 point\n * @param point\n * @returns point\n */\nexport function normalizePoint(point: number[]) {\n return Array.isArray(point)\n ? {\n x: point[0],\n y: point[1]\n }\n : point;\n}\n","import { isNullOrUndefined } from '../utils/helper';\nimport { ExtendedType } from './custom-types';\nimport { Point } from './point';\n\nexport interface BaseViewport {\n [key: string]: any;\n zoom: number;\n origination?: Point;\n}\n\nexport type Viewport = ExtendedType<'Viewport', BaseViewport>;\n\nexport interface ViewportInterface {\n isViewport: (value: any) => value is Viewport;\n}\n\nexport const Viewport: ViewportInterface = {\n isViewport: (value: any): value is Viewport => {\n return !isNullOrUndefined(value.zoom) && !isNullOrUndefined(value.viewBackgroundColor);\n },\n};\n","import produce from 'immer';\nimport { PlaitOperation } from './operation';\n\nexport interface PathLevelsOptions {\n reverse?: boolean;\n}\n\nexport type Path = number[];\n\nexport const Path = {\n /**\n * Get a list of ancestor paths for a given path.\n *\n * The paths are sorted from shallowest to deepest ancestor. However, if the\n * `reverse: true` option is passed, they are reversed.\n */\n ancestors(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n let paths = Path.levels(path, options);\n\n if (reverse) {\n paths = paths.slice(1);\n } else {\n paths = paths.slice(0, -1);\n }\n\n return paths;\n },\n /**\n * Get a list of paths at every level down to a path. Note: this is the same\n * as `Path.ancestors`, but including the path itself.\n *\n * The paths are sorted from shallowest to deepest. However, if the `reverse:\n * true` option is passed, they are reversed.\n */\n levels(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n const list: Path[] = [];\n\n for (let i = 0; i <= path.length; i++) {\n list.push(path.slice(0, i));\n }\n\n if (reverse) {\n list.reverse();\n }\n\n return list;\n },\n parent(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the parent path of the root path [${path}].`);\n }\n\n return path.slice(0, -1);\n },\n next(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no next index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last + 1);\n },\n previous(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no previous index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last - 1);\n },\n /**\n * Check if a path is an ancestor of another.\n */\n\n isAncestor(path: Path, another: Path): boolean {\n return path.length < another.length && Path.compare(path, another) === 0;\n },\n /**\n * Compare a path to another, returning an integer indicating whether the path\n * was before, at, or after the other.\n *\n * Note: Two paths of unequal length can still receive a `0` result if one is\n * directly above or below the other. If you want exact matching, use\n * [[Path.equals]] instead.\n */\n compare(path: Path, another: Path): -1 | 0 | 1 {\n const min = Math.min(path.length, another.length);\n\n for (let i = 0; i < min; i++) {\n if (path[i] < another[i]) return -1;\n if (path[i] > another[i]) return 1;\n }\n\n return 0;\n },\n\n /**\n * Check if a path is exactly equal to another.\n */\n\n equals(path: Path, another: Path): boolean {\n return path.length === another.length && path.every((n, i) => n === another[i]);\n },\n /**\n * Check if a path ends before one of the indexes in another.\n */\n\n endsBefore(path: Path, another: Path): boolean {\n const i = path.length - 1;\n const as = path.slice(0, i);\n const bs = another.slice(0, i);\n const av = path[i];\n const bv = another[i];\n return Path.equals(as, bs) && av < bv;\n },\n /**\n * Check if a path is a sibling of another.\n */\n isSibling(path: Path, another: Path): boolean {\n if (path.length !== another.length) {\n return false;\n }\n\n const as = path.slice(0, -1);\n const bs = another.slice(0, -1);\n const al = path[path.length - 1];\n const bl = another[another.length - 1];\n return al !== bl && Path.equals(as, bs);\n },\n transform(path: Path | null, operation: PlaitOperation): Path | null {\n return produce(path, p => {\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (!path || path?.length === 0) {\n return;\n }\n\n if (p === null) {\n return null;\n }\n\n switch (operation.type) {\n case 'insert_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.endsBefore(op, p) || Path.isAncestor(op, p)) {\n p[op.length - 1] += 1;\n }\n\n break;\n }\n\n case 'remove_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.isAncestor(op, p)) {\n return null;\n } else if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n\n case 'move_node': {\n const { path: op, newPath: onp } = operation;\n\n // If the old and new path are the same, it's a no-op.\n if (Path.equals(op, onp)) {\n return;\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice();\n // op.length <= onp.length is different for slate\n // resolve drag from [0, 0] to [0, 3] issue\n if (Path.endsBefore(op, onp) && op.length <= onp.length) {\n copy[op.length - 1] -= 1;\n }\n\n return copy.concat(p.slice(op.length));\n } else if (Path.isSibling(op, onp) && (Path.isAncestor(onp, p) || Path.equals(onp, p))) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n } else {\n p[op.length - 1] += 1;\n }\n } else if (Path.endsBefore(onp, p) || Path.equals(onp, p) || Path.isAncestor(onp, p)) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n p[onp.length - 1] += 1;\n } else if (Path.endsBefore(op, p)) {\n if (Path.equals(onp, p)) {\n p[onp.length - 1] += 1;\n }\n\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n }\n return p;\n });\n }\n};\n","import { PlaitElement } from './element';\nimport { PlaitBoard } from './board';\nimport { Path } from './path';\n\nexport type PlaitNode = PlaitElement;\n\nexport type Ancestor = PlaitBoard | PlaitElement;\n\nexport interface NodeParentsOptions {\n reverse?: boolean;\n}\n\nexport const PlaitNode = {\n parent: (board: PlaitBoard, path: Path) => {\n const parentPath = Path.parent(path);\n const p = PlaitNode.get(board, parentPath);\n return p;\n },\n /**\n * Return a generator of all the ancestor nodes above a specific path.\n *\n * By default the order is top-down, from highest to lowest ancestor in\n * the tree, but you can pass the `reverse: true` option to go bottom-up.\n */\n *parents(root: PlaitBoard, path: Path, options: NodeParentsOptions = {}): Generator<PlaitNode, void, undefined> {\n for (const p of Path.ancestors(path, options)) {\n const n = PlaitNode.get(root, p);\n yield n;\n }\n },\n get<T extends PlaitNode = PlaitNode>(root: PlaitBoard, path: Path): T {\n let node: Ancestor = root;\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n node = node.children[p];\n }\n return node as T;\n },\n last(board: PlaitBoard, path: Path) {\n let n = PlaitNode.get(board, path);\n while (n && n.children && n.children.length > 0) {\n const i = n.children.length - 1;\n n = n.children[i];\n }\n return n;\n }\n};\n","import { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { createDraft, finishDraft, isDraft } from 'immer';\nimport { Viewport } from '../interfaces/viewport';\nimport { Selection } from '../interfaces/selection';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\nimport { PlaitTheme } from '../interfaces/theme';\n\nexport interface GeneralTransforms {\n transform: (board: PlaitBoard, op: PlaitOperation) => void;\n}\n\nconst applyToDraft = (board: PlaitBoard, selection: Selection | null, viewport: Viewport, theme: PlaitTheme, op: PlaitOperation) => {\n switch (op.type) {\n case 'insert_node': {\n const { path, node } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n\n parent.children.splice(index, 0, node);\n break;\n }\n case 'remove_node': {\n const { path } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n parent.children.splice(index, 1);\n break;\n }\n case 'move_node': {\n const { path, newPath } = op;\n\n if (Path.isAncestor(path, newPath)) {\n throw new Error(`Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.`);\n }\n\n const node = PlaitNode.get(board, path);\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n // This is tricky, but since the `path` and `newPath` both refer to\n // the same snapshot in time, there's a mismatch. After either\n // removing the original position, the second step's path can be out\n // of date. So instead of using the `op.newPath` directly, we\n // transform `op.path` to ascertain what the `newPath` would be after\n // the operation was applied.\n parent.children?.splice(index, 1);\n const truePath = Path.transform(path, op)!;\n const newParent = PlaitNode.get(board, Path.parent(truePath)) as Ancestor;\n const newIndex = truePath[truePath.length - 1];\n\n newParent.children?.splice(newIndex, 0, node);\n break;\n }\n case 'set_node': {\n const { path, properties, newProperties } = op;\n\n if (path.length === 0) {\n throw new Error(`Cannot set properties on the root node!`);\n }\n\n const node = PlaitNode.get(board, path);\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete node[key];\n } else {\n node[key] = value;\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete node[key];\n }\n }\n\n break;\n }\n case 'set_viewport': {\n const { newProperties } = op;\n if (newProperties == null) {\n viewport = newProperties;\n } else {\n if (viewport == null) {\n if (!Viewport.isViewport(newProperties)) {\n throw new Error(\n `Cannot apply an incomplete \"set_viewport\" operation properties ${JSON.stringify(\n newProperties\n )} when there is no current viewport.`\n );\n }\n viewport = { ...newProperties };\n }\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete viewport[key];\n } else {\n viewport[key] = value;\n }\n }\n }\n break;\n }\n case 'set_selection': {\n const { newProperties } = op;\n if (newProperties == null) {\n selection = newProperties;\n } else {\n if (selection === null) {\n selection = op.newProperties;\n } else {\n selection.ranges = newProperties.ranges;\n }\n }\n break;\n }\n case 'set_theme': {\n const { newProperties } = op;\n theme = newProperties as PlaitTheme;\n break;\n }\n }\n return { selection, viewport, theme };\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 let theme = board.theme && createDraft(board.theme);\n\n try {\n const state = applyToDraft(board, selection, viewport, theme, op);\n viewport = state.viewport;\n selection = state.selection;\n theme = state.theme;\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 board.theme = isDraft(theme) ? finishDraft(theme) : theme;\n }\n }\n};\n","import { InsertNodeOperation, MoveNodeOperation, RemoveNodeOperation, SetNodeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport function insertNode(board: PlaitBoard, node: PlaitNode, path: Path) {\n const operation: InsertNodeOperation = { type: 'insert_node', node, path };\n board.apply(operation);\n}\n\nexport function setNode(board: PlaitBoard, props: Partial<PlaitNode>, path: Path) {\n const properties: Partial<PlaitNode> = {};\n const newProperties: Partial<PlaitNode> = {};\n const node = PlaitNode.get(board, path);\n for (const k in props) {\n if (node[k] !== props[k]) {\n if (node.hasOwnProperty(k)) {\n properties[k] = node[k];\n }\n if (props[k] != null) newProperties[k] = props[k];\n }\n }\n const operation: SetNodeOperation = { type: 'set_node', properties, newProperties, path };\n board.apply(operation);\n}\n\nexport function removeNode(board: PlaitBoard, path: Path) {\n const node = PlaitNode.get(board, path);\n const operation: RemoveNodeOperation = { type: 'remove_node', path, node };\n board.apply(operation);\n}\n\nexport function moveNode(board: PlaitBoard, path: Path, newPath: Path) {\n const operation: MoveNodeOperation = { type: 'move_node', path, newPath };\n board.apply(operation);\n}\n\nexport interface NodeTransforms {\n insertNode: (board: PlaitBoard, node: PlaitNode, path: Path) => void;\n setNode: (board: PlaitBoard, node: Partial<PlaitNode>, path: Path) => void;\n removeNode: (board: PlaitBoard, path: Path) => void;\n moveNode: (board: PlaitBoard, path: Path, newPath: Path) => void;\n}\n\nexport const NodeTransforms: NodeTransforms = {\n insertNode,\n setNode,\n removeNode,\n moveNode\n};\n","import { SetSelectionOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Selection } from '../interfaces/selection';\nimport { BOARD_TO_TEMPORARY_ELEMENTS } from '../utils/weak-maps';\nimport { PlaitElement } from '../interfaces/element';\n\nexport function setSelection(board: PlaitBoard, selection: Selection | null) {\n const operation: SetSelectionOperation = { type: 'set_selection', properties: board.selection, newProperties: selection };\n board.apply(operation);\n}\n\nexport interface SelectionTransforms {\n setSelection: (board: PlaitBoard, selection: Selection | null) => void;\n setSelectionWithTemporaryElements: (board: PlaitBoard, elements: PlaitElement[]) => void;\n}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection,\n setSelectionWithTemporaryElements\n};\n\n\nexport function setSelectionWithTemporaryElements(board: PlaitBoard, elements: PlaitElement[]) {\n setTimeout(() => {\n BOARD_TO_TEMPORARY_ELEMENTS.set(board, elements);\n setSelection(board, { ranges: [] });\n });\n}","import { SetViewportOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Viewport } from '../interfaces/viewport';\n\nexport function setViewport(board: PlaitBoard, viewport: Viewport) {\n const operation: SetViewportOperation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };\n board.apply(operation);\n}\n\nexport interface ViewportTransforms {\n setViewport: (board: PlaitBoard, viewport: Viewport) => void;\n}\n\nexport const ViewportTransforms: ViewportTransforms = {\n setViewport\n};\n","export const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';\n\nexport const SCROLL_BAR_WIDTH = 20;\n\nexport const MAX_RADIUS = 16;\n\nexport const POINTER_BUTTON = {\n MAIN: 0,\n WHEEL: 1,\n SECONDARY: 2,\n TOUCH: -1,\n } as const;","import { POINTER_BUTTON } from '../../constants';\nimport { Point } from '../../interfaces/point';\n\nexport const NS = 'http://www.w3.org/2000/svg';\n\nexport function toPoint(x: number, y: number, container: SVGElement): Point {\n const rect = container.getBoundingClientRect();\n return [x - rect.x, y - rect.y];\n}\n\nexport function createG() {\n const newG = document.createElementNS(NS, 'g');\n return newG;\n}\n\nexport function createPath() {\n const newG = document.createElementNS(NS, 'path');\n return newG;\n}\n\nexport function createSVG() {\n const svg = document.createElementNS(NS, 'svg');\n return svg;\n}\n\nexport function createText(x: number, y: number, fill: string, textContent: string) {\n var text = document.createElementNS(NS, 'text');\n text.setAttribute('x', `${x}`);\n text.setAttribute('y', `${y}`);\n text.setAttribute('fill', fill);\n text.textContent = textContent;\n return text;\n}\n\n/**\n * Check if a DOM node is an element node.\n */\nexport const isDOMElement = (value: any): value is Element => {\n return isDOMNode(value) && value.nodeType === 1;\n};\n\n/**\n * Check if a value is a DOM node.\n */\nexport const isDOMNode = (value: any): value is Node => {\n return value instanceof window.Node;\n};\n\nexport const hasInputOrTextareaTarget = (target: EventTarget | null) => {\n if (isDOMElement(target)) {\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\n return true;\n }\n }\n return false;\n};\n\nexport const isSecondaryPointer = (event: MouseEvent) => {\n return event.button === POINTER_BUTTON.SECONDARY;\n}\n\nexport const isMainPointer = (event: MouseEvent) => {\n return event.button === POINTER_BUTTON.MAIN;\n}","import { RectangleClient } from '../interfaces/rectangle-client';\n\n// https://stackoverflow.com/a/6853926/232122\nexport function distanceBetweenPointAndSegment(x: number, y: number, x1: number, y1: number, x2: number, y2: number) {\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSquare = C * C + D * D;\n let param = -1;\n if (lenSquare !== 0) {\n // in case of 0 length line\n param = dot / lenSquare;\n }\n\n let xx, yy;\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n const dx = x - xx;\n const dy = y - yy;\n return Math.hypot(dx, dy);\n}\n\nexport function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) {\n // 𝑎′𝑥=(𝑎𝑥−𝑐𝑥)cos𝜃−(𝑎𝑦−𝑐𝑦)sin𝜃+𝑐𝑥\n // 𝑎′𝑦=(𝑎𝑥−𝑐𝑥)sin𝜃+(𝑎𝑦−𝑐𝑦)cos𝜃+𝑐𝑦.\n // https://math.stackexchange.com/questions/2204520/how-do-i-rotate-a-line-segment-in-a-specific-point-on-the-line\n return [(x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2];\n}\n\nexport function distanceBetweenPointAndPoint(x1: number, y1: number, x2: number, y2: number) {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.hypot(dx, dy);\n}\n\n// https://stackoverflow.com/questions/5254838/calculating-distance-between-a-point-and-a-rectangular-box-nearest-point\nexport function distanceBetweenPointAndRectangle(x: number, y: number, rect: RectangleClient) {\n var dx = Math.max(rect.x - x, 0, x - (rect.x + rect.width));\n var dy = Math.max(rect.y - y, 0, y - (rect.y + rect.height));\n return Math.sqrt(dx * dx + dy * dy);\n}\n","/**\n * Extendable Custom Types Interface\n */\n\ntype ExtendableTypes = 'Viewport' | 'SetViewportOperation' | 'SetSelectionOperation';\n\nexport interface CustomTypes {\n [key: string]: unknown;\n}\n\nexport type ExtendedType<K extends ExtendableTypes, B> = unknown extends CustomTypes[K] ? B : CustomTypes[K];\n","import { PlaitBoard } from '../interfaces/board';\nimport { Ancestor } from '../interfaces/node';\nimport { depthFirstRecursion } from './tree';\nimport { BOARD_TO_SELECTED_ELEMENT } from './weak-maps';\nimport { Selection, Range } from '../interfaces/selection';\nimport { PlaitElement } from '../interfaces/element';\n\nexport const getHitElements = (board: PlaitBoard, selection?: Selection) => {\n const realSelection = selection || board.selection;\n const selectedElements: PlaitElement[] = [];\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (\n !PlaitBoard.isBoard(node) &&\n realSelection &&\n realSelection.ranges.some(range => {\n return board.isHitSelection(node, range);\n })\n ) {\n selectedElements.push(node);\n }\n },\n node => {\n if (PlaitBoard.isBoard(node) || board.isRecursion(node)) {\n return true;\n } else {\n return false;\n }\n }\n );\n return selectedElements;\n};\n\nexport const isIntersectionElements = (board: PlaitBoard, elements: PlaitElement[], ranges: Range[]) => {\n let isIntersectionElements = false;\n if (elements.length) {\n elements.map(item => {\n if (!isIntersectionElements) {\n isIntersectionElements = ranges.some(range => {\n return board.isHitSelection(item, range);\n });\n }\n });\n }\n return isIntersectionElements;\n};\n\nexport const cacheSelectedElements = (board: PlaitBoard, selectedElements: PlaitElement[]) => {\n BOARD_TO_SELECTED_ELEMENT.set(board, selectedElements);\n};\n\nexport const getSelectedElements = (board: PlaitBoard) => {\n return BOARD_TO_SELECTED_ELEMENT.get(board) || [];\n};\n\nexport const addSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n cacheSelectedElements(board, [...selectedElements, element]);\n};\n\nexport const removeSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n const newSelectedElements = selectedElements.filter(value => value !== element);\n cacheSelectedElements(board, newSelectedElements);\n};\n\nexport const clearSelectedElement = (board: PlaitBoard) => {\n cacheSelectedElements(board, []);\n};\n\nexport const isSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n return !!selectedElements.find(value => value === element);\n};\n","import { PlaitBoard, PlaitElement } from '../../interfaces';\nimport { PlaitPluginElementContext } from './context';\n\nexport interface BeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n beforeContextChange: (value: PlaitPluginElementContext<T>) => void;\n}\n\nexport interface OnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n onContextChanged: (value: PlaitPluginElementContext<T, K>, previous: PlaitPluginElementContext<T, K>) => void;\n}\n\nexport function hasBeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is BeforeContextChange<T, K> {\n if (value.beforeContextChange) {\n return true;\n }\n return false;\n}\n\nexport function hasOnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is OnContextChanged<T, K> {\n if (value.onContextChanged) {\n return true;\n }\n return false;\n}\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard, PlaitElement, PlaitPluginElementContext } from '../../interfaces';\nimport { removeSelectedElement } from '../../utils/selected-element';\nimport { createG } from '../../utils/dom/common';\nimport { hasBeforeContextChange, hasOnContextChanged } from './context-change';\n\n@Directive()\nexport abstract class PlaitPluginElementComponent<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>\n implements OnInit, OnDestroy {\n g!: SVGGElement;\n\n rootG?: SVGGElement;\n\n initialized = false;\n\n protected _context!: PlaitPluginElementContext<T, K>;\n\n @Input()\n set context(value: PlaitPluginElementContext<T, K>) {\n if (hasBeforeContextChange<T, K>(this)) {\n this.beforeContextChange(value);\n }\n const previousContext = this._context;\n this._context = value;\n if (this.element) {\n ELEMENT_TO_COMPONENT.set(this.element, this);\n }\n if (this.initialized) {\n this.cdr.markForCheck();\n if (hasOnContextChanged<T>(this)) {\n this.onContextChanged(value, previousContext);\n }\n } else {\n if (PlaitElement.isRootElement(this.element) && this.element.children) {\n this.g = createG();\n this.rootG = createG();\n this.rootG.append(this.g);\n } else {\n this.g = createG();\n }\n }\n }\n\n get context() {\n return this._context;\n }\n\n get element() {\n return this.context && this.context.element;\n }\n\n get board() {\n return this.context && this.context.board;\n }\n\n get selected() {\n return this.context && this.context.selected;\n }\n\n get effect() {\n return this.context && this.context.effect;\n }\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n if (this.element.type) {\n (this.rootG || this.g).setAttribute(`plait-${this.element.type}`, 'true');\n }\n this.initialized = true;\n }\n\n ngOnDestroy(): void {\n if (ELEMENT_TO_COMPONENT.get(this.element) === this) {\n ELEMENT_TO_COMPONENT.delete(this.element);\n }\n removeSelectedElement(this.board, this.element);\n (this.rootG || this.g).remove();\n }\n}\n\nexport const ELEMENT_TO_COMPONENT = new WeakMap<PlaitElement, PlaitPluginElementComponent>();\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { distanceBetweenPointAndRectangle } from './math';\n\nexport type ViewBox = {\n minX: number;\n minY: number;\n width: number;\n height: number;\n viewportWidth: number;\n viewportHeight: number;\n};\n\nexport function transformPoints(board: PlaitBoard, points: Point[]) {\n const newPoints = points.map(point => {\n return transformPoint(board, point);\n });\n return newPoints;\n}\n\nexport function transformPoint(board: PlaitBoard, point: Point) {\n const { width, height } = PlaitBoard.getHost(board).getBoundingClientRect();\n const viewBox = PlaitBoard.getHost(board).viewBox.baseVal;\n const x = (point[0] / width) * viewBox.width + viewBox.x;\n const y = (point[1] / height) * viewBox.height + viewBox.y;\n const newPoint = [x, y] as Point;\n\n return newPoint;\n}\n\nexport function isInPlaitBoard(board: PlaitBoard, x: number, y: number) {\n const plaitBoardElement = PlaitBoard.getBoardNativeElement(board);\n const plaitBoardRect = plaitBoardElement.getBoundingClientRect();\n const distances = distanceBetweenPointAndRectangle(x, y, plaitBoardRect);\n return distances === 0;\n}\n","import { NS } from './common';\n\nexport function createForeignObject(x: number, y: number, width: number, height: number) {\n var newForeignObject = document.createElementNS(NS, 'foreignObject');\n newForeignObject.setAttribute('x', `${x}`);\n newForeignObject.setAttribute('y', `${y}`);\n newForeignObject.setAttribute('width', `${width}`);\n newForeignObject.setAttribute('height', `${height}`);\n return newForeignObject;\n}\n\nexport function updateForeignObject(g: SVGGElement, width: number, height: number, x: number, y: number) {\n const foreignObject = g.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${width}`);\n foreignObject.setAttribute('height', `${height}`);\n foreignObject.setAttribute('x', `${x}`);\n foreignObject.setAttribute('y', `${y}`);\n }\n}\n","export const IS_IOS =\n typeof navigator !== 'undefined' &&\n typeof window !== 'undefined' &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !(window as any).MSStream;\n\nexport const IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent);\n\nexport const IS_FIREFOX = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);\n\nexport const IS_SAFARI = typeof navigator !== 'undefined' && /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent);\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent);\n\nexport const IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent);\n\n// Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput\nexport const IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent);\n","import { 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","import { Options } from 'roughjs/bin/core';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MAX_RADIUS } from '../../constants';\n\n/**\n * drawRoundRectangle\n */\nexport function drawRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n options: Options,\n outline = false,\n borderRadius?: number\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n const defaultRadius = Math.min(width, height) / 8;\n let radius = borderRadius || defaultRadius;\n if (defaultRadius > MAX_RADIUS) {\n radius = outline ? MAX_RADIUS + 2 : MAX_RADIUS;\n }\n\n const point1 = [x1 + radius, y1];\n const point2 = [x2 - radius, y1];\n const point3 = [x2, y1 + radius];\n const point4 = [x2, y2 - radius];\n const point5 = [x2 - radius, y2];\n const point6 = [x1 + radius, y2];\n const point7 = [x1, y2 - radius];\n const point8 = [x1, y1 + radius];\n\n return rs.path(\n `M${point2[0]} ${point2[1]} A ${radius} ${radius}, 0, 0, 1, ${point3[0]} ${point3[1]} L ${point4[0]} ${point4[1]} A ${radius} ${radius}, 0, 0, 1, ${point5[0]} ${point5[1]} L ${point6[0]} ${point6[1]} A ${radius} ${radius}, 0, 0, 1, ${point7[0]} ${point7[1]} L ${point8[0]} ${point8[1]} A ${radius} ${radius}, 0, 0, 1, ${point1[0]} ${point1[1]} Z`,\n options\n );\n}\n\nexport function drawAbstractRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n isHorizontal: boolean,\n options: Options\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n const radius = 5;\n const handleGap = 4;\n const handleLength = 10;\n\n const handleSpace = handleLength + handleGap * 2;\n\n if (isHorizontal) {\n const handleSideLine = (width - handleSpace - radius * 2) / 2;\n const sideLine = height - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${handleSideLine},0\n m${handleSpace},0\n l${handleSideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${sideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${handleSideLine},0\n m-${handleSpace},0\n l-${handleSideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${sideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n } else {\n const handleSideLine = (height - handleSpace - radius * 2) / 2;\n const sideLine = width - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${sideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${handleSideLine}\n m0,${handleSpace}\n l0,${handleSideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${sideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${handleSideLine}\n m0,-${handleSpace}\n l0,-${handleSideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n }\n}\n","import { rotate } from '../math';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { Options } from 'roughjs/bin/core';\nimport { Point } from '../../interfaces';\n\nexport function arrowPoints(start: Point, end: Point, maxHypotenuseLength = 10, degree = 40) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n let hypotenuse = Math.hypot(width, height); // 斜边\n const realRotateLine = hypotenuse > maxHypotenuseLength * 2 ? maxHypotenuseLength : hypotenuse / 2;\n const rotateWidth = (realRotateLine / hypotenuse) * width;\n const rotateHeight = (realRotateLine / hypotenuse) * height;\n const rotatePoint = [\n end[0] > start[0] ? end[0] - rotateWidth : end[0] + rotateWidth,\n end[1] > start[1] ? end[1] - rotateHeight : end[1] + rotateHeight\n ];\n const pointRight = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (degree * Math.PI) / 180) as Point;\n const pointLeft = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (-degree * Math.PI) / 180) as Point;\n return { pointLeft, pointRight };\n}\n\nexport function drawArrow(rs: RoughSVG, start: Point, end: Point, options: Options, maxHypotenuseLength = 10, degree = 40): SVGGElement[] {\n const { pointLeft, pointRight } = arrowPoints(start, end, maxHypotenuseLength, degree);\n const arrowLineLeft = rs.linearPath([pointLeft, end], options);\n const arrowLineRight = rs.linearPath([pointRight, end], options);\n return [arrowLineLeft, arrowLineRight];\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\n\nexport function drawCircle(roughSVG: RoughSVG, point: Point, diameter: number, options: Options): SVGGElement {\n return roughSVG.circle(point[0], point[1], diameter, options);\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\nimport { createG, createPath } from '../dom/common';\n\nexport function drawLine(rs: RoughSVG, start: Point, end: Point, options: Options): SVGGElement {\n return rs.linearPath([start, end], options);\n}\n\nexport function drawLinearPath(points: Point[], options?: Options) {\n const g = createG();\n const path = createPath();\n\n let polylinePath = '';\n points.forEach((point, index) => {\n if (index === 0) {\n polylinePath += `M ${point[0]} ${point[1]} `;\n } else {\n polylinePath += `L ${point[0]} ${point[1]} `;\n }\n });\n\n path.setAttribute('d', polylinePath);\n path.setAttribute('stroke', `${options?.stroke}`);\n path.setAttribute('stroke-width', `${options?.strokeWidth}`);\n path.setAttribute('fill', `none`);\n g.appendChild(path);\n\n return g;\n}\n","import { Subscription, timer } from 'rxjs';\n\nlet timerId: number | null = null;\n\nexport const throttleRAF = (fn: () => void) => {\n const scheduleFunc = () => {\n timerId = requestAnimationFrame(() => {\n timerId = null;\n fn();\n });\n };\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n scheduleFunc();\n};\n\nexport const debounce = (func: () => void, wait: number, options?: { leading: boolean }) => {\n let timerSubscription: Subscription | null = null;\n return () => {\n if (timerSubscription && !timerSubscription.closed) {\n timerSubscription.unsubscribe();\n timerSubscription = timer(wait).subscribe(() => {\n func();\n });\n } else {\n if (options?.leading) {\n func();\n }\n timerSubscription = timer(wait).subscribe();\n }\n };\n};\n","import { PlaitBoard, PlaitElement } from '../interfaces';\nimport { BOARD_TO_MOVING_ELEMENT } from './weak-maps';\n\nexport const getMovingElements = (board: PlaitBoard) => {\n return BOARD_TO_MOVING_ELEMENT.get(board) || [];\n};\n\nexport const addMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n const movingElements = getMovingElements(board);\n const newElements = elements.filter(item => !movingElements.find(movingElement => movingElement.key === item.key));\n cacheMovingElements(board, [...movingElements, ...newElements]);\n};\n\nexport const removeMovingElements = (board: PlaitBoard) => {\n BOARD_TO_MOVING_ELEMENT.delete(board);\n};\n\nexport const cacheMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n BOARD_TO_MOVING_ELEMENT.set(board, elements);\n};\n","import { ELEMENT_TO_COMPONENT, PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport { NODE_TO_PARENT } from '../utils';\nimport { PlaitBoard } from './board';\nimport { Point } from './point';\n\nexport interface PlaitElement {\n [key: string]: any;\n id: string;\n children?: PlaitElement[];\n points?: Point[];\n type?: string;\n}\n\nexport const PlaitElement = {\n isRootElement(value: PlaitElement) {\n const parent = NODE_TO_PARENT.get(value);\n if (parent && PlaitBoard.isBoard(parent)) {\n return true;\n } else {\n return false;\n }\n },\n getComponent(value: PlaitElement) {\n return ELEMENT_TO_COMPONENT.get(value) as PlaitPluginElementComponent;\n }\n}\n\nexport interface ComponentType<T> {\n new (...args: any[]): T;\n}\n","import { Point } from './point';\n\nexport interface RectangleClient {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport const RectangleClient = {\n isHit: (origin: RectangleClient, target: RectangleClient) => {\n const minX = origin.x < target.x ? origin.x : target.x;\n const maxX = origin.x + origin.width > target.x + target.width ? origin.x + origin.width : target.x + target.width;\n const minY = origin.y < target.y ? origin.y : target.y;\n const maxY = origin.y + origin.height > target.y + target.height ? origin.y + origin.height : target.y + target.height;\n // float calculate error( eg: 1.4210854715202004e-14 > 0)\n if (Math.floor(maxX - minX - origin.width - target.width) <= 0 && Math.floor(maxY - minY - origin.height - target.height) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n toRectangleClient: (points: [Point, Point]) => {\n const xArray = points.map(ele => ele[0]);\n const yArray = points.map(ele => ele[1]);\n const xMin = Math.min(...xArray);\n const xMax = Math.max(...xArray);\n const yMin = Math.min(...yArray);\n const yMax = Math.max(...yArray);\n const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n return rect;\n },\n getOutlineRectangle: (rectangle: RectangleClient, offset: number) => {\n return {\n x: rectangle.x + offset,\n y: rectangle.y + offset,\n width: rectangle.width + Math.abs(offset) * 2,\n height: rectangle.height + Math.abs(offset) * 2\n };\n },\n isEqual: (rectangle: RectangleClient, otherRectangle: RectangleClient) => {\n return (\n rectangle.x === otherRectangle.x &&\n rectangle.y === otherRectangle.y &&\n rectangle.width === otherRectangle.width &&\n rectangle.height === otherRectangle.height\n );\n }\n};\n","import { PlaitNode } from '../interfaces/node';\nimport { Path } from './path';\nimport { Selection } from './selection';\nimport { PlaitTheme } from './theme';\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 SetThemeOperation = {\n type: 'set_theme';\n properties: Partial<PlaitTheme>;\n newProperties: Partial<PlaitTheme>;\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 | SetThemeOperation;\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 case 'set_theme': {\n const { properties, newProperties } = op;\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n};\n\nexport const PlaitOperation: PlaitOperationInterface = {\n isSetViewportOperation,\n inverse\n};\n","export type Point = [number, number];\n\nexport interface XYPosition {\n x: number;\n y: number;\n}\n\nexport const Point = {\n isEquals(point?: Point, otherPoint?: Point) {\n return point && otherPoint && point[0] === otherPoint[0] && point[1] === otherPoint[1];\n }\n};","import { Point } from './point';\n\nexport const SELECTION_BORDER_COLOR = '#6698FF';\nexport const SELECTION_FILL_COLOR = '#6698FF19'; // 主色 0.1 透明度\n\nexport interface Range {\n anchor: Point;\n focus: Point;\n}\n\nexport interface Selection {\n ranges: Range[];\n}\n\nexport const Selection = {\n isCollapsed(selection: Range) {\n if (selection.anchor[0] == selection.focus[0] && selection.anchor[1] === selection.focus[1]) {\n return true;\n } else {\n return false;\n }\n }\n};\n","import { PlaitBoard } from './board';\nimport { PlaitOperation } from './operation';\n\nexport interface PlaitHistory {\n redos: PlaitOperation[][];\n undos: PlaitOperation[][];\n}\n\nexport const SAVING = new WeakMap<PlaitBoard, boolean | undefined>();\nexport const MERGING = new WeakMap<PlaitBoard, boolean | undefined>();\n","export enum PlaitPluginKey {\n 'withSelection' = 'withSelection'\n}","import { SCROLL_BAR_WIDTH } from '../constants';\nimport { PlaitBoard, Point, RectangleClient } from '../interfaces';\nimport { getRectangleByElements } from './element';\nimport { BOARD_TO_VIEWPORT_ORIGINATION } from './weak-maps';\n\nconst IS_FROM_SCROLLING = new WeakMap<PlaitBoard, boolean>();\n\nconst IS_FROM_VIEWPORT_CHANGE = new WeakMap<PlaitBoard, boolean>();\n\nexport function getViewportContainerRect(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const viewportRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n\n return {\n width: viewportRect.width + scrollBarWidth,\n height: viewportRect.height + scrollBarWidth\n };\n}\n\nexport function getElementHostBBox(board: PlaitBoard, zoom: number) {\n const childrenRect = getRectangleByElements(board, board.children, true);\n const viewportContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const containerWidth = viewportContainerRect.width / zoom;\n const containerHeight = viewportContainerRect.height / zoom;\n let left: number;\n let right: number;\n let top: number;\n let bottom: number;\n\n if (childrenRect.width < containerWidth) {\n const centerX = childrenRect.x + childrenRect.width / 2;\n const halfContainerWidth = containerWidth / 2;\n left = centerX - halfContainerWidth;\n right = centerX + halfContainerWidth;\n } else {\n left = childrenRect.x;\n right = childrenRect.x + childrenRect.width;\n }\n if (childrenRect.height < containerHeight) {\n const centerY = childrenRect.y + childrenRect.height / 2;\n const halfContainerHeight = containerHeight / 2;\n top = centerY - halfContainerHeight;\n bottom = centerY + halfContainerHeight;\n } else {\n top = childrenRect.y;\n bottom = childrenRect.y + childrenRect.height;\n }\n return {\n left,\n right,\n top,\n bottom\n };\n}\n\n/**\n * 验证缩放比是否符合限制,如果超出限制,则返回合适的缩放比\n * @param zoom 缩放比\n * @param minZoom 最小缩放比\n * @param maxZoom 最大缩放比\n * @returns 正确的缩放比\n */\nexport function clampZoomLevel(zoom: number, minZoom = 0.2, maxZoom = 4) {\n return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;\n}\n\nexport function getViewBox(board: PlaitBoard, zoom: number) {\n const boardContainerRectangle = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const elementHostBBox = getElementHostBBox(board, zoom);\n\n const horizontalPadding = boardContainerRectangle.width / 2;\n const verticalPadding = boardContainerRectangle.height / 2;\n const viewBox = [\n elementHostBBox.left - horizontalPadding / zoom,\n elementHostBBox.top - verticalPadding / zoom,\n elementHostBBox.right - elementHostBBox.left + (horizontalPadding * 2) / zoom,\n elementHostBBox.bottom - elementHostBBox.top + (verticalPadding * 2) / zoom\n ];\n return viewBox;\n}\n\nexport function setSVGViewBox(board: PlaitBoard, viewBox: number[]) {\n const zoom = board.viewport.zoom;\n const hostElement = PlaitBoard.getHost(board);\n hostElement.style.display = 'block';\n hostElement.style.width = `${viewBox[2] * zoom}px`;\n hostElement.style.height = `${viewBox[3] * zoom}px`;\n\n if (viewBox && viewBox[2] > 0 && viewBox[3] > 0) {\n hostElement.setAttribute('viewBox', viewBox.join(' '));\n }\n}\n\nexport function updateViewportOffset(board: PlaitBoard) {\n const origination = getViewportOrigination(board);\n if (!origination) return;\n\n const { zoom } = board.viewport;\n const viewBox = getViewBox(board, zoom);\n const scrollLeft = (origination![0] - viewBox[0]) * zoom;\n const scrollTop = (origination![1] - viewBox[1]) * zoom;\n updateViewportContainerScroll(board, scrollLeft, scrollTop);\n}\n\nexport function updateViewportContainerScroll(board: PlaitBoard, left: number, top: number, isFromViewportChange: boolean = true) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n if (viewportContainer.scrollLeft !== left || viewportContainer.scrollTop !== top) {\n viewportContainer.scrollLeft = left;\n viewportContainer.scrollTop = top;\n isFromViewportChange && setIsFromViewportChange(board, true);\n }\n}\n\nexport function initializeViewportContainer(board: PlaitBoard) {\n const { width, height } = getViewportContainerRect(board);\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n viewportContainer.style.width = `${width}px`;\n viewportContainer.style.height = `${height}px`;\n}\n\nexport function initializeViewBox(board: PlaitBoard) {\n const zoom = board.viewport.zoom;\n const viewBox = getViewBox(board, zoom);\n setSVGViewBox(board, viewBox);\n}\n\nexport function initializeViewportOffset(board: PlaitBoard) {\n if (!board.viewport?.origination) {\n const zoom = board.viewport.zoom;\n const viewportContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const viewBox = getViewBox(board, zoom);\n const centerX = viewBox[0] + viewBox[2] / 2;\n const centerY = viewBox[1] + viewBox[3] / 2;\n const origination = [centerX - viewportContainerRect.width / 2 / zoom, centerY - viewportContainerRect.height / 2 / zoom] as Point;\n updateViewportOrigination(board, origination);\n updateViewportOffset(board);\n return;\n }\n updateViewportOffset(board);\n}\n\nexport const updateViewportOrigination = (board: PlaitBoard, origination: Point) => {\n BOARD_TO_VIEWPORT_ORIGINATION.set(board, origination);\n};\n\nexport const clearViewportOrigination = (board: PlaitBoard) => {\n BOARD_TO_VIEWPORT_ORIGINATION.delete(board);\n};\n\nexport const getViewportOrigination = (board: PlaitBoard) => {\n const origination = BOARD_TO_VIEWPORT_ORIGINATION.get(board);\n if (origination) {\n return origination;\n } else {\n return board.viewport.origination;\n }\n};\n\nexport const isFromScrolling = (board: PlaitBoard) => {\n return !!IS_FROM_SCROLLING.get(board);\n};\n\nexport const setIsFromScrolling = (board: PlaitBoard, state: boolean) => {\n IS_FROM_SCROLLING.set(board, state);\n};\n\nexport const isFromViewportChange = (board: PlaitBoard) => {\n return !!IS_FROM_VIEWPORT_CHANGE.get(board);\n};\n\nexport const setIsFromViewportChange = (board: PlaitBoard, state: boolean) => {\n IS_FROM_VIEWPORT_CHANGE.set(board, state);\n};\n\nexport function scrollToRectangle(board: PlaitBoard, client: RectangleClient) {}\n","import { SetThemeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitTheme } from '../interfaces';\n\nexport function setTheme(board: PlaitBoard, themeColorMode: PlaitTheme) {\n const operation: SetThemeOperation = { type: 'set_theme', properties: board.theme, newProperties: themeColorMode };\n board.apply(operation);\n}\n\nexport interface ThemeTransforms {\n setTheme: (board: PlaitBoard, themeColorMode: PlaitTheme) => void;\n}\n\nexport const ViewportTransforms: ThemeTransforms = {\n setTheme\n};\n","import { ThemeColorMode } from '../interfaces/theme';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { toPoint } from '../utils/dom/common';\nimport { getRectangleByElements } from '../utils/element';\nimport { distanceBetweenPointAndRectangle } from '../utils/math';\nimport { clampZoomLevel, clearViewportOrigination, getViewBox, getViewportOrigination } from '../utils/viewport';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { setViewport } from './viewport';\nimport { depthFirstRecursion } from '../utils';\nimport { PlaitElement } from '../interfaces/element';\nimport { setTheme } from './theme';\n\nfunction updateViewport(board: PlaitBoard, origination: Point, zoom?: number) {\n zoom = zoom ?? board.viewport.zoom;\n setViewport(board, {\n ...board.viewport,\n zoom,\n origination\n });\n clearViewportOrigination(board);\n}\n\nconst updatePointerType = <T extends string = PlaitPointerType>(board: PlaitBoard, pointer: T) => {\n board.pointer = pointer;\n const boardComponent = BOARD_TO_COMPONENT.get(board);\n boardComponent?.markForCheck();\n};\n\nfunction updateZoom(board: PlaitBoard, newZoom: number, isCenter = true) {\n newZoom = clampZoomLevel(newZoom);\n\n const mousePoint = PlaitBoard.getMovingPoint(board);\n const nativeElement = PlaitBoard.getBoardNativeElement(board);\n const nativeElementRect = nativeElement.getBoundingClientRect();\n const boardContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n let focusPoint = [boardContainerRect.width / 2, boardContainerRect.height / 2];\n\n if (!isCenter && mousePoint && distanceBetweenPointAndRectangle(mousePoint[0], mousePoint[1], nativeElementRect) === 0) {\n focusPoint = toPoint(mousePoint[0], mousePoint[1], (nativeElement as unknown) as SVGElement);\n }\n\n const zoom = board.viewport.zoom;\n const origination = getViewportOrigination(board);\n const centerX = origination![0] + focusPoint[0] / zoom;\n const centerY = origination![1] + focusPoint[1] / zoom;\n const newOrigination = [centerX - focusPoint[0] / newZoom, centerY - focusPoint[1] / newZoom] as Point;\n updateViewport(board, newOrigination, newZoom);\n}\n\nfunction fitViewport(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n let scrollBarWidth = 0;\n if (!hideScrollbar) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n scrollBarWidth = viewportContainer.offsetWidth - viewportContainer.clientWidth;\n }\n\n const boardContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();\n const elementHostBox = getRectangleByElements(board, board.children, true);\n const zoom = board.viewport.zoom;\n const autoFitPadding = 16;\n const viewportWidth = boardContainerRect.width - 2 * autoFitPadding;\n const viewportHeight = boardContainerRect.height - 2 * autoFitPadding;\n\n let newZoom = zoom;\n if (viewportWidth < elementHostBox.width || viewportHeight < elementHostBox.height) {\n newZoom = Math.min(viewportWidth / elementHostBox.width, viewportHeight / elementHostBox.height);\n } else {\n newZoom = 1;\n }\n\n const viewBox = getViewBox(board, newZoom);\n const centerX = viewBox[0] + viewBox[2] / 2;\n const centerY = viewBox[1] + viewBox[3] / 2;\n const newOrigination = [\n centerX - boardContainerRect.width / 2 / newZoom + scrollBarWidth / 2 / zoom,\n centerY - boardContainerRect.height / 2 / newZoom + scrollBarWidth / 2 / zoom\n ] as Point;\n updateViewport(board, newOrigination, newZoom);\n}\n\n/**\n * apply theme to every element (remove element custom properties)\n * invoke applyThemeColor\n */\nfunction updateThemeColor(board: PlaitBoard, mode: ThemeColorMode) {\n mode = mode ?? board.theme.themeColorMode;\n setTheme(board, { themeColorMode: mode });\n\n depthFirstRecursion((board as unknown) as PlaitElement, element => {\n board.applyTheme(element);\n });\n}\n\nexport const BoardTransforms = {\n updatePointerType,\n updateViewport,\n fitViewport,\n updateZoom,\n updateThemeColor\n};\n","import { GeneralTransforms } from './general';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\n\nexport { BoardTransforms } from './board';\nexport const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms\n};\n","import { PlaitOperation } from './operation';\nimport { Path } from './path';\n\nexport interface PathRef {\n current: Path | null;\n affinity: 'forward' | 'backward' | null;\n unref(): Path | null;\n}\n\nexport interface PathRefOptions {\n affinity?: 'forward' | 'backward' | null;\n}\n\nexport const PathRef = {\n transform(ref: PathRef, op: PlaitOperation): void {\n const { current } = ref;\n\n if (current == null) {\n return;\n }\n\n const path = Path.transform(current, op);\n ref.current = path;\n\n if (path == null) {\n ref.unref();\n }\n }\n};\n","import { PlaitBoard, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { Transforms } from '../transforms';\nimport { FLUSHING, PATH_REFS } from '../utils/weak-maps';\nimport { PathRef, PathRefOptions } from '../interfaces/path-ref';\nimport { Path } from '../interfaces/path';\nimport { ThemeColorMode } from '../interfaces/theme';\n\nexport function createBoard(children: PlaitElement[], options?: PlaitBoardOptions): PlaitBoard {\n const board: PlaitBoard = {\n viewport: {\n zoom: 1\n },\n children,\n theme: { themeColorMode: ThemeColorMode.default },\n operations: [],\n history: {\n redos: [],\n undos: []\n },\n selection: null,\n options: options || {\n readonly: false,\n hideScrollbar: false,\n disabledScrollOnNonFocus: false\n },\n pointer: options?.readonly ? PlaitPointerType.hand : PlaitPointerType.selection,\n undo: () => {},\n redo: () => {},\n apply: (operation: PlaitOperation) => {\n for (const ref of board.pathRefs()) {\n PathRef.transform(ref, operation);\n }\n\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 pathRef: (path: Path, options?: PathRefOptions) => {\n const affinity = options?.affinity || 'forward';\n const ref: PathRef = {\n current: path,\n affinity,\n unref() {\n const { current } = ref;\n const pathRefs = board.pathRefs();\n pathRefs.delete(ref);\n ref.current = null;\n return current;\n }\n };\n\n const refs = board.pathRefs();\n refs.add(ref);\n return ref;\n },\n pathRefs: () => {\n let refs = PATH_REFS.get(board);\n\n if (!refs) {\n refs = new Set();\n PATH_REFS.set(board, refs);\n }\n\n return refs;\n },\n onChange: () => {},\n mousedown: (event: MouseEvent) => {},\n mousemove: (event: MouseEvent) => {},\n globalMousemove: (event: MouseEvent) => {},\n mouseup: (event: MouseEvent) => {},\n globalMouseup: (event: MouseEvent) => {},\n keydown: (event: KeyboardEvent) => {},\n keyup: (event: KeyboardEvent) => {},\n dblclick: (event: MouseEvent) => {},\n setFragment: (data: DataTransfer | null) => {},\n insertFragment: (data: DataTransfer | null) => {},\n deleteFragment: (data: DataTransfer | null) => {},\n drawElement: (context: PlaitPluginElementContext) => [],\n redrawElement: (context: PlaitPluginElementContext, previousContext) => {},\n destroyElement: (context: PlaitPluginElementContext) => {},\n isWithinSelection: element => false,\n isHitSelection: element => false,\n isRecursion: element => true,\n isMovable: element => false,\n getRectangle: element => null,\n applyTheme: (element: PlaitElement) => {}\n };\n return board;\n}\n","import { BOARD_TO_ON_CHANGE } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\n\nexport function withBoard(board: PlaitBoard) {\n const { onChange } = board;\n\n board.onChange = () => {\n const onContextChange = BOARD_TO_ON_CHANGE.get(board);\n\n if (onContextChange) {\n onContextChange();\n }\n\n onChange();\n };\n\n return board;\n}\n","import { PlaitBoard, PlaitOperation } from '../interfaces';\nimport { isHotkey } from 'is-hotkey';\nimport { PlaitHistoryBoard, shouldClear, shouldMerge, shouldSave } from '../utils';\n\nexport function withHistory<T extends PlaitBoard>(board: T) {\n const { apply, keydown } = board;\n board.history = { undos: [], redos: [] };\n\n board.redo = () => {\n const { history } = board;\n const { redos } = history;\n\n if (redos.length > 0) {\n const batch = redos[redos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n for (const op of batch) {\n board.apply(op);\n }\n });\n\n history.redos.pop();\n history.undos.push(batch);\n }\n };\n\n board.undo = () => {\n const { history } = board;\n const { undos } = history;\n\n if (undos.length > 0) {\n const batch = undos[undos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n const inverseOps = batch.map(PlaitOperation.inverse).reverse();\n for (const op of inverseOps) {\n board.apply(op);\n }\n });\n\n history.redos.push(batch);\n history.undos.pop();\n }\n };\n\n board.apply = (op: PlaitOperation) => {\n const { operations, history } = board;\n const { undos } = history;\n const lastBatch = undos[undos.length - 1];\n const lastOp = lastBatch && lastBatch[lastBatch.length - 1];\n let save = PlaitHistoryBoard.isSaving(board);\n let merge = PlaitHistoryBoard.isMerging(board);\n\n if (save == null) {\n save = shouldSave(op, lastOp);\n }\n\n if (save) {\n if (!merge) {\n if (lastBatch == null) {\n merge = false;\n } else if (operations.length !== 0) {\n merge = true;\n } else {\n merge = shouldMerge(op, lastOp);\n }\n }\n\n if (lastBatch && merge) {\n lastBatch.push(op);\n } else {\n const batch = [op];\n undos.push(batch);\n }\n\n while (undos.length > 100) {\n undos.shift();\n }\n\n if (shouldClear(op)) {\n history.redos = [];\n }\n }\n apply(op);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (isHotkey('mod+z', event)) {\n board.undo();\n return;\n }\n if (isHotkey('mod+shift+z', event)) {\n board.redo();\n return;\n }\n keydown(event);\n };\n\n return board;\n}\n","import { PlaitPointerType, PlaitBoard, PlaitBoardMove } from '../interfaces';\nimport { BoardTransforms } from '../transforms';\nimport { isMainPointer } from '../utils/dom/common';\nimport { updateViewportContainerScroll } from '../utils/viewport';\n\nexport function withHandPointer<T extends PlaitBoard>(board: T) {\n const { mousedown, mousemove, globalMouseup, keydown, keyup } = board;\n let isMoving: boolean = false;\n const plaitBoardMove: PlaitBoardMove = {\n x: 0,\n y: 0\n };\n\n board.mousedown = (event: MouseEvent) => {\n if (PlaitBoard.isPointer(board, PlaitPointerType.hand) && isMainPointer(event)) {\n isMoving = true;\n PlaitBoard.getBoardNativeElement(board).classList.add('viewport-moving');\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n if (PlaitBoard.isPointer(board, PlaitPointerType.hand) && board.selection && isMoving) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n const left = viewportContainer.scrollLeft - (event.x - plaitBoardMove.x);\n const top = viewportContainer.scrollTop - (event.y - plaitBoardMove.y);\n updateViewportContainerScroll(board, left, top, false);\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n mousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (board.selection) {\n isMoving = false;\n PlaitBoard.getBoardNativeElement(board).classList.remove('viewport-moving');\n plaitBoardMove.x = 0;\n plaitBoardMove.y = 0;\n }\n globalMouseup(event);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (event.code === 'Space') {\n if (!PlaitBoard.isPointer(board, PlaitPointerType.hand)) {\n BoardTransforms.updatePointerType(board, PlaitPointerType.hand);\n }\n event.preventDefault();\n }\n keydown(event);\n };\n\n board.keyup = (event: KeyboardEvent) => {\n if (!board.options.readonly && event.code === 'Space') {\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n }\n keyup(event);\n };\n\n return board;\n}\n","export const ATTACHED_ELEMENT_CLASS_NAME = 'plait-board-attached';","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { transformPoint } from '../utils/board';\nimport { isMainPointer, toPoint } from '../utils/dom/common';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport { cacheSelectedElements, getHitElements, getSelectedElements, isIntersectionElements } from '../utils/selected-element';\nimport { PlaitElement, PlaitPointerType, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, Selection } from '../interfaces';\nimport { getRectangleByElements } from '../utils/element';\nimport { BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_TEMPORARY_ELEMENTS } from '../utils/weak-maps';\nimport { ATTACHED_ELEMENT_CLASS_NAME } from '../constants/selection';\nimport { throttleRAF } from '../utils';\nimport { PlaitOptionsBoard, PlaitPluginOptions } from './with-options';\nimport { PlaitPluginKey } from '../interfaces/plugin-key';\n\nexport interface WithPluginOptions extends PlaitPluginOptions {\n isMultiple: boolean;\n isDisabledSelect: boolean;\n}\n\nexport function withSelection(board: PlaitBoard) {\n const { mousedown, globalMousemove, globalMouseup, onChange } = board;\n\n let start: Point | null = null;\n let end: Point | null = null;\n let selectionMovingG: SVGGElement;\n let selectionOuterG: SVGGElement;\n let previousSelectedElements: PlaitElement[];\n\n board.mousedown = (event: MouseEvent) => {\n if (!isMainPointer(event)) {\n mousedown(event);\n return;\n }\n\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const ranges = [{ anchor: point, focus: point }];\n const selectedElements = getSelectedElements(board);\n if (isIntersectionElements(board, selectedElements, ranges)) {\n mousedown(event);\n return;\n }\n\n const range = { anchor: point, focus: point };\n const hitElements = getHitElements(board, { ranges: [range] });\n if (\n PlaitBoard.isPointer(board, PlaitPointerType.selection) &&\n getHitElements(board, { ranges: [range] }).length === 0 &&\n hitElements.length === 0 &&\n options.isMultiple &&\n !options.isDisabledSelect\n ) {\n start = point;\n }\n\n if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && hitElements.length === 0 && !PlaitBoard.hasBeenTextEditing(board)) {\n // prevent text from being selected\n event.preventDefault();\n }\n\n\n Transforms.setSelection(board, { ranges: ranges });\n\n mousedown(event);\n };\n\n board.globalMousemove = (event: MouseEvent) => {\n if (start) {\n const movedTarget = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const { x, y, width, height } = RectangleClient.toRectangleClient([start, movedTarget]);\n selectionMovingG?.remove();\n if (Math.hypot(width, height) > 5) {\n end = movedTarget;\n throttleRAF(() => {\n if (start && end) {\n Transforms.setSelection(board, { ranges: [{ anchor: start, focus: end }] });\n }\n });\n setSelectionMoving(board);\n const rough = PlaitBoard.getRoughSVG(board);\n selectionMovingG = rough.rectangle(x, y, width, height, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n PlaitBoard.getHost(board).append(selectionMovingG);\n }\n }\n globalMousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (start && end) {\n selectionMovingG?.remove();\n clearSelectionMoving(board);\n Transforms.setSelection(board, { ranges: [{ anchor: start, focus: end }] });\n }\n\n if (PlaitBoard.isFocus(board)) {\n const isInBoard = event.target instanceof Node && PlaitBoard.getBoardNativeElement(board).contains(event.target);\n const isInDocument = event.target instanceof Node && document.contains(event.target);\n const isAttachedElement = event.target instanceof Element && event.target.closest(`.${ATTACHED_ELEMENT_CLASS_NAME}`);\n // Clear selection when mouse board outside area\n // The framework needs to determine whether the board is focused through selection\n if (!isInBoard && !start && !isAttachedElement && isInDocument) {\n Transforms.setSelection(board, null);\n }\n }\n\n start = null;\n end = null;\n globalMouseup(event);\n };\n\n board.onChange = () => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n // calc selected elements entry\n if (board.pointer !== PlaitPointerType.hand && !options.isDisabledSelect) {\n try {\n if (board.operations.find(value => value.type === 'set_selection')) {\n selectionOuterG?.remove();\n const temporaryElements = getTemporaryElements(board);\n let elements = temporaryElements ? temporaryElements : getHitElements(board);\n\n if (!options.isMultiple && elements.length > 1) {\n elements = [elements[0]];\n }\n cacheSelectedElements(board, elements);\n previousSelectedElements = elements;\n const { width, height } = getRectangleByElements(board, elements, false);\n if (width > 0 && height > 0 && elements.length > 1) {\n selectionOuterG = createSelectionOuterG(board, elements);\n selectionOuterG.classList.add('selection-outer');\n PlaitBoard.getHost(board).append(selectionOuterG);\n }\n deleteTemporaryElements(board);\n } else {\n // wait node destroy and remove selected element state\n setTimeout(() => {\n const currentSelectedElements = getSelectedElements(board);\n if (currentSelectedElements.length && currentSelectedElements.length > 1) {\n const selectedElementChange = currentSelectedElements.some(item => !previousSelectedElements.includes(item));\n if (selectedElementChange) {\n selectionOuterG?.remove();\n selectionOuterG = createSelectionOuterG(board, currentSelectedElements);\n selectionOuterG.classList.add('selection-outer');\n PlaitBoard.getHost(board).append(selectionOuterG);\n }\n } else {\n selectionOuterG?.remove();\n }\n });\n }\n } catch (error) {\n console.error(error);\n }\n }\n onChange();\n };\n\n (board as PlaitOptionsBoard).setPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection, {\n isMultiple: true,\n isDisabledSelect: false\n });\n\n return board;\n}\n\nexport function getTemporaryElements(board: PlaitBoard) {\n return BOARD_TO_TEMPORARY_ELEMENTS.get(board);\n}\n\nexport function deleteTemporaryElements(board: PlaitBoard) {\n BOARD_TO_TEMPORARY_ELEMENTS.delete(board);\n}\n\nexport function isSelectionMoving(board: PlaitBoard) {\n return !!BOARD_TO_IS_SELECTION_MOVING.get(board);\n}\n\nexport function setSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardNativeElement(board).classList.add('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.set(board, true);\n}\n\nexport function clearSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardNativeElement(board).classList.remove('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.delete(board);\n}\n\nexport function createSelectionOuterG(board: PlaitBoard, selectElements: PlaitElement[]) {\n const { x, y, width, height } = getRectangleByElements(board, selectElements, false);\n const rough = PlaitBoard.getRoughSVG(board);\n return rough.rectangle(x - 2.5, y - 2.5, width + 5, height + 5, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fillStyle: 'solid'\n });\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { debounce } from '../utils/common';\nimport { initializeViewBox, isFromScrolling, setIsFromScrolling, updateViewportOffset } from '../utils/viewport';\n\nexport function withViewport(board: PlaitBoard) {\n const { onChange } = board;\n\n const throttleUpdate = debounce(\n () => {\n initializeViewBox(board);\n updateViewportOffset(board);\n },\n 500,\n { leading: true }\n );\n\n board.onChange = () => {\n const isSetViewport = board.operations.some(op => op.type === 'set_viewport');\n const isOnlySetSelection = board.operations.some(op => op.type === 'set_selection');\n if (isOnlySetSelection) {\n return onChange();\n }\n if (isSetViewport && isFromScrolling(board)) {\n setIsFromScrolling(board, false);\n return onChange();\n }\n if (isSetViewport) {\n initializeViewBox(board);\n updateViewportOffset(board);\n } else {\n throttleUpdate();\n }\n onChange();\n };\n\n return board;\n}\n","import { BOARD_TO_HOST } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\nimport { isInPlaitBoard, transformPoint } from '../utils/board';\nimport { toPoint } from '../utils/dom/common';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { PlaitElement } from '../interfaces/element';\nimport { getSelectedElements, isIntersectionElements } from '../utils/selected-element';\nimport { PlaitNode } from '../interfaces/node';\nimport { throttleRAF } from '../utils/common';\nimport { addMovingElements, removeMovingElements } from '../utils/moving-element';\nimport { MERGING } from '../interfaces/history';\n\nexport function withMoving(board: PlaitBoard) {\n const { mousedown, mousemove, globalMouseup, globalMousemove } = board;\n\n let offsetX = 0;\n let offsetY = 0;\n let isPreventDefault = false;\n let startPoint: Point | null;\n let activeElements: PlaitElement[] | null = [];\n\n board.mousedown = event => {\n const host = BOARD_TO_HOST.get(board);\n const point = transformPoint(board, toPoint(event.x, event.y, host!));\n const ranges = [{ anchor: point, focus: point }];\n let movableElements = board.children.filter(item => board.isMovable(item));\n if (movableElements.length) {\n startPoint = point;\n const selectedRootElements = getSelectedElements(board).filter(item => movableElements.includes(item));\n const intersectionSelectedElement = isIntersectionElements(board, selectedRootElements, ranges);\n if (intersectionSelectedElement) {\n activeElements = selectedRootElements;\n } else {\n activeElements = movableElements.filter(item =>\n ranges.some(range => {\n return board.isHitSelection(item, range);\n })\n );\n }\n }\n\n mousedown(event);\n };\n\n board.mousemove = event => {\n if (startPoint && activeElements?.length && !PlaitBoard.hasBeenTextEditing(board)) {\n if (!isPreventDefault) {\n isPreventDefault = true;\n }\n const host = BOARD_TO_HOST.get(board);\n const endPoint = transformPoint(board, toPoint(event.x, event.y, host!));\n offsetX = endPoint[0] - startPoint[0];\n offsetY = endPoint[1] - startPoint[1];\n const offsetBuffer = 5;\n if (Math.abs(offsetX) > offsetBuffer || Math.abs(offsetY) > offsetBuffer) {\n throttleRAF(() => {\n const currentElements = activeElements!.map(activeElement => {\n const [x, y] = activeElement?.points![0];\n const index = board.children.findIndex(item => item.id === activeElement.id);\n Transforms.setNode(\n board,\n {\n points: [[x + offsetX, y + offsetY]]\n },\n [index]\n );\n MERGING.set(board, true);\n return PlaitNode.get(board, [index]);\n });\n PlaitBoard.getBoardNativeElement(board).classList.add('element-moving');\n addMovingElements(board, currentElements as PlaitElement[]);\n });\n }\n }\n if (isPreventDefault) {\n // 阻止 move 过程中触发画布滚动行为\n event.preventDefault();\n }\n mousemove(event);\n };\n\n board.globalMousemove = event => {\n if (startPoint) {\n const inPlaitBoardElement = isInPlaitBoard(board, event.x, event.y);\n if (!inPlaitBoardElement) {\n cancelMove(board);\n }\n }\n globalMousemove(event);\n };\n\n board.globalMouseup = event => {\n isPreventDefault = false;\n if (startPoint) {\n cancelMove(board);\n }\n globalMouseup(event);\n };\n\n function cancelMove(board: PlaitBoard) {\n startPoint = null;\n offsetX = 0;\n offsetY = 0;\n activeElements = [];\n removeMovingElements(board);\n MERGING.set(board, false);\n PlaitBoard.getBoardNativeElement(board).classList.remove('element-moving');\n }\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\n\nexport interface PlaitPluginOptions {\n disabled?: boolean;\n}\n\nexport interface PlaitOptionsBoard extends PlaitBoard {\n getPluginOptions: <K = PlaitPluginOptions>(key: string) => K;\n setPluginOptions: <K = PlaitPluginOptions>(key: string, value: Partial<K>) => void;\n}\n\nexport const withOptions = (board: PlaitBoard) => {\n const pluginOptions = new Map<string, any>();\n const newBoard = board as PlaitOptionsBoard;\n\n newBoard.getPluginOptions = key => {\n return pluginOptions.get(key);\n };\n\n newBoard.setPluginOptions = (key, options) => {\n const oldOptions = newBoard.getPluginOptions(key) || {};\n pluginOptions.set(key, { ...oldOptions, ...options });\n };\n \n return newBoard;\n};\n","import { ChangeDetectorRef, Directive } from '@angular/core';\nimport { PlaitBoard } from '../../interfaces';\n\n@Directive({\n host: {\n class: 'plait-island-container'\n }\n})\nexport abstract class PlaitIslandBaseComponent {\n board!: PlaitBoard;\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n this.markForCheck();\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n\nexport interface OnBoardChange {\n onBoardChange: () => void;\n}\n\nexport const hasOnBoardChange = (value: any): value is OnBoardChange => {\n if (value.onBoardChange) {\n return true;\n } else {\n return false;\n }\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitPluginElementContext } from './context';\nimport { PlaitPluginElementComponent } from './plugin-element';\nimport { PlaitEffect } from '../children/effect';\nimport { Ancestor, PlaitNode } from '../../interfaces/node';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../../utils/weak-maps';\nimport { addSelectedElement, isSelectedElement, removeSelectedElement } from '../../utils';\n\n@Component({\n selector: 'plait-element',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitElementComponent implements OnInit, OnChanges, OnDestroy {\n initialized = false;\n\n instance?: PlaitPluginElementComponent<PlaitElement>;\n\n @Input() index!: number;\n\n @Input() element!: PlaitElement;\n\n @Input() parent!: Ancestor;\n\n @Input() board!: PlaitBoard;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor(public renderer2: Renderer2, public viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.initialize();\n this.drawElement();\n }\n\n initialize() {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n this.initialized = true;\n }\n\n drawElement() {\n const context = this.getContext();\n const result = this.board.drawElement(context);\n if (Array.isArray(result)) {\n } else {\n const componentRef = this.viewContainerRef.createComponent(result);\n const instance = componentRef.instance;\n instance.context = context;\n this.insertG(instance.rootG ? instance.rootG : instance.g);\n this.instance = instance;\n }\n }\n\n insertG(g: SVGGElement) {\n if (PlaitBoard.isBoard(this.parent)) {\n this.parentG.append(g);\n } else {\n let siblingG = PlaitElement.getComponent(this.parent).g;\n if (this.index > 0) {\n const brotherElement = (this.parent.children as PlaitElement[])[this.index - 1];\n const lastElement = PlaitNode.last(this.board, PlaitBoard.findPath(this.board, brotherElement));\n let component = PlaitElement.getComponent(lastElement) || PlaitElement.getComponent(brotherElement);\n siblingG = component.g;\n }\n this.parentG.insertBefore(g, siblingG);\n }\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n if (this.initialized) {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n const elementChanged = simpleChanges['element'];\n const context = this.getContext();\n if (elementChanged && isSelectedElement(this.board, elementChanged.previousValue)) {\n context.selected = true;\n removeSelectedElement(this.board, elementChanged.previousValue);\n addSelectedElement(this.board, this.element);\n }\n if (this.instance) {\n this.instance.context = context;\n }\n }\n }\n\n getContext(): PlaitPluginElementContext {\n const isSelected = isSelectedElement(this.board, this.element);\n const context: PlaitPluginElementContext = {\n element: this.element,\n parent: this.parent,\n board: this.board,\n selected: isSelected,\n effect: this.effect\n };\n return context;\n }\n\n ngOnDestroy(): void {\n this.board.destroyElement(this.getContext());\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitEffect } from './effect';\nimport { Ancestor } from '../../interfaces/node';\n\n@Component({\n selector: 'plait-children',\n template: `\n <plait-element\n *ngFor=\"let item of parent.children; let index = index; trackBy: trackBy\"\n [index]=\"index\"\n [element]=\"item\"\n [parent]=\"parent\"\n [board]=\"board\"\n [effect]=\"effect\"\n [parentG]=\"parentG\"\n ></plait-element>\n `\n})\nexport class PlaitChildrenElement implements OnInit {\n @Input() board!: PlaitBoard;\n\n @Input() parent!: Ancestor;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor() {}\n\n ngOnInit(): void {\n if (!this.parent) {\n this.parent = this.board;\n }\n if (!this.parentG) {\n this.parentG = PlaitBoard.getElementHost(this.board);\n }\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { PlaitBoard, PlaitBoardChangeEvent, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPlugin } from '../interfaces/plugin';\nimport { Viewport } from '../interfaces/viewport';\nimport { createBoard } from '../plugins/create-board';\nimport { withBoard } from '../plugins/with-board';\nimport { withHistory } from '../plugins/with-history';\nimport { withHandPointer } from '../plugins/with-hand';\nimport { withSelection } from '../plugins/with-selection';\nimport { toPoint, transformPoint } from '../utils';\nimport {\n BOARD_TO_ON_CHANGE,\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_ROUGH_SVG,\n BOARD_TO_MOVING_POINT\n} from '../utils/weak-maps';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n getViewBox,\n initializeViewportOffset,\n initializeViewBox,\n isFromViewportChange,\n setIsFromViewportChange,\n initializeViewportContainer,\n updateViewportOffset,\n setIsFromScrolling\n} from '../utils/viewport';\nimport { isHotkey } from 'is-hotkey';\nimport { withViewport } from '../plugins/with-viewport';\nimport { Point } from '../interfaces/point';\nimport { withMoving } from '../plugins/with-moving';\nimport { hasInputOrTextareaTarget } from '../utils/dom/common';\nimport { withOptions } from '../plugins/with-options';\nimport { PlaitIslandBaseComponent, hasOnBoardChange } from '../core/island/island-base.component';\nimport { BoardTransforms } from '../transforms/board';\nimport { PlaitTheme } from '../interfaces/theme';\n\nconst ElementHostClass = 'element-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\" class=\"board-host-svg\"><g class=\"element-host\"></g></svg>\n <plait-children [board]=\"board\" [effect]=\"effect\"></plait-children>\n </div>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n hasInitialized = false;\n\n effect = {};\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions?: PlaitBoardOptions;\n\n @Input() plaitTheme?: PlaitTheme;\n\n @Output() plaitChange: EventEmitter<PlaitBoardChangeEvent> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `plait-board-container pointer-${this.board.pointer} theme-${this.board.theme.themeColorMode}`;\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n @HostBinding('class.disabled-scroll')\n get disabledScrollOnNonFocus() {\n return this.board.options.disabledScrollOnNonFocus && !PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n @ContentChildren(PlaitIslandBaseComponent, { descendants: true }) islands?: QueryList<PlaitIslandBaseComponent>;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef<HTMLElement>,\n private ngZone: NgZone\n ) {}\n\n ngOnInit(): void {\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.elementResizeListener();\n this.mouseLeaveListener();\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n BOARD_TO_ELEMENT_HOST.set(this.board, elementHost);\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n this.detect();\n const changeEvent: PlaitBoardChangeEvent = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection,\n theme: this.board.theme\n };\n this.updateIslands();\n this.plaitChange.emit(changeEvent);\n });\n });\n this.hasInitialized = true;\n }\n\n ngAfterContentInit(): void {\n this.initializeIslands();\n }\n\n detect() {\n this.effect = {};\n this.cdr.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) this.board.children = valueChange.currentValue;\n if (options) this.board.options = options.currentValue;\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withHandPointer(\n withHistory(withSelection(withMoving(withBoard(withViewport(withOptions(createBoard(this.plaitValue, this.plaitOptions)))))))\n );\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n\n if (this.plaitTheme) {\n this.board.theme = this.plaitTheme;\n }\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.mousemove(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMousemove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: MouseEvent) => {\n this.board.dblclick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n tap((event: KeyboardEvent) => {\n if (PlaitBoard.getMovingPoint(this.board)) {\n if (isHotkey(['mod+=', 'mod++'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(this.board, this.board.viewport.zoom + 0.1, false);\n }\n if (isHotkey('mod+-', { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(this.board, this.board.viewport.zoom - 0.1);\n }\n if (isHotkey('mod+0', { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(this.board, 1);\n return;\n }\n if (isHotkey('mod+shift+=', { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.fitViewport(this.board);\n return;\n }\n }\n }),\n filter(event => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target))\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(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyup(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((clipboardEvent: ClipboardEvent) => {\n const mousePoint = PlaitBoard.getMovingPoint(this.board);\n if (mousePoint) {\n const targetPoint = transformPoint(this.board, toPoint(mousePoint[0], mousePoint[1], this.host));\n this.board.insertFragment(clipboardEvent.clipboardData, targetPoint);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n this.board?.deleteFragment(event.clipboardData);\n });\n }\n\n private viewportScrollListener() {\n this.ngZone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return true;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n const zoom = this.board.viewport.zoom;\n const viewBox = getViewBox(this.board, zoom);\n const origination = [scrollLeft / zoom + viewBox[0], scrollTop / zoom + viewBox[1]] as Point;\n if (Point.isEquals(origination, this.board.viewport.origination)) {\n return;\n }\n BoardTransforms.updateViewport(this.board, origination);\n setIsFromScrolling(this.board, true);\n });\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private mouseLeaveListener() {\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n });\n }\n\n private initializeIslands() {\n this.islands?.forEach(island => {\n island.initialize(this.board);\n });\n }\n\n private updateIslands() {\n this.islands?.forEach(island => {\n if (hasOnBoardChange(island)) {\n island.onBoardChange();\n }\n island.markForCheck();\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n BOARD_TO_ON_CHANGE.delete(this.board);\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n this.ngZone.run(() => {\n this.updateIslands();\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlaitBoardComponent } from './board/board.component';\nimport { PlaitElementComponent } from './core/element/element.component';\nimport { PlaitChildrenElement } from './core/children/children.component';\n\nconst COMPONENTS = [PlaitBoardComponent, PlaitChildrenElement, PlaitElementComponent];\n\n@NgModule({\n declarations: [...COMPONENTS],\n imports: [CommonModule],\n exports: [...COMPONENTS]\n})\nexport class PlaitModule {}\n","import { PlaitBoardOptions, PlaitElement, PlaitPlugin } from '../../interfaces';\nimport { createBoard } from '../../plugins/create-board';\n\n/**\n * 1.create board instance\n * 2.build fake node weak map\n */\nexport const createTestingBoard = (\n plugins: PlaitPlugin[],\n children: PlaitElement[],\n options: PlaitBoardOptions = { readonly: false, hideScrollbar: true, disabledScrollOnNonFocus: false }\n) => {\n let board = createBoard(children, options);\n plugins.forEach(plugin => {\n board = plugin(board);\n });\n return board;\n};\n","import { PlaitBoard } from \"../../interfaces/board\";\nimport { PlaitNode } from \"../../interfaces/node\";\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from \"../../utils/weak-maps\";\n\nexport const fakeNodeWeakMap = (object: PlaitNode | PlaitBoard) => {\n const children = object.children || [];\n children.forEach((value, index: number) => {\n NODE_TO_PARENT.set(value, object);\n NODE_TO_INDEX.set(value, index);\n fakeNodeWeakMap(value);\n });\n};\n\nexport const clearNodeWeakMap = (object: PlaitNode | PlaitBoard) => {\n const children = object.children || [];\n children.forEach(value => {\n NODE_TO_PARENT.delete(value);\n NODE_TO_INDEX.delete(value);\n clearNodeWeakMap(value);\n });\n};\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './constants';\nexport * from './core/element/plugin-element';\nexport * from './core/element/element.component';\nexport * from './core/children/children.component';\nexport * from './core/element/context-change';\nexport * from './core/island/island-base.component';\nexport * from './interfaces';\nexport * from './plait.module';\nexport * from './transforms';\nexport * from './utils';\nexport * from './plugins/with-selection';\nexport * from './plugins/with-moving';\nexport * from './plugins/with-options';\nexport * from './testing';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ViewportTransforms","i2.PlaitElementComponent","i1.PlaitChildrenElement"],"mappings":"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"}
1
+ {"version":3,"file":"plait-core.mjs","sources":["../../../packages/plait/src/utils/weak-maps.ts","../../../packages/plait/src/utils/tree.ts","../../../packages/plait/src/utils/element.ts","../../../packages/plait/src/interfaces/theme.ts","../../../packages/plait/src/interfaces/board.ts","../../../packages/plait/src/interfaces/pointer.ts","../../../packages/plait/src/utils/helper.ts","../../../packages/plait/src/interfaces/viewport.ts","../../../packages/plait/src/interfaces/path.ts","../../../packages/plait/src/interfaces/node.ts","../../../packages/plait/src/transforms/general.ts","../../../packages/plait/src/transforms/node.ts","../../../packages/plait/src/transforms/selection.ts","../../../packages/plait/src/transforms/viewport.ts","../../../packages/plait/src/constants/index.ts","../../../packages/plait/src/utils/dom/common.ts","../../../packages/plait/src/utils/math.ts","../../../packages/plait/src/interfaces/custom-types.ts","../../../packages/plait/src/interfaces/selection.ts","../../../packages/plait/src/utils/selected-element.ts","../../../packages/plait/src/core/element/context-change.ts","../../../packages/plait/src/core/element/plugin-element.ts","../../../packages/plait/src/utils/board.ts","../../../packages/plait/src/utils/dom/foreign.ts","../../../packages/plait/src/utils/environment.ts","../../../packages/plait/src/utils/history.ts","../../../packages/plait/src/utils/hotkeys.ts","../../../packages/plait/src/utils/id-creator.ts","../../../packages/plait/src/utils/draw/rectangle.ts","../../../packages/plait/src/utils/draw/arrow.ts","../../../packages/plait/src/utils/draw/circle.ts","../../../packages/plait/src/utils/draw/line.ts","../../../packages/plait/src/utils/common.ts","../../../packages/plait/src/utils/moving-element.ts","../../../packages/plait/src/interfaces/element.ts","../../../packages/plait/src/interfaces/rectangle-client.ts","../../../packages/plait/src/interfaces/operation.ts","../../../packages/plait/src/interfaces/point.ts","../../../packages/plait/src/interfaces/history.ts","../../../packages/plait/src/interfaces/plugin-key.ts","../../../packages/plait/src/utils/viewport.ts","../../../packages/plait/src/transforms/theme.ts","../../../packages/plait/src/transforms/board.ts","../../../packages/plait/src/transforms/index.ts","../../../packages/plait/src/interfaces/path-ref.ts","../../../packages/plait/src/plugins/create-board.ts","../../../packages/plait/src/plugins/with-board.ts","../../../packages/plait/src/plugins/with-history.ts","../../../packages/plait/src/plugins/with-hand.ts","../../../packages/plait/src/constants/selection.ts","../../../packages/plait/src/plugins/with-selection.ts","../../../packages/plait/src/plugins/with-viewport.ts","../../../packages/plait/src/plugins/with-moving.ts","../../../packages/plait/src/plugins/with-options.ts","../../../packages/plait/src/core/island/island-base.component.ts","../../../packages/plait/src/core/element/element.component.ts","../../../packages/plait/src/core/children/children.component.ts","../../../packages/plait/src/board/board.component.ts","../../../packages/plait/src/plait.module.ts","../../../packages/plait/src/testing/core/create-board.ts","../../../packages/plait/src/testing/core/fake-weak-map.ts","../../../packages/plait/src/public-api.ts","../../../packages/plait/src/plait-core.ts"],"sourcesContent":["import { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { PathRef } from '../interfaces/path-ref';\n\n// record richtext type status\nexport const IS_BOARD_CACHE = new WeakMap<Object, boolean>();\n\nexport const FLUSHING = new WeakMap<PlaitBoard, boolean>();\n\nexport const NODE_TO_INDEX = new WeakMap<PlaitNode, number>();\n\nexport const NODE_TO_PARENT = new WeakMap<PlaitNode, Ancestor>();\n\nexport const IS_TEXT_EDITABLE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ON_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n\nexport const BOARD_TO_ROUGH_SVG = new WeakMap<PlaitBoard, RoughSVG>();\n\nexport const BOARD_TO_HOST = new WeakMap<PlaitBoard, SVGSVGElement>();\n\nexport const BOARD_TO_ELEMENT_HOST = new WeakMap<PlaitBoard, SVGGElement>();\n\nexport const BOARD_TO_SELECTED_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_POINT = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_VIEWPORT_ORIGINATION = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_IS_SELECTION_MOVING = new WeakMap<PlaitBoard, boolean>();\n\n// save no standard selected elements\nexport const BOARD_TO_TEMPORARY_ELEMENTS = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const PATH_REFS: WeakMap<PlaitBoard, Set<PathRef>> = new WeakMap();\n","export function depthFirstRecursion<T extends TreeNode = TreeNode>(\n node: T,\n callback: (node: T) => void,\n recursion?: (node: T) => boolean,\n isReverse?: boolean\n) {\n if (!recursion || recursion(node)) {\n let children: TreeNode[] = [];\n if (node.children) {\n children = [...node.children];\n }\n children = isReverse ? children.reverse() : children;\n children.forEach(child => {\n depthFirstRecursion(child as T, callback, recursion);\n });\n }\n callback(node);\n}\n\nexport interface TreeNode {\n children?: TreeNode[];\n}\n","import { PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';\nimport { depthFirstRecursion } from './tree';\n\nexport function getRectangleByElements(board: PlaitBoard, elements: PlaitElement[], recursion: boolean): RectangleClient {\n const boundaryBox = {\n left: Number.MAX_VALUE,\n top: Number.MAX_VALUE,\n right: Number.NEGATIVE_INFINITY,\n bottom: Number.NEGATIVE_INFINITY\n };\n\n const calcRectangleClient = (node: PlaitElement) => {\n const nodeRectangle = board.getRectangle(node);\n if (nodeRectangle) {\n boundaryBox.left = Math.min(boundaryBox.left, nodeRectangle.x);\n boundaryBox.top = Math.min(boundaryBox.top, nodeRectangle.y);\n boundaryBox.right = Math.max(boundaryBox.right, nodeRectangle.x + nodeRectangle.width);\n boundaryBox.bottom = Math.max(boundaryBox.bottom, nodeRectangle.y + nodeRectangle.height);\n }\n };\n\n elements.forEach(element => {\n if (recursion) {\n depthFirstRecursion(\n element,\n node => calcRectangleClient(node),\n node => board.isRecursion(node)\n );\n } else {\n calcRectangleClient(element);\n }\n });\n\n if (boundaryBox.left === Number.MAX_VALUE) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n\n return {\n x: boundaryBox.left,\n y: boundaryBox.top,\n width: boundaryBox.right - boundaryBox.left,\n height: boundaryBox.bottom - boundaryBox.top\n };\n}\n\nexport function getBoardRectangle(board: PlaitBoard): RectangleClient {\n return getRectangleByElements(board, board.children, true);\n}\n","export interface PlaitTheme {\n themeColorMode: ThemeColorMode;\n}\n\nexport interface ThemeColor {\n mode: ThemeColorMode | string;\n boardBackground?: string;\n textColor: string;\n}\n\nexport enum ThemeColorMode {\n 'default' = 'default',\n 'colorful' = 'colorful',\n 'soft' = 'soft',\n 'retro' = 'retro',\n 'dark' = 'dark',\n 'starry' = 'starry'\n}\n\nexport const DefaultThemeColor: ThemeColor = {\n mode: ThemeColorMode.default,\n boardBackground: '#ffffff',\n textColor: '#333333'\n};\n\nexport const ColorfulThemeColor: ThemeColor = {\n mode: ThemeColorMode.colorful,\n boardBackground: '#ffffff',\n textColor: '#333333'\n};\n\nexport const SoftThemeColor: ThemeColor = {\n mode: ThemeColorMode.soft,\n boardBackground: '#f5f5f5',\n textColor: '#333333'\n};\n\nexport const RetroThemeColor: ThemeColor = {\n mode: ThemeColorMode.retro,\n boardBackground: '#f9f8ed',\n textColor: '#333333'\n};\n\nexport const DarkThemeColor: ThemeColor = {\n mode: ThemeColorMode.dark,\n boardBackground: '#141414',\n textColor: '#FFFFFF'\n};\n\nexport const StarryThemeColor: ThemeColor = {\n mode: ThemeColorMode.starry,\n boardBackground: '#0d2537',\n textColor: '#FFFFFF'\n};\n\nexport const ThemeColors: ThemeColor[] = [\n DefaultThemeColor,\n ColorfulThemeColor,\n SoftThemeColor,\n RetroThemeColor,\n DarkThemeColor,\n StarryThemeColor\n];\n","import { PlaitPointerType } from './pointer';\nimport { ComponentType, PlaitElement } from './element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitHistory } from './history';\nimport { PlaitOperation } from './operation';\nimport { Selection, Range } from './selection';\nimport { Viewport } from './viewport';\nimport { PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport {\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_ROUGH_SVG,\n IS_BOARD_CACHE,\n IS_TEXT_EDITABLE,\n NODE_TO_INDEX,\n NODE_TO_PARENT\n} from '../utils/weak-maps';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { Point } from './point';\nimport { RectangleClient } from './rectangle-client';\nimport { getRectangleByElements } from '../utils/element';\nimport { PathRef, PathRefOptions } from './path-ref';\nimport { Ancestor, PlaitNode } from './node';\nimport { Path } from './path';\nimport { PlaitTheme, ThemeColor, ThemeColors } from './theme';\n\nexport interface PlaitBoard {\n viewport: Viewport;\n children: PlaitElement[];\n theme: PlaitTheme;\n operations: PlaitOperation[];\n // record pointer selection or drag selection\n // it will be dirty when board viewport change\n selection: Selection | null;\n pointer: PlaitPointerType | string;\n history: PlaitHistory;\n options: PlaitBoardOptions;\n undo: () => void;\n redo: () => void;\n apply: (operation: PlaitOperation) => void;\n onChange: () => void;\n mousedown: (event: MouseEvent) => void;\n mousemove: (event: MouseEvent) => void;\n mouseleave: (event: MouseEvent) => void;\n globalMousemove: (event: MouseEvent) => void;\n mouseup: (event: MouseEvent) => void;\n globalMouseup: (event: MouseEvent) => void;\n keydown: (event: KeyboardEvent) => void;\n keyup: (event: KeyboardEvent) => void;\n setFragment: (data: DataTransfer | null) => void;\n insertFragment: (data: DataTransfer | null, targetPoint?: Point) => void;\n deleteFragment: (data: DataTransfer | null) => void;\n dblclick: (event: MouseEvent) => void;\n drawElement: (context: PlaitPluginElementContext) => SVGGElement[] | ComponentType<PlaitPluginElementComponent>;\n redrawElement: (context: PlaitPluginElementContext, previousContext?: PlaitPluginElementContext) => SVGGElement[] | void;\n destroyElement: (context: PlaitPluginElementContext) => void;\n isHitSelection: (element: PlaitElement, range: Range) => boolean;\n isRecursion: (element: PlaitElement) => boolean;\n isMovable: (element: PlaitElement) => boolean;\n getRectangle: (element: PlaitElement) => RectangleClient | null;\n isWithinSelection: (element: PlaitElement) => boolean;\n pathRef: (path: Path, options?: PathRefOptions) => PathRef;\n pathRefs: () => Set<PathRef>;\n applyTheme: (element: PlaitElement) => void;\n}\n\nexport interface PlaitBoardChangeEvent {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n theme: PlaitTheme;\n}\n\nexport interface PlaitBoardOptions {\n readonly?: boolean;\n hideScrollbar?: boolean;\n disabledScrollOnNonFocus?: boolean;\n themeColors?: ThemeColor[];\n}\n\nexport interface PlaitBoardMove {\n x: number;\n y: number;\n}\n\nexport const PlaitBoard = {\n isBoard(value: any): value is PlaitBoard {\n const cachedIsBoard = IS_BOARD_CACHE.get(value);\n if (cachedIsBoard !== undefined) {\n return cachedIsBoard;\n }\n const isBoard = typeof value.onChange === 'function' && typeof value.apply === 'function';\n IS_BOARD_CACHE.set(value, isBoard);\n return isBoard;\n },\n findPath(board: PlaitBoard, node: PlaitNode): Path {\n const path: Path = [];\n let child: Ancestor = node;\n while (true) {\n const parent = NODE_TO_PARENT.get(child as PlaitElement);\n if (parent == null) {\n if (PlaitBoard.isBoard(child)) {\n return path;\n } else {\n break;\n }\n }\n const i = NODE_TO_INDEX.get(child as PlaitElement);\n if (i == null) {\n break;\n }\n path.unshift(i);\n child = parent;\n }\n throw new Error(`Unable to find the path for Plait node: ${JSON.stringify(node)}`);\n },\n getHost(board: PlaitBoard) {\n return BOARD_TO_HOST.get(board) as SVGSVGElement;\n },\n getElementHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board) as SVGGElement;\n },\n getRoughSVG(board: PlaitBoard) {\n return BOARD_TO_ROUGH_SVG.get(board) as RoughSVG;\n },\n getComponent(board: PlaitBoard) {\n return BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n },\n getBoardContainer(board: PlaitBoard) {\n return PlaitBoard.getComponent(board).nativeElement;\n },\n getRectangle(board: PlaitBoard) {\n return getRectangleByElements(board, board.children, true);\n },\n getViewportContainer(board: PlaitBoard) {\n return PlaitBoard.getHost(board).parentElement as HTMLElement;\n },\n isFocus(board: PlaitBoard) {\n return !!board.selection;\n },\n isReadonly(board: PlaitBoard) {\n return board.options.readonly;\n },\n hasBeenTextEditing(board: PlaitBoard) {\n return !!IS_TEXT_EDITABLE.get(board);\n },\n getPointer<T = PlaitPointerType>(board: PlaitBoard) {\n return board.pointer as T;\n },\n isPointer<T = PlaitPointerType>(board: PlaitBoard, pointer: T) {\n return board.pointer === pointer;\n },\n getMovingPoint(board: PlaitBoard) {\n return BOARD_TO_MOVING_POINT.get(board);\n },\n getThemeColors<T extends ThemeColor = ThemeColor>(board: PlaitBoard) {\n return (board.options.themeColors || ThemeColors) as T[];\n }\n};\n","export enum PlaitPointerType {\n 'hand' = 'hand',\n 'selection' = 'selection'\n}\n","export function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n\n/**\n * 规范 point\n * @param point\n * @returns point\n */\nexport function normalizePoint(point: number[]) {\n return Array.isArray(point)\n ? {\n x: point[0],\n y: point[1]\n }\n : point;\n}\n","import { isNullOrUndefined } from '../utils/helper';\nimport { ExtendedType } from './custom-types';\nimport { Point } from './point';\n\nexport interface BaseViewport {\n [key: string]: any;\n zoom: number;\n origination?: Point;\n}\n\nexport type Viewport = ExtendedType<'Viewport', BaseViewport>;\n\nexport interface ViewportInterface {\n isViewport: (value: any) => value is Viewport;\n}\n\nexport const Viewport: ViewportInterface = {\n isViewport: (value: any): value is Viewport => {\n return !isNullOrUndefined(value.zoom) && !isNullOrUndefined(value.viewBackgroundColor);\n },\n};\n\nexport interface FitViewportOptions {\n maxWidth?: number;\n limitHeight: number;\n autoFitPadding: number;\n containerClass: string;\n}\n","import produce from 'immer';\nimport { PlaitOperation } from './operation';\n\nexport interface PathLevelsOptions {\n reverse?: boolean;\n}\n\nexport type Path = number[];\n\nexport const Path = {\n /**\n * Get a list of ancestor paths for a given path.\n *\n * The paths are sorted from shallowest to deepest ancestor. However, if the\n * `reverse: true` option is passed, they are reversed.\n */\n ancestors(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n let paths = Path.levels(path, options);\n\n if (reverse) {\n paths = paths.slice(1);\n } else {\n paths = paths.slice(0, -1);\n }\n\n return paths;\n },\n /**\n * Get a list of paths at every level down to a path. Note: this is the same\n * as `Path.ancestors`, but including the path itself.\n *\n * The paths are sorted from shallowest to deepest. However, if the `reverse:\n * true` option is passed, they are reversed.\n */\n levels(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n const list: Path[] = [];\n\n for (let i = 0; i <= path.length; i++) {\n list.push(path.slice(0, i));\n }\n\n if (reverse) {\n list.reverse();\n }\n\n return list;\n },\n parent(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the parent path of the root path [${path}].`);\n }\n\n return path.slice(0, -1);\n },\n next(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no next index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last + 1);\n },\n previous(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no previous index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last - 1);\n },\n /**\n * Check if a path is an ancestor of another.\n */\n\n isAncestor(path: Path, another: Path): boolean {\n return path.length < another.length && Path.compare(path, another) === 0;\n },\n /**\n * Compare a path to another, returning an integer indicating whether the path\n * was before, at, or after the other.\n *\n * Note: Two paths of unequal length can still receive a `0` result if one is\n * directly above or below the other. If you want exact matching, use\n * [[Path.equals]] instead.\n */\n compare(path: Path, another: Path): -1 | 0 | 1 {\n const min = Math.min(path.length, another.length);\n\n for (let i = 0; i < min; i++) {\n if (path[i] < another[i]) return -1;\n if (path[i] > another[i]) return 1;\n }\n\n return 0;\n },\n\n /**\n * Check if a path is exactly equal to another.\n */\n\n equals(path: Path, another: Path): boolean {\n return path.length === another.length && path.every((n, i) => n === another[i]);\n },\n /**\n * Check if a path ends before one of the indexes in another.\n */\n\n endsBefore(path: Path, another: Path): boolean {\n const i = path.length - 1;\n const as = path.slice(0, i);\n const bs = another.slice(0, i);\n const av = path[i];\n const bv = another[i];\n return Path.equals(as, bs) && av < bv;\n },\n /**\n * Check if a path is a sibling of another.\n */\n isSibling(path: Path, another: Path): boolean {\n if (path.length !== another.length) {\n return false;\n }\n\n const as = path.slice(0, -1);\n const bs = another.slice(0, -1);\n const al = path[path.length - 1];\n const bl = another[another.length - 1];\n return al !== bl && Path.equals(as, bs);\n },\n transform(path: Path | null, operation: PlaitOperation): Path | null {\n return produce(path, p => {\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (!path || path?.length === 0) {\n return;\n }\n\n if (p === null) {\n return null;\n }\n\n switch (operation.type) {\n case 'insert_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.endsBefore(op, p) || Path.isAncestor(op, p)) {\n p[op.length - 1] += 1;\n }\n\n break;\n }\n\n case 'remove_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.isAncestor(op, p)) {\n return null;\n } else if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n\n case 'move_node': {\n const { path: op, newPath: onp } = operation;\n\n // If the old and new path are the same, it's a no-op.\n if (Path.equals(op, onp)) {\n return;\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice();\n // op.length <= onp.length is different for slate\n // resolve drag from [0, 0] to [0, 3] issue\n if (Path.endsBefore(op, onp) && op.length <= onp.length) {\n copy[op.length - 1] -= 1;\n }\n\n return copy.concat(p.slice(op.length));\n } else if (Path.isSibling(op, onp) && (Path.isAncestor(onp, p) || Path.equals(onp, p))) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n } else {\n p[op.length - 1] += 1;\n }\n } else if (Path.endsBefore(onp, p) || Path.equals(onp, p) || Path.isAncestor(onp, p)) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n p[onp.length - 1] += 1;\n } else if (Path.endsBefore(op, p)) {\n if (Path.equals(onp, p)) {\n p[onp.length - 1] += 1;\n }\n\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n }\n return p;\n });\n }\n};\n","import { PlaitElement } from './element';\nimport { PlaitBoard } from './board';\nimport { Path } from './path';\n\nexport type PlaitNode = PlaitElement;\n\nexport type Ancestor = PlaitBoard | PlaitElement;\n\nexport interface NodeParentsOptions {\n reverse?: boolean;\n}\n\nexport const PlaitNode = {\n parent: (board: PlaitBoard, path: Path) => {\n const parentPath = Path.parent(path);\n const p = PlaitNode.get(board, parentPath);\n return p;\n },\n /**\n * Return a generator of all the ancestor nodes above a specific path.\n *\n * By default the order is top-down, from highest to lowest ancestor in\n * the tree, but you can pass the `reverse: true` option to go bottom-up.\n */\n *parents(root: PlaitBoard, path: Path, options: NodeParentsOptions = {}): Generator<PlaitNode, void, undefined> {\n for (const p of Path.ancestors(path, options)) {\n const n = PlaitNode.get(root, p);\n yield n;\n }\n },\n get<T extends PlaitNode = PlaitNode>(root: PlaitBoard, path: Path): T {\n let node: Ancestor = root;\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n node = node.children[p];\n }\n return node as T;\n },\n last(board: PlaitBoard, path: Path) {\n let n = PlaitNode.get(board, path);\n while (n && n.children && n.children.length > 0) {\n const i = n.children.length - 1;\n n = n.children[i];\n }\n return n;\n }\n};\n","import { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { createDraft, finishDraft, isDraft } from 'immer';\nimport { Viewport } from '../interfaces/viewport';\nimport { Selection } from '../interfaces/selection';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\nimport { PlaitTheme } from '../interfaces/theme';\n\nexport interface GeneralTransforms {\n transform: (board: PlaitBoard, op: PlaitOperation) => void;\n}\n\nconst applyToDraft = (board: PlaitBoard, selection: Selection | null, viewport: Viewport, theme: PlaitTheme, op: PlaitOperation) => {\n switch (op.type) {\n case 'insert_node': {\n const { path, node } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n\n parent.children.splice(index, 0, node);\n break;\n }\n case 'remove_node': {\n const { path } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n parent.children.splice(index, 1);\n break;\n }\n case 'move_node': {\n const { path, newPath } = op;\n\n if (Path.isAncestor(path, newPath)) {\n throw new Error(`Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.`);\n }\n\n const node = PlaitNode.get(board, path);\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n // This is tricky, but since the `path` and `newPath` both refer to\n // the same snapshot in time, there's a mismatch. After either\n // removing the original position, the second step's path can be out\n // of date. So instead of using the `op.newPath` directly, we\n // transform `op.path` to ascertain what the `newPath` would be after\n // the operation was applied.\n parent.children?.splice(index, 1);\n const truePath = Path.transform(path, op)!;\n const newParent = PlaitNode.get(board, Path.parent(truePath)) as Ancestor;\n const newIndex = truePath[truePath.length - 1];\n\n newParent.children?.splice(newIndex, 0, node);\n break;\n }\n case 'set_node': {\n const { path, properties, newProperties } = op;\n\n if (path.length === 0) {\n throw new Error(`Cannot set properties on the root node!`);\n }\n\n const node = PlaitNode.get(board, path);\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete node[key];\n } else {\n node[key] = value;\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete node[key];\n }\n }\n\n break;\n }\n case 'set_viewport': {\n const { newProperties } = op;\n if (newProperties == null) {\n viewport = newProperties;\n } else {\n if (viewport == null) {\n if (!Viewport.isViewport(newProperties)) {\n throw new Error(\n `Cannot apply an incomplete \"set_viewport\" operation properties ${JSON.stringify(\n newProperties\n )} when there is no current viewport.`\n );\n }\n viewport = { ...newProperties };\n }\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete viewport[key];\n } else {\n viewport[key] = value;\n }\n }\n }\n break;\n }\n case 'set_selection': {\n const { newProperties } = op;\n if (newProperties == null) {\n selection = newProperties;\n } else {\n if (selection === null) {\n selection = op.newProperties;\n } else {\n selection.ranges = newProperties.ranges;\n }\n }\n break;\n }\n case 'set_theme': {\n const { newProperties } = op;\n theme = newProperties as PlaitTheme;\n break;\n }\n }\n return { selection, viewport, theme };\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 let theme = board.theme && createDraft(board.theme);\n\n try {\n const state = applyToDraft(board, selection, viewport, theme, op);\n viewport = state.viewport;\n selection = state.selection;\n theme = state.theme;\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 board.theme = isDraft(theme) ? finishDraft(theme) : theme;\n }\n }\n};\n","import { InsertNodeOperation, MoveNodeOperation, RemoveNodeOperation, SetNodeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport function insertNode(board: PlaitBoard, node: PlaitNode, path: Path) {\n const operation: InsertNodeOperation = { type: 'insert_node', node, path };\n board.apply(operation);\n}\n\nexport function setNode(board: PlaitBoard, props: Partial<PlaitNode>, path: Path) {\n const properties: Partial<PlaitNode> = {};\n const newProperties: Partial<PlaitNode> = {};\n const node = PlaitNode.get(board, path);\n for (const k in props) {\n if (node[k] !== props[k]) {\n if (node.hasOwnProperty(k)) {\n properties[k] = node[k];\n }\n if (props[k] != null) newProperties[k] = props[k];\n }\n }\n const operation: SetNodeOperation = { type: 'set_node', properties, newProperties, path };\n board.apply(operation);\n}\n\nexport function removeNode(board: PlaitBoard, path: Path) {\n const node = PlaitNode.get(board, path);\n const operation: RemoveNodeOperation = { type: 'remove_node', path, node };\n board.apply(operation);\n}\n\nexport function moveNode(board: PlaitBoard, path: Path, newPath: Path) {\n const operation: MoveNodeOperation = { type: 'move_node', path, newPath };\n board.apply(operation);\n}\n\nexport interface NodeTransforms {\n insertNode: (board: PlaitBoard, node: PlaitNode, path: Path) => void;\n setNode: (board: PlaitBoard, node: Partial<PlaitNode>, path: Path) => void;\n removeNode: (board: PlaitBoard, path: Path) => void;\n moveNode: (board: PlaitBoard, path: Path, newPath: Path) => void;\n}\n\nexport const NodeTransforms: NodeTransforms = {\n insertNode,\n setNode,\n removeNode,\n moveNode\n};\n","import { SetSelectionOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Selection } from '../interfaces/selection';\nimport { BOARD_TO_TEMPORARY_ELEMENTS } from '../utils/weak-maps';\nimport { PlaitElement } from '../interfaces/element';\n\nexport function setSelection(board: PlaitBoard, selection: Selection | null) {\n const operation: SetSelectionOperation = { type: 'set_selection', properties: board.selection, newProperties: selection };\n board.apply(operation);\n}\n\nexport interface SelectionTransforms {\n setSelection: (board: PlaitBoard, selection: Selection | null) => void;\n setSelectionWithTemporaryElements: (board: PlaitBoard, elements: PlaitElement[]) => void;\n}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection,\n setSelectionWithTemporaryElements\n};\n\n\nexport function setSelectionWithTemporaryElements(board: PlaitBoard, elements: PlaitElement[]) {\n setTimeout(() => {\n BOARD_TO_TEMPORARY_ELEMENTS.set(board, elements);\n setSelection(board, { ranges: [] });\n });\n}","import { SetViewportOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Viewport } from '../interfaces/viewport';\n\nexport function setViewport(board: PlaitBoard, viewport: Viewport) {\n const operation: SetViewportOperation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };\n board.apply(operation);\n}\n\nexport interface ViewportTransforms {\n setViewport: (board: PlaitBoard, viewport: Viewport) => void;\n}\n\nexport const ViewportTransforms: ViewportTransforms = {\n setViewport\n};\n","export const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';\n\nexport const SCROLL_BAR_WIDTH = 20;\n\nexport const MAX_RADIUS = 16;\n\nexport const POINTER_BUTTON = {\n MAIN: 0,\n WHEEL: 1,\n SECONDARY: 2,\n TOUCH: -1,\n } as const;","import { POINTER_BUTTON } from '../../constants';\nimport { Point } from '../../interfaces/point';\n\nexport const NS = 'http://www.w3.org/2000/svg';\n\nexport function toPoint(x: number, y: number, container: SVGElement): Point {\n const rect = container.getBoundingClientRect();\n return [x - rect.x, y - rect.y];\n}\n\nexport function createG() {\n const newG = document.createElementNS(NS, 'g');\n return newG;\n}\n\nexport function createPath() {\n const newG = document.createElementNS(NS, 'path');\n return newG;\n}\n\nexport function createSVG() {\n const svg = document.createElementNS(NS, 'svg');\n return svg;\n}\n\nexport function createText(x: number, y: number, fill: string, textContent: string) {\n var text = document.createElementNS(NS, 'text');\n text.setAttribute('x', `${x}`);\n text.setAttribute('y', `${y}`);\n text.setAttribute('fill', fill);\n text.textContent = textContent;\n return text;\n}\n\n/**\n * Check if a DOM node is an element node.\n */\nexport const isDOMElement = (value: any): value is Element => {\n return isDOMNode(value) && value.nodeType === 1;\n};\n\n/**\n * Check if a value is a DOM node.\n */\nexport const isDOMNode = (value: any): value is Node => {\n return value instanceof window.Node;\n};\n\nexport const hasInputOrTextareaTarget = (target: EventTarget | null) => {\n if (isDOMElement(target)) {\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\n return true;\n }\n }\n return false;\n};\n\nexport const isSecondaryPointer = (event: MouseEvent) => {\n return event.button === POINTER_BUTTON.SECONDARY;\n}\n\nexport const isMainPointer = (event: MouseEvent) => {\n return event.button === POINTER_BUTTON.MAIN;\n}","import { RectangleClient } from '../interfaces/rectangle-client';\n\n// https://stackoverflow.com/a/6853926/232122\nexport function distanceBetweenPointAndSegment(x: number, y: number, x1: number, y1: number, x2: number, y2: number) {\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSquare = C * C + D * D;\n let param = -1;\n if (lenSquare !== 0) {\n // in case of 0 length line\n param = dot / lenSquare;\n }\n\n let xx, yy;\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n const dx = x - xx;\n const dy = y - yy;\n return Math.hypot(dx, dy);\n}\n\nexport function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) {\n // 𝑎′𝑥=(𝑎𝑥−𝑐𝑥)cos𝜃−(𝑎𝑦−𝑐𝑦)sin𝜃+𝑐𝑥\n // 𝑎′𝑦=(𝑎𝑥−𝑐𝑥)sin𝜃+(𝑎𝑦−𝑐𝑦)cos𝜃+𝑐𝑦.\n // https://math.stackexchange.com/questions/2204520/how-do-i-rotate-a-line-segment-in-a-specific-point-on-the-line\n return [(x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2];\n}\n\nexport function distanceBetweenPointAndPoint(x1: number, y1: number, x2: number, y2: number) {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.hypot(dx, dy);\n}\n\n// https://stackoverflow.com/questions/5254838/calculating-distance-between-a-point-and-a-rectangular-box-nearest-point\nexport function distanceBetweenPointAndRectangle(x: number, y: number, rect: RectangleClient) {\n var dx = Math.max(rect.x - x, 0, x - (rect.x + rect.width));\n var dy = Math.max(rect.y - y, 0, y - (rect.y + rect.height));\n return Math.sqrt(dx * dx + dy * dy);\n}\n","/**\n * Extendable Custom Types Interface\n */\n\ntype ExtendableTypes = 'Viewport' | 'SetViewportOperation' | 'SetSelectionOperation';\n\nexport interface CustomTypes {\n [key: string]: unknown;\n}\n\nexport type ExtendedType<K extends ExtendableTypes, B> = unknown extends CustomTypes[K] ? B : CustomTypes[K];\n","import { Point } from './point';\n\nexport const SELECTION_BORDER_COLOR = '#6698FF';\nexport const SELECTION_FILL_COLOR = '#6698FF19'; // 主色 0.1 透明度\n\nexport interface Range {\n anchor: Point;\n focus: Point;\n}\n\nexport interface Selection {\n ranges: Range[];\n}\n\nexport const Selection = {\n isCollapsed(selection: Range) {\n if (selection.anchor[0] == selection.focus[0] && selection.anchor[1] === selection.focus[1]) {\n return true;\n } else {\n return false;\n }\n }\n};\n","import { PlaitBoard } from '../interfaces/board';\nimport { Ancestor } from '../interfaces/node';\nimport { depthFirstRecursion } from './tree';\nimport { BOARD_TO_SELECTED_ELEMENT } from './weak-maps';\nimport { Selection, Range } from '../interfaces/selection';\nimport { PlaitElement } from '../interfaces/element';\n\nexport const getHitElements = (board: PlaitBoard, selection?: Selection) => {\n const realSelection = selection || board.selection;\n const selectedElements: PlaitElement[] = [];\n const isCollapsed = realSelection && realSelection.ranges.length === 1 && Selection.isCollapsed(realSelection.ranges[0]);\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (selectedElements.length > 0 && isCollapsed) {\n return;\n }\n if (\n !PlaitBoard.isBoard(node) &&\n realSelection &&\n realSelection.ranges.some(range => {\n return board.isHitSelection(node, range);\n })\n ) {\n selectedElements.push(node);\n }\n },\n node => {\n if (PlaitBoard.isBoard(node) || board.isRecursion(node)) {\n return true;\n } else {\n return false;\n }\n },\n true\n );\n return selectedElements;\n};\n\nexport const getHitElementOfRoot = (board: PlaitBoard, rootElements: PlaitElement[], range: Range) => {\n const newRootElements = [...rootElements].reverse();\n return newRootElements.find(item => {\n return board.isHitSelection(item, range);\n });\n};\n\nexport const isHitElements = (board: PlaitBoard, elements: PlaitElement[], ranges: Range[]) => {\n let isIntersectionElements = false;\n if (elements.length) {\n elements.map(item => {\n if (!isIntersectionElements) {\n isIntersectionElements = ranges.some(range => {\n return board.isHitSelection(item, range);\n });\n }\n });\n }\n return isIntersectionElements;\n};\n\nexport const cacheSelectedElements = (board: PlaitBoard, selectedElements: PlaitElement[]) => {\n BOARD_TO_SELECTED_ELEMENT.set(board, selectedElements);\n};\n\nexport const getSelectedElements = (board: PlaitBoard) => {\n return BOARD_TO_SELECTED_ELEMENT.get(board) || [];\n};\n\nexport const addSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n cacheSelectedElements(board, [...selectedElements, element]);\n};\n\nexport const removeSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n const newSelectedElements = selectedElements.filter(value => value !== element);\n cacheSelectedElements(board, newSelectedElements);\n};\n\nexport const clearSelectedElement = (board: PlaitBoard) => {\n cacheSelectedElements(board, []);\n};\n\nexport const isSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n return !!selectedElements.find(value => value === element);\n};\n","import { PlaitBoard, PlaitElement } from '../../interfaces';\nimport { PlaitPluginElementContext } from './context';\n\nexport interface BeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n beforeContextChange: (value: PlaitPluginElementContext<T>) => void;\n}\n\nexport interface OnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n onContextChanged: (value: PlaitPluginElementContext<T, K>, previous: PlaitPluginElementContext<T, K>) => void;\n}\n\nexport function hasBeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is BeforeContextChange<T, K> {\n if (value.beforeContextChange) {\n return true;\n }\n return false;\n}\n\nexport function hasOnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is OnContextChanged<T, K> {\n if (value.onContextChanged) {\n return true;\n }\n return false;\n}\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard, PlaitElement, PlaitPluginElementContext } from '../../interfaces';\nimport { removeSelectedElement } from '../../utils/selected-element';\nimport { createG } from '../../utils/dom/common';\nimport { hasBeforeContextChange, hasOnContextChanged } from './context-change';\n\n@Directive()\nexport abstract class PlaitPluginElementComponent<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>\n implements OnInit, OnDestroy {\n g!: SVGGElement;\n\n rootG?: SVGGElement;\n\n initialized = false;\n\n protected _context!: PlaitPluginElementContext<T, K>;\n\n @Input()\n set context(value: PlaitPluginElementContext<T, K>) {\n if (hasBeforeContextChange<T, K>(this)) {\n this.beforeContextChange(value);\n }\n const previousContext = this._context;\n this._context = value;\n if (this.element) {\n ELEMENT_TO_COMPONENT.set(this.element, this);\n }\n if (this.initialized) {\n this.cdr.markForCheck();\n if (hasOnContextChanged<T>(this)) {\n this.onContextChanged(value, previousContext);\n }\n } else {\n if (PlaitElement.isRootElement(this.element) && this.element.children) {\n this.g = createG();\n this.rootG = createG();\n this.rootG.append(this.g);\n } else {\n this.g = createG();\n }\n }\n }\n\n get context() {\n return this._context;\n }\n\n get element() {\n return this.context && this.context.element;\n }\n\n get board() {\n return this.context && this.context.board;\n }\n\n get selected() {\n return this.context && this.context.selected;\n }\n\n get effect() {\n return this.context && this.context.effect;\n }\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n if (this.element.type) {\n (this.rootG || this.g).setAttribute(`plait-${this.element.type}`, 'true');\n }\n this.initialized = true;\n }\n\n ngOnDestroy(): void {\n if (ELEMENT_TO_COMPONENT.get(this.element) === this) {\n ELEMENT_TO_COMPONENT.delete(this.element);\n }\n removeSelectedElement(this.board, this.element);\n (this.rootG || this.g).remove();\n }\n}\n\nexport const ELEMENT_TO_COMPONENT = new WeakMap<PlaitElement, PlaitPluginElementComponent>();\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { distanceBetweenPointAndRectangle } from './math';\n\nexport type ViewBox = {\n minX: number;\n minY: number;\n width: number;\n height: number;\n viewportWidth: number;\n viewportHeight: number;\n};\n\nexport function transformPoints(board: PlaitBoard, points: Point[]) {\n const newPoints = points.map(point => {\n return transformPoint(board, point);\n });\n return newPoints;\n}\n\nexport function transformPoint(board: PlaitBoard, point: Point) {\n const { width, height } = PlaitBoard.getHost(board).getBoundingClientRect();\n const viewBox = PlaitBoard.getHost(board).viewBox.baseVal;\n const x = (point[0] / width) * viewBox.width + viewBox.x;\n const y = (point[1] / height) * viewBox.height + viewBox.y;\n const newPoint = [x, y] as Point;\n\n return newPoint;\n}\n\nexport function isInPlaitBoard(board: PlaitBoard, x: number, y: number) {\n const plaitBoardElement = PlaitBoard.getBoardContainer(board);\n const plaitBoardRect = plaitBoardElement.getBoundingClientRect();\n const distances = distanceBetweenPointAndRectangle(x, y, plaitBoardRect);\n return distances === 0;\n}\n\nexport function getRealScrollBarWidth(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n let scrollBarWidth = 0;\n if (!hideScrollbar) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n scrollBarWidth = viewportContainer.offsetWidth - viewportContainer.clientWidth;\n }\n return scrollBarWidth;\n}","import { NS } from './common';\n\nexport function createForeignObject(x: number, y: number, width: number, height: number) {\n var newForeignObject = document.createElementNS(NS, 'foreignObject');\n newForeignObject.setAttribute('x', `${x}`);\n newForeignObject.setAttribute('y', `${y}`);\n newForeignObject.setAttribute('width', `${width}`);\n newForeignObject.setAttribute('height', `${height}`);\n return newForeignObject;\n}\n\nexport function updateForeignObject(g: SVGGElement, width: number, height: number, x: number, y: number) {\n const foreignObject = g.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${width}`);\n foreignObject.setAttribute('height', `${height}`);\n foreignObject.setAttribute('x', `${x}`);\n foreignObject.setAttribute('y', `${y}`);\n }\n}\n","export const IS_IOS =\n typeof navigator !== 'undefined' &&\n typeof window !== 'undefined' &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !(window as any).MSStream;\n\nexport const IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent);\n\nexport const IS_FIREFOX = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);\n\nexport const IS_SAFARI = typeof navigator !== 'undefined' && /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent);\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent);\n\nexport const IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent);\n\n// Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput\nexport const IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent);\n","import { 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","import { Options } from 'roughjs/bin/core';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MAX_RADIUS } from '../../constants';\n\n/**\n * drawRoundRectangle\n */\nexport function drawRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n options: Options,\n outline = false,\n borderRadius?: number\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n const defaultRadius = Math.min(width, height) / 8;\n let radius = borderRadius || defaultRadius;\n if (defaultRadius > MAX_RADIUS) {\n radius = outline ? MAX_RADIUS + 2 : MAX_RADIUS;\n }\n\n const point1 = [x1 + radius, y1];\n const point2 = [x2 - radius, y1];\n const point3 = [x2, y1 + radius];\n const point4 = [x2, y2 - radius];\n const point5 = [x2 - radius, y2];\n const point6 = [x1 + radius, y2];\n const point7 = [x1, y2 - radius];\n const point8 = [x1, y1 + radius];\n\n return rs.path(\n `M${point2[0]} ${point2[1]} A ${radius} ${radius}, 0, 0, 1, ${point3[0]} ${point3[1]} L ${point4[0]} ${point4[1]} A ${radius} ${radius}, 0, 0, 1, ${point5[0]} ${point5[1]} L ${point6[0]} ${point6[1]} A ${radius} ${radius}, 0, 0, 1, ${point7[0]} ${point7[1]} L ${point8[0]} ${point8[1]} A ${radius} ${radius}, 0, 0, 1, ${point1[0]} ${point1[1]} Z`,\n options\n );\n}\n\nexport function drawAbstractRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n isHorizontal: boolean,\n options: Options\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n const radius = 5;\n const handleGap = 4;\n const handleLength = 10;\n\n const handleSpace = handleLength + handleGap * 2;\n\n if (isHorizontal) {\n const handleSideLine = (width - handleSpace - radius * 2) / 2;\n const sideLine = height - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${handleSideLine},0\n m${handleSpace},0\n l${handleSideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${sideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${handleSideLine},0\n m-${handleSpace},0\n l-${handleSideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${sideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n } else {\n const handleSideLine = (height - handleSpace - radius * 2) / 2;\n const sideLine = width - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${sideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${handleSideLine}\n m0,${handleSpace}\n l0,${handleSideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${sideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${handleSideLine}\n m0,-${handleSpace}\n l0,-${handleSideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n }\n}\n","import { rotate } from '../math';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { Options } from 'roughjs/bin/core';\nimport { Point } from '../../interfaces';\n\nexport function arrowPoints(start: Point, end: Point, maxHypotenuseLength = 10, degree = 40) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n let hypotenuse = Math.hypot(width, height); // 斜边\n const realRotateLine = hypotenuse > maxHypotenuseLength * 2 ? maxHypotenuseLength : hypotenuse / 2;\n const rotateWidth = (realRotateLine / hypotenuse) * width;\n const rotateHeight = (realRotateLine / hypotenuse) * height;\n const rotatePoint = [\n end[0] > start[0] ? end[0] - rotateWidth : end[0] + rotateWidth,\n end[1] > start[1] ? end[1] - rotateHeight : end[1] + rotateHeight\n ];\n const pointRight = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (degree * Math.PI) / 180) as Point;\n const pointLeft = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (-degree * Math.PI) / 180) as Point;\n return { pointLeft, pointRight };\n}\n\nexport function drawArrow(rs: RoughSVG, start: Point, end: Point, options: Options, maxHypotenuseLength = 10, degree = 40): SVGGElement[] {\n const { pointLeft, pointRight } = arrowPoints(start, end, maxHypotenuseLength, degree);\n const arrowLineLeft = rs.linearPath([pointLeft, end], options);\n const arrowLineRight = rs.linearPath([pointRight, end], options);\n return [arrowLineLeft, arrowLineRight];\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\n\nexport function drawCircle(roughSVG: RoughSVG, point: Point, diameter: number, options: Options): SVGGElement {\n return roughSVG.circle(point[0], point[1], diameter, options);\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\nimport { createG, createPath } from '../dom/common';\n\nexport function drawLine(rs: RoughSVG, start: Point, end: Point, options: Options): SVGGElement {\n return rs.linearPath([start, end], options);\n}\n\nexport function drawLinearPath(points: Point[], options?: Options) {\n const g = createG();\n const path = createPath();\n\n let polylinePath = '';\n points.forEach((point, index) => {\n if (index === 0) {\n polylinePath += `M ${point[0]} ${point[1]} `;\n } else {\n polylinePath += `L ${point[0]} ${point[1]} `;\n }\n });\n\n path.setAttribute('d', polylinePath);\n path.setAttribute('stroke', `${options?.stroke}`);\n path.setAttribute('stroke-width', `${options?.strokeWidth}`);\n path.setAttribute('fill', `none`);\n g.appendChild(path);\n\n return g;\n}\n","import { Subscription, timer } from 'rxjs';\n\nlet timerId: number | null = null;\n\nexport const throttleRAF = (fn: () => void) => {\n const scheduleFunc = () => {\n timerId = requestAnimationFrame(() => {\n timerId = null;\n fn();\n });\n };\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n scheduleFunc();\n};\n\nexport const debounce = (func: () => void, wait: number, options?: { leading: boolean }) => {\n let timerSubscription: Subscription | null = null;\n return () => {\n if (timerSubscription && !timerSubscription.closed) {\n timerSubscription.unsubscribe();\n timerSubscription = timer(wait).subscribe(() => {\n func();\n });\n } else {\n if (options?.leading) {\n func();\n }\n timerSubscription = timer(wait).subscribe();\n }\n };\n};\n","import { PlaitBoard, PlaitElement } from '../interfaces';\nimport { BOARD_TO_MOVING_ELEMENT } from './weak-maps';\n\nexport const getMovingElements = (board: PlaitBoard) => {\n return BOARD_TO_MOVING_ELEMENT.get(board) || [];\n};\n\nexport const addMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n const movingElements = getMovingElements(board);\n const newElements = elements.filter(item => !movingElements.find(movingElement => movingElement.key === item.key));\n cacheMovingElements(board, [...movingElements, ...newElements]);\n};\n\nexport const removeMovingElements = (board: PlaitBoard) => {\n BOARD_TO_MOVING_ELEMENT.delete(board);\n};\n\nexport const cacheMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n BOARD_TO_MOVING_ELEMENT.set(board, elements);\n};\n","import { ELEMENT_TO_COMPONENT, PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport { NODE_TO_PARENT } from '../utils';\nimport { PlaitBoard } from './board';\nimport { Point } from './point';\n\nexport interface PlaitElement {\n [key: string]: any;\n id: string;\n children?: PlaitElement[];\n points?: Point[];\n type?: string;\n}\n\nexport const PlaitElement = {\n isRootElement(value: PlaitElement) {\n const parent = NODE_TO_PARENT.get(value);\n if (parent && PlaitBoard.isBoard(parent)) {\n return true;\n } else {\n return false;\n }\n },\n getComponent(value: PlaitElement) {\n return ELEMENT_TO_COMPONENT.get(value) as PlaitPluginElementComponent;\n }\n}\n\nexport interface ComponentType<T> {\n new (...args: any[]): T;\n}\n","import { Point } from './point';\n\nexport interface RectangleClient {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport const RectangleClient = {\n isHit: (origin: RectangleClient, target: RectangleClient) => {\n const minX = origin.x < target.x ? origin.x : target.x;\n const maxX = origin.x + origin.width > target.x + target.width ? origin.x + origin.width : target.x + target.width;\n const minY = origin.y < target.y ? origin.y : target.y;\n const maxY = origin.y + origin.height > target.y + target.height ? origin.y + origin.height : target.y + target.height;\n // float calculate error( eg: 1.4210854715202004e-14 > 0)\n if (Math.floor(maxX - minX - origin.width - target.width) <= 0 && Math.floor(maxY - minY - origin.height - target.height) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n toRectangleClient: (points: [Point, Point]) => {\n const xArray = points.map(ele => ele[0]);\n const yArray = points.map(ele => ele[1]);\n const xMin = Math.min(...xArray);\n const xMax = Math.max(...xArray);\n const yMin = Math.min(...yArray);\n const yMax = Math.max(...yArray);\n const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n return rect;\n },\n getOutlineRectangle: (rectangle: RectangleClient, offset: number) => {\n return {\n x: rectangle.x + offset,\n y: rectangle.y + offset,\n width: rectangle.width + Math.abs(offset) * 2,\n height: rectangle.height + Math.abs(offset) * 2\n };\n },\n isEqual: (rectangle: RectangleClient, otherRectangle: RectangleClient) => {\n return (\n rectangle.x === otherRectangle.x &&\n rectangle.y === otherRectangle.y &&\n rectangle.width === otherRectangle.width &&\n rectangle.height === otherRectangle.height\n );\n }\n};\n","import { PlaitNode } from '../interfaces/node';\nimport { Path } from './path';\nimport { Selection } from './selection';\nimport { PlaitTheme } from './theme';\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 SetThemeOperation = {\n type: 'set_theme';\n properties: Partial<PlaitTheme>;\n newProperties: Partial<PlaitTheme>;\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 | SetThemeOperation;\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 case 'set_theme': {\n const { properties, newProperties } = op;\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n};\n\nexport const PlaitOperation: PlaitOperationInterface = {\n isSetViewportOperation,\n inverse\n};\n","export type Point = [number, number];\n\nexport interface XYPosition {\n x: number;\n y: number;\n}\n\nexport const Point = {\n isEquals(point?: Point, otherPoint?: Point) {\n return point && otherPoint && point[0] === otherPoint[0] && point[1] === otherPoint[1];\n }\n};","import { 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","export enum PlaitPluginKey {\n 'withSelection' = 'withSelection'\n}","import { SCROLL_BAR_WIDTH } from '../constants';\nimport { PlaitBoard, Point, RectangleClient } from '../interfaces';\nimport { getRectangleByElements } from './element';\nimport { BOARD_TO_VIEWPORT_ORIGINATION } from './weak-maps';\n\nconst IS_FROM_SCROLLING = new WeakMap<PlaitBoard, boolean>();\n\nconst IS_FROM_VIEWPORT_CHANGE = new WeakMap<PlaitBoard, boolean>();\n\nexport function getViewportContainerRect(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const viewportRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n\n return {\n width: viewportRect.width + scrollBarWidth,\n height: viewportRect.height + scrollBarWidth\n };\n}\n\nexport function getElementHostBBox(board: PlaitBoard, zoom: number) {\n const childrenRect = getRectangleByElements(board, board.children, true);\n const viewportContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const containerWidth = viewportContainerRect.width / zoom;\n const containerHeight = viewportContainerRect.height / zoom;\n let left: number;\n let right: number;\n let top: number;\n let bottom: number;\n\n if (childrenRect.width < containerWidth) {\n const centerX = childrenRect.x + childrenRect.width / 2;\n const halfContainerWidth = containerWidth / 2;\n left = centerX - halfContainerWidth;\n right = centerX + halfContainerWidth;\n } else {\n left = childrenRect.x;\n right = childrenRect.x + childrenRect.width;\n }\n if (childrenRect.height < containerHeight) {\n const centerY = childrenRect.y + childrenRect.height / 2;\n const halfContainerHeight = containerHeight / 2;\n top = centerY - halfContainerHeight;\n bottom = centerY + halfContainerHeight;\n } else {\n top = childrenRect.y;\n bottom = childrenRect.y + childrenRect.height;\n }\n return {\n left,\n right,\n top,\n bottom\n };\n}\n\n/**\n * 验证缩放比是否符合限制,如果超出限制,则返回合适的缩放比\n * @param zoom 缩放比\n * @param minZoom 最小缩放比\n * @param maxZoom 最大缩放比\n * @returns 正确的缩放比\n */\nexport function clampZoomLevel(zoom: number, minZoom = 0.2, maxZoom = 4) {\n return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;\n}\n\nexport function getViewBox(board: PlaitBoard, zoom: number) {\n const boardContainerRectangle = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const elementHostBBox = getElementHostBBox(board, zoom);\n\n const horizontalPadding = boardContainerRectangle.width / 2;\n const verticalPadding = boardContainerRectangle.height / 2;\n const viewBox = [\n elementHostBBox.left - horizontalPadding / zoom,\n elementHostBBox.top - verticalPadding / zoom,\n elementHostBBox.right - elementHostBBox.left + (horizontalPadding * 2) / zoom,\n elementHostBBox.bottom - elementHostBBox.top + (verticalPadding * 2) / zoom\n ];\n return viewBox;\n}\n\nexport function getViewBoxCenterPoint(board: PlaitBoard) {\n const childrenRectangle = getRectangleByElements(board, board.children, true);\n return [childrenRectangle.x + childrenRectangle.width / 2, childrenRectangle.y + childrenRectangle.height / 2] as Point;\n}\n\nexport function setSVGViewBox(board: PlaitBoard, viewBox: number[]) {\n const zoom = board.viewport.zoom;\n const hostElement = PlaitBoard.getHost(board);\n hostElement.style.display = 'block';\n hostElement.style.width = `${viewBox[2] * zoom}px`;\n hostElement.style.height = `${viewBox[3] * zoom}px`;\n\n if (viewBox && viewBox[2] > 0 && viewBox[3] > 0) {\n hostElement.setAttribute('viewBox', viewBox.join(' '));\n }\n}\n\nexport function updateViewportOffset(board: PlaitBoard) {\n const origination = getViewportOrigination(board);\n if (!origination) return;\n\n const { zoom } = board.viewport;\n const viewBox = getViewBox(board, zoom);\n const scrollLeft = (origination![0] - viewBox[0]) * zoom;\n const scrollTop = (origination![1] - viewBox[1]) * zoom;\n updateViewportContainerScroll(board, scrollLeft, scrollTop);\n}\n\nexport function updateViewportContainerScroll(board: PlaitBoard, left: number, top: number, isFromViewportChange: boolean = true) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n if (viewportContainer.scrollLeft !== left || viewportContainer.scrollTop !== top) {\n viewportContainer.scrollLeft = left;\n viewportContainer.scrollTop = top;\n isFromViewportChange && setIsFromViewportChange(board, true);\n }\n}\n\nexport function initializeViewportContainer(board: PlaitBoard) {\n const { width, height } = getViewportContainerRect(board);\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n viewportContainer.style.width = `${width}px`;\n viewportContainer.style.height = `${height}px`;\n}\n\nexport function initializeViewBox(board: PlaitBoard) {\n const zoom = board.viewport.zoom;\n const viewBox = getViewBox(board, zoom);\n setSVGViewBox(board, viewBox);\n}\n\nexport function initializeViewportOffset(board: PlaitBoard) {\n if (!board.viewport?.origination) {\n const zoom = board.viewport.zoom;\n const viewportContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const viewBox = getViewBox(board, zoom);\n const centerX = viewBox[0] + viewBox[2] / 2;\n const centerY = viewBox[1] + viewBox[3] / 2;\n const origination = [centerX - viewportContainerRect.width / 2 / zoom, centerY - viewportContainerRect.height / 2 / zoom] as Point;\n updateViewportOrigination(board, origination);\n updateViewportOffset(board);\n return;\n }\n updateViewportOffset(board);\n}\n\nexport const updateViewportOrigination = (board: PlaitBoard, origination: Point) => {\n BOARD_TO_VIEWPORT_ORIGINATION.set(board, origination);\n};\n\nexport const clearViewportOrigination = (board: PlaitBoard) => {\n BOARD_TO_VIEWPORT_ORIGINATION.delete(board);\n};\n\nexport const getViewportOrigination = (board: PlaitBoard) => {\n const origination = BOARD_TO_VIEWPORT_ORIGINATION.get(board);\n if (origination) {\n return origination;\n } else {\n return board.viewport.origination;\n }\n};\n\nexport const isFromScrolling = (board: PlaitBoard) => {\n return !!IS_FROM_SCROLLING.get(board);\n};\n\nexport const setIsFromScrolling = (board: PlaitBoard, state: boolean) => {\n IS_FROM_SCROLLING.set(board, state);\n};\n\nexport const isFromViewportChange = (board: PlaitBoard) => {\n return !!IS_FROM_VIEWPORT_CHANGE.get(board);\n};\n\nexport const setIsFromViewportChange = (board: PlaitBoard, state: boolean) => {\n IS_FROM_VIEWPORT_CHANGE.set(board, state);\n};\n\nexport function scrollToRectangle(board: PlaitBoard, client: RectangleClient) {}\n","import { SetThemeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitTheme } from '../interfaces';\n\nexport function setTheme(board: PlaitBoard, themeColorMode: PlaitTheme) {\n const operation: SetThemeOperation = { type: 'set_theme', properties: board.theme, newProperties: themeColorMode };\n board.apply(operation);\n}\n\nexport interface ThemeTransforms {\n setTheme: (board: PlaitBoard, themeColorMode: PlaitTheme) => void;\n}\n\nexport const ViewportTransforms: ThemeTransforms = {\n setTheme\n};\n","import { ThemeColorMode } from '../interfaces/theme';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { toPoint } from '../utils/dom/common';\nimport { getRectangleByElements } from '../utils/element';\nimport { distanceBetweenPointAndRectangle } from '../utils/math';\nimport {\n clampZoomLevel,\n clearViewportOrigination,\n getViewBoxCenterPoint,\n getViewportOrigination,\n initializeViewportContainer\n} from '../utils/viewport';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { setViewport } from './viewport';\nimport { depthFirstRecursion, getRealScrollBarWidth } from '../utils';\nimport { PlaitElement } from '../interfaces/element';\nimport { setTheme } from './theme';\nimport { FitViewportOptions } from '../interfaces/viewport';\n\nfunction updateViewport(board: PlaitBoard, origination: Point, zoom?: number) {\n zoom = zoom ?? board.viewport.zoom;\n setViewport(board, {\n ...board.viewport,\n zoom,\n origination\n });\n clearViewportOrigination(board);\n}\n\nconst updatePointerType = <T extends string = PlaitPointerType>(board: PlaitBoard, pointer: T) => {\n board.pointer = pointer;\n const boardComponent = BOARD_TO_COMPONENT.get(board);\n boardComponent?.markForCheck();\n};\n\nfunction updateZoom(board: PlaitBoard, newZoom: number, isCenter = true) {\n newZoom = clampZoomLevel(newZoom);\n\n const mousePoint = PlaitBoard.getMovingPoint(board);\n const nativeElement = PlaitBoard.getBoardContainer(board);\n const nativeElementRect = nativeElement.getBoundingClientRect();\n const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n let focusPoint = [boardContainerRect.width / 2, boardContainerRect.height / 2];\n\n if (!isCenter && mousePoint && distanceBetweenPointAndRectangle(mousePoint[0], mousePoint[1], nativeElementRect) === 0) {\n focusPoint = toPoint(mousePoint[0], mousePoint[1], (nativeElement as unknown) as SVGElement);\n }\n\n const zoom = board.viewport.zoom;\n const origination = getViewportOrigination(board);\n const centerX = origination![0] + focusPoint[0] / zoom;\n const centerY = origination![1] + focusPoint[1] / zoom;\n const newOrigination = [centerX - focusPoint[0] / newZoom, centerY - focusPoint[1] / newZoom] as Point;\n updateViewport(board, newOrigination, newZoom);\n}\n\nfunction fitViewport(board: PlaitBoard) {\n let scrollBarWidth = getRealScrollBarWidth(board);\n\n const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const elementHostBox = getRectangleByElements(board, board.children, true);\n const zoom = board.viewport.zoom;\n const autoFitPadding = 16;\n const viewportWidth = boardContainerRect.width - 2 * autoFitPadding;\n const viewportHeight = boardContainerRect.height - 2 * autoFitPadding;\n\n let newZoom = zoom;\n if (viewportWidth < elementHostBox.width || viewportHeight < elementHostBox.height) {\n newZoom = Math.min(viewportWidth / elementHostBox.width, viewportHeight / elementHostBox.height);\n } else {\n newZoom = 1;\n }\n\n const centerPoint = getViewBoxCenterPoint(board);\n const newOrigination = [\n centerPoint[0] - boardContainerRect.width / 2 / newZoom + scrollBarWidth / 2 / zoom,\n centerPoint[1] - boardContainerRect.height / 2 / newZoom + scrollBarWidth / 2 / zoom\n ] as Point;\n updateViewport(board, newOrigination, newZoom);\n}\n\nfunction fitViewportWidth(board: PlaitBoard, options: FitViewportOptions) {\n let scrollBarWidth = getRealScrollBarWidth(board);\n\n const boardContainer = PlaitBoard.getBoardContainer(board);\n const boardContainerRectangle = boardContainer.getBoundingClientRect();\n\n let finalWidth = 0;\n if (options.maxWidth) {\n finalWidth = options.maxWidth;\n } else {\n finalWidth = boardContainerRectangle.width;\n }\n\n const elementHostBox = getRectangleByElements(board, board.children, true);\n const contentWidth = finalWidth - 2 * options.autoFitPadding;\n let newZoom = 0;\n if (contentWidth < elementHostBox.width) {\n newZoom = Math.min(contentWidth / elementHostBox.width);\n } else {\n newZoom = 1;\n }\n\n let finalHeight = elementHostBox.height * newZoom + 2 * options.autoFitPadding;\n if (finalHeight > options.limitHeight) {\n const containerEl = boardContainer.closest(`.${options.containerClass}`) as HTMLElement;\n containerEl.style.height = `${finalHeight}px`;\n initializeViewportContainer(board);\n } else {\n finalHeight = options.limitHeight;\n }\n\n const centerX = elementHostBox.x + elementHostBox.width / 2;\n const centerY = elementHostBox.y + elementHostBox.height / 2;\n const newOrigination = [\n centerX - finalWidth / 2 / newZoom + scrollBarWidth / 2 / newZoom,\n centerY - finalHeight / 2 / newZoom + scrollBarWidth / 2 / newZoom\n ] as Point;\n updateViewport(board, newOrigination, newZoom);\n}\n\n/**\n * apply theme to every element (remove element custom properties)\n * invoke applyThemeColor\n */\nfunction updateThemeColor(board: PlaitBoard, mode: ThemeColorMode) {\n mode = mode ?? board.theme.themeColorMode;\n setTheme(board, { themeColorMode: mode });\n\n depthFirstRecursion((board as unknown) as PlaitElement, element => {\n board.applyTheme(element);\n });\n}\n\nexport const BoardTransforms = {\n updatePointerType,\n updateViewport,\n fitViewport,\n updateZoom,\n updateThemeColor,\n fitViewportWidth\n};\n","import { GeneralTransforms } from './general';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\n\nexport { BoardTransforms } from './board';\nexport const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms\n};\n","import { PlaitOperation } from './operation';\nimport { Path } from './path';\n\nexport interface PathRef {\n current: Path | null;\n affinity: 'forward' | 'backward' | null;\n unref(): Path | null;\n}\n\nexport interface PathRefOptions {\n affinity?: 'forward' | 'backward' | null;\n}\n\nexport const PathRef = {\n transform(ref: PathRef, op: PlaitOperation): void {\n const { current } = ref;\n\n if (current == null) {\n return;\n }\n\n const path = Path.transform(current, op);\n ref.current = path;\n\n if (path == null) {\n ref.unref();\n }\n }\n};\n","import { PlaitBoard, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { Transforms } from '../transforms';\nimport { FLUSHING, PATH_REFS } from '../utils/weak-maps';\nimport { PathRef, PathRefOptions } from '../interfaces/path-ref';\nimport { Path } from '../interfaces/path';\nimport { ThemeColorMode } from '../interfaces/theme';\n\nexport function createBoard(children: PlaitElement[], options?: PlaitBoardOptions): PlaitBoard {\n const board: PlaitBoard = {\n viewport: {\n zoom: 1\n },\n children,\n theme: { themeColorMode: ThemeColorMode.default },\n operations: [],\n history: {\n redos: [],\n undos: []\n },\n selection: null,\n options: options || {\n readonly: false,\n hideScrollbar: false,\n disabledScrollOnNonFocus: false\n },\n pointer: options?.readonly ? PlaitPointerType.hand : PlaitPointerType.selection,\n undo: () => {},\n redo: () => {},\n apply: (operation: PlaitOperation) => {\n for (const ref of board.pathRefs()) {\n PathRef.transform(ref, operation);\n }\n\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 pathRef: (path: Path, options?: PathRefOptions) => {\n const affinity = options?.affinity || 'forward';\n const ref: PathRef = {\n current: path,\n affinity,\n unref() {\n const { current } = ref;\n const pathRefs = board.pathRefs();\n pathRefs.delete(ref);\n ref.current = null;\n return current;\n }\n };\n\n const refs = board.pathRefs();\n refs.add(ref);\n return ref;\n },\n pathRefs: () => {\n let refs = PATH_REFS.get(board);\n\n if (!refs) {\n refs = new Set();\n PATH_REFS.set(board, refs);\n }\n\n return refs;\n },\n onChange: () => {},\n mousedown: (event: MouseEvent) => {},\n mousemove: (event: MouseEvent) => {},\n mouseleave: (event: MouseEvent) => {},\n globalMousemove: (event: MouseEvent) => {},\n mouseup: (event: MouseEvent) => {},\n globalMouseup: (event: MouseEvent) => {},\n keydown: (event: KeyboardEvent) => {},\n keyup: (event: KeyboardEvent) => {},\n dblclick: (event: MouseEvent) => {},\n setFragment: (data: DataTransfer | null) => {},\n insertFragment: (data: DataTransfer | null) => {},\n deleteFragment: (data: DataTransfer | null) => {},\n drawElement: (context: PlaitPluginElementContext) => [],\n redrawElement: (context: PlaitPluginElementContext, previousContext) => {},\n destroyElement: (context: PlaitPluginElementContext) => {},\n isWithinSelection: element => false,\n isHitSelection: element => false,\n isRecursion: element => true,\n isMovable: element => false,\n getRectangle: element => null,\n applyTheme: (element: PlaitElement) => {}\n };\n return board;\n}\n","import { BOARD_TO_ON_CHANGE } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\n\nexport function withBoard(board: PlaitBoard) {\n const { onChange } = board;\n\n board.onChange = () => {\n const onContextChange = BOARD_TO_ON_CHANGE.get(board);\n\n if (onContextChange) {\n onContextChange();\n }\n\n onChange();\n };\n\n return board;\n}\n","import { PlaitBoard, PlaitOperation } from '../interfaces';\nimport { isHotkey } from 'is-hotkey';\nimport { PlaitHistoryBoard, shouldClear, shouldMerge, shouldSave } from '../utils';\n\nexport function withHistory<T extends PlaitBoard>(board: T) {\n const { apply, keydown } = board;\n board.history = { undos: [], redos: [] };\n\n board.redo = () => {\n const { history } = board;\n const { redos } = history;\n\n if (redos.length > 0) {\n const batch = redos[redos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n for (const op of batch) {\n board.apply(op);\n }\n });\n\n history.redos.pop();\n history.undos.push(batch);\n }\n };\n\n board.undo = () => {\n const { history } = board;\n const { undos } = history;\n\n if (undos.length > 0) {\n const batch = undos[undos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n const inverseOps = batch.map(PlaitOperation.inverse).reverse();\n for (const op of inverseOps) {\n board.apply(op);\n }\n });\n\n history.redos.push(batch);\n history.undos.pop();\n }\n };\n\n board.apply = (op: PlaitOperation) => {\n const { operations, history } = board;\n const { undos } = history;\n const lastBatch = undos[undos.length - 1];\n const lastOp = lastBatch && lastBatch[lastBatch.length - 1];\n let save = PlaitHistoryBoard.isSaving(board);\n let merge = PlaitHistoryBoard.isMerging(board);\n\n if (save == null) {\n save = shouldSave(op, lastOp);\n }\n\n if (save) {\n if (!merge) {\n if (lastBatch == null) {\n merge = false;\n } else if (operations.length !== 0) {\n merge = true;\n } else {\n merge = shouldMerge(op, lastOp);\n }\n }\n\n if (lastBatch && merge) {\n lastBatch.push(op);\n } else {\n const batch = [op];\n undos.push(batch);\n }\n\n while (undos.length > 100) {\n undos.shift();\n }\n\n if (shouldClear(op)) {\n history.redos = [];\n }\n }\n apply(op);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (isHotkey('mod+z', event)) {\n board.undo();\n return;\n }\n if (isHotkey('mod+shift+z', event)) {\n board.redo();\n return;\n }\n keydown(event);\n };\n\n return board;\n}\n","import { PlaitPointerType, PlaitBoard, PlaitBoardMove } from '../interfaces';\nimport { BoardTransforms } from '../transforms';\nimport { isMainPointer } from '../utils/dom/common';\nimport { updateViewportContainerScroll } from '../utils/viewport';\n\nexport function withHandPointer<T extends PlaitBoard>(board: T) {\n const { mousedown, mousemove, globalMouseup, keydown, keyup } = board;\n let isMoving: boolean = false;\n const plaitBoardMove: PlaitBoardMove = {\n x: 0,\n y: 0\n };\n\n board.mousedown = (event: MouseEvent) => {\n if (PlaitBoard.isPointer(board, PlaitPointerType.hand) && isMainPointer(event)) {\n isMoving = true;\n PlaitBoard.getBoardContainer(board).classList.add('viewport-moving');\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n if (PlaitBoard.isPointer(board, PlaitPointerType.hand) && board.selection && isMoving) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n const left = viewportContainer.scrollLeft - (event.x - plaitBoardMove.x);\n const top = viewportContainer.scrollTop - (event.y - plaitBoardMove.y);\n updateViewportContainerScroll(board, left, top, false);\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n mousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (board.selection) {\n isMoving = false;\n PlaitBoard.getBoardContainer(board).classList.remove('viewport-moving');\n plaitBoardMove.x = 0;\n plaitBoardMove.y = 0;\n }\n globalMouseup(event);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (event.code === 'Space') {\n if (!PlaitBoard.isPointer(board, PlaitPointerType.hand)) {\n BoardTransforms.updatePointerType(board, PlaitPointerType.hand);\n }\n event.preventDefault();\n }\n keydown(event);\n };\n\n board.keyup = (event: KeyboardEvent) => {\n if (!board.options.readonly && event.code === 'Space') {\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n }\n keyup(event);\n };\n\n return board;\n}\n","export const ATTACHED_ELEMENT_CLASS_NAME = 'plait-board-attached';","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { transformPoint } from '../utils/board';\nimport { isMainPointer, toPoint } from '../utils/dom/common';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport { cacheSelectedElements, getHitElements, getSelectedElements } from '../utils/selected-element';\nimport { PlaitElement, PlaitPointerType, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR } from '../interfaces';\nimport { getRectangleByElements } from '../utils/element';\nimport { BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_TEMPORARY_ELEMENTS } from '../utils/weak-maps';\nimport { ATTACHED_ELEMENT_CLASS_NAME } from '../constants/selection';\nimport { throttleRAF } from '../utils';\nimport { PlaitOptionsBoard, PlaitPluginOptions } from './with-options';\nimport { PlaitPluginKey } from '../interfaces/plugin-key';\n\nexport interface WithPluginOptions extends PlaitPluginOptions {\n isMultiple: boolean;\n isDisabledSelect: boolean;\n}\n\nexport function withSelection(board: PlaitBoard) {\n const { mousedown, globalMousemove, globalMouseup, onChange } = board;\n\n let start: Point | null = null;\n let end: Point | null = null;\n let selectionMovingG: SVGGElement;\n let selectionOuterG: SVGGElement;\n let previousSelectedElements: PlaitElement[];\n\n board.mousedown = (event: MouseEvent) => {\n if (!isMainPointer(event)) {\n mousedown(event);\n return;\n }\n\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const range = { anchor: point, focus: point };\n const hitElements = getHitElements(board, { ranges: [range] });\n const selectedElements = getSelectedElements(board);\n if (hitElements.length === 1 && selectedElements.includes(hitElements[0])) {\n mousedown(event);\n return;\n }\n if (\n PlaitBoard.isPointer(board, PlaitPointerType.selection) &&\n hitElements.length === 0 &&\n options.isMultiple &&\n !options.isDisabledSelect\n ) {\n start = point;\n }\n\n if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && hitElements.length === 0 && !PlaitBoard.hasBeenTextEditing(board)) {\n // prevent text from being selected\n event.preventDefault();\n }\n\n Transforms.setSelection(board, { ranges: [range] });\n\n mousedown(event);\n };\n\n board.globalMousemove = (event: MouseEvent) => {\n if (start) {\n const movedTarget = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const { x, y, width, height } = RectangleClient.toRectangleClient([start, movedTarget]);\n selectionMovingG?.remove();\n if (Math.hypot(width, height) > 5) {\n end = movedTarget;\n throttleRAF(() => {\n if (start && end) {\n Transforms.setSelection(board, { ranges: [{ anchor: start, focus: end }] });\n }\n });\n setSelectionMoving(board);\n const rough = PlaitBoard.getRoughSVG(board);\n selectionMovingG = rough.rectangle(x, y, width, height, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n PlaitBoard.getHost(board).append(selectionMovingG);\n }\n }\n globalMousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (start && end) {\n selectionMovingG?.remove();\n clearSelectionMoving(board);\n Transforms.setSelection(board, { ranges: [{ anchor: start, focus: end }] });\n }\n\n if (PlaitBoard.isFocus(board)) {\n const isInBoard = event.target instanceof Node && PlaitBoard.getBoardContainer(board).contains(event.target);\n const isInDocument = event.target instanceof Node && document.contains(event.target);\n const isAttachedElement = event.target instanceof Element && event.target.closest(`.${ATTACHED_ELEMENT_CLASS_NAME}`);\n // Clear selection when mouse board outside area\n // The framework needs to determine whether the board is focused through selection\n if (!isInBoard && !start && !isAttachedElement && isInDocument) {\n Transforms.setSelection(board, null);\n }\n }\n\n start = null;\n end = null;\n globalMouseup(event);\n };\n\n board.onChange = () => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n // calc selected elements entry\n if (board.pointer !== PlaitPointerType.hand && !options.isDisabledSelect) {\n try {\n if (board.operations.find(value => value.type === 'set_selection')) {\n selectionOuterG?.remove();\n const temporaryElements = getTemporaryElements(board);\n let elements = temporaryElements ? temporaryElements : getHitElements(board);\n\n if (!options.isMultiple && elements.length > 1) {\n elements = [elements[0]];\n }\n cacheSelectedElements(board, elements);\n previousSelectedElements = elements;\n const { width, height } = getRectangleByElements(board, elements, false);\n if (width > 0 && height > 0 && elements.length > 1) {\n selectionOuterG = createSelectionOuterG(board, elements);\n selectionOuterG.classList.add('selection-outer');\n PlaitBoard.getHost(board).append(selectionOuterG);\n }\n deleteTemporaryElements(board);\n } else {\n // wait node destroy and remove selected element state\n setTimeout(() => {\n const currentSelectedElements = getSelectedElements(board);\n if (currentSelectedElements.length && currentSelectedElements.length > 1) {\n const selectedElementChange = currentSelectedElements.some(item => !previousSelectedElements.includes(item));\n if (selectedElementChange) {\n selectionOuterG?.remove();\n selectionOuterG = createSelectionOuterG(board, currentSelectedElements);\n selectionOuterG.classList.add('selection-outer');\n PlaitBoard.getHost(board).append(selectionOuterG);\n }\n } else {\n selectionOuterG?.remove();\n }\n });\n }\n } catch (error) {\n console.error(error);\n }\n }\n onChange();\n };\n\n (board as PlaitOptionsBoard).setPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection, {\n isMultiple: true,\n isDisabledSelect: false\n });\n\n return board;\n}\n\nexport function getTemporaryElements(board: PlaitBoard) {\n return BOARD_TO_TEMPORARY_ELEMENTS.get(board);\n}\n\nexport function deleteTemporaryElements(board: PlaitBoard) {\n BOARD_TO_TEMPORARY_ELEMENTS.delete(board);\n}\n\nexport function isSelectionMoving(board: PlaitBoard) {\n return !!BOARD_TO_IS_SELECTION_MOVING.get(board);\n}\n\nexport function setSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardContainer(board).classList.add('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.set(board, true);\n}\n\nexport function clearSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardContainer(board).classList.remove('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.delete(board);\n}\n\nexport function createSelectionOuterG(board: PlaitBoard, selectElements: PlaitElement[]) {\n const { x, y, width, height } = getRectangleByElements(board, selectElements, false);\n const rough = PlaitBoard.getRoughSVG(board);\n return rough.rectangle(x - 2.5, y - 2.5, width + 5, height + 5, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fillStyle: 'solid'\n });\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { debounce } from '../utils/common';\nimport { initializeViewBox, isFromScrolling, setIsFromScrolling, updateViewportOffset } from '../utils/viewport';\n\nexport function withViewport(board: PlaitBoard) {\n const { onChange } = board;\n\n const throttleUpdate = debounce(\n () => {\n initializeViewBox(board);\n updateViewportOffset(board);\n },\n 500,\n { leading: true }\n );\n\n board.onChange = () => {\n const isSetViewport = board.operations.some(op => op.type === 'set_viewport');\n const isOnlySetSelection = board.operations.some(op => op.type === 'set_selection');\n if (isOnlySetSelection) {\n return onChange();\n }\n if (isSetViewport && isFromScrolling(board)) {\n setIsFromScrolling(board, false);\n return onChange();\n }\n if (isSetViewport) {\n initializeViewBox(board);\n updateViewportOffset(board);\n } else {\n throttleUpdate();\n }\n onChange();\n };\n\n return board;\n}\n","import { BOARD_TO_HOST } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\nimport { isInPlaitBoard, transformPoint } from '../utils/board';\nimport { toPoint } from '../utils/dom/common';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { PlaitElement } from '../interfaces/element';\nimport { getHitElementOfRoot, getSelectedElements, isHitElements } from '../utils/selected-element';\nimport { PlaitNode } from '../interfaces/node';\nimport { throttleRAF } from '../utils/common';\nimport { addMovingElements, removeMovingElements } from '../utils/moving-element';\nimport { MERGING } from '../interfaces/history';\nimport { Range } from '../interfaces';\n\nexport function withMoving(board: PlaitBoard) {\n const { mousedown, mousemove, globalMouseup, globalMousemove } = board;\n\n let offsetX = 0;\n let offsetY = 0;\n let isPreventDefault = false;\n let startPoint: Point | null;\n let activeElements: PlaitElement[] | null = [];\n\n board.mousedown = event => {\n const host = BOARD_TO_HOST.get(board);\n const point = transformPoint(board, toPoint(event.x, event.y, host!));\n const range = { anchor: point, focus: point } as Range;\n let movableElements = board.children.filter(item => board.isMovable(item));\n if (movableElements.length) {\n startPoint = point;\n const selectedRootElements = getSelectedElements(board).filter(item => movableElements.includes(item));\n const hitElement = getHitElementOfRoot(board, movableElements, range);\n if (hitElement && selectedRootElements.includes(hitElement)) {\n activeElements = selectedRootElements;\n } else if (hitElement) {\n activeElements = [hitElement];\n }\n }\n\n mousedown(event);\n };\n\n board.mousemove = event => {\n if (startPoint && activeElements?.length && !PlaitBoard.hasBeenTextEditing(board)) {\n if (!isPreventDefault) {\n isPreventDefault = true;\n }\n const host = BOARD_TO_HOST.get(board);\n const endPoint = transformPoint(board, toPoint(event.x, event.y, host!));\n offsetX = endPoint[0] - startPoint[0];\n offsetY = endPoint[1] - startPoint[1];\n const offsetBuffer = 5;\n if (Math.abs(offsetX) > offsetBuffer || Math.abs(offsetY) > offsetBuffer) {\n throttleRAF(() => {\n const currentElements = activeElements!.map(activeElement => {\n const [x, y] = activeElement?.points![0];\n const index = board.children.findIndex(item => item.id === activeElement.id);\n Transforms.setNode(\n board,\n {\n points: [[x + offsetX, y + offsetY]]\n },\n [index]\n );\n MERGING.set(board, true);\n return PlaitNode.get(board, [index]);\n });\n PlaitBoard.getBoardContainer(board).classList.add('element-moving');\n addMovingElements(board, currentElements as PlaitElement[]);\n });\n }\n }\n if (isPreventDefault) {\n // 阻止 move 过程中触发画布滚动行为\n event.preventDefault();\n }\n mousemove(event);\n };\n\n board.globalMousemove = event => {\n if (startPoint) {\n const inPlaitBoardElement = isInPlaitBoard(board, event.x, event.y);\n if (!inPlaitBoardElement) {\n cancelMove(board);\n }\n }\n globalMousemove(event);\n };\n\n board.globalMouseup = event => {\n isPreventDefault = false;\n if (startPoint) {\n cancelMove(board);\n }\n globalMouseup(event);\n };\n\n function cancelMove(board: PlaitBoard) {\n startPoint = null;\n offsetX = 0;\n offsetY = 0;\n activeElements = [];\n removeMovingElements(board);\n MERGING.set(board, false);\n PlaitBoard.getBoardContainer(board).classList.remove('element-moving');\n }\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\n\nexport interface PlaitPluginOptions {\n disabled?: boolean;\n}\n\nexport interface PlaitOptionsBoard extends PlaitBoard {\n getPluginOptions: <K = PlaitPluginOptions>(key: string) => K;\n setPluginOptions: <K = PlaitPluginOptions>(key: string, value: Partial<K>) => void;\n}\n\nexport const withOptions = (board: PlaitBoard) => {\n const pluginOptions = new Map<string, any>();\n const newBoard = board as PlaitOptionsBoard;\n\n newBoard.getPluginOptions = key => {\n return pluginOptions.get(key);\n };\n\n newBoard.setPluginOptions = (key, options) => {\n const oldOptions = newBoard.getPluginOptions(key) || {};\n pluginOptions.set(key, { ...oldOptions, ...options });\n };\n \n return newBoard;\n};\n","import { ChangeDetectorRef, Directive } from '@angular/core';\nimport { PlaitBoard } from '../../interfaces';\n\n@Directive({\n host: {\n class: 'plait-island-container'\n }\n})\nexport abstract class PlaitIslandBaseComponent {\n board!: PlaitBoard;\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n this.markForCheck();\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n\nexport interface OnBoardChange {\n onBoardChange: () => void;\n}\n\nexport const hasOnBoardChange = (value: any): value is OnBoardChange => {\n if (value.onBoardChange) {\n return true;\n } else {\n return false;\n }\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitPluginElementContext } from './context';\nimport { PlaitPluginElementComponent } from './plugin-element';\nimport { PlaitEffect } from '../children/effect';\nimport { Ancestor, PlaitNode } from '../../interfaces/node';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../../utils/weak-maps';\nimport { addSelectedElement, isSelectedElement, removeSelectedElement } from '../../utils';\n\n@Component({\n selector: 'plait-element',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitElementComponent implements OnInit, OnChanges, OnDestroy {\n initialized = false;\n\n instance?: PlaitPluginElementComponent<PlaitElement>;\n\n @Input() index!: number;\n\n @Input() element!: PlaitElement;\n\n @Input() parent!: Ancestor;\n\n @Input() board!: PlaitBoard;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor(public renderer2: Renderer2, public viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.initialize();\n this.drawElement();\n }\n\n initialize() {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n this.initialized = true;\n }\n\n drawElement() {\n const context = this.getContext();\n const result = this.board.drawElement(context);\n if (Array.isArray(result)) {\n } else {\n const componentRef = this.viewContainerRef.createComponent(result);\n const instance = componentRef.instance;\n instance.context = context;\n this.insertG(instance.rootG ? instance.rootG : instance.g);\n this.instance = instance;\n }\n }\n\n insertG(g: SVGGElement) {\n if (PlaitBoard.isBoard(this.parent)) {\n this.parentG.append(g);\n } else {\n let siblingG = PlaitElement.getComponent(this.parent).g;\n if (this.index > 0) {\n const brotherElement = (this.parent.children as PlaitElement[])[this.index - 1];\n const lastElement = PlaitNode.last(this.board, PlaitBoard.findPath(this.board, brotherElement));\n let component = PlaitElement.getComponent(lastElement) || PlaitElement.getComponent(brotherElement);\n siblingG = component.g;\n }\n this.parentG.insertBefore(g, siblingG);\n }\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n if (this.initialized) {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n const elementChanged = simpleChanges['element'];\n const context = this.getContext();\n if (elementChanged && isSelectedElement(this.board, elementChanged.previousValue)) {\n context.selected = true;\n removeSelectedElement(this.board, elementChanged.previousValue);\n addSelectedElement(this.board, this.element);\n }\n if (this.instance) {\n this.instance.context = context;\n }\n }\n }\n\n getContext(): PlaitPluginElementContext {\n const isSelected = isSelectedElement(this.board, this.element);\n const context: PlaitPluginElementContext = {\n element: this.element,\n parent: this.parent,\n board: this.board,\n selected: isSelected,\n effect: this.effect\n };\n return context;\n }\n\n ngOnDestroy(): void {\n this.board.destroyElement(this.getContext());\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitEffect } from './effect';\nimport { Ancestor } from '../../interfaces/node';\n\n@Component({\n selector: 'plait-children',\n template: `\n <plait-element\n *ngFor=\"let item of parent.children; let index = index; trackBy: trackBy\"\n [index]=\"index\"\n [element]=\"item\"\n [parent]=\"parent\"\n [board]=\"board\"\n [effect]=\"effect\"\n [parentG]=\"parentG\"\n ></plait-element>\n `\n})\nexport class PlaitChildrenElement implements OnInit {\n @Input() board!: PlaitBoard;\n\n @Input() parent!: Ancestor;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor() {}\n\n ngOnInit(): void {\n if (!this.parent) {\n this.parent = this.board;\n }\n if (!this.parentG) {\n this.parentG = PlaitBoard.getElementHost(this.board);\n }\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { PlaitBoard, PlaitBoardChangeEvent, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPlugin } from '../interfaces/plugin';\nimport { Viewport } from '../interfaces/viewport';\nimport { createBoard } from '../plugins/create-board';\nimport { withBoard } from '../plugins/with-board';\nimport { withHistory } from '../plugins/with-history';\nimport { withHandPointer } from '../plugins/with-hand';\nimport { withSelection } from '../plugins/with-selection';\nimport { toPoint, transformPoint } from '../utils';\nimport {\n BOARD_TO_ON_CHANGE,\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_ROUGH_SVG,\n BOARD_TO_MOVING_POINT\n} from '../utils/weak-maps';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n getViewBox,\n initializeViewportOffset,\n initializeViewBox,\n isFromViewportChange,\n setIsFromViewportChange,\n initializeViewportContainer,\n updateViewportOffset,\n setIsFromScrolling\n} from '../utils/viewport';\nimport { isHotkey } from 'is-hotkey';\nimport { withViewport } from '../plugins/with-viewport';\nimport { Point } from '../interfaces/point';\nimport { withMoving } from '../plugins/with-moving';\nimport { hasInputOrTextareaTarget } from '../utils/dom/common';\nimport { withOptions } from '../plugins/with-options';\nimport { PlaitIslandBaseComponent, hasOnBoardChange } from '../core/island/island-base.component';\nimport { BoardTransforms } from '../transforms/board';\nimport { PlaitTheme } from '../interfaces/theme';\n\nconst ElementHostClass = 'element-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\" class=\"board-host-svg\"><g class=\"element-host\"></g></svg>\n <plait-children [board]=\"board\" [effect]=\"effect\"></plait-children>\n </div>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n hasInitialized = false;\n\n effect = {};\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions?: PlaitBoardOptions;\n\n @Input() plaitTheme?: PlaitTheme;\n\n @Output() plaitChange: EventEmitter<PlaitBoardChangeEvent> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `plait-board-container pointer-${this.board.pointer} theme-${this.board.theme.themeColorMode}`;\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n @HostBinding('class.disabled-scroll')\n get disabledScrollOnNonFocus() {\n return this.board.options.disabledScrollOnNonFocus && !PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n @ContentChildren(PlaitIslandBaseComponent, { descendants: true }) islands?: QueryList<PlaitIslandBaseComponent>;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef<HTMLElement>,\n private ngZone: NgZone\n ) {}\n\n ngOnInit(): void {\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.elementResizeListener();\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n BOARD_TO_ELEMENT_HOST.set(this.board, elementHost);\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n this.detect();\n const changeEvent: PlaitBoardChangeEvent = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection,\n theme: this.board.theme\n };\n this.updateIslands();\n this.plaitChange.emit(changeEvent);\n });\n });\n this.hasInitialized = true;\n }\n\n ngAfterContentInit(): void {\n this.initializeIslands();\n }\n\n detect() {\n this.effect = {};\n this.cdr.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) this.board.children = valueChange.currentValue;\n if (options) this.board.options = options.currentValue;\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withHandPointer(\n withHistory(withSelection(withMoving(withBoard(withViewport(withOptions(createBoard(this.plaitValue, this.plaitOptions)))))))\n );\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n\n if (this.plaitTheme) {\n this.board.theme = this.plaitTheme;\n }\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.mousemove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n this.board.mouseleave(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMousemove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: MouseEvent) => {\n this.board.dblclick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n tap((event: KeyboardEvent) => {\n if (PlaitBoard.getMovingPoint(this.board)) {\n if (isHotkey(['mod+=', 'mod++'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(this.board, this.board.viewport.zoom + 0.1, false);\n }\n if (isHotkey('mod+-', { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(this.board, this.board.viewport.zoom - 0.1);\n }\n if (isHotkey('mod+0', { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(this.board, 1);\n return;\n }\n if (isHotkey('mod+shift+=', { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.fitViewport(this.board);\n return;\n }\n }\n }),\n filter(event => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target))\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(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyup(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((clipboardEvent: ClipboardEvent) => {\n const mousePoint = PlaitBoard.getMovingPoint(this.board);\n if (mousePoint) {\n const targetPoint = transformPoint(this.board, toPoint(mousePoint[0], mousePoint[1], this.host));\n this.board.insertFragment(clipboardEvent.clipboardData, targetPoint);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n this.board?.deleteFragment(event.clipboardData);\n });\n }\n\n private viewportScrollListener() {\n this.ngZone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return true;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n const zoom = this.board.viewport.zoom;\n const viewBox = getViewBox(this.board, zoom);\n const origination = [scrollLeft / zoom + viewBox[0], scrollTop / zoom + viewBox[1]] as Point;\n if (Point.isEquals(origination, this.board.viewport.origination)) {\n return;\n }\n BoardTransforms.updateViewport(this.board, origination);\n setIsFromScrolling(this.board, true);\n });\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private initializeIslands() {\n this.islands?.forEach(island => {\n island.initialize(this.board);\n });\n }\n\n private updateIslands() {\n this.islands?.forEach(island => {\n if (hasOnBoardChange(island)) {\n island.onBoardChange();\n }\n island.markForCheck();\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n BOARD_TO_ON_CHANGE.delete(this.board);\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n this.ngZone.run(() => {\n this.updateIslands();\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlaitBoardComponent } from './board/board.component';\nimport { PlaitElementComponent } from './core/element/element.component';\nimport { PlaitChildrenElement } from './core/children/children.component';\n\nconst COMPONENTS = [PlaitBoardComponent, PlaitChildrenElement, PlaitElementComponent];\n\n@NgModule({\n declarations: [...COMPONENTS],\n imports: [CommonModule],\n exports: [...COMPONENTS]\n})\nexport class PlaitModule {}\n","import { PlaitBoardOptions, PlaitElement, PlaitPlugin } from '../../interfaces';\nimport { createBoard } from '../../plugins/create-board';\n\n/**\n * 1.create board instance\n * 2.build fake node weak map\n */\nexport const createTestingBoard = (\n plugins: PlaitPlugin[],\n children: PlaitElement[],\n options: PlaitBoardOptions = { readonly: false, hideScrollbar: true, disabledScrollOnNonFocus: false }\n) => {\n let board = createBoard(children, options);\n plugins.forEach(plugin => {\n board = plugin(board);\n });\n return board;\n};\n","import { PlaitBoard } from \"../../interfaces/board\";\nimport { PlaitNode } from \"../../interfaces/node\";\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from \"../../utils/weak-maps\";\n\nexport const fakeNodeWeakMap = (object: PlaitNode | PlaitBoard) => {\n const children = object.children || [];\n children.forEach((value, index: number) => {\n NODE_TO_PARENT.set(value, object);\n NODE_TO_INDEX.set(value, index);\n fakeNodeWeakMap(value);\n });\n};\n\nexport const clearNodeWeakMap = (object: PlaitNode | PlaitBoard) => {\n const children = object.children || [];\n children.forEach(value => {\n NODE_TO_PARENT.delete(value);\n NODE_TO_INDEX.delete(value);\n clearNodeWeakMap(value);\n });\n};\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './constants';\nexport * from './core/element/plugin-element';\nexport * from './core/element/element.component';\nexport * from './core/children/children.component';\nexport * from './core/element/context-change';\nexport * from './core/island/island-base.component';\nexport * from './interfaces';\nexport * from './plait.module';\nexport * from './transforms';\nexport * from './utils';\nexport * from './plugins/with-selection';\nexport * from './plugins/with-moving';\nexport * from './plugins/with-options';\nexport * from './testing';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ViewportTransforms","i2.PlaitElementComponent","i1.PlaitChildrenElement"],"mappings":"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"}