@plait/core 0.75.0-next.7 → 0.75.0-next.9

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/core/src/constants/keycodes.ts","../../../packages/core/src/constants/cursor.ts","../../../packages/core/src/constants/selection.ts","../../../packages/core/src/constants/zoom.ts","../../../packages/core/src/constants/index.ts","../../../packages/core/src/core/element/context-change.ts","../../../packages/core/src/utils/weak-maps.ts","../../../packages/core/src/utils/helper.ts","../../../packages/core/src/interfaces/viewport.ts","../../../packages/core/src/interfaces/path.ts","../../../packages/core/src/interfaces/node.ts","../../../packages/core/src/transforms/general.ts","../../../packages/core/src/interfaces/rectangle-client.ts","../../../packages/core/src/utils/math.ts","../../../packages/core/src/utils/board.ts","../../../packages/core/src/utils/dom/common.ts","../../../packages/core/src/utils/dom/foreign.ts","../../../packages/core/src/utils/dom/environment.ts","../../../packages/core/src/utils/environment.ts","../../../packages/core/src/utils/history.ts","../../../packages/core/src/utils/hotkeys.ts","../../../packages/core/src/utils/id-creator.ts","../../../packages/core/src/utils/tree.ts","../../../packages/core/src/interfaces/selection.ts","../../../packages/core/src/interfaces/element.ts","../../../packages/core/src/utils/position.ts","../../../packages/core/src/utils/debug.ts","../../../packages/core/src/interfaces/plugin.ts","../../../packages/core/src/utils/selected-element.ts","../../../packages/core/src/utils/drawing/rectangle.ts","../../../packages/core/src/utils/drawing/arrow.ts","../../../packages/core/src/utils/drawing/circle.ts","../../../packages/core/src/utils/drawing/line.ts","../../../packages/core/src/transforms/viewport.ts","../../../packages/core/src/transforms/theme.ts","../../../packages/core/src/transforms/board.ts","../../../packages/core/src/utils/to-point.ts","../../../packages/core/src/utils/viewport.ts","../../../packages/core/src/transforms/node.ts","../../../packages/core/src/utils/common.ts","../../../packages/core/src/utils/dnd.ts","../../../packages/core/src/utils/moving-element.ts","../../../packages/core/src/utils/to-image.ts","../../../packages/core/src/utils/clipboard/types.ts","../../../packages/core/src/utils/clipboard/common.ts","../../../packages/core/src/utils/clipboard/data-transfer.ts","../../../packages/core/src/utils/clipboard/navigator-clipboard.ts","../../../packages/core/src/utils/clipboard/clipboard.ts","../../../packages/core/src/utils/selection.ts","../../../packages/core/src/utils/group.ts","../../../packages/core/src/utils/fragment.ts","../../../packages/core/src/utils/snap/snap.ts","../../../packages/core/src/utils/z-index.ts","../../../packages/core/src/utils/pointer.ts","../../../packages/core/src/transforms/group.ts","../../../packages/core/src/transforms/selection.ts","../../../packages/core/src/transforms/z-index.ts","../../../packages/core/src/transforms/element.ts","../../../packages/core/src/transforms/index.ts","../../../packages/core/src/utils/angle.ts","../../../packages/core/src/utils/element.ts","../../../packages/core/src/interfaces/theme.ts","../../../packages/core/src/interfaces/board.ts","../../../packages/core/src/interfaces/pointer.ts","../../../packages/core/src/interfaces/custom-types.ts","../../../packages/core/src/interfaces/operation.ts","../../../packages/core/src/interfaces/point.ts","../../../packages/core/src/interfaces/history.ts","../../../packages/core/src/interfaces/direction.ts","../../../packages/core/src/interfaces/group.ts","../../../packages/core/src/utils/iterable.ts","../../../packages/core/src/differs/default_iterable_differ.ts","../../../packages/core/src/core/list-render.ts","../../../packages/core/src/core/element/element-flavour.ts","../../../packages/core/src/context.ts","../../../packages/core/src/interfaces/path-ref.ts","../../../packages/core/src/plugins/create-board.ts","../../../packages/core/src/plugins/with-board.ts","../../../packages/core/src/utils/mobile.ts","../../../packages/core/src/plugins/with-hand.ts","../../../packages/core/src/plugins/with-history.ts","../../../packages/core/src/plugins/with-hotkey.ts","../../../packages/core/src/utils/snap/snap-moving.ts","../../../packages/core/src/plugins/with-moving.ts","../../../packages/core/src/plugins/with-options.ts","../../../packages/core/src/plugins/with-related-fragment.ts","../../../packages/core/src/plugins/with-selection.ts","../../../packages/core/src/plugins/with-viewport.ts","../../../packages/core/src/testing/core/create-board.ts","../../../packages/core/src/testing/core/fake-weak-map.ts","../../../packages/core/src/testing/fake-events/event-objects.ts","../../../packages/core/src/public-api.ts","../../../packages/core/src/plait-core.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const MAC_ENTER = 3;\nexport const BACKSPACE = 8;\nexport const TAB = 9;\nexport const NUM_CENTER = 12;\nexport const ENTER = 13;\nexport const SHIFT = 16;\nexport const CONTROL = 17;\nexport const ALT = 18;\nexport const PAUSE = 19;\nexport const CAPS_LOCK = 20;\nexport const ESCAPE = 27;\nexport const SPACE = 32;\nexport const PAGE_UP = 33;\nexport const PAGE_DOWN = 34;\nexport const END = 35;\nexport const HOME = 36;\nexport const LEFT_ARROW = 37;\nexport const UP_ARROW = 38;\nexport const RIGHT_ARROW = 39;\nexport const DOWN_ARROW = 40;\nexport const PLUS_SIGN = 43;\nexport const PRINT_SCREEN = 44;\nexport const INSERT = 45;\nexport const DELETE = 46;\nexport const ZERO = 48;\nexport const ONE = 49;\nexport const TWO = 50;\nexport const THREE = 51;\nexport const FOUR = 52;\nexport const FIVE = 53;\nexport const SIX = 54;\nexport const SEVEN = 55;\nexport const EIGHT = 56;\nexport const NINE = 57;\nexport const FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\nexport const FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\nexport const QUESTION_MARK = 63;\nexport const AT_SIGN = 64;\nexport const A = 65;\nexport const B = 66;\nexport const C = 67;\nexport const D = 68;\nexport const E = 69;\nexport const F = 70;\nexport const G = 71;\nexport const H = 72;\nexport const I = 73;\nexport const J = 74;\nexport const K = 75;\nexport const L = 76;\nexport const M = 77;\nexport const N = 78;\nexport const O = 79;\nexport const P = 80;\nexport const Q = 81;\nexport const R = 82;\nexport const S = 83;\nexport const T = 84;\nexport const U = 85;\nexport const V = 86;\nexport const W = 87;\nexport const X = 88;\nexport const Y = 89;\nexport const Z = 90;\nexport const META = 91; // WIN_KEY_LEFT\nexport const MAC_WK_CMD_LEFT = 91;\nexport const MAC_WK_CMD_RIGHT = 93;\nexport const CONTEXT_MENU = 93;\nexport const NUMPAD_ZERO = 96;\nexport const NUMPAD_ONE = 97;\nexport const NUMPAD_TWO = 98;\nexport const NUMPAD_THREE = 99;\nexport const NUMPAD_FOUR = 100;\nexport const NUMPAD_FIVE = 101;\nexport const NUMPAD_SIX = 102;\nexport const NUMPAD_SEVEN = 103;\nexport const NUMPAD_EIGHT = 104;\nexport const NUMPAD_NINE = 105;\nexport const NUMPAD_MULTIPLY = 106;\nexport const NUMPAD_PLUS = 107;\nexport const NUMPAD_MINUS = 109;\nexport const NUMPAD_PERIOD = 110;\nexport const NUMPAD_DIVIDE = 111;\nexport const F1 = 112;\nexport const F2 = 113;\nexport const F3 = 114;\nexport const F4 = 115;\nexport const F5 = 116;\nexport const F6 = 117;\nexport const F7 = 118;\nexport const F8 = 119;\nexport const F9 = 120;\nexport const F10 = 121;\nexport const F11 = 122;\nexport const F12 = 123;\nexport const NUM_LOCK = 144;\nexport const SCROLL_LOCK = 145;\nexport const FIRST_MEDIA = 166;\nexport const FF_MINUS = 173;\nexport const MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\nexport const VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\nexport const VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\nexport const FF_MUTE = 181;\nexport const FF_VOLUME_DOWN = 182;\nexport const LAST_MEDIA = 183;\nexport const FF_VOLUME_UP = 183;\nexport const SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\nexport const EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\nexport const COMMA = 188;\nexport const DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\nexport const PERIOD = 190;\nexport const SLASH = 191;\nexport const APOSTROPHE = 192;\nexport const TILDE = 192;\nexport const OPEN_SQUARE_BRACKET = 219;\nexport const BACKSLASH = 220;\nexport const CLOSE_SQUARE_BRACKET = 221;\nexport const SINGLE_QUOTE = 222;\nexport const MAC_META = 224;\n","export enum ResizeCursorClass {\n ew = 'ew-resize',\n ns = 'ns-resize',\n nesw = 'nesw-resize',\n nwse = 'nwse-resize'\n}\n\nexport enum CursorClass {\n crosshair = 'crosshair'\n}\n\nexport const RESIZE_CURSORS = [ResizeCursorClass.ns, ResizeCursorClass.nesw, ResizeCursorClass.ew, ResizeCursorClass.nwse];\n","export const ATTACHED_ELEMENT_CLASS_NAME = 'plait-board-attached';\n\nexport const ACTIVE_STROKE_WIDTH = 1;\n\nexport const SNAPPING_STROKE_WIDTH = 2;\n\nexport const SELECTION_RECTANGLE_CLASS_NAME = 'selection-rectangle';\n\nexport const SELECTION_RECTANGLE_BOUNDING_CLASS_NAME = 'selection-rectangle-bounding';\n","export const ZOOM_STEP = 0.1;\nexport const MIN_ZOOM = 0.1;\nexport const MAX_ZOOM = 4;\n","export * from './keycodes';\nexport * from './cursor';\nexport * from './selection';\nexport * from './zoom';\n\nexport const HOST_CLASS_NAME = 'plait-board-container';\n\nexport const ACTIVE_MOVING_CLASS_NAME = 'active-with-moving';\n\nexport const ROTATE_HANDLE_CLASS_NAME = 'rotate-handle';\n\nexport const RESIZE_HANDLE_CLASS_NAME = 'resize-handle';\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;\n\nexport const PRESS_AND_MOVE_BUFFER = 3;\n\nexport const DRAG_SELECTION_PRESS_AND_MOVE_BUFFER = 10;\n\nexport const HIT_DISTANCE_BUFFER = 5;\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 { RoughSVG } from 'roughjs/bin/svg';\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';\nimport { PlaitElementRef } from '../core/element/element-ref';\nimport { PlaitBoardContext } from '../context';\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 KEY_TO_ELEMENT_MAP = new WeakMap<PlaitBoard, Map<String, PlaitElement>>();\n\nexport const NODE_TO_G = new WeakMap<PlaitNode, SVGGElement>();\n\nexport const NODE_TO_CONTAINER_G = new WeakMap<PlaitNode, SVGGElement>();\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_AFTER_CHANGE = new WeakMap<PlaitBoard, () => void>();\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_CONTEXT = new WeakMap<PlaitBoard, PlaitBoardContext>();\n\nexport const IS_BOARD_ALIVE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ELEMENT_HOST = new WeakMap<\n PlaitBoard,\n {\n lowerHost: SVGGElement;\n host: SVGGElement;\n upperHost: SVGGElement;\n activeHost: SVGGElement;\n container: HTMLElement;\n viewportContainer: HTMLElement;\n }\n>();\n\nexport const BOARD_TO_SELECTED_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_POINT_IN_BOARD = new WeakMap<PlaitBoard, Point>();\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, { elements: PlaitElement[]; timeoutId: any }>();\n\nexport const BOARD_TO_MOVING_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const PATH_REFS: WeakMap<PlaitBoard, Set<PathRef>> = new WeakMap();\n\nexport const ELEMENT_TO_REF: WeakMap<PlaitElement, PlaitElementRef> = new WeakMap();\n","import { PlaitElement } from '../interfaces';\n\nexport function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n\n/**\n * get {x,y} 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\nexport const RgbaToHEX = (Rgb: string, opacity: number) => {\n return Rgb + Math.floor(opacity * 255).toString(16);\n};\n\nexport function isContextmenu(event: MouseEvent) {\n return event.button === 2;\n}\n\nexport function uniqueById(elements: PlaitElement[]) {\n const uniqueMap = new Map();\n\n elements.forEach(item => {\n if (!uniqueMap.has(item.id)) {\n uniqueMap.set(item.id, item);\n }\n });\n\n return Array.from(uniqueMap.values());\n}\n\nexport const findLastIndex = <T>(\n array: readonly T[],\n cb: (element: T, index: number, array: readonly T[]) => boolean,\n fromIndex: number = array.length - 1\n) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\n let index = fromIndex + 1;\n while (--index > -1) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\n\nexport const findIndex = <T>(\n array: readonly T[],\n cb: (element: T, index: number, array: readonly T[]) => boolean,\n fromIndex: number = 0\n) => {\n // fromIndex = 2\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\n let index = fromIndex - 1;\n while (++index < array.length) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\n\nexport const isIndicesContinuous = (indexes: number[]): boolean => {\n indexes.sort((a, b) => a - b);\n for (let i = 1; i < indexes.length; i++) {\n if (indexes[i] !== indexes[i - 1] + 1) {\n return false;\n }\n }\n return true;\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 { 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 hasPrevious(path: Path): boolean {\n return path[path.length - 1] > 0;\n },\n previous(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the previous path of a root path [${path}], because it has no previous index.`);\n }\n\n const last = path[path.length - 1];\n\n if (last <= 0) {\n throw new Error(`Cannot get the previous path of a first child path [${path}] because it would result in a negative index.`);\n }\n\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 if (!path) return null;\n // PERF: use destructing instead of immer\n const p = [...path];\n\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (path.length === 0) {\n return p;\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 p;\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice();\n\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","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 first(board: PlaitBoard, path: Path) {\n const p = path.slice();\n let n = PlaitNode.get(board, p);\n if (!n.children || !board.isExpanded(n)) {\n return n;\n }\n while (n) {\n if (n.children!.length === 0) {\n break;\n } else {\n n = n.children![0];\n p.push(0);\n }\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 = newProperties;\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 { rotate } from '../utils';\nimport { Point } from './point';\n\nexport interface RectangleClient {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * [x, y] x,y between 0 and 1\n * represents a point in the rectangle\n */\nexport type PointOfRectangle = [number, number];\n\nexport const RectangleClient = {\n isHit: (origin: RectangleClient, target: RectangleClient) => {\n return RectangleClient.isHitX(origin, target) && RectangleClient.isHitY(origin, target);\n },\n isHitX: (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 // float calculate error( eg: 1.4210854715202004e-14 > 0)\n if (Math.floor(maxX - minX - origin.width - target.width) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n isHitY: (origin: RectangleClient, target: RectangleClient) => {\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(maxY - minY - origin.height - target.height) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n getPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height]\n ] as [Point, Point];\n },\n getRectangleByCenterPoint(point: Point, width: number, height: number) {\n return RectangleClient.getRectangleByPoint([point[0] - width / 2, point[1] - height / 2], width, height);\n },\n getRectangleByPoint(point: Point, width: number, height: number): RectangleClient {\n return {\n x: point[0],\n y: point[1],\n width,\n height\n };\n },\n getRectangleByPoints(points: Point[] | Point[][]): RectangleClient {\n if (isPointArray(points)) {\n points = [points];\n }\n let xMin = Infinity;\n let yMin = Infinity;\n let xMax = -Infinity;\n let yMax = -Infinity;\n for (const point of points) {\n const xArray = point.map(ele => ele[0]);\n const yArray = point.map(ele => ele[1]);\n xMin = Math.min(xMin, ...xArray);\n yMin = Math.min(yMin, ...yArray);\n xMax = Math.max(xMax, ...xArray);\n yMin = Math.min(yMin, ...yArray);\n yMax = Math.max(yMax, ...yArray);\n }\n const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n return rect;\n },\n getCornerPointsByPoints(points: 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 return [\n [xMin, yMin],\n [xMax, yMin],\n [xMax, yMax],\n [xMin, yMax]\n ] as [Point, Point, Point, Point];\n },\n getOutlineRectangle: (rectangle: RectangleClient, offset: number) => {\n return {\n x: rectangle.x + offset,\n y: rectangle.y + offset,\n width: rectangle.width - offset * 2,\n height: rectangle.height - offset * 2\n };\n },\n inflate: (rectangle: RectangleClient, delta: number) => {\n const half = delta / 2;\n return {\n x: rectangle.x - half,\n y: rectangle.y - half,\n width: rectangle.width + half * 2,\n height: rectangle.height + half * 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 getCornerPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ] as [Point, Point, Point, Point];\n },\n getCenterPoint: (rectangle: RectangleClient) => {\n return [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2] as Point;\n },\n getCenterPointByPoints: (points: Point[]) => {\n return RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(points));\n },\n getEdgeCenterPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ] as [Point, Point, Point, Point];\n },\n getConnectionPoint: (rectangle: RectangleClient, point: PointOfRectangle) => {\n return [rectangle.x + rectangle.width * point[0], rectangle.y + rectangle.height * point[1]] as Point;\n },\n expand(rectangle: RectangleClient, left: number, top: number = left, right: number = left, bottom: number = top) {\n return {\n x: rectangle.x - left,\n y: rectangle.y - top,\n width: rectangle.width + left + right,\n height: rectangle.height + top + bottom\n };\n },\n getGapCenter(rectangle1: RectangleClient, rectangle2: RectangleClient, isHorizontal: boolean) {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n const align = [rectangle1[axis], rectangle1[axis] + rectangle1[side], rectangle2[axis], rectangle2[axis] + rectangle2[side]];\n const sortArr = align.sort((a, b) => a - b);\n return (sortArr[1] + sortArr[2]) / 2;\n },\n isPointInRectangle(rectangle: RectangleClient, point: Point) {\n const x = point[0],\n y = point[1];\n return x > rectangle.x && x < rectangle.x + rectangle.width && y > rectangle.y && y < rectangle.y + rectangle.height;\n },\n getBoundingRectangle(rectangles: RectangleClient[]): RectangleClient {\n if (rectangles.length === 0) {\n throw new Error('rectangles can not be empty array');\n }\n let minX = Number.MAX_VALUE;\n let minY = Number.MAX_VALUE;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n rectangles.forEach(rect => {\n minX = Math.min(minX, rect.x);\n minY = Math.min(minY, rect.y);\n maxX = Math.max(maxX, rect.x + rect.width);\n maxY = Math.max(maxY, rect.y + rect.height);\n });\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n};\n\nfunction isPointArray(data: Point[] | Point[][]): data is Point[] {\n return (\n Array.isArray(data) &&\n data.every(item => Array.isArray(item) && item.length === 2 && typeof item[0] === 'number' && typeof item[1] === 'number')\n );\n}\n","import { Point } from '../interfaces';\nimport { 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 getNearestPointBetweenPointAndSegment(point: Point, linePoints: [Point, Point]) {\n const x = point[0],\n y = point[1],\n x1 = linePoints[0][0],\n y1 = linePoints[0][1],\n x2 = linePoints[1][0],\n y2 = linePoints[1][1];\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 return [xx, yy] as Point;\n}\n\nexport function distanceBetweenPointAndSegments(points: Point[], point: Point) {\n const len = points.length;\n let distance = Infinity;\n for (let i = 0; i < len - 1; i++) {\n const p = points[i];\n const p2 = points[i + 1];\n const currentDistance = distanceBetweenPointAndSegment(point[0], point[1], p[0], p[1], p2[0], p2[1]);\n if (currentDistance < distance) {\n distance = currentDistance;\n }\n }\n return distance;\n}\n\nexport function getNearestPointBetweenPointAndSegments(point: Point, points: Point[], isClose: Boolean = true) {\n const len = points.length;\n let distance = Infinity;\n let result: Point = point;\n\n for (let i = 0; i < len; i++) {\n const p = points[i];\n if (i === len - 1 && !isClose) continue;\n const p2 = i === len - 1 ? points[0] : points[i + 1];\n const currentDistance = distanceBetweenPointAndSegment(point[0], point[1], p[0], p[1], p2[0], p2[1]);\n if (currentDistance < distance) {\n distance = currentDistance;\n result = getNearestPointBetweenPointAndSegment(point, [p, p2]);\n }\n }\n return result;\n}\n\nexport function getNearestPointBetweenPointAndEllipse(point: Point, center: Point, rx: number, ry: number, rotation: number = 0): Point {\n const rectangleClient = {\n x: center[0] - rx,\n y: center[1] - ry,\n height: ry * 2,\n width: rx * 2\n };\n // https://stackoverflow.com/a/46007540/232122\n const px = Math.abs(point[0] - rectangleClient.x - rectangleClient.width / 2);\n const py = Math.abs(point[1] - rectangleClient.y - rectangleClient.height / 2);\n\n let tx = 0.707;\n let ty = 0.707;\n\n const a = Math.abs(rectangleClient.width) / 2;\n const b = Math.abs(rectangleClient.height) / 2;\n\n [0, 1, 2, 3].forEach((x) => {\n const xx = a * tx;\n const yy = b * ty;\n\n const ex = ((a * a - b * b) * tx ** 3) / a;\n const ey = ((b * b - a * a) * ty ** 3) / b;\n\n const rx = xx - ex;\n const ry = yy - ey;\n\n const qx = px - ex;\n const qy = py - ey;\n\n const r = Math.hypot(ry, rx);\n const q = Math.hypot(qy, qx);\n\n tx = Math.min(1, Math.max(0, ((qx * r) / q + ex) / a));\n ty = Math.min(1, Math.max(0, ((qy * r) / q + ey) / b));\n const t = Math.hypot(ty, tx);\n tx /= t;\n ty /= t;\n });\n const signX = point[0] > center[0] ? 1 : -1;\n const signY = point[1] > center[1] ? 1 : -1;\n\n return [center[0] + a * tx * signX, center[1] + b * ty * signY];\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\nexport const isLineHitLine = (a: Point, b: Point, c: Point, d: Point): boolean => {\n if (Point.isEquals(a, b) && Point.isEquals(c, d) && !Point.isEquals(a, c)) {\n return false;\n }\n\n const crossProduct = (v1: Point, v2: Point) => v1[0] * v2[1] - v1[1] * v2[0];\n\n const ab: Point = [b[0] - a[0], b[1] - a[1]];\n const ac: Point = [c[0] - a[0], c[1] - a[1]];\n const ad: Point = [d[0] - a[0], d[1] - a[1]];\n\n const ca: Point = [a[0] - c[0], a[1] - c[1]];\n const cb: Point = [b[0] - c[0], b[1] - c[1]];\n const cd: Point = [d[0] - c[0], d[1] - c[1]];\n\n return crossProduct(ab, ac) * crossProduct(ab, ad) <= 0 && crossProduct(cd, ca) * crossProduct(cd, cb) <= 0;\n};\n\nexport const isLineHitRectangle = (points: Point[], rectangle: RectangleClient) => {\n const rectanglePoints = RectangleClient.getCornerPoints(rectangle);\n const len = points.length;\n for (let i = 0; i < len; i++) {\n if (i === len - 1) continue;\n const p1 = points[i];\n const p2 = points[(i + 1) % len];\n const isHit = isSingleLineHitRectangleEdge(p1, p2, rectangle);\n if (isHit || isPointInPolygon(p1, rectanglePoints) || isPointInPolygon(p2, rectanglePoints)) {\n return true;\n }\n }\n return false;\n};\n\nexport const isLineHitRectangleEdge = (points: Point[], rectangle: RectangleClient, isClose: boolean = true) => {\n const len = points.length;\n for (let i = 0; i < len; i++) {\n if (i === len - 1 && !isClose) continue;\n const p1 = points[i];\n const p2 = points[(i + 1) % len];\n const isHit = isSingleLineHitRectangleEdge(p1, p2, rectangle);\n if (isHit) {\n return true;\n }\n }\n return false;\n};\n\nexport const isSingleLineHitRectangleEdge = (p1: Point, p2: Point, rectangle: RectangleClient) => {\n const rectanglePoints = RectangleClient.getCornerPoints(rectangle);\n return (\n isLineHitLine(p1, p2, rectanglePoints[0], rectanglePoints[1]) ||\n isLineHitLine(p1, p2, rectanglePoints[1], rectanglePoints[2]) ||\n isLineHitLine(p1, p2, rectanglePoints[2], rectanglePoints[3]) ||\n isLineHitLine(p1, p2, rectanglePoints[3], rectanglePoints[0])\n );\n};\n\n//https://stackoverflow.com/questions/22521982/check-if-point-is-inside-a-polygon\nexport const isPointInPolygon = (point: Point, points: Point[]) => {\n // ray-casting algorithm based on\n // https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n\n const x = point[0],\n y = point[1];\n\n let inside = false;\n for (var i = 0, j = points.length - 1; i < points.length; j = i++) {\n let xi = points[i][0],\n yi = points[i][1];\n let xj = points[j][0],\n yj = points[j][1];\n\n let intersect = yi > y != yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n};\n\nexport const isPointInEllipse = (point: Point, center: Point, rx: number, ry: number, angle = 0) => {\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const x1 = (point[0] - center[0]) * cosAngle + (point[1] - center[1]) * sinAngle;\n const y1 = (point[1] - center[1]) * cosAngle - (point[0] - center[0]) * sinAngle;\n\n return (x1 * x1) / (rx * rx) + (y1 * y1) / (ry * ry) <= 1;\n};\n\nexport const isPointInRoundRectangle = (point: Point, rectangle: RectangleClient, radius: number, angle = 0) => {\n const { x: rectX, y: rectY, width, height } = rectangle;\n const isInRectangle = point[0] >= rectX && point[0] <= rectX + width && point[1] >= rectY && point[1] <= rectY + height;\n const handleLeftTop =\n point[0] >= rectX &&\n point[0] <= rectX + radius &&\n point[1] >= rectY &&\n point[1] <= rectY + radius &&\n Math.hypot(point[0] - (rectX + radius), point[1] - (rectY + radius)) > radius;\n const handleLeftBottom =\n point[0] >= rectX &&\n point[0] <= rectX + radius &&\n point[1] >= rectY + height &&\n point[1] <= rectY + height - radius &&\n Math.hypot(point[0] - (rectX + radius), point[1] - (rectY + height - radius)) > radius;\n const handleRightTop =\n point[0] >= rectX + width - radius &&\n point[0] <= rectX + width &&\n point[1] >= rectY &&\n point[1] <= rectY + radius &&\n Math.hypot(point[0] - (rectX + width - radius), point[1] - (rectY + radius)) > radius;\n const handleRightBottom =\n point[0] >= rectX + width - radius &&\n point[0] <= rectX + width &&\n point[1] >= rectY + height - radius &&\n point[1] <= rectY + height &&\n Math.hypot(point[0] - (rectX + width - radius), point[1] - (rectY + height - radius)) > radius;\n const isInCorner = handleLeftTop || handleLeftBottom || handleRightTop || handleRightBottom;\n\n return isInRectangle && !isInCorner;\n};\n\n// https://gist.github.com/nicholaswmin/c2661eb11cad5671d816\nexport const catmullRomFitting = function (points: Point[]) {\n const alpha = 0.5;\n let p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M;\n var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;\n const result: Point[] = [];\n result.push([Math.round(points[0][0]), Math.round(points[0][1])]);\n var length = points.length;\n for (var i = 0; i < length - 1; i++) {\n p0 = i == 0 ? points[0] : points[i - 1];\n p1 = points[i];\n p2 = points[i + 1];\n p3 = i + 2 < length ? points[i + 2] : p2;\n\n d1 = Math.sqrt(Math.pow(p0[0] - p1[0], 2) + Math.pow(p0[1] - p1[1], 2));\n d2 = Math.sqrt(Math.pow(p1[0] - p2[0], 2) + Math.pow(p1[1] - p2[1], 2));\n d3 = Math.sqrt(Math.pow(p2[0] - p3[0], 2) + Math.pow(p2[1] - p3[1], 2));\n\n // Catmull-Rom to Cubic Bezier conversion matrix\n // A = 2d1^2a + 3d1^a * d2^a + d3^2a\n // B = 2d3^2a + 3d3^a * d2^a + d2^2a\n // [ 0 1 0 0 ]\n // [ -d2^2a /N A/N d1^2a /N 0 ]\n // [ 0 d3^2a /M B/M -d2^2a /M ]\n // [ 0 0 1 0 ]\n\n d3powA = Math.pow(d3, alpha);\n d3pow2A = Math.pow(d3, 2 * alpha);\n d2powA = Math.pow(d2, alpha);\n d2pow2A = Math.pow(d2, 2 * alpha);\n d1powA = Math.pow(d1, alpha);\n d1pow2A = Math.pow(d1, 2 * alpha);\n\n A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A;\n B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A;\n N = 3 * d1powA * (d1powA + d2powA);\n if (N > 0) {\n N = 1 / N;\n }\n M = 3 * d3powA * (d3powA + d2powA);\n if (M > 0) {\n M = 1 / M;\n }\n\n bp1 = [(-d2pow2A * p0[0] + A * p1[0] + d1pow2A * p2[0]) * N, (-d2pow2A * p0[1] + A * p1[1] + d1pow2A * p2[1]) * N];\n bp2 = [(d3pow2A * p1[0] + B * p2[0] - d2pow2A * p3[0]) * M, (d3pow2A * p1[1] + B * p2[1] - d2pow2A * p3[1]) * M];\n\n if (bp1[0] == 0 && bp1[1] == 0) {\n bp1 = p1;\n }\n if (bp2[0] == 0 && bp2[1] == 0) {\n bp2 = p2;\n }\n\n result.push(bp1 as Point, bp2 as Point, p2 as Point);\n }\n\n return result;\n};\n\n/**\n * the result of slope is based on Cartesian coordinate system\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getEllipseTangentSlope(x: number, y: number, a: number, b: number) {\n if (Math.abs(y) === 0) {\n return x > 0 ? -Infinity : Infinity;\n }\n const k = (-b * b * x) / (a * a * y);\n return k;\n}\n\n/**\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getVectorFromPointAndSlope(x: number, y: number, slope: number) {\n if (slope === Infinity) {\n return [0, -1] as Point;\n } else if (slope === -Infinity) {\n return [0, 1] as Point;\n }\n let vector = [1, -slope] as Point;\n if (y < 0) {\n vector = [-vector[0], -vector[1]];\n }\n return vector as Point;\n}\n\n/**\n * The DOM likes values to be fixed to 3 decimal places\n */\nexport function toDomPrecision(v: number) {\n return +v.toFixed(4);\n}\n\nexport function toFixed(v: number) {\n return +v.toFixed(2);\n}\n\nexport function ceilToDecimal(value: number, decimalPlaces: number) {\n const factor = Math.pow(10, decimalPlaces);\n return Math.ceil(value * factor) / factor;\n}\n\n/**\n * Whether two numbers numbers a and b are approximately equal.\n *\n * @param a - The first point.\n * @param b - The second point.\n * @public\n */\nexport function approximately(a: number, b: number, precision = 0.000001) {\n return Math.abs(a - b) <= precision;\n}\n\n// https://medium.com/@steveruiz/find-the-points-where-a-line-segment-intercepts-an-angled-ellipse-in-javascript-typescript-e451524beece\nexport function getCrossingPointsBetweenEllipseAndSegment(\n startPoint: Point,\n endPoint: Point,\n cx: number,\n cy: number,\n rx: number,\n ry: number,\n segment_only = true\n) {\n // If the ellipse or line segment are empty, return no tValues.\n if (rx === 0 || ry === 0 || (startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1])) {\n return [];\n }\n\n rx = rx < 0 ? rx : -rx;\n ry = ry < 0 ? ry : -ry;\n\n startPoint[0] -= cx;\n startPoint[1] -= cy;\n endPoint[0] -= cx;\n endPoint[1] -= cy;\n\n // Calculate the quadratic parameters.\n var A =\n ((endPoint[0] - startPoint[0]) * (endPoint[0] - startPoint[0])) / rx / rx +\n ((endPoint[1] - startPoint[1]) * (endPoint[1] - startPoint[1])) / ry / ry;\n var B = (2 * startPoint[0] * (endPoint[0] - startPoint[0])) / rx / rx + (2 * startPoint[1] * (endPoint[1] - startPoint[1])) / ry / ry;\n var C = (startPoint[0] * startPoint[0]) / rx / rx + (startPoint[1] * startPoint[1]) / ry / ry - 1;\n\n // Make a list of t values (normalized points on the line where intersections occur).\n var tValues: number[] = [];\n\n // Calculate the discriminant.\n var discriminant = B * B - 4 * A * C;\n\n if (discriminant === 0) {\n // One real solution.\n tValues.push(-B / 2 / A);\n } else if (discriminant > 0) {\n // Two real solutions.\n tValues.push((-B + Math.sqrt(discriminant)) / 2 / A);\n tValues.push((-B - Math.sqrt(discriminant)) / 2 / A);\n }\n return (\n tValues\n // Filter to only points that are on the segment.\n .filter((t) => !segment_only || (t >= 0 && t <= 1))\n // Solve for points.\n .map((t) => [startPoint[0] + (endPoint[0] - startPoint[0]) * t + cx, startPoint[1] + (endPoint[1] - startPoint[1]) * t + cy])\n );\n}\n\n/**\n * Get a point between two points.\n * @param x0 The x-axis coordinate of the first point.\n * @param y0 The y-axis coordinate of the first point.\n * @param x1 The x-axis coordinate of the second point.\n * @param y1 The y-axis coordinate of the second point.\n * @param d Normalized\n */\nexport function getPointBetween(x0: number, y0: number, x1: number, y1: number, d = 0.5) {\n return [x0 + (x1 - x0) * d, y0 + (y1 - y0) * d];\n}\n","import { PlaitBoard } from '../interfaces/board';\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 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}\n","import { Options } from 'roughjs/bin/core';\nimport { POINTER_BUTTON } from '../../constants';\nimport { RectangleClient } from '../../interfaces';\n\nexport const NS = 'http://www.w3.org/2000/svg';\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 createRect(rectangle: RectangleClient, options?: Options) {\n const rect = document.createElementNS(NS, 'rect');\n rect.setAttribute('x', `${rectangle.x}`);\n rect.setAttribute('y', `${rectangle.y}`);\n rect.setAttribute('width', `${rectangle.width}`);\n rect.setAttribute('height', `${rectangle.height}`);\n for (let key in options) {\n const optionKey = key as keyof Options;\n rect.setAttribute(key, `${options[optionKey]}`);\n }\n return rect;\n}\n\nexport const setStrokeLinecap = (g: SVGGElement, value: 'round' | 'square') => {\n g.setAttribute('stroke-linecap', value);\n};\n\nexport const setPathStrokeLinecap = (g: SVGGElement, value: 'round' | 'square') => {\n g.querySelectorAll('path').forEach(path => {\n path.setAttribute('stroke-linecap', value);\n });\n};\n\nexport function createMask() {\n return document.createElementNS(NS, 'mask');\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};\n","import { ceilToDecimal } from '../math';\nimport { 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', `${ceilToDecimal(width, 0)}`);\n newForeignObject.setAttribute('height', `${height}`);\n return newForeignObject;\n}\n\nexport function updateForeignObject(target: SVGForeignObjectElement | SVGGElement, width: number, height: number, x: number, y: number) {\n const foreignObject = target instanceof SVGForeignObjectElement ? target : target.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${ceilToDecimal(width, 0)}`);\n foreignObject.setAttribute('height', `${height}`);\n foreignObject.setAttribute('x', `${x}`);\n foreignObject.setAttribute('y', `${y}`);\n }\n}\n\nexport function updateForeignObjectWidth(target: SVGForeignObjectElement | SVGGElement, width: number) {\n const foreignObject = target instanceof SVGForeignObjectElement ? target : target.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${ceilToDecimal(width, 0)}`);\n }\n}\n","export const IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\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","// Credits to slate - https://github.com/ianstormtaylor/slate\n\nimport { MERGING, PlaitBoard, PlaitOperation, SAVING, SPLITTING_ONCE } 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 * Get the splitting once flag's current value.\n */\n\n isSplittingOnce(board: PlaitBoard): boolean | undefined {\n return SPLITTING_ONCE.get(board);\n },\n\n setSplittingOnce(board: PlaitBoard, value: boolean | undefined): void {\n SPLITTING_ONCE.set(board, value);\n },\n\n /**\n * Apply a series of changes inside a synchronous `fn`, These operations will\n * be merged into the previous history.\n */\n withMerging(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isMerging(board);\n MERGING.set(board, true);\n fn();\n MERGING.set(board, prev);\n },\n\n /**\n * Apply a series of changes inside a synchronous `fn`, ensuring that the first\n * operation starts a new batch in the history. Subsequent operations will be\n * merged as usual.\n */\n withNewBatch(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isMerging(board);\n MERGING.set(board, true);\n SPLITTING_ONCE.set(board, true);\n fn();\n MERGING.set(board, prev);\n SPLITTING_ONCE.delete(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 arrow: ['down', 'left', 'right', 'up'],\n extendArrow: ['shift+down', 'shift+left', 'shift+right', 'shift+up'],\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 extendUp: 'shift+up',\n extendDown: 'shift+down',\n italic: 'mod+i',\n splitBlock: 'shift?+enter',\n undo: 'mod+z',\n shift: 'shift'\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 isArrow: create('arrow'),\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 isExtendUp: create('extendUp'),\n isExtendDown: create('extendDown'),\n isExtendArrow: create('extendArrow'),\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 isShift: create('shift')\n};\nexport default hotkeys;\nexport { hotkeys };\n","export function idCreator(length = 5) {\n // remove numeral\n const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /**** Easily confusing characters are removed by default 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 { PlaitBoard } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\n\nexport 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 (node.children && (!recursion || recursion(node))) {\n let children: TreeNode[] = [...node.children];\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 const getIsRecursionFunc = (board: PlaitBoard) => {\n return (element: PlaitElement | PlaitBoard) => {\n if (PlaitBoard.isBoard(element) || board.isRecursion(element)) {\n return true;\n } else {\n return false;\n }\n };\n};\n\nexport interface TreeNode {\n children?: TreeNode[];\n}\n","import { Point } from './point';\n\nexport const SELECTION_BORDER_COLOR = '#6698FF';\nexport const SELECTION_FILL_COLOR = '#6698FF25'; // opacity 0.25\n\nexport interface Selection {\n anchor: Point;\n focus: Point;\n}\n\nexport const Selection = {\n isCollapsed(selection: Selection) {\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 { ELEMENT_TO_REF, NODE_TO_CONTAINER_G, NODE_TO_G, NODE_TO_PARENT } from '../utils';\nimport { PlaitBoard } from './board';\nimport { Point } from './point';\nimport { PlaitElementRef } from '../core/element/element-ref';\n\nexport interface PlaitElement {\n [key: string]: any;\n id: string;\n children?: PlaitElement[];\n points?: Point[];\n type?: string;\n groupId?: string;\n angle?: number;\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 getElementRef<T extends PlaitElementRef = PlaitElementRef>(value: PlaitElement) {\n return ELEMENT_TO_REF.get(value) as T;\n },\n getElementG(value: PlaitElement) {\n const g = NODE_TO_G.get(value);\n if (!g) {\n throw new Error(`can not resolve element g: ${JSON.stringify(value)}`);\n }\n return g;\n },\n hasMounted(element: PlaitElement) {\n const containerG = PlaitElement.getContainerG(element, { suppressThrow: true });\n if (containerG) {\n return true;\n } else {\n return false;\n }\n },\n getContainerG<T extends boolean>(\n value: PlaitElement,\n options: {\n suppressThrow: T;\n }\n ): T extends true ? SVGGElement | null : SVGGElement {\n const containerG = NODE_TO_CONTAINER_G.get(value) || null;\n if (!containerG) {\n if (options.suppressThrow) {\n return null as T extends true ? SVGGElement | null : SVGGElement;\n }\n throw new Error('can not resolve container g');\n }\n return containerG;\n }\n};\n\nexport interface ComponentType<T> {\n new (...args: any[]): T;\n}\n\nexport interface ImageEntry {\n url: string;\n file: File;\n}\n","import { PlaitBoard, PlaitElement } from '../interfaces';\n\nexport const sortElements = (board: PlaitBoard, elements: PlaitElement[], ascendingOrder = true) => {\n return [...elements].sort((a: PlaitElement, b: PlaitElement) => {\n const pathA = PlaitBoard.findPath(board, a);\n const pathB = PlaitBoard.findPath(board, b);\n return ascendingOrder ? pathA[0] - pathB[0] : pathB[0] - pathA[0];\n });\n};\n","import { Options } from 'roughjs/bin/core';\nimport { PlaitBoard, Point, RectangleClient } from '../interfaces';\n\nconst TEMPORARY_G = new Map();\n\nconst getTemporaryGArray = (debugKey: string): SVGGElement[] => {\n return TEMPORARY_G.get(debugKey) || [];\n};\n\nconst setTemporaryGArray = (debugKey: string, gArray: SVGGElement[]) => {\n TEMPORARY_G.set(debugKey, gArray);\n};\n\nexport class DebugGenerator {\n constructor(private debugKey: string) {}\n isDebug() {\n return isDebug(this.debugKey);\n }\n clear() {\n if (!this.isDebug()) {\n return;\n }\n const gArray = getTemporaryGArray(this.debugKey);\n setTemporaryGArray(this.debugKey, []);\n gArray.forEach(g => g.remove());\n }\n drawPolygon(board: PlaitBoard, points: Point[], options?: Options) {\n if (!isDebug(this.debugKey)) {\n return;\n }\n const polygonG = PlaitBoard.getRoughSVG(board).polygon(points, options || { stroke: 'red' });\n polygonG.classList.add(this.debugKey);\n PlaitBoard.getElementActiveHost(board).append(polygonG);\n const gArray = getTemporaryGArray(this.debugKey);\n gArray.push(polygonG);\n setTemporaryGArray(this.debugKey, gArray);\n return polygonG;\n }\n drawLine(board: PlaitBoard, points: Point[], options?: Options) {\n if (!isDebug(this.debugKey)) {\n return;\n }\n const lineG = PlaitBoard.getRoughSVG(board).linearPath(points, options || { stroke: 'red' });\n lineG.classList.add(this.debugKey);\n PlaitBoard.getElementActiveHost(board).append(lineG);\n const gArray = getTemporaryGArray(this.debugKey);\n gArray.push(lineG);\n setTemporaryGArray(this.debugKey, gArray);\n return lineG;\n }\n drawRectangle(board: PlaitBoard, data: Point[] | RectangleClient, options?: Options) {\n if (!isDebug(this.debugKey)) {\n return;\n }\n let rectangle: RectangleClient;\n if (data instanceof Array) {\n rectangle = RectangleClient.getRectangleByPoints(data);\n } else {\n rectangle = data;\n }\n const rectangleG = PlaitBoard.getRoughSVG(board).rectangle(\n rectangle.x,\n rectangle.y,\n rectangle.width,\n rectangle.height,\n options || { stroke: 'red' }\n );\n rectangleG.classList.add(this.debugKey);\n PlaitBoard.getElementActiveHost(board).append(rectangleG);\n const gArray = getTemporaryGArray(this.debugKey);\n gArray.push(rectangleG);\n setTemporaryGArray(this.debugKey, gArray);\n return rectangleG;\n }\n drawCircles(board: PlaitBoard, points: Point[], diameter: number = 0, isCumulativeDiameter: boolean = false, options?: Options) {\n if (!isDebug(this.debugKey)) {\n return;\n }\n const result: SVGGElement[] = [];\n points.forEach((p, i) => {\n const circle = PlaitBoard.getRoughSVG(board).circle(\n p[0],\n p[1],\n isCumulativeDiameter ? diameter * (i + 1) : diameter,\n Object.assign({}, { stroke: 'red', fill: 'red', fillStyle: 'solid' }, options || {})\n );\n circle.classList.add(this.debugKey);\n PlaitBoard.getElementActiveHost(board).append(circle);\n const gArray = getTemporaryGArray(this.debugKey);\n gArray.push(circle);\n result.push(circle);\n setTemporaryGArray(this.debugKey, gArray);\n });\n return result;\n }\n}\n\nexport const createDebugGenerator = (debugKey: string) => {\n return new DebugGenerator(debugKey);\n};\n\nexport const isDebug = (key?: string) => {\n const defaultKey = 'debug:plait';\n return localStorage.getItem(key || defaultKey) === 'true';\n};\n","import { PlaitBoard } from './board';\n\nexport type PlaitPlugin = (board: PlaitBoard) => PlaitBoard;\n\nexport interface WithPluginOptions {\n disabled?: boolean;\n}\n\nexport interface WithSelectionPluginOptions extends WithPluginOptions {\n isMultipleSelection: boolean;\n isDisabledSelection: boolean;\n isPreventClearSelection: boolean; // is clear selection on click outside of board container\n}\n\nexport interface WithHandPluginOptions extends WithPluginOptions {\n isHandMode: (board: PlaitBoard, event: PointerEvent) => boolean;\n}\n\nexport enum PlaitPluginKey {\n 'withSelection' = 'withSelection',\n 'withHand' = 'withHand'\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Ancestor } from '../interfaces/node';\nimport { depthFirstRecursion, getIsRecursionFunc } from './tree';\nimport { BOARD_TO_SELECTED_ELEMENT } from './weak-maps';\nimport { Selection } from '../interfaces/selection';\nimport { PlaitElement } from '../interfaces/element';\nimport { Point } from '../interfaces/point';\nimport { sortElements } from './position';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport { getRectangleByElements } from './element';\nimport { PlaitOptionsBoard } from '../plugins/with-options';\nimport { isDebug } from './debug';\nimport { PlaitPluginKey, WithSelectionPluginOptions } from '../interfaces/plugin';\n\nexport const getHitElementsBySelection = (\n board: PlaitBoard,\n selection?: Selection,\n match: (element: PlaitElement) => boolean = () => true\n) => {\n const newSelection = selection || (board.selection as Selection);\n const rectangleHitElements: PlaitElement[] = [];\n if (!newSelection) {\n return [];\n }\n const isCollapsed = Selection.isCollapsed(newSelection);\n if (isCollapsed) {\n const hitElements = getHitElementsByPoint(board, newSelection.anchor, match);\n if (hitElements?.length) {\n return hitElements;\n } else {\n return [];\n }\n }\n depthFirstRecursion<Ancestor>(\n board,\n (node) => {\n if (!PlaitBoard.isBoard(node) && match(node)) {\n let isRectangleHit = false;\n try {\n isRectangleHit = board.isRectangleHit(node, newSelection);\n } catch (error) {\n if (isDebug()) {\n console.error('isRectangleHit', error, 'node', node);\n }\n }\n if (isRectangleHit) {\n rectangleHitElements.push(node);\n }\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return rectangleHitElements;\n};\n\nexport const getHitElementsByPoint = (\n board: PlaitBoard,\n point: Point,\n match: (element: PlaitElement) => boolean = () => true,\n isStrict = true\n): PlaitElement[] => {\n let hitElements: PlaitElement[] = [];\n depthFirstRecursion<Ancestor>(\n board,\n (node) => {\n if (PlaitBoard.isBoard(node) || !match(node) || !PlaitElement.hasMounted(node)) {\n return;\n }\n let isHit = false;\n try {\n isHit = board.isHit(node, point, isStrict);\n } catch (error) {\n if (isDebug()) {\n console.error('isHit', error, 'node', node);\n }\n }\n if (isHit) {\n hitElements.push(node);\n return;\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return hitElements;\n};\n\nexport const getHitElementByPoint = (\n board: PlaitBoard,\n point: Point,\n match: (element: PlaitElement) => boolean = () => true,\n isStrict = true\n): undefined | PlaitElement => {\n const pointHitElements = getHitElementsByPoint(board, point, match, isStrict);\n const hitElement = board.getOneHitElement(pointHitElements);\n return hitElement;\n};\n\nexport const getHitSelectedElements = (board: PlaitBoard, point: Point) => {\n const selectedElements = getSelectedElements(board);\n const targetRectangle = selectedElements.length > 0 && getRectangleByElements(board, selectedElements, false);\n const isInTargetRectangle = targetRectangle && RectangleClient.isPointInRectangle(targetRectangle, point);\n if (isInTargetRectangle) {\n return selectedElements;\n } else {\n return [];\n }\n};\n\nexport const cacheSelectedElements = (board: PlaitBoard, selectedElements: PlaitElement[]) => {\n const sortedElements = sortElements(board, selectedElements);\n BOARD_TO_SELECTED_ELEMENT.set(board, sortedElements);\n};\n\nexport const getSelectedElements = (board: PlaitBoard) => {\n return BOARD_TO_SELECTED_ELEMENT.get(board) || [];\n};\n\nexport const addSelectedElement = (board: PlaitBoard, element: PlaitElement | PlaitElement[]) => {\n let elements = [];\n if (Array.isArray(element)) {\n elements.push(...element);\n } else {\n elements.push(element);\n }\n const selectedElements = getSelectedElements(board);\n cacheSelectedElements(board, [...selectedElements, ...elements]);\n};\n\nexport const removeSelectedElement = (board: PlaitBoard, element: PlaitElement, isRemoveChildren = false) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements.includes(element)) {\n const targetElements: PlaitElement[] = [];\n if (board.isRecursion(element) && isRemoveChildren) {\n depthFirstRecursion(\n element,\n (node) => {\n targetElements.push(node);\n },\n (node) => board.isRecursion(node)\n );\n } else {\n targetElements.push(element);\n }\n const newSelectedElements = selectedElements.filter((value) => !targetElements.includes(value));\n cacheSelectedElements(board, newSelectedElements);\n }\n};\n\nexport const replaceSelectedElement = (board: PlaitBoard, element: PlaitElement, newElement: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n selectedElements.splice(selectedElements.indexOf(element), 1, newElement);\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\nexport const temporaryDisableSelection = (board: PlaitOptionsBoard) => {\n const currentOptions = board.getPluginOptions(PlaitPluginKey.withSelection);\n board.setPluginOptions<WithSelectionPluginOptions>(PlaitPluginKey.withSelection, {\n isDisabledSelection: true\n });\n setTimeout(() => {\n board.setPluginOptions<WithSelectionPluginOptions>(PlaitPluginKey.withSelection, { ...currentOptions });\n }, 0);\n};\n\nexport const isHitSelectedRectangle = (board: PlaitBoard, point: Point) => {\n const hitSelectedElements = getHitSelectedElements(board, point);\n return hitSelectedElements.length > 0;\n};\n\nexport const isHitElement = (board: PlaitBoard, point: Point) => {\n const hitElement = getHitElementByPoint(board, point);\n return !!hitElement || isHitSelectedRectangle(board, point);\n};\n","import { Options } from 'roughjs/bin/core';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MAX_RADIUS } from '../../constants';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { RectangleClient } from '../../interfaces/rectangle-client';\nimport { setStrokeLinecap } from '../dom/common';\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 let radius = borderRadius || 0;\n if (radius === 0) {\n const defaultRadius = Math.min(width, height) / 8;\n let radius = defaultRadius;\n if (defaultRadius > MAX_RADIUS) {\n radius = outline ? MAX_RADIUS + 2 : MAX_RADIUS;\n }\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 const rectangleG = 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 setStrokeLinecap(rectangleG, 'round');\n return rectangleG;\n}\n\nexport const drawRectangle = (board: PlaitBoard, rectangle: RectangleClient, options: Options) => {\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const rectangleG = roughSVG.rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height, options);\n setStrokeLinecap(rectangleG, 'round');\n return rectangleG;\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, 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 / 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, 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, closePath?: boolean) {\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 if (closePath) {\n polylinePath += 'Z';\n }\n\n path.setAttribute('d', polylinePath);\n path.setAttribute('stroke', `${options?.stroke}`);\n path.setAttribute('stroke-width', `${options?.strokeWidth}`);\n path.setAttribute('fill', `${options?.fill || 'none'}`);\n options?.strokeLineDash && path.setAttribute('stroke-dasharray', `${options.strokeLineDash}`);\n g.appendChild(path);\n return g;\n}\n\nexport function drawBezierPath(points: Point[], options?: Options) {\n const g = createG();\n const path = createPath();\n\n let polylinePath = '';\n for (let i = 0; i < points.length - 3; i += 3) {\n if (i === 0) {\n polylinePath += `M ${points[0][0]} ${points[0][1]} `;\n } else {\n polylinePath += `C ${points[i + 1][0]} ${points[i + 1][1]}, ${points[i + 2][0]} ${points[i + 2][1]}, ${points[i + 3][0]} ${\n points[i + 3][1]\n }`;\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 { SetViewportOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Viewport } from '../interfaces/viewport';\n\nexport function setViewport(board: PlaitBoard, viewport: Viewport) {\n const operation: SetViewportOperation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };\n board.apply(operation);\n}\n\nexport interface ViewportTransforms {\n setViewport: (board: PlaitBoard, viewport: Viewport) => void;\n}\n\nexport const ViewportTransforms: ViewportTransforms = {\n setViewport\n};\n","import { 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 { 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 { setViewport } from './viewport';\nimport { depthFirstRecursion, getRealScrollBarWidth, getSelectedElements } from '../utils';\nimport { PlaitElement } from '../interfaces/element';\nimport { setTheme } from './theme';\nimport { FitViewportOptions } from '../interfaces/viewport';\nimport { PlaitPointerType } from '../interfaces/pointer';\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\nfunction updateZoom(board: PlaitBoard, newZoom: number, center?: Point) {\n newZoom = clampZoomLevel(newZoom);\n\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 (center && distanceBetweenPointAndRectangle(center[0], center[1], nativeElementRect) === 0) {\n focusPoint = [center[0] - nativeElementRect.x, center[1] - nativeElementRect.y];\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\nconst updatePointerType = <T extends string = PlaitPointerType>(board: PlaitBoard, pointer: T) => {\n if (board.pointer === pointer) return;\n board.pointer = pointer;\n};\n\nfunction moveToCenter(board: PlaitBoard, centerPoint: Point) {\n const plaitElement = getSelectedElements(board)?.[0];\n if (plaitElement) {\n const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const scrollBarWidth = getRealScrollBarWidth(board);\n const oldCenterPoint = getViewBoxCenterPoint(board);\n const left = centerPoint[0] - oldCenterPoint[0];\n const top = centerPoint[1] - oldCenterPoint[1];\n const zoom = board.viewport.zoom;\n\n const origination = [\n left - boardContainerRect.width / 2 / zoom + scrollBarWidth / 2 / zoom,\n top - boardContainerRect.height / 2 / zoom + scrollBarWidth / 2 / zoom\n ] as Point;\n\n setViewport(board, {\n ...board.viewport,\n origination\n });\n clearViewportOrigination(board);\n }\n}\n\nexport const BoardTransforms = {\n updatePointerType,\n updateViewport,\n fitViewport,\n updateZoom,\n updateThemeColor,\n fitViewportWidth,\n moveToCenter\n};\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\n\nexport const getViewBox = (board: PlaitBoard) => {\n return PlaitBoard.getHost(board).viewBox.baseVal;\n};\n\n/**\n * Get the screen point starting from the upper left corner of the svg element (based on the svg screen coordinate system)\n */\nexport function toHostPoint(board: PlaitBoard, x: number, y: number): Point {\n const host = PlaitBoard.getHost(board);\n const rect = host.getBoundingClientRect();\n return [x - rect.x, y - rect.y];\n}\n\n/**\n * Get the point in the coordinate system of the svg viewBox\n */\nexport function toViewBoxPoint(board: PlaitBoard, hostPoint: Point) {\n const viewBox = getViewBox(board);\n const { zoom } = board.viewport;\n const x = hostPoint[0] / zoom + viewBox.x;\n const y = hostPoint[1] / zoom + viewBox.y;\n const newPoint = [x, y] as Point;\n return newPoint;\n}\n\nexport function toViewBoxPoints(board: PlaitBoard, hostPoints: Point[]) {\n const newPoints = hostPoints.map(point => {\n return toViewBoxPoint(board, point);\n });\n return newPoints;\n}\n\n/**\n * `toHostPoint` reverse processing\n * Get the screen point starting from the upper left corner of the browser window or the viewport (based on the screen coordinate system)\n */\nexport function toScreenPointFromHostPoint(board: PlaitBoard, hostPoint: Point) {\n const host = PlaitBoard.getHost(board);\n const rect = host.getBoundingClientRect();\n return [hostPoint[0] + rect.x, hostPoint[1] + rect.y] as Point;\n}\n\n/**\n * `toViewBoxPoint` reverse processing\n */\nexport function toHostPointFromViewBoxPoint(board: PlaitBoard, viewBoxPoint: Point) {\n const { zoom } = board.viewport;\n const viewBox = getViewBox(board);\n const x = (viewBoxPoint[0] - viewBox.x) * zoom;\n const y = (viewBoxPoint[1] - viewBox.y) * zoom;\n return [x, y] as Point;\n}\n","import { SCROLL_BAR_WIDTH } from '../constants';\nimport { MAX_ZOOM, MIN_ZOOM } from '../constants/zoom';\nimport { PlaitBoard, Point, RectangleClient } from '../interfaces';\nimport { BoardTransforms } from '../transforms/board';\nimport { getRectangleByElements } from './element';\nimport { approximately } from './math';\nimport { toHostPointFromViewBoxPoint, toViewBoxPoint } from './to-point';\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 * Normalize the scaling ratio, or return the corrected scaling ratio if the limit is exceeded\n */\nexport function clampZoomLevel(zoom: number, minZoom = MIN_ZOOM, maxZoom = MAX_ZOOM) {\n return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;\n}\n\nexport function calcNewViewBox(board: PlaitBoard, zoom: number) {\n const boardContainerRectangle = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const elementHostBBox = getElementHostBBox(board, zoom);\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) {\n return;\n }\n const [scrollLeft, scrollTop] = toHostPointFromViewBoxPoint(board, origination);\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 const previousScrollLeft = viewportContainer.scrollLeft;\n const previousScrollTop = viewportContainer.scrollTop;\n // scrollTop assign 11.8 will get 11.5 in chrome\n // scrollTop assign 11.8 will get 11 in firefox, safari\n // scrollTop assign 11.4 will get 11 in chrome, firefox, safari\n // use approximately method to determine the new value is valid updating to avoid debouncing\n if (!approximately(viewportContainer.scrollLeft, left, 1) || !approximately(viewportContainer.scrollTop, top, 1)) {\n viewportContainer.scrollLeft = left;\n viewportContainer.scrollTop = top;\n const offsetWidth = viewportContainer.offsetWidth;\n const offsetHeight = viewportContainer.offsetHeight;\n if (previousScrollLeft === viewportContainer.scrollLeft && previousScrollTop === viewportContainer.scrollTop) {\n // The scroll event cannot be triggered, so the origination is modified directly based on the scroll distance.\n updateViewportByScrolling(board, previousScrollLeft, previousScrollTop);\n } else {\n const isValidLeftOrTop =\n left > 0 &&\n top > 0 &&\n left < viewportContainer.scrollWidth - offsetWidth &&\n top < viewportContainer.scrollHeight - offsetHeight;\n if (isFromViewportChange && isValidLeftOrTop) {\n setIsFromViewportChange(board, true);\n }\n }\n }\n}\n\nexport function updateViewportByScrolling(board: PlaitBoard, scrollLeft: number, scrollTop: number) {\n const origination = toViewBoxPoint(board, [scrollLeft, scrollTop]);\n if (Point.isEquals(origination, getViewportOrigination(board))) {\n return;\n }\n BoardTransforms.updateViewport(board, origination);\n setIsFromScrolling(board, true);\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 = calcNewViewBox(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 = calcNewViewBox(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 { 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 { Path, PlaitElement } from '../interfaces';\nimport { PlaitBoard } from '../interfaces/board';\nimport { NodeTransforms } from '../transforms/node';\nimport { sortElements } from './position';\n\nconst BOARD_TO_RAF = new WeakMap<PlaitBoard, { [key: string]: number | null }>();\n\nexport interface MoveNodeOption {\n element: PlaitElement;\n newPath: Path;\n}\n\nconst getTimerId = (board: PlaitBoard, key: string) => {\n const state = getRAFState(board);\n return state[key] || null;\n};\n\nconst getRAFState = (board: PlaitBoard) => {\n return BOARD_TO_RAF.get(board) || {};\n};\n\nexport const throttleRAF = (board: PlaitBoard, key: string, fn: () => void) => {\n const scheduleFunc = () => {\n let timerId = requestAnimationFrame(() => {\n const value = BOARD_TO_RAF.get(board) || {};\n value[key] = null;\n BOARD_TO_RAF.set(board, value);\n PlaitBoard.isAlive(board) && fn();\n });\n const state = getRAFState(board);\n state[key] = timerId;\n BOARD_TO_RAF.set(board, state);\n };\n let timerId = getTimerId(board, key);\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n }\n scheduleFunc();\n};\n\nexport const debounce = <T>(func: (args?: T) => void, wait: number, options?: { leading: boolean }) => {\n let timeoutId: any = null;\n return (args?: T) => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n func(args);\n timeoutId = null;\n }, wait);\n } else {\n if (options?.leading) {\n func(args);\n }\n timeoutId = setTimeout(() => {\n timeoutId = null;\n if (!options?.leading) {\n func(args);\n }\n }, wait);\n }\n };\n};\n\nexport const getElementsIndices = (board: PlaitBoard, elements: PlaitElement[]): number[] => {\n sortElements(board, elements);\n return elements\n .map(item => {\n return board.children.map(item => item.id).indexOf(item.id);\n })\n .filter(item => item >= 0);\n};\n\nexport const getHighestIndexOfElement = (board: PlaitBoard, elements: PlaitElement[]) => {\n const indices = getElementsIndices(board, elements);\n return indices[indices.length - 1];\n};\n\nexport const moveElementsToNewPath = (board: PlaitBoard, moveOptions: MoveNodeOption[]) => {\n moveOptions\n .map(item => {\n const path = PlaitBoard.findPath(board, item.element);\n const ref = board.pathRef(path);\n return () => {\n ref.current && NodeTransforms.moveNode(board, ref.current, item.newPath);\n ref.unref();\n };\n })\n .forEach(action => {\n action();\n });\n};\n","import { PlaitBoard } from \"../interfaces/board\";\n\nexport const IS_DRAGGING = new WeakMap<PlaitBoard, boolean>();\n\n\nexport const isDragging = (board: PlaitBoard) => {\n return !!IS_DRAGGING.get(board);\n};\n\nexport const setDragging = (board: PlaitBoard, state: boolean) => {\n IS_DRAGGING.set(board, state);\n}","import { PlaitBoard, PlaitElement } from '../interfaces';\nimport { setDragging } from './dnd';\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 isMovingElements = (board: PlaitBoard) => {\n return (BOARD_TO_MOVING_ELEMENT.get(board) || []).length > 0;\n};\n\nexport const removeMovingElements = (board: PlaitBoard) => {\n BOARD_TO_MOVING_ELEMENT.delete(board);\n setDragging(board, false);\n};\n\nexport const cacheMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n BOARD_TO_MOVING_ELEMENT.set(board, elements);\n setDragging(board, true);\n};\n","import { PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';\nimport { findElements, getRectangleByElements } from './element';\n\nconst FOREIGN_OBJECT_EXPRESSION = `foreignObject[class^='foreign-object']`;\n\nexport interface ToImageOptions {\n elements?: PlaitElement[];\n name?: string;\n ratio?: number;\n padding?: number;\n fillStyle?: string;\n // List of class names. The list must be in the form class1,class2,...\n inlineStyleClassNames?: string;\n}\n\n/**\n * Is element node\n * @param node\n * @returns\n */\nfunction isElementNode(node: Node): node is HTMLElement {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n\n/**\n * load image resources\n * @param url image url\n * @returns image element\n */\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => resolve(img);\n img.onerror = () => reject(new Error('Failed to load image'));\n img.src = src;\n });\n}\n\n/**\n * create and return canvas and context\n * @param width canvas width\n * @param height canvas height\n * @param fillStyle fill style\n * @returns canvas and context\n */\nfunction createCanvas(width: number, height: number, fillStyle = 'transparent') {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d')!;\n\n canvas.width = width;\n canvas.height = height;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n ctx.strokeStyle = '#ffffff';\n ctx.fillStyle = fillStyle;\n ctx.fillRect(0, 0, width, height);\n\n return {\n canvas,\n ctx\n };\n}\n\n/**\n * convert image to base64\n * @param url image url\n * @returns image base64\n */\nasync function convertImageToBase64(url: string): Promise<string> {\n const response = await fetch(url);\n const blob = await response.blob();\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\n\n/**\n * clone node style\n * @param nativeNode source node\n * @param clonedNode clone node\n */\nfunction cloneCSSStyle<T extends HTMLElement>(nativeNode: T, clonedNode: T) {\n const targetStyle = clonedNode?.style;\n if (!targetStyle) {\n return;\n }\n\n const sourceStyle = window.getComputedStyle(nativeNode);\n if (sourceStyle.cssText) {\n targetStyle.cssText = sourceStyle.cssText;\n targetStyle.transformOrigin = sourceStyle.transformOrigin;\n } else {\n Array.from(sourceStyle).forEach(name => {\n let value = sourceStyle.getPropertyValue(name);\n targetStyle.setProperty(name, value, sourceStyle.getPropertyPriority(name));\n });\n }\n}\n\n/**\n * batch clone target styles\n * @param sourceNode\n * @param cloneNode\n * @param inlineStyleClassNames\n */\nfunction batchCloneCSSStyle(sourceNode: SVGGElement, cloneNode: SVGGElement, inlineStyleClassNames: string) {\n if (inlineStyleClassNames) {\n const classNames = inlineStyleClassNames + `, ${FOREIGN_OBJECT_EXPRESSION}`;\n const sourceNodes = Array.from(sourceNode.querySelectorAll(classNames));\n const cloneNodes = Array.from(cloneNode.querySelectorAll(classNames));\n\n sourceNodes.forEach((node, index) => {\n const childElements = Array.from(node.querySelectorAll('*')).filter(isElementNode) as HTMLElement[];\n const cloneChildElements = Array.from(cloneNodes[index].querySelectorAll('*')).filter(isElementNode) as HTMLElement[];\n sourceNodes.push(...childElements);\n cloneNodes.push(...cloneChildElements);\n });\n\n // processing styles\n sourceNodes.map((node, index) => {\n cloneCSSStyle(node as HTMLElement, cloneNodes[index] as HTMLElement);\n });\n }\n}\n\n/**\n * convert images in target nodes in batches\n * @param sourceNode\n * @param cloneNode\n */\nasync function batchConvertImage(sourceNode: SVGGElement, cloneNode: SVGGElement) {\n const sourceImageNodes = Array.from(sourceNode.querySelectorAll(`${FOREIGN_OBJECT_EXPRESSION}`));\n const cloneImageNodes = Array.from(cloneNode.querySelectorAll(`${FOREIGN_OBJECT_EXPRESSION}`));\n await Promise.all(\n sourceImageNodes.map((_, index) => {\n return new Promise(resolve => {\n const cloneImageNode = cloneImageNodes[index];\n // processing image\n const image = (cloneImageNode as HTMLElement).querySelector('img');\n const url = image?.getAttribute('src');\n if (!url) {\n return resolve(true);\n }\n convertImageToBase64(url).then(base64Image => {\n image?.setAttribute('src', base64Image);\n resolve(true);\n });\n });\n })\n );\n}\n\n/**\n * clone svg element\n * @param board board\n * @param options parameter configuration\n * @returns clone svg element\n */\nasync function cloneSvg(board: PlaitBoard, elements: PlaitElement[], rectangle: RectangleClient, options: ToImageOptions) {\n const { width, height, x, y } = rectangle;\n const { padding = 4, inlineStyleClassNames } = options;\n const sourceSvg = PlaitBoard.getHost(board);\n const selectedGElements = elements.map(value => PlaitElement.getElementG(value));\n const cloneSvgElement = sourceSvg.cloneNode() as SVGElement;\n const newHostElement = PlaitBoard.getElementHost(board).cloneNode() as SVGGElement;\n\n cloneSvgElement.style.width = `${width}px`;\n cloneSvgElement.style.height = `${height}px`;\n cloneSvgElement.style.backgroundColor = '';\n cloneSvgElement.setAttribute('width', `${width}`);\n cloneSvgElement.setAttribute('height', `${height}`);\n cloneSvgElement.setAttribute('viewBox', [x - padding, y - padding, width + 2 * padding, height + 2 * padding].join(','));\n\n await Promise.all(\n selectedGElements.map(async (child, i) => {\n const cloneChild = child.cloneNode(true) as SVGGElement;\n batchCloneCSSStyle(child, cloneChild, inlineStyleClassNames as string);\n\n await batchConvertImage(child, cloneChild);\n newHostElement.appendChild(cloneChild);\n })\n );\n cloneSvgElement.appendChild(newHostElement);\n return cloneSvgElement;\n}\n\n/**\n * current board transfer pictures\n * @param board board\n * @param options parameter configuration\n * @returns images in the specified format base64\n */\nexport async function toImage(board: PlaitBoard, options: ToImageOptions) {\n if (!board) {\n return undefined;\n }\n const elements = options.elements || findElements(board, { match: () => true, recursion: () => true, isReverse: false });\n const targetRectangle = getRectangleByElements(board, elements, false);\n const { ratio = 2, fillStyle = 'transparent' } = options;\n const { width, height } = targetRectangle;\n const ratioWidth = width * ratio;\n const ratioHeight = height * ratio;\n\n const cloneSvgElement = await cloneSvg(board, elements, targetRectangle, options);\n const { canvas, ctx } = createCanvas(ratioWidth, ratioHeight, fillStyle);\n\n const svgStr = new XMLSerializer().serializeToString(cloneSvgElement);\n const imgSrc = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgStr)}`;\n\n try {\n const img = await loadImage(imgSrc);\n ctx.drawImage(img, 0, 0, ratioWidth, ratioHeight);\n return canvas.toDataURL('image/png');\n } catch (error) {\n console.error('Error converting SVG to image:', error);\n return undefined;\n }\n}\n\n/**\n * download the file with the specified name\n * @param url download url\n * @param name file name\n */\nexport function downloadImage(url: string, name: string) {\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n a.click();\n a.remove();\n}\n","import { PlaitElement } from '../../interfaces';\n\nexport enum WritableClipboardType {\n 'medias' = 'medias',\n 'elements' = 'elements'\n}\n\nexport enum WritableClipboardOperationType {\n 'copy' = 'copy',\n 'cut' = 'cut',\n 'duplicate' = 'duplicate',\n 'paste' = 'paste'\n}\n\nexport type WritableClipboardData = PlaitElement[] | any[];\n\nexport interface WritableClipboardContext {\n text: string;\n type: WritableClipboardType;\n elements: WritableClipboardData;\n}\n\nexport interface ClipboardData {\n files?: File[];\n elements?: PlaitElement[];\n medias?: any[];\n text?: string;\n operationType?: WritableClipboardOperationType;\n}\n","import { ClipboardData, WritableClipboardContext, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const buildPlaitHtml = (type: WritableClipboardType, data: WritableClipboardData) => {\n const stringifiedClipboard = replaceAngleBrackets(\n JSON.stringify({\n type,\n data\n })\n );\n return `<plait>${stringifiedClipboard}</plait>`;\n};\n\nexport const getClipboardFromHtml = (html: string): ClipboardData | null => {\n let plaitString = html?.match(/<plait[^>]*>(.*)<\\/plait>/)?.[1];\n if (plaitString) {\n plaitString = reverseReplaceAngleBrackets(plaitString);\n try {\n const plaitJson = JSON.parse(plaitString);\n if (plaitJson) {\n if (plaitJson.type === WritableClipboardType.elements) {\n return {\n elements: plaitJson.data\n };\n } else if (plaitJson.type === WritableClipboardType.medias) {\n return {\n medias: plaitJson.data\n };\n }\n }\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n return null;\n};\n\nexport const stripHtml = (html: string) => {\n // See <https://github.com/developit/preact-markup/blob/4788b8d61b4e24f83688710746ee36e7464f7bbc/src/parse-markup.js#L60-L69>\n const doc = document.implementation.createHTMLDocument('');\n doc.documentElement.innerHTML = html.trim();\n return doc.body.textContent || doc.body.innerText || '';\n};\n\nexport const getProbablySupportsClipboardWrite = () => {\n return 'clipboard' in navigator && 'write' in navigator.clipboard;\n};\n\nexport const getProbablySupportsClipboardWriteText = () => {\n return 'clipboard' in navigator && 'writeText' in navigator.clipboard;\n};\n\nexport const getProbablySupportsClipboardRead = () => {\n return 'clipboard' in navigator && 'read' in navigator.clipboard;\n};\n\nexport const createClipboardContext = (\n type: WritableClipboardType,\n elements: WritableClipboardData,\n text: string\n): WritableClipboardContext => {\n return {\n type,\n elements,\n text\n };\n};\n\nexport const addClipboardContext = (\n clipboardContext: WritableClipboardContext,\n addition: WritableClipboardContext\n): WritableClipboardContext => {\n const { type, elements, text } = clipboardContext;\n if (type === addition.type) {\n return {\n type,\n elements: elements.concat(addition.elements),\n text: text + ' ' + addition.text\n };\n }\n return clipboardContext;\n};\n\nexport const addOrCreateClipboardContext = (clipboardContext: WritableClipboardContext | null, addition: WritableClipboardContext) => {\n if (!clipboardContext) {\n return addition;\n } else {\n return addClipboardContext(clipboardContext, addition);\n }\n};\n\nexport const replaceAngleBrackets = (str: string) => {\n return str.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n};\n\nexport const reverseReplaceAngleBrackets = (str: string) => {\n return str.replace(/&lt;/g, '<').replace(/&gt;/g, '>');\n};\n","import { buildPlaitHtml, getClipboardFromHtml } from './common';\nimport { ClipboardData, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const setDataTransferClipboard = (dataTransfer: DataTransfer | null, type: WritableClipboardType, data: WritableClipboardData) => {\n dataTransfer?.setData(`text/html`, buildPlaitHtml(type, data));\n};\n\nexport const setDataTransferClipboardText = (data: DataTransfer | null, text: string) => {\n data?.setData(`text/plain`, text);\n};\n\nexport const getDataTransferClipboard = (data: DataTransfer | null): ClipboardData => {\n const html = data?.getData(`text/html`);\n if (html) {\n const htmlClipboardData = getClipboardFromHtml(html);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n }\n\n return {};\n};\n\nexport const getDataTransferClipboardText = (data: DataTransfer | null) => {\n if (!data) {\n return {};\n }\n const text = data?.getData(`text/plain`);\n if (text) {\n const htmlClipboardData = getClipboardFromHtml(text);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n }\n return {\n text\n };\n};\n","import {\n buildPlaitHtml,\n getClipboardFromHtml,\n getProbablySupportsClipboardRead,\n getProbablySupportsClipboardWrite,\n stripHtml\n} from './common';\nimport { ClipboardData, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const setNavigatorClipboard = async (type: WritableClipboardType, data: WritableClipboardData, text: string = '') => {\n let textClipboard = text;\n if (getProbablySupportsClipboardWrite()) {\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([buildPlaitHtml(type, data)], {\n type: 'text/html'\n }),\n 'text/plain': new Blob([JSON.stringify(textClipboard ?? data)], { type: 'text/plain' })\n })\n ]);\n }\n};\n\nexport const getNavigatorClipboard = async (): Promise<ClipboardData> => {\n if (!getProbablySupportsClipboardRead()) {\n return {};\n }\n const clipboardItems = await navigator.clipboard.read();\n let clipboardData: ClipboardData = {};\n\n if (Array.isArray(clipboardItems) && clipboardItems[0] instanceof ClipboardItem) {\n for (const item of clipboardItems) {\n if (isFile(item)) {\n const clipboardFiles = item.types.filter(type => type.match(/^image\\//));\n const fileBlobs = await Promise.all(clipboardFiles.map(type => item.getType(type)!));\n const urls = (fileBlobs.filter(Boolean) as (File | Blob)[]).map(blob => URL.createObjectURL(blob));\n const files = await Promise.all(\n urls.map(async url => {\n const blob = await (await fetch(url)).blob();\n return new File([blob], 'plait-file', { type: blob.type });\n })\n );\n return {\n files\n };\n }\n if (item.types.includes('text/html')) {\n const htmlContent = await blobAsString(await item.getType('text/html'));\n const htmlClipboardData = getClipboardFromHtml(htmlContent);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n if (htmlContent && htmlContent.trim()) {\n clipboardData = { text: stripHtml(htmlContent) };\n }\n }\n if (item.types.includes('text/plain')) {\n const textContent = await blobAsString(await item.getType('text/plain'));\n clipboardData = {\n text: stripHtml(textContent)\n };\n }\n }\n }\n return clipboardData;\n};\n\nconst isFile = (item: ClipboardItem) => {\n return item.types.find(i => i.match(/^image\\//));\n};\n\nconst blobAsString = (blob: Blob) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', () => {\n const text = reader.result;\n resolve(text as string);\n });\n reader.addEventListener('error', () => {\n reject(reader.error);\n });\n reader.readAsText(blob);\n });\n};\n","import {\n buildPlaitHtml,\n getProbablySupportsClipboardRead,\n getProbablySupportsClipboardWrite,\n getProbablySupportsClipboardWriteText\n} from './common';\nimport {\n getDataTransferClipboard,\n getDataTransferClipboardText,\n setDataTransferClipboard,\n setDataTransferClipboardText\n} from './data-transfer';\nimport { getNavigatorClipboard, setNavigatorClipboard } from './navigator-clipboard';\nimport { ClipboardData, WritableClipboardContext } from './types';\n\nexport const getClipboardData = async (dataTransfer: DataTransfer | null): Promise<ClipboardData> => {\n let clipboardData = {};\n if (dataTransfer) {\n if (dataTransfer.files.length) {\n return { files: Array.from(dataTransfer.files) };\n }\n clipboardData = getDataTransferClipboard(dataTransfer);\n if (Object.keys(clipboardData).length === 0) {\n clipboardData = getDataTransferClipboardText(dataTransfer);\n }\n return clipboardData;\n }\n if (getProbablySupportsClipboardRead()) {\n return await getNavigatorClipboard();\n }\n return clipboardData;\n};\n\nexport const setClipboardData = async (dataTransfer: DataTransfer | null, clipboardContext: WritableClipboardContext | null) => {\n if (!clipboardContext) {\n return;\n }\n const { type, elements, text } = clipboardContext;\n\n if (getProbablySupportsClipboardWrite()) {\n return await setNavigatorClipboard(type, elements, text);\n }\n\n if (dataTransfer) {\n setDataTransferClipboard(dataTransfer, type, elements);\n setDataTransferClipboardText(dataTransfer, text);\n return;\n }\n\n // Compatible with situations where navigator.clipboard.write is not supported and dataTransfer is empty\n // Such as contextmenu copy in Firefox.\n if (getProbablySupportsClipboardWriteText()) {\n return await navigator.clipboard.writeText(buildPlaitHtml(type, elements));\n }\n};\n","import { ACTIVE_STROKE_WIDTH, SELECTION_RECTANGLE_BOUNDING_CLASS_NAME, SELECTION_RECTANGLE_CLASS_NAME } from '../constants';\nimport {\n PlaitBoard,\n PlaitElement,\n PlaitGroup,\n PlaitOperation,\n PlaitPluginKey,\n PlaitPointerType,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n WithSelectionPluginOptions\n} from '../interfaces';\nimport { setDragging } from './dnd';\nimport { getRectangleByElements } from './element';\nimport { BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_TEMPORARY_ELEMENTS } from './weak-maps';\nimport { drawRectangle } from './drawing/rectangle';\nimport { cacheSelectedElements, getSelectedElements } from './selected-element';\nimport { getSelectionAngle, setAngleForG } from './angle';\nimport { filterSelectedGroups, getAllElementsInGroup, getElementsInGroup, getElementsInGroupByElement, getGroupByElement } from './group';\nimport { uniqueById } from './helper';\nimport { Selection } from '../interfaces/selection';\nimport { PlaitOptionsBoard } from '../plugins/with-options';\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 setDragging(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 setDragging(board, false);\n}\n\nexport function isHandleSelection(board: PlaitBoard) {\n const options = getSelectionOptions(board);\n return board.pointer !== PlaitPointerType.hand && !options.isDisabledSelection && !PlaitBoard.isReadonly(board);\n}\n\nexport function hasSetSelectionOperation(board: PlaitBoard) {\n return !!board.operations.find(op => PlaitOperation.isSetSelectionOperation(op));\n}\n\nexport function getTemporaryElements(board: PlaitBoard) {\n const ref = BOARD_TO_TEMPORARY_ELEMENTS.get(board);\n if (ref) {\n return ref.elements;\n } else {\n return undefined;\n }\n}\n\nexport function getTemporaryRef(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 drawSelectionRectangleG(board: PlaitBoard) {\n const elements = getSelectedElements(board);\n const rectangle = getRectangleByElements(board, elements, false);\n if (rectangle.width > 0 && rectangle.height > 0 && elements.length > 1) {\n const selectionRectangleG = drawRectangle(board, RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH), {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n fillStyle: 'solid'\n });\n selectionRectangleG.classList.add(SELECTION_RECTANGLE_CLASS_NAME, SELECTION_RECTANGLE_BOUNDING_CLASS_NAME);\n const angle = getSelectionAngle(elements);\n if (angle) {\n setAngleForG(selectionRectangleG, RectangleClient.getCenterPoint(rectangle), angle);\n }\n return selectionRectangleG;\n }\n return null;\n}\n\nexport function setSelectedElementsWithGroup(board: PlaitBoard, elements: PlaitElement[], isShift: boolean) {\n if (!board.selection) {\n return;\n }\n const selectedElements = getSelectedElements(board);\n if (!Selection.isCollapsed(board.selection)) {\n let newElements = [...selectedElements];\n elements.forEach(item => {\n if (!item.groupId) {\n newElements.push(item);\n } else {\n newElements.push(...getElementsInGroupByElement(board, item));\n }\n });\n cacheSelectedElements(board, uniqueById(newElements));\n return;\n }\n if (Selection.isCollapsed(board.selection)) {\n const hitElement = elements[0];\n const hitElementGroups = getGroupByElement(board, hitElement, true) as PlaitGroup[];\n if (hitElementGroups.length) {\n const elementsInHighestGroup = getElementsInGroup(board, hitElementGroups[hitElementGroups.length - 1], true) || [];\n const isSelectGroupElement = selectedElements.some(element => elementsInHighestGroup.map(item => item.id).includes(element.id));\n if (isShift) {\n cacheSelectedElementsWithGroupOnShift(board, elements, isSelectGroupElement, elementsInHighestGroup);\n } else {\n cacheSelectedElementsWithGroup(board, elements, isSelectGroupElement, hitElementGroups);\n }\n }\n }\n}\n\nexport function cacheSelectedElementsWithGroupOnShift(\n board: PlaitBoard,\n elements: PlaitElement[],\n isSelectGroupElement: boolean,\n elementsInHighestGroup: PlaitElement[]\n) {\n const selectedElements = getSelectedElements(board);\n let newElements = [...selectedElements];\n const hitElement = elements[0];\n let pendingElements: PlaitElement[] = [];\n if (!isSelectGroupElement) {\n pendingElements = elementsInHighestGroup;\n } else {\n const isHitSelectedElement = selectedElements.some(item => item.id === hitElement.id);\n const selectedElementsInGroup = elementsInHighestGroup.filter(item => selectedElements.includes(item));\n if (isHitSelectedElement) {\n pendingElements = selectedElementsInGroup.filter(item => item.id !== hitElement.id);\n } else {\n pendingElements.push(...selectedElementsInGroup, ...elements);\n }\n }\n elementsInHighestGroup.forEach(element => {\n if (newElements.includes(element)) {\n newElements.splice(newElements.indexOf(element), 1);\n }\n });\n if (pendingElements.length) {\n newElements.push(...pendingElements);\n }\n cacheSelectedElements(board, uniqueById(newElements));\n}\n\nexport function cacheSelectedElementsWithGroup(\n board: PlaitBoard,\n elements: PlaitElement[],\n isSelectGroupElement: boolean,\n hitElementGroups: PlaitGroup[]\n) {\n let newElements = [...elements];\n const selectedGroups = filterSelectedGroups(board, hitElementGroups);\n if (selectedGroups.length > 0) {\n if (selectedGroups.length > 1) {\n newElements = getAllElementsInGroup(board, selectedGroups[selectedGroups.length - 2], true);\n }\n } else {\n const elementsInGroup = getAllElementsInGroup(board, hitElementGroups[hitElementGroups.length - 1], true);\n if (!isSelectGroupElement) {\n newElements = elementsInGroup;\n }\n }\n cacheSelectedElements(board, uniqueById(newElements));\n}\n\nexport const getSelectionOptions = (board: PlaitBoard) => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithSelectionPluginOptions>(PlaitPluginKey.withSelection);\n return options;\n};\n\nexport const setSelectionOptions = (board: PlaitBoard, options: Partial<WithSelectionPluginOptions>) => {\n (board as PlaitOptionsBoard).setPluginOptions<WithSelectionPluginOptions>(PlaitPluginKey.withSelection, options);\n};\n","import { ACTIVE_STROKE_WIDTH } from '../constants';\nimport { Path, PlaitBoard, PlaitElement, PlaitGroup, PlaitGroupElement, RectangleClient, SELECTION_BORDER_COLOR } from '../interfaces';\nimport { getSelectionAngle, setAngleForG } from './angle';\nimport { createG } from './dom';\nimport { drawRectangle } from './drawing/rectangle';\nimport { getRectangleByElements } from './element';\nimport { idCreator } from './id-creator';\nimport { getSelectedElements } from './selected-element';\nimport { isSelectionMoving } from './selection';\nimport { depthFirstRecursion } from './tree';\nimport { moveElementsToNewPath } from './common';\nimport { sortElements } from './position';\n\nexport const getElementsInGroup = (board: PlaitBoard, group: PlaitGroup, recursion?: boolean, includeGroup?: boolean) => {\n let result: PlaitElement[] = [];\n const elements = board.children.filter(value => (value as PlaitElement).groupId === group.id) as PlaitElement[];\n if (recursion) {\n elements.forEach(item => {\n if (PlaitGroupElement.isGroup(item)) {\n if (includeGroup) {\n result.push(item);\n }\n result.push(...getElementsInGroup(board, item, recursion, includeGroup));\n } else {\n result.push(item);\n }\n });\n } else {\n result = includeGroup ? elements : (elements.filter(item => !PlaitGroupElement.isGroup(item)) as PlaitElement[]);\n }\n return result;\n};\n\nexport const getAllElementsInGroup = (board: PlaitBoard, group: PlaitGroup, recursion?: boolean, includeGroup?: boolean) => {\n const elementsInGroup = getElementsInGroup(board, group, recursion, includeGroup);\n const result: PlaitElement[] = [];\n elementsInGroup.forEach(element => {\n depthFirstRecursion(\n element,\n node => {\n result.push(node);\n },\n () => true\n );\n });\n return result;\n};\n\nexport const getRectangleByGroup = (board: PlaitBoard, group: PlaitGroup, recursion?: boolean) => {\n const elementsInGroup = getAllElementsInGroup(board, group, recursion) as PlaitElement[];\n return getRectangleByElements(board, elementsInGroup, false);\n};\n\nexport const getGroupByElement = (\n board: PlaitBoard,\n element: PlaitElement,\n recursion?: boolean,\n originElements?: PlaitElement[]\n): PlaitGroup | PlaitGroup[] | null => {\n const group = (originElements || board.children).find(item => item.id === element?.groupId);\n if (!group) {\n return recursion ? [] : null;\n }\n if (recursion) {\n const groups = [group];\n const grandGroups = getGroupByElement(board, group, recursion, originElements) as PlaitGroup[];\n if (grandGroups.length) {\n groups.push(...grandGroups);\n }\n return groups as PlaitGroup[];\n } else {\n return group as PlaitGroup;\n }\n};\n\nexport const getHighestGroup = (board: PlaitBoard, element: PlaitElement) => {\n const hitElementGroups = getGroupByElement(board, element, true) as PlaitGroup[];\n if (hitElementGroups.length) {\n return hitElementGroups[hitElementGroups.length - 1];\n }\n return null;\n};\n\nexport const getElementsInGroupByElement = (board: PlaitBoard, element: PlaitElement) => {\n const highestGroup = getHighestGroup(board, element);\n if (highestGroup) {\n return getAllElementsInGroup(board, highestGroup, true) as PlaitGroup[];\n } else {\n return [element];\n }\n};\n\nexport const isSelectedElementOrGroup = (board: PlaitBoard, element: PlaitElement, elements?: PlaitElement[]) => {\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n if (PlaitGroupElement.isGroup(element)) {\n return isSelectedAllElementsInGroup(board, element, elements);\n }\n return selectedElements.map(item => item.id).includes(element.id);\n};\n\nexport const isSelectedAllElementsInGroup = (board: PlaitBoard, group: PlaitGroup, elements?: PlaitElement[]) => {\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n const elementsInGroup = getElementsInGroup(board, group, true);\n return elementsInGroup.every(item => selectedElements.map(element => element.id).includes(item.id));\n};\n\nexport const filterSelectedGroups = (board: PlaitBoard, groups: PlaitGroup[], elements?: PlaitElement[]): PlaitGroup[] => {\n const selectedGroups: PlaitGroup[] = [];\n groups.forEach(item => {\n if (isSelectedElementOrGroup(board, item, elements)) {\n selectedGroups.push(item);\n }\n });\n return selectedGroups;\n};\n\nexport const getSelectedGroups = (board: PlaitBoard, elements?: PlaitElement[], originElements?: PlaitElement[]): PlaitGroup[] => {\n const highestSelectedGroups = getHighestSelectedGroups(board, elements, originElements);\n const groups: PlaitGroup[] = [];\n highestSelectedGroups.forEach(item => {\n groups.push(item);\n const elementsInGroup = getElementsInGroup(board, item, true, true);\n groups.push(...(elementsInGroup.filter(item => PlaitGroupElement.isGroup(item)) as PlaitGroup[]));\n });\n return groups;\n};\n\nexport const getHighestSelectedGroup = (\n board: PlaitBoard,\n element: PlaitElement,\n elements?: PlaitElement[],\n originElements?: PlaitElement[]\n): PlaitGroup | null => {\n const hitElementGroups = getGroupByElement(board, element, true, originElements) as PlaitGroup[];\n const selectedGroups = filterSelectedGroups(board, hitElementGroups, elements);\n if (selectedGroups.length) {\n return selectedGroups[selectedGroups.length - 1];\n }\n return null;\n};\n\nexport const getHighestSelectedGroups = (board: PlaitBoard, elements?: PlaitElement[], originElements?: PlaitElement[]): PlaitGroup[] => {\n let result: PlaitGroup[] = [];\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n selectedElements.forEach(item => {\n if (item.groupId) {\n const group = getHighestSelectedGroup(board, item, elements, originElements);\n if (group && !result.includes(group)) {\n result.push(group);\n }\n }\n });\n return result;\n};\n\nexport const getSelectedIsolatedElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n let result: PlaitElement[] = [];\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n selectedElements\n .filter(item => !PlaitGroupElement.isGroup(item))\n .forEach(item => {\n if (!item.groupId) {\n result.push(item);\n } else {\n const group = getHighestSelectedGroup(board, item, elements);\n if (!group) {\n result.push(item);\n }\n }\n });\n return result;\n};\n\nexport const getSelectedIsolatedElementsCanAddToGroup = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedIsolatedElements = getSelectedIsolatedElements(board, elements);\n return selectedIsolatedElements.filter(item => board.canAddToGroup(item));\n};\n\nexport const getHighestSelectedElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n return [...getHighestSelectedGroups(board, elements), ...getSelectedIsolatedElements(board, elements)];\n};\n\nexport const createGroupRectangleG = (board: PlaitBoard, elements: PlaitElement[]): SVGGElement | null => {\n const selectedElementIds = getSelectedElements(board).map(item => item.id);\n let groupRectangleG: SVGGElement | null = null;\n const isMoving = isSelectionMoving(board);\n\n elements.forEach(item => {\n const isRender = (!selectedElementIds.includes(item.id) && !isMoving) || isMoving;\n if (item.groupId && isRender) {\n if (!groupRectangleG) {\n groupRectangleG = createG();\n }\n const elements = getElementsInGroupByElement(board, item);\n const rectangle = getRectangleByElements(board, elements, false);\n const rectangleG = drawRectangle(board, rectangle, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n strokeLineDash: [5]\n });\n const angle = getSelectionAngle(elements);\n if (angle) {\n setAngleForG(rectangleG, RectangleClient.getCenterPoint(rectangle), angle);\n }\n groupRectangleG.append(rectangleG);\n }\n });\n return groupRectangleG;\n};\n\nexport const createGroup = (groupId?: string): PlaitGroup => {\n return groupId\n ? {\n id: idCreator(),\n type: 'group',\n groupId\n }\n : {\n id: idCreator(),\n type: 'group'\n };\n};\n\nexport const nonGroupInHighestSelectedElements = (elements: PlaitElement[]) => {\n return elements.every(item => !item.groupId);\n};\n\nexport const hasSelectedElementsInSameGroup = (elements: PlaitElement[]) => {\n return elements.every(item => item.groupId && item.groupId === elements[0].groupId);\n};\n\nexport const canAddGroup = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const highestSelectedElements = getHighestSelectedElements(board, elements);\n const rootElements = highestSelectedElements.filter(item => board.canAddToGroup(item));\n if (rootElements.length > 1) {\n return nonGroupInHighestSelectedElements(rootElements) || hasSelectedElementsInSameGroup(rootElements);\n }\n return false;\n};\n\nexport const canRemoveGroup = (board: PlaitBoard, elements?: PlaitElement[], originElements?: PlaitElement[]) => {\n const selectedGroups = getHighestSelectedGroups(board, elements, originElements);\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n return selectedElements.length > 0 && selectedGroups.length > 0;\n};\n\nexport const getEditingGroup = (board: PlaitBoard, element: PlaitElement) => {\n const groups = getGroupByElement(board, element, true) as PlaitGroup[];\n let editingGroup = null;\n if (groups?.length) {\n for (let i = 0; i < groups?.length; i++) {\n if (!isSelectedAllElementsInGroup(board, groups[i])) {\n editingGroup = groups[i];\n break;\n }\n }\n }\n return editingGroup;\n};\n\nexport const moveElementsToNewPathAfterAddGroup = (board: PlaitBoard, selectedElements: PlaitElement[], newPath: Path) => {\n const moveElements = [...selectedElements];\n sortElements(board, moveElements);\n moveElements.pop();\n moveElementsToNewPath(\n board,\n moveElements.map(element => {\n return {\n element,\n newPath\n };\n })\n );\n};\n","import { PlaitBoard, PlaitElement, Point } from '../interfaces';\nimport { WritableClipboardOperationType } from './clipboard';\nimport { setClipboardData } from './clipboard/clipboard';\nimport { getRectangleByElements } from './element';\nimport { getSelectedElements } from './selected-element';\n\nexport const deleteFragment = (board: PlaitBoard) => {\n const elements = board.getDeletedFragment([]);\n board.deleteFragment(elements);\n};\n\nexport const setFragment = (board: PlaitBoard, operationType: WritableClipboardOperationType, clipboardData: DataTransfer | null) => {\n const selectedElements = getSelectedElements(board);\n const rectangle = getRectangleByElements(board, selectedElements, false);\n const clipboardContext = board.buildFragment(null, rectangle, operationType);\n clipboardContext && setClipboardData(clipboardData, clipboardContext);\n};\n\nexport const duplicateElements = (board: PlaitBoard, elements?: PlaitElement[], point?: Point) => {\n const targetElements = elements?.length ? elements : getSelectedElements(board);\n const targetRectangle = getRectangleByElements(board, targetElements, false);\n const clipboardContext = board.buildFragment(null, targetRectangle, WritableClipboardOperationType.duplicate, targetElements);\n const stringifiedContext = clipboardContext && JSON.stringify(clipboardContext);\n const clonedContext = stringifiedContext && JSON.parse(stringifiedContext);\n clonedContext &&\n board.insertFragment(\n {\n ...clonedContext,\n text: undefined\n },\n point || [targetRectangle.x + targetRectangle.width / 2, targetRectangle.y + targetRectangle.height / 2],\n WritableClipboardOperationType.duplicate\n );\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, SELECTION_BORDER_COLOR } from '../../interfaces';\nimport { getRectangleByAngle } from '../angle';\nimport { createG } from '../dom';\nimport { findElements } from '../element';\n\nexport interface SnapDelta {\n deltaX: number;\n deltaY: number;\n}\n\nexport interface SnapRef extends SnapDelta {\n snapG: SVGGElement;\n}\n\nexport interface GapSnapRef {\n before: { distance: number; index: number }[];\n after: { distance: number; index: number }[];\n}\n\ntype PointSnapLineRef = {\n axis: number;\n isHorizontal: boolean;\n pointRectangles: RectangleClient[];\n};\n\ntype TripleSnapAxis = [number, number, number];\n\nexport const SNAP_TOLERANCE = 2;\n\nconst SNAP_SPACING = 24;\n\nexport function getSnapRectangles(board: PlaitBoard, activeElements: PlaitElement[]) {\n const elements = findElements(board, {\n match: element => board.isAlign(element) && !activeElements.some(item => item.id === element.id),\n recursion: () => true,\n isReverse: false\n });\n return elements.map(item => {\n const rectangle = board.getRectangle(item)!;\n return getRectangleByAngle(rectangle, item.angle || 0);\n });\n}\n\nexport function getBarPoint(point: Point, isHorizontal: boolean) {\n return isHorizontal\n ? [\n [point[0], point[1] - 4],\n [point[0], point[1] + 4]\n ]\n : [\n [point[0] - 4, point[1]],\n [point[0] + 4, point[1]]\n ];\n}\n\nexport function getMinPointDelta(pointRectangles: RectangleClient[], axis: number, isHorizontal: boolean) {\n let delta = SNAP_TOLERANCE;\n pointRectangles.forEach(item => {\n const distance = getNearestDelta(axis, item, isHorizontal);\n if (Math.abs(distance) < Math.abs(delta)) {\n delta = distance;\n }\n });\n return delta;\n}\n\nexport const getNearestDelta = (axis: number, rectangle: RectangleClient, isHorizontal: boolean) => {\n const pointAxis = getTripleAxis(rectangle, isHorizontal);\n const deltas = pointAxis.map(item => item - axis);\n const absDeltas = deltas.map(item => Math.abs(item));\n const index = absDeltas.indexOf(Math.min(...absDeltas));\n return deltas[index];\n};\n\nexport const getTripleAxis = (rectangle: RectangleClient, isHorizontal: boolean): TripleSnapAxis => {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n return [rectangle[axis], rectangle[axis] + rectangle[side] / 2, rectangle[axis] + rectangle[side]];\n};\n\nexport function getNearestPointRectangle(snapRectangles: RectangleClient[], activeRectangle: RectangleClient) {\n let minDistance = Infinity;\n let nearestRectangle = snapRectangles[0];\n\n snapRectangles.forEach(item => {\n const distance = Math.sqrt(Math.pow(activeRectangle.x - item.x, 2) + Math.pow(activeRectangle.y - item.y, 2));\n if (distance < minDistance) {\n minDistance = distance;\n nearestRectangle = item;\n }\n });\n return nearestRectangle;\n}\n\nexport const isSnapPoint = (axis: number, rectangle: RectangleClient, isHorizontal: boolean) => {\n const pointAxis = getTripleAxis(rectangle, isHorizontal);\n return pointAxis.includes(axis);\n};\n\nexport function drawPointSnapLines(\n board: PlaitBoard,\n activeRectangle: RectangleClient,\n snapRectangles: RectangleClient[],\n drawHorizontal = true,\n drawVertical = true,\n snapMiddle = false\n) {\n let pointLinePoints: [Point, Point][] = [];\n const pointAxisX = getTripleAxis(activeRectangle, true);\n const pointAxisY = getTripleAxis(activeRectangle, false);\n const pointLineRefs: PointSnapLineRef[] = [\n {\n axis: pointAxisX[0],\n isHorizontal: true,\n pointRectangles: []\n },\n {\n axis: pointAxisX[1],\n isHorizontal: true,\n pointRectangles: []\n },\n {\n axis: pointAxisX[2],\n isHorizontal: true,\n pointRectangles: []\n },\n {\n axis: pointAxisY[0],\n isHorizontal: false,\n pointRectangles: []\n },\n {\n axis: pointAxisY[1],\n isHorizontal: false,\n pointRectangles: []\n },\n {\n axis: pointAxisY[2],\n isHorizontal: false,\n pointRectangles: []\n }\n ];\n for (let index = 0; index < snapRectangles.length; index++) {\n const element = snapRectangles[index];\n if (isSnapPoint(pointLineRefs[0].axis, element, pointLineRefs[0].isHorizontal)) {\n pointLineRefs[0].pointRectangles.push(element);\n }\n if (isSnapPoint(pointLineRefs[1].axis, element, pointLineRefs[1].isHorizontal)) {\n pointLineRefs[1].pointRectangles.push(element);\n }\n if (isSnapPoint(pointLineRefs[2].axis, element, pointLineRefs[2].isHorizontal)) {\n pointLineRefs[2].pointRectangles.push(element);\n }\n if (isSnapPoint(pointLineRefs[3].axis, element, pointLineRefs[3].isHorizontal)) {\n pointLineRefs[3].pointRectangles.push(element);\n }\n if (isSnapPoint(pointLineRefs[4].axis, element, pointLineRefs[4].isHorizontal)) {\n pointLineRefs[4].pointRectangles.push(element);\n }\n if (isSnapPoint(pointLineRefs[5].axis, element, pointLineRefs[5].isHorizontal)) {\n pointLineRefs[5].pointRectangles.push(element);\n }\n }\n\n const setResizePointSnapLine = (axis: number, pointRectangle: RectangleClient, isHorizontal: boolean) => {\n const boundingRectangle = RectangleClient.inflate(\n RectangleClient.getBoundingRectangle([activeRectangle, pointRectangle]),\n SNAP_SPACING\n );\n if (isHorizontal) {\n const pointStart = [axis, boundingRectangle.y] as Point;\n const pointEnd = [axis, boundingRectangle.y + boundingRectangle.height] as Point;\n pointLinePoints.push([pointStart, pointEnd]);\n } else {\n const pointStart = [boundingRectangle.x, axis] as Point;\n const pointEnd = [boundingRectangle.x + boundingRectangle.width, axis] as Point;\n pointLinePoints.push([pointStart, pointEnd]);\n }\n };\n if (drawHorizontal && pointLineRefs[0].pointRectangles.length) {\n const leftRectangle =\n pointLineRefs[0].pointRectangles.length === 1\n ? pointLineRefs[0].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[0].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[0].axis, leftRectangle, pointLineRefs[0].isHorizontal);\n }\n if (drawHorizontal && snapMiddle && pointLineRefs[1].pointRectangles.length) {\n const middleRectangle =\n pointLineRefs[1].pointRectangles.length === 1\n ? pointLineRefs[1].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[1].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[1].axis, middleRectangle, pointLineRefs[1].isHorizontal);\n }\n\n if (drawHorizontal && pointLineRefs[2].pointRectangles.length) {\n const rightRectangle =\n pointLineRefs[2].pointRectangles.length === 1\n ? pointLineRefs[2].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[2].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[2].axis, rightRectangle, pointLineRefs[2].isHorizontal);\n }\n\n if (drawVertical && pointLineRefs[3].pointRectangles.length) {\n const topRectangle =\n pointLineRefs[3].pointRectangles.length === 1\n ? pointLineRefs[3].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[3].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[3].axis, topRectangle, pointLineRefs[3].isHorizontal);\n }\n\n if (drawVertical && snapMiddle && pointLineRefs[4].pointRectangles.length) {\n const middleRectangle =\n pointLineRefs[4].pointRectangles.length === 1\n ? pointLineRefs[4].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[4].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[4].axis, middleRectangle, pointLineRefs[4].isHorizontal);\n }\n\n if (drawVertical && pointLineRefs[5].pointRectangles.length) {\n const rightRectangle =\n pointLineRefs[5].pointRectangles.length === 1\n ? pointLineRefs[5].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[5].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[5].axis, rightRectangle, pointLineRefs[5].isHorizontal);\n }\n\n return drawDashedLines(board, pointLinePoints);\n}\n\nexport function drawDashedLines(board: PlaitBoard, lines: [Point, Point][]) {\n const g = createG();\n lines.forEach(points => {\n if (!points.length) return;\n const line = PlaitBoard.getRoughSVG(board).line(points[0][0], points[0][1], points[1][0], points[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n strokeLineDash: [4, 4]\n });\n g.appendChild(line);\n });\n return g;\n}\n\nexport function drawSolidLines(board: PlaitBoard, lines: Point[][]) {\n const g = createG();\n lines.forEach(points => {\n if (!points.length) return;\n let isHorizontal = points[0][1] === points[1][1];\n const line = PlaitBoard.getRoughSVG(board).line(points[0][0], points[0][1], points[1][0], points[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(line);\n\n points.forEach(point => {\n const barPoint = getBarPoint(point, isHorizontal);\n const bar = PlaitBoard.getRoughSVG(board).line(barPoint[0][0], barPoint[0][1], barPoint[1][0], barPoint[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(bar);\n });\n });\n return g;\n}\n","import { PlaitBoard, PlaitElement, PlaitGroupElement, PlaitGroup } from '../interfaces';\nimport { MoveNodeOption, getElementsIndices } from './common';\nimport { getEditingGroup, getElementsInGroup, getGroupByElement, getHighestGroup, isSelectedAllElementsInGroup } from './group';\nimport { findIndex, findLastIndex } from './helper';\nimport { sortElements } from './position';\nimport { getSelectedElements } from './selected-element';\n\nexport const getOneMoveOptions = (board: PlaitBoard, direction: 'down' | 'up'): MoveNodeOption[] => {\n const indicesToMove = getElementsIndices(board, getSelectedElements(board));\n let groupedIndices = toContiguousGroups(board, indicesToMove);\n if (direction === 'up') {\n groupedIndices = groupedIndices.reverse();\n }\n let moveContents: MoveNodeOption[] = [];\n groupedIndices.forEach((indices, i) => {\n const leadingIndex = indices[0];\n const trailingIndex = indices[indices.length - 1];\n const boundaryIndex = direction === 'down' ? leadingIndex : trailingIndex;\n const targetIndex = getTargetIndex(board, boundaryIndex, direction);\n if (targetIndex === -1 || boundaryIndex === targetIndex) {\n return;\n }\n if (direction === 'down') {\n indices = indices.reverse();\n }\n moveContents.push(\n ...indices.map(path => {\n return {\n element: board.children[path],\n newPath: [targetIndex]\n };\n })\n );\n });\n\n return moveContents;\n};\n\nexport const getAllMoveOptions = (board: PlaitBoard, direction: 'down' | 'up'): MoveNodeOption[] => {\n const indicesToMove = getElementsIndices(board, getSelectedElements(board));\n let groupedIndices = toContiguousGroups(board, indicesToMove);\n let moveContents: MoveNodeOption[] = [];\n if (direction === 'down') {\n groupedIndices = groupedIndices.reverse();\n }\n groupedIndices.forEach(indices => {\n const leadingIndex = indices[0];\n const trailingIndex = indices[indices.length - 1];\n const boundaryIndex = direction === 'down' ? leadingIndex : trailingIndex;\n const sourceElement = board.children[boundaryIndex];\n const editingGroup = getEditingGroup(board, sourceElement);\n let targetIndex = direction === 'down' ? 0 : board.children.length - 1;\n if (editingGroup) {\n const elementsInGroup = sortElements(board, getElementsInGroup(board, editingGroup, true, true));\n targetIndex =\n direction === 'down'\n ? board.children.indexOf(elementsInGroup[0])\n : board.children.indexOf(elementsInGroup[elementsInGroup.length - 1]);\n }\n if (direction === 'down') {\n indices = indices.reverse();\n }\n moveContents.push(\n ...indices.map(path => {\n return {\n element: board.children[path],\n newPath: [targetIndex]\n };\n })\n );\n });\n\n return moveContents;\n};\n\nexport const canSetZIndex = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(item => board.canSetZIndex(item));\n return selectedElements.length > 0;\n};\n\nconst toContiguousGroups = (board: PlaitBoard, array: number[]) => {\n let cursor = 0;\n return array.reduce((acc, value, index) => {\n if (index > 0) {\n const currentElement = board.children[value];\n const previousElement = board.children[array[index - 1]];\n const isContiguous =\n value - 1 === array[index - 1]\n ? true\n : board.children.every((item, childIndex) => {\n if (childIndex > array[index - 1] && childIndex <= value - 1) {\n return PlaitGroupElement.isGroup(item);\n }\n return true;\n });\n let isPartialSelectGroupElement = false;\n if (previousElement?.groupId || (currentElement?.groupId && previousElement?.groupId !== currentElement?.groupId)) {\n let isPartialSelectPreviousGroup = false;\n let isPartialSelectCurrentElement = false;\n if (previousElement.groupId) {\n const highestGroup = getHighestGroup(board, previousElement);\n isPartialSelectPreviousGroup = !isSelectedAllElementsInGroup(board, highestGroup!);\n }\n if (currentElement.groupId) {\n const highestGroup = getHighestGroup(board, currentElement);\n isPartialSelectCurrentElement = !isSelectedAllElementsInGroup(board, highestGroup!);\n }\n isPartialSelectGroupElement = isPartialSelectPreviousGroup || isPartialSelectCurrentElement;\n }\n if (!isContiguous || isPartialSelectGroupElement) {\n cursor = ++cursor;\n }\n }\n (acc[cursor] || (acc[cursor] = [])).push(value);\n return acc;\n }, [] as number[][]);\n};\n\n/**\n * Returns next candidate index that's available to be moved to. Currently that\n * is a non-deleted element, and not inside a group (unless we're editing it).\n */\nconst getTargetIndex = (board: PlaitBoard, boundaryIndex: number, direction: 'down' | 'up') => {\n if ((boundaryIndex === 0 && direction === 'down') || (boundaryIndex === board.children.length - 1 && direction === 'up')) {\n return -1;\n }\n const indexFilter = (element: PlaitElement) => {\n if (element.isDeleted || PlaitGroupElement.isGroup(element)) {\n return false;\n }\n return true;\n };\n const candidateIndex =\n direction === 'down'\n ? findLastIndex(board.children, el => indexFilter(el), Math.max(0, boundaryIndex - 1))\n : findIndex(board.children, el => indexFilter(el), boundaryIndex + 1);\n\n const nextElement = board.children[candidateIndex];\n if (!nextElement) {\n return -1;\n }\n\n const elements = [...board.children];\n const sourceElement = elements[boundaryIndex];\n const editingGroup = getEditingGroup(board, sourceElement);\n const nextElementGroups = (getGroupByElement(board, nextElement, true) || []) as PlaitGroup[];\n // candidate element is a sibling in current editing group → return\n if (editingGroup && sourceElement?.groupId !== nextElement?.groupId) {\n // candidate element is outside current editing group → prevent\n if (!(nextElementGroups as PlaitGroup[]).find(item => item.id === editingGroup.id)) {\n return -1;\n }\n }\n\n if (!nextElement.groupId) {\n return candidateIndex;\n }\n\n let siblingGroup: PlaitGroup;\n if (editingGroup) {\n siblingGroup = nextElementGroups[nextElementGroups.indexOf(editingGroup) - 1];\n } else {\n siblingGroup = nextElementGroups[nextElementGroups.length - 1];\n }\n if (siblingGroup) {\n let elementsInSiblingGroup = getElementsInGroup(board, siblingGroup, true, false);\n if (elementsInSiblingGroup.length) {\n elementsInSiblingGroup.sort((a, b) => {\n const indexA = board.children.findIndex(child => child.id === a.id);\n const indexB = board.children.findIndex(child => child.id === b.id);\n return indexA - indexB;\n });\n // assumes getElementsInGroup() returned elements are sorted\n // by zIndex (ascending)\n return direction === 'down'\n ? elements.indexOf(elementsInSiblingGroup[0])\n : elements.indexOf(elementsInSiblingGroup[elementsInSiblingGroup.length - 1]);\n }\n }\n\n return candidateIndex;\n};\n","export const isMobileDeviceEvent = (event: PointerEvent) => {\n return isPencilEvent(event) || isTouchEvent(event);\n};\n\nexport const isPencilEvent = (event: PointerEvent) => {\n return event.pointerType === 'pen';\n};\n\nexport const isTouchEvent = (event: PointerEvent) => {\n return event.pointerType === 'touch';\n};\n\nexport const isMouseEvent = (event: PointerEvent) => {\n return event.pointerType === 'mouse';\n};\n","import { PlaitBoard, PlaitElement } from '../interfaces';\nimport {\n getHighestSelectedGroups,\n getSelectedIsolatedElementsCanAddToGroup,\n createGroup,\n canAddGroup,\n hasSelectedElementsInSameGroup,\n canRemoveGroup,\n findElements,\n getElementsIndices,\n isIndicesContinuous,\n getSelectedElements,\n getHighestIndexOfElement,\n moveElementsToNewPathAfterAddGroup\n} from '../utils';\nimport { NodeTransforms } from './node';\n\nexport const addGroup = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedGroups = getHighestSelectedGroups(board, elements);\n const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);\n const highestSelectedElements = [...selectedGroups, ...selectedIsolatedElements];\n const group = createGroup();\n if (canAddGroup(board)) {\n highestSelectedElements.forEach(item => {\n const path = PlaitBoard.findPath(board, item);\n NodeTransforms.setNode(board, { groupId: group.id }, path);\n });\n const selectedElements = getSelectedElements(board);\n const highestIndexOfSelectedElement = getHighestIndexOfElement(board, selectedElements);\n const indices = getElementsIndices(board, highestSelectedElements);\n const isContinuous = isIndicesContinuous(indices);\n if (!isContinuous) {\n moveElementsToNewPathAfterAddGroup(board, selectedElements, [highestIndexOfSelectedElement - 1]);\n }\n if (hasSelectedElementsInSameGroup(highestSelectedElements)) {\n const newGroupId = selectedIsolatedElements[0].groupId;\n NodeTransforms.insertNode(\n board,\n {\n ...group,\n groupId: newGroupId\n },\n [board.children.length]\n );\n } else {\n NodeTransforms.insertNode(board, group, [board.children.length]);\n }\n }\n};\n\nexport const removeGroup = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedGroups = getHighestSelectedGroups(board, elements);\n if (canRemoveGroup(board)) {\n selectedGroups.forEach(group => {\n const elementsInGroup = findElements(board, {\n match: item => item.groupId === group.id,\n recursion: () => false\n });\n elementsInGroup.forEach(element => {\n const path = PlaitBoard.findPath(board, element);\n NodeTransforms.setNode(board, { groupId: group.groupId || undefined }, path);\n });\n });\n selectedGroups\n .map(group => {\n const groupPath = PlaitBoard.findPath(board, group);\n const groupRef = board.pathRef(groupPath);\n return () => {\n groupRef.current && NodeTransforms.removeNode(board, groupRef.current);\n groupRef.unref();\n };\n })\n .forEach(action => {\n action();\n });\n }\n};\n\nexport interface GroupTransforms {\n addGroup: (board: PlaitBoard, elements?: PlaitElement[]) => void;\n removeGroup: (board: PlaitBoard, elements?: PlaitElement[]) => void;\n}\n\nexport const GroupTransforms = {\n addGroup,\n removeGroup\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';\nimport { getTemporaryRef } from '../utils';\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 addSelectionWithTemporaryElements: (board: PlaitBoard, elements: PlaitElement[]) => void;\n}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection,\n addSelectionWithTemporaryElements\n};\n\nexport function addSelectionWithTemporaryElements(board: PlaitBoard, elements: PlaitElement[]) {\n const timeoutId = setTimeout(() => {\n setSelection(board, { anchor: [0, 0], focus: [0, 0] });\n }, 0);\n let ref = getTemporaryRef(board);\n if (ref) {\n clearTimeout(ref.timeoutId);\n const currentElements = ref.elements;\n ref.elements.push(...elements.filter(element => !currentElements.includes(element)));\n ref.timeoutId = timeoutId;\n } else {\n BOARD_TO_TEMPORARY_ELEMENTS.set(board, { timeoutId, elements });\n }\n}\n","import { PlaitBoard } from '../interfaces';\nimport { moveElementsToNewPath } from '../utils';\nimport { getAllMoveOptions, getOneMoveOptions } from '../utils/z-index';\n\nconst moveToTop = (board: PlaitBoard) => {\n const moveOptions = getAllMoveOptions(board, 'up');\n moveElementsToNewPath(board, moveOptions);\n};\n\nconst moveToBottom = (board: PlaitBoard) => {\n const moveOptions = getAllMoveOptions(board, 'down');\n moveElementsToNewPath(board, moveOptions);\n};\n\nconst moveUp = (board: PlaitBoard) => {\n const moveOptions = getOneMoveOptions(board, 'up');\n moveElementsToNewPath(board, moveOptions);\n};\n\nconst moveDown = (board: PlaitBoard) => {\n const moveOptions = getOneMoveOptions(board, 'down');\n moveElementsToNewPath(board, moveOptions);\n};\n\nexport interface ZIndexTransforms {\n moveUp: (board: PlaitBoard) => void;\n moveDown: (board: PlaitBoard) => void;\n moveToTop: (board: PlaitBoard) => void;\n moveToBottom: (board: PlaitBoard) => void;\n}\n\nexport const ZIndexTransforms = { moveUp, moveDown, moveToTop, moveToBottom };\n","import { PlaitBoard } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { removeSelectedElement } from '../utils/selected-element';\nimport { removeNode } from './node';\n\nexport const removeElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n elements\n .map(element => {\n const path = PlaitBoard.findPath(board, element);\n const ref = board.pathRef(path);\n return () => {\n ref.current && removeNode(board, ref.current);\n ref.unref();\n removeSelectedElement(board, element, true);\n };\n })\n .forEach(action => {\n action();\n });\n};\n\nexport const CoreTransforms = {\n removeElements\n};\n","import { GeneralTransforms } from './general';\nimport { GroupTransforms } from './group';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\nimport { ZIndexTransforms } from './z-index';\n\nexport { BoardTransforms } from './board';\nexport { CoreTransforms } from './element';\n\nexport const Transforms: GeneralTransforms &\n ViewportTransforms &\n SelectionTransforms &\n NodeTransforms &\n GroupTransforms &\n ZIndexTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms,\n ...GroupTransforms,\n ...ZIndexTransforms\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient } from '../interfaces';\nimport { Transforms } from '../transforms';\nimport { getRectangleByElements } from './element';\nimport { approximately, rotate } from './math';\n\nexport const rotatePoints = <T>(points: T, centerPoint: Point, angle?: number): T => {\n if (!angle) {\n angle = 0;\n }\n if (Array.isArray(points) && typeof points[0] === 'number') {\n return rotate(points[0], points[1], centerPoint[0], centerPoint[1], angle) as T;\n } else {\n return (points as Point[]).map(point => {\n return rotate(point[0], point[1], centerPoint[0], centerPoint[1], angle || 0);\n }) as T;\n }\n};\n\nexport const getSelectionAngle = (elements: PlaitElement[]) => {\n let angle = elements[0]?.angle || 0;\n elements.forEach(item => {\n if (item.angle !== angle && !approximately(((item.angle || 0) % (Math.PI / 2)) - (angle % (Math.PI / 2)), 0)) {\n angle = 0;\n }\n });\n return angle;\n};\n\nexport const hasSameAngle = (elements: PlaitElement[]) => {\n if (!elements.length) {\n return false;\n }\n\n const angle = elements[0].angle;\n if (angle === undefined) {\n return false;\n }\n\n return !elements.some(item => item.angle !== angle);\n};\n\nexport const getRotatedBoundingRectangle = (rectanglesCornerPoints: [Point, Point, Point, Point][], angle: number) => {\n let rectanglesFromOrigin: RectangleClient[] = [];\n for (let i = 0; i < rectanglesCornerPoints.length; i++) {\n const cornerPoints = rectanglesCornerPoints[i];\n const invertCornerPointsFromOrigin = rotatePoints(cornerPoints, [0, 0], -angle);\n rectanglesFromOrigin.push(RectangleClient.getRectangleByPoints(invertCornerPointsFromOrigin));\n }\n\n const selectionRectangleFromOrigin = RectangleClient.getBoundingRectangle(rectanglesFromOrigin);\n const selectionCornerPoints = RectangleClient.getCornerPoints(selectionRectangleFromOrigin);\n const cornerPointsFromOrigin = rotatePoints(selectionCornerPoints, [0, 0], angle);\n const centerPoint = RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(cornerPointsFromOrigin));\n return RectangleClient.getRectangleByPoints(rotatePoints(cornerPointsFromOrigin, centerPoint, -angle));\n};\n\nexport const getOffsetAfterRotate = (rectangle: RectangleClient, rotateCenterPoint: Point, angle: number) => {\n const targetCenterPoint = RectangleClient.getCenterPoint(rectangle);\n const [rotatedCenterPoint] = rotatePoints([targetCenterPoint], rotateCenterPoint, angle);\n const offsetX = rotatedCenterPoint[0] - targetCenterPoint[0];\n const offsetY = rotatedCenterPoint[1] - targetCenterPoint[1];\n return { offsetX, offsetY };\n};\n\nexport const rotatedDataPoints = (points: Point[], rotateCenterPoint: Point, angle: number): Point[] => {\n const { offsetX, offsetY } = getOffsetAfterRotate(RectangleClient.getRectangleByPoints(points), rotateCenterPoint, angle);\n return points.map(p => [p[0] + offsetX, p[1] + offsetY]) as Point[];\n};\n\nexport const hasValidAngle = (node: PlaitElement) => {\n return isValidAngle(node.angle);\n};\n\nexport const isValidAngle = (angle: undefined | number) => {\n return angle && angle !== 0;\n};\n\nexport const rotatePointsByElement = <T>(points: T, element: PlaitElement): T | null => {\n if (hasValidAngle(element)) {\n let rectangle = RectangleClient.getRectangleByPoints(element.points!);\n const centerPoint = RectangleClient.getCenterPoint(rectangle);\n return rotatePoints(points, centerPoint, element.angle);\n } else {\n return null;\n }\n};\n\nexport const rotatePointsByAngle = (points: Point[], angle: number | undefined): Point[] | null => {\n if (isValidAngle(angle)) {\n let rectangle = RectangleClient.getRectangleByPoints(points);\n const centerPoint = RectangleClient.getCenterPoint(rectangle);\n return rotatePoints(points, centerPoint, angle);\n } else {\n return null;\n }\n};\n\nexport const rotateAntiPointsByElement = <T>(points: T, element: PlaitElement): T | null => {\n if (hasValidAngle(element)) {\n let rectangle = RectangleClient.getRectangleByPoints(element.points!);\n const centerPoint = RectangleClient.getCenterPoint(rectangle);\n return rotatePoints(points, centerPoint, element.angle ? -element.angle : 0);\n } else {\n return null;\n }\n};\n\nexport const getRectangleByAngle = (rectangle: RectangleClient, angle: number) => {\n if (angle) {\n const cornerPoints = RectangleClient.getCornerPoints(rectangle);\n const centerPoint = RectangleClient.getCenterPoint(rectangle);\n return RectangleClient.getRectangleByPoints(rotatePoints(cornerPoints, centerPoint, angle));\n }\n return rectangle;\n};\n\nexport const isAxisChangedByAngle = (angle: number) => {\n const unitAngle = Math.abs(angle) % Math.PI;\n return unitAngle >= (1 / 4) * Math.PI && unitAngle <= (3 / 4) * Math.PI;\n};\n\nexport function degreesToRadians(d: number): number {\n return (d / 180) * Math.PI;\n}\n\nexport function radiansToDegrees(r: number): number {\n return (r / Math.PI) * 180;\n}\n\nexport function rotateElements(board: PlaitBoard, elements: PlaitElement[], angle: number) {\n const selectionRectangle = getRectangleByElements(board, elements, false);\n const selectionCenterPoint = RectangleClient.getCenterPoint(selectionRectangle);\n elements.forEach(item => {\n const originAngle = item.angle;\n const points = rotatedDataPoints(item.points!, selectionCenterPoint, normalizeAngle(angle));\n const path = PlaitBoard.findPath(board, item);\n Transforms.setNode(board, { points, angle: normalizeAngle((originAngle || 0) + angle) }, path);\n });\n}\n\nexport const normalizeAngle = (angle: number): number => {\n if (angle < 0) {\n return angle + 2 * Math.PI;\n }\n if (angle >= 2 * Math.PI) {\n return angle - 2 * Math.PI;\n }\n return angle;\n};\n\nexport const getAngleBetweenPoints = (startPoint: Point, endPoint: Point, centerPoint: Point): number => {\n const startAngle = (5 * Math.PI) / 2 + Math.atan2(startPoint[1] - centerPoint[1], startPoint[0] - centerPoint[0]);\n const endAngle = (5 * Math.PI) / 2 + Math.atan2(endPoint[1] - centerPoint[1], endPoint[0] - centerPoint[0]);\n return normalizeAngle(endAngle - startAngle);\n};\n\nexport const getAngleByElement = (element: PlaitElement): number | undefined => {\n return element?.angle;\n};\n\nexport const setAngleForG = (g: SVGGElement, centerPoint: Point, angle: number) => {\n if (angle === 0) {\n g.removeAttribute('transform');\n return;\n }\n var centerX = centerPoint[0];\n var centerY = centerPoint[1];\n\n let cosTheta = Math.cos(angle);\n let sinTheta = Math.sin(angle);\n\n let transformMatrix = [\n cosTheta,\n sinTheta,\n -sinTheta,\n cosTheta,\n centerX * (1 - cosTheta) + centerY * sinTheta,\n centerY * (1 - cosTheta) - centerX * sinTheta\n ];\n\n let matrix = 'matrix(' + transformMatrix.join(',') + ')';\n g.setAttribute('transform', `${matrix}`);\n};\n","import { Ancestor, PlaitBoard, PlaitElement, Point, RectangleClient } from '../interfaces';\nimport { getSelectionAngle, hasSameAngle, getRotatedBoundingRectangle, rotatePointsByElement, getRectangleByAngle } from './angle';\nimport { depthFirstRecursion, getIsRecursionFunc } from './tree';\nimport { KEY_TO_ELEMENT_MAP } from './weak-maps';\n\nexport function getRectangleByElements(board: PlaitBoard, elements: PlaitElement[], recursion: boolean): RectangleClient {\n const rectanglesCornerPoints: [Point, Point, Point, Point][] = [];\n const callback = (node: PlaitElement) => {\n const nodeRectangle = board.getRectangle(node);\n if (nodeRectangle) {\n const cornerPoints = RectangleClient.getCornerPoints(nodeRectangle);\n const rotatedCornerPoints = rotatePointsByElement(cornerPoints, node) || cornerPoints;\n rectanglesCornerPoints.push(rotatedCornerPoints);\n } else {\n console.error(`can not get rectangle of element:`, node);\n }\n };\n elements.forEach(element => {\n if (recursion) {\n depthFirstRecursion(\n element,\n node => callback(node),\n node => board.isRecursion(node)\n );\n } else {\n callback(element);\n }\n });\n if (rectanglesCornerPoints.length > 0) {\n if (hasSameAngle(elements)) {\n const angle = getSelectionAngle(elements);\n return getRotatedBoundingRectangle(rectanglesCornerPoints, angle);\n } else {\n const flatCornerPoints: Point[] = rectanglesCornerPoints.reduce((acc: Point[], val) => {\n return acc.concat(val);\n }, []);\n return RectangleClient.getRectangleByPoints(flatCornerPoints);\n }\n } else {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n}\n\nexport function getBoundingRectangleByElements(board: PlaitBoard, elements: PlaitElement[], recursion: boolean): RectangleClient {\n const rectangle = getRectangleByElements(board, elements, recursion)!;\n const angle = getSelectionAngle(elements);\n return getRectangleByAngle(rectangle, angle);\n}\n\nexport function getBoardRectangle(board: PlaitBoard): RectangleClient {\n return getRectangleByElements(board, board.children, true);\n}\n\nexport function getElementById<T extends PlaitElement = PlaitElement>(\n board: PlaitBoard,\n id: string,\n dataSource?: PlaitElement[]\n): T | undefined {\n const cachedElement = !dataSource && getElementMap(board).get(id);\n if (cachedElement) {\n return cachedElement as T;\n }\n if (!dataSource) {\n dataSource = findElements(board, { match: element => true, recursion: element => true });\n }\n let element = dataSource.find(element => element.id === id) as T;\n return element;\n}\n\nexport function getElementMap(board: PlaitBoard) {\n const elementMap = KEY_TO_ELEMENT_MAP.get(board);\n if (!elementMap) {\n throw new Error('can not resolve element map');\n }\n return elementMap;\n}\n\nexport function findElements<T extends PlaitElement = PlaitElement>(\n board: PlaitBoard,\n options: {\n match: (element: PlaitElement) => boolean;\n recursion: (element: PlaitElement) => boolean;\n isReverse?: boolean;\n }\n): T[] {\n let elements: T[] = [];\n const isReverse = options.isReverse ?? true;\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (!PlaitBoard.isBoard(node) && options.match(node)) {\n elements.push(node as T);\n }\n },\n (value: Ancestor) => {\n if (PlaitBoard.isBoard(value)) {\n return true;\n } else {\n return getIsRecursionFunc(board)(value) && options.recursion(value);\n }\n },\n isReverse\n );\n return elements;\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 DEFAULT_COLOR = '#333333';\n\nexport const DefaultThemeColor: ThemeColor = {\n mode: ThemeColorMode.default,\n boardBackground: '#ffffff',\n textColor: DEFAULT_COLOR\n};\n\nexport const ColorfulThemeColor: ThemeColor = {\n mode: ThemeColorMode.colorful,\n boardBackground: '#ffffff',\n textColor: DEFAULT_COLOR\n};\n\nexport const SoftThemeColor: ThemeColor = {\n mode: ThemeColorMode.soft,\n boardBackground: '#f5f5f5',\n textColor: DEFAULT_COLOR\n};\n\nexport const RetroThemeColor: ThemeColor = {\n mode: ThemeColorMode.retro,\n boardBackground: '#f9f8ed',\n textColor: DEFAULT_COLOR\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 } from './selection';\nimport { Viewport } from './viewport';\nimport {\n BOARD_TO_CONTEXT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_ROUGH_SVG,\n IS_BOARD_ALIVE,\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 { 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';\nimport { distanceBetweenPointAndRectangle } from '../utils/math';\nimport { ClipboardData, WritableClipboardContext, WritableClipboardOperationType } from '../utils';\nimport { ElementFlavour } from '../core/element/element-flavour';\nimport { PlaitBoardContext } from '../context';\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 afterChange: () => void;\n drawSelectionRectangle: () => SVGGElement | null;\n mousedown: (event: MouseEvent) => void;\n mousemove: (event: MouseEvent) => void;\n mouseleave: (event: MouseEvent) => void;\n mouseup: (event: MouseEvent) => void;\n globalMousemove: (event: MouseEvent) => void;\n globalMouseup: (event: MouseEvent) => void;\n keyDown: (event: KeyboardEvent) => void;\n globalKeyDown: (event: KeyboardEvent) => void;\n keyUp: (event: KeyboardEvent) => void;\n buildFragment: (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => WritableClipboardContext | null;\n insertFragment: (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => void;\n deleteFragment: (data: PlaitElement[]) => void;\n getDeletedFragment: (data: PlaitElement[]) => PlaitElement[];\n getRelatedFragment: (data: PlaitElement[], originData?: PlaitElement[]) => PlaitElement[];\n dblClick: (event: MouseEvent) => void;\n normalizeElement: (context: PlaitPluginElementContext) => void;\n drawElement: (context: PlaitPluginElementContext) => ComponentType<ElementFlavour>;\n isRectangleHit: (element: PlaitElement, range: Selection) => boolean;\n // When the element has no fill color, it is considered a hit only if it hits the border.\n isHit: (element: PlaitElement, point: Point, isStrict?: boolean) => boolean;\n isInsidePoint: (element: PlaitElement, point: Point) => boolean;\n // the hit element is determined by the plugin\n getOneHitElement: (hitElements: PlaitElement[]) => PlaitElement;\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 isAlign: (element: PlaitElement) => boolean;\n isImageBindingAllowed: (element: PlaitElement) => boolean;\n canAddToGroup: (element: PlaitElement) => boolean;\n canSetZIndex: (element: PlaitElement) => boolean;\n isExpanded: (element: PlaitElement) => boolean;\n // pointer hook\n pointerDown: (pointer: PointerEvent) => void;\n pointerMove: (pointer: PointerEvent) => void;\n pointerUp: (pointer: PointerEvent) => void;\n pointerCancel: (pointer: PointerEvent) => void;\n pointerOut: (pointer: PointerEvent) => void;\n pointerLeave: (pointer: PointerEvent) => void;\n globalPointerMove: (pointer: PointerEvent) => void;\n globalPointerUp: (pointer: PointerEvent) => void;\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 isAlive(board: PlaitBoard) {\n const isAlive = IS_BOARD_ALIVE.get(board);\n return !!isAlive;\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 getElementLowerHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.lowerHost as SVGSVGElement;\n },\n getElementHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.host as SVGSVGElement;\n },\n getElementUpperHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.upperHost as SVGSVGElement;\n },\n getElementActiveHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.activeHost as SVGSVGElement;\n },\n getRoughSVG(board: PlaitBoard) {\n return BOARD_TO_ROUGH_SVG.get(board) as RoughSVG;\n },\n getBoardContainer(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.container as HTMLElement;\n },\n getBoardContext(board: PlaitBoard) {\n return BOARD_TO_CONTEXT.get(board) as PlaitBoardContext;\n },\n getRectangle(board: PlaitBoard) {\n return getRectangleByElements(board, board.children, true);\n },\n getViewportContainer(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.viewportContainer 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 isInPointer<T = PlaitPointerType>(board: PlaitBoard, pointers: T[]) {\n const point = board.pointer as T;\n return pointers.includes(point);\n },\n getMovingPointInBoard(board: PlaitBoard) {\n return BOARD_TO_MOVING_POINT_IN_BOARD.get(board);\n },\n isMovingPointInBoard(board: PlaitBoard) {\n const point = BOARD_TO_MOVING_POINT.get(board);\n const rect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n if (point && distanceBetweenPointAndRectangle(point[0], point[1], rect) === 0) {\n return true;\n }\n return false;\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","/**\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 { PlaitNode } from './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: PlaitOperation) => boolean;\n isSetSelectionOperation: (value: PlaitOperation) => boolean;\n isSetThemeOperation: (value: PlaitOperation) => boolean;\n}\n\nexport const isSetViewportOperation = (value: any): value is SetViewportOperation => {\n return value.type === 'set_viewport';\n};\n\nexport const isSetSelectionOperation = (value: any): value is SetSelectionOperation => {\n return value.type === 'set_selection';\n};\n\nexport const isSetThemeOperation = (value: any): value is SetThemeOperation => {\n return value.type === 'set_theme';\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 isSetSelectionOperation,\n isSetThemeOperation,\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 isHorizontal(point?: Point, otherPoint?: Point, tolerance = 0) {\n return point && otherPoint && Point.isOverHorizontal([point, otherPoint], tolerance);\n },\n isOverHorizontal(points: Point[], tolerance: number = 0) {\n return points.every(point => Math.abs(point[1] - points[0][1]) <= tolerance);\n },\n isVertical(point?: Point, otherPoint?: Point, tolerance = 0) {\n return point && otherPoint && Point.isOverVertical([point, otherPoint], tolerance);\n },\n isOverVertical(points: Point[], tolerance: number = 0) {\n return points.every(point => Math.abs(point[0] - points[0][0]) <= tolerance);\n },\n isAlign(points: Point[], tolerance: number = 0) {\n return Point.isOverHorizontal(points, tolerance) || Point.isOverVertical(points, tolerance);\n },\n getOffsetX(point1: Point, point2: Point) {\n return point2[0] - point1[0];\n },\n getOffsetY(point1: Point, point2: Point) {\n return point2[1] - point1[1];\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>();\nexport const HISTORY = new WeakMap<PlaitBoard, History>();\nexport const SPLITTING_ONCE = new WeakMap<PlaitBoard, boolean | undefined>();\n","export enum Direction {\n left = 'left',\n top = 'top',\n right = 'right',\n bottom = 'bottom'\n}\n\nexport type Vector = [number, number];\n\nexport type DirectionFactor = -1 | 0 | 1;\n\nexport type DirectionFactors = [DirectionFactor, DirectionFactor];\n","import { PlaitElement } from \"./element\";\n\nexport interface PlaitGroup extends PlaitElement {\n type: 'group';\n}\n\nexport const PlaitGroupElement = {\n isGroup: (value: any): value is PlaitGroup => {\n return value.type === 'group';\n }\n}","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport function isListLikeIterable(obj: any): boolean {\n if (!isJsObject(obj)) return false;\n return (\n Array.isArray(obj) ||\n (!(obj instanceof Map) && // JS Map are iterables but return entries as [k, v]\n Symbol.iterator in obj)\n ); // JS Iterable have a Symbol.iterator prop\n}\n\nexport function isJsObject(o: any): boolean {\n return o !== null && (typeof o === 'function' || typeof o === 'object');\n}\n\nexport function iterateListLike<T>(obj: Iterable<T>, fn: (p: T) => void) {\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n fn(obj[i]);\n }\n } else {\n const iterator = obj[Symbol.iterator]();\n let item: IteratorResult<T, any>;\n while (!(item = iterator.next()).done) {\n fn(item.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {isListLikeIterable, iterateListLike} from '../utils/iterable';\n\nimport {IterableChangeRecord, IterableChanges, IterableDiffer, CustomIterable, TrackByFunction} from './iterable_differs';\n\n\nconst trackByIdentity = (index: number, item: any) => item;\n\nexport type Writable<T> = {\n -readonly[K in keyof T]: T[K];\n};\n\nexport class DefaultIterableDiffer<V> implements IterableDiffer<V>, IterableChanges<V> {\n public readonly length: number = 0;\n public readonly collection!: V[]|Iterable<V>|null;\n // Keeps track of the used records at any point in time (during & across `_check()` calls)\n private _linkedRecords: _DuplicateMap<V>|null = null;\n // Keeps track of the removed records at any point in time during `_check()` calls.\n private _unlinkedRecords: _DuplicateMap<V>|null = null;\n private _previousItHead: IterableChangeRecord_<V>|null = null;\n private _itHead: IterableChangeRecord_<V>|null = null;\n private _itTail: IterableChangeRecord_<V>|null = null;\n private _additionsHead: IterableChangeRecord_<V>|null = null;\n private _additionsTail: IterableChangeRecord_<V>|null = null;\n private _movesHead: IterableChangeRecord_<V>|null = null;\n private _movesTail: IterableChangeRecord_<V>|null = null;\n private _removalsHead: IterableChangeRecord_<V>|null = null;\n private _removalsTail: IterableChangeRecord_<V>|null = null;\n // Keeps track of records where custom track by is the same, but item identity has changed\n private _identityChangesHead: IterableChangeRecord_<V>|null = null;\n private _identityChangesTail: IterableChangeRecord_<V>|null = null;\n private _trackByFn: TrackByFunction<V>;\n\n constructor(trackByFn?: TrackByFunction<V>) {\n this._trackByFn = trackByFn || trackByIdentity;\n }\n\n forEachItem(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._itHead; record !== null; record = record._next) {\n fn(record);\n }\n }\n\n forEachOperation(\n fn: (item: IterableChangeRecord<V>, previousIndex: number|null, currentIndex: number|null) =>\n void) {\n let nextIt = this._itHead;\n let nextRemove = this._removalsHead;\n let addRemoveOffset = 0;\n let moveOffsets: number[]|null = null;\n while (nextIt || nextRemove) {\n // Figure out which is the next record to process\n // Order: remove, add, move\n const record: IterableChangeRecord<V> = !nextRemove ||\n nextIt &&\n nextIt.currentIndex! <\n getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ?\n nextIt! :\n nextRemove;\n const adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);\n const currentIndex = record.currentIndex;\n\n // consume the item, and adjust the addRemoveOffset and update moveDistance if necessary\n if (record === nextRemove) {\n addRemoveOffset--;\n nextRemove = nextRemove._nextRemoved;\n } else {\n nextIt = nextIt!._next;\n if (record.previousIndex == null) {\n addRemoveOffset++;\n } else {\n // INVARIANT: currentIndex < previousIndex\n if (!moveOffsets) moveOffsets = [];\n const localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;\n const localCurrentIndex = currentIndex! - addRemoveOffset;\n if (localMovePreviousIndex != localCurrentIndex) {\n for (let i = 0; i < localMovePreviousIndex; i++) {\n const offset = i < moveOffsets.length ? moveOffsets[i] : (moveOffsets[i] = 0);\n const index = offset + i;\n if (localCurrentIndex <= index && index < localMovePreviousIndex) {\n moveOffsets[i] = offset + 1;\n }\n }\n const previousIndex = record.previousIndex;\n moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;\n }\n }\n }\n\n if (adjPreviousIndex !== currentIndex) {\n fn(record, adjPreviousIndex, currentIndex);\n }\n }\n }\n\n forEachPreviousItem(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._previousItHead; record !== null; record = record._nextPrevious) {\n fn(record);\n }\n }\n\n forEachAddedItem(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n fn(record);\n }\n }\n\n forEachMovedItem(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._movesHead; record !== null; record = record._nextMoved) {\n fn(record);\n }\n }\n\n forEachRemovedItem(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n fn(record);\n }\n }\n\n forEachIdentityChange(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {\n fn(record);\n }\n }\n\n diff(collection: CustomIterable<V>|null|undefined): DefaultIterableDiffer<V>|null {\n if (collection == null) collection = [];\n if (!isListLikeIterable(collection)) {\n throw new Error('Exception: Error trying to diff. Only arrays and iterables are allowed');\n }\n\n if (this.check(collection)) {\n return this;\n } else {\n return null;\n }\n }\n\n onDestroy() {}\n\n check(collection: CustomIterable<V>): boolean {\n this._reset();\n\n let record: IterableChangeRecord_<V>|null = this._itHead;\n let mayBeDirty: boolean = false;\n let index: number;\n let item: V;\n let itemTrackBy: any;\n if (Array.isArray(collection)) {\n (this as Writable<this>).length = collection.length;\n\n for (let index = 0; index < this.length; index++) {\n item = collection[index];\n itemTrackBy = this._trackByFn(index, item);\n if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n record = this._mismatch(record, item, itemTrackBy, index);\n mayBeDirty = true;\n } else {\n if (mayBeDirty) {\n record = this._verifyReinsertion(record, item, itemTrackBy, index);\n }\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n }\n\n record = record._next;\n }\n } else {\n index = 0;\n iterateListLike(collection, (item: V) => {\n itemTrackBy = this._trackByFn(index, item);\n if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n record = this._mismatch(record, item, itemTrackBy, index);\n mayBeDirty = true;\n } else {\n if (mayBeDirty) {\n record = this._verifyReinsertion(record, item, itemTrackBy, index);\n }\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n }\n record = record._next;\n index++;\n });\n (this as Writable<this>).length = index;\n }\n\n this._truncate(record);\n (this as Writable<this>).collection = collection;\n return this.isDirty;\n }\n\n /* CollectionChanges is considered dirty if it has any additions, moves, removals, or identity\n * changes.\n */\n get isDirty(): boolean {\n return this._additionsHead !== null || this._movesHead !== null ||\n this._removalsHead !== null || this._identityChangesHead !== null;\n }\n\n /**\n * Reset the state of the change objects to show no changes. This means set previousKey to\n * currentKey, and clear all of the queues (additions, moves, removals).\n * Set the previousIndexes of moved and added items to their currentIndexes\n * Reset the list of additions, moves and removals\n *\n * @internal\n */\n _reset() {\n if (this.isDirty) {\n let record: IterableChangeRecord_<V>|null;\n\n for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {\n record._nextPrevious = record._next;\n }\n\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n record.previousIndex = record.currentIndex;\n }\n this._additionsHead = this._additionsTail = null;\n\n for (record = this._movesHead; record !== null; record = record._nextMoved) {\n record.previousIndex = record.currentIndex;\n }\n this._movesHead = this._movesTail = null;\n this._removalsHead = this._removalsTail = null;\n this._identityChangesHead = this._identityChangesTail = null;\n }\n }\n\n /**\n * This is the core function which handles differences between collections.\n *\n * - `record` is the record which we saw at this position last time. If null then it is a new\n * item.\n * - `item` is the current item in the collection\n * - `index` is the position of the item in the collection\n *\n * @internal\n */\n _mismatch(record: IterableChangeRecord_<V>|null, item: V, itemTrackBy: any, index: number):\n IterableChangeRecord_<V> {\n // The previous record after which we will append the current one.\n let previousRecord: IterableChangeRecord_<V>|null;\n\n if (record === null) {\n previousRecord = this._itTail;\n } else {\n previousRecord = record._prev;\n // Remove the record from the collection since we know it does not match the item.\n this._remove(record);\n }\n\n // See if we have evicted the item, which used to be at some anterior position of _itHead list.\n record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n if (record !== null) {\n // It is an item which we have evicted earlier: reinsert it back into the list.\n // But first we need to check if identity changed, so we can update in view if necessary.\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n\n this._reinsertAfter(record, previousRecord, index);\n } else {\n // Attempt to see if the item is at some posterior position of _itHead list.\n record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);\n if (record !== null) {\n // We have the item in _itHead at/after `index` position. We need to move it forward in the\n // collection.\n // But first we need to check if identity changed, so we can update in view if necessary.\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n\n this._moveAfter(record, previousRecord, index);\n } else {\n // It is a new item: add it.\n record =\n this._addAfter(new IterableChangeRecord_<V>(item, itemTrackBy), previousRecord, index);\n }\n }\n return record;\n }\n\n /**\n * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)\n *\n * Use case: `[a, a]` => `[b, a, a]`\n *\n * If we did not have this check then the insertion of `b` would:\n * 1) evict first `a`\n * 2) insert `b` at `0` index.\n * 3) leave `a` at index `1` as is. <-- this is wrong!\n * 3) reinsert `a` at index 2. <-- this is wrong!\n *\n * The correct behavior is:\n * 1) evict first `a`\n * 2) insert `b` at `0` index.\n * 3) reinsert `a` at index 1.\n * 3) move `a` at from `1` to `2`.\n *\n *\n * Double check that we have not evicted a duplicate item. We need to check if the item type may\n * have already been removed:\n * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted\n * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a\n * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'\n * at the end.\n *\n * @internal\n */\n _verifyReinsertion(record: IterableChangeRecord_<V>, item: V, itemTrackBy: any, index: number):\n IterableChangeRecord_<V> {\n let reinsertRecord: IterableChangeRecord_<V>|null =\n this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n if (reinsertRecord !== null) {\n record = this._reinsertAfter(reinsertRecord, record._prev!, index);\n } else if (record.currentIndex != index) {\n record.currentIndex = index;\n this._addToMoves(record, index);\n }\n return record;\n }\n\n /**\n * Get rid of any excess {@link IterableChangeRecord_}s from the previous collection\n *\n * - `record` The first excess {@link IterableChangeRecord_}.\n *\n * @internal\n */\n _truncate(record: IterableChangeRecord_<V>|null) {\n // Anything after that needs to be removed;\n while (record !== null) {\n const nextRecord: IterableChangeRecord_<V>|null = record._next;\n this._addToRemovals(this._unlink(record));\n record = nextRecord;\n }\n if (this._unlinkedRecords !== null) {\n this._unlinkedRecords.clear();\n }\n\n if (this._additionsTail !== null) {\n this._additionsTail._nextAdded = null;\n }\n if (this._movesTail !== null) {\n this._movesTail._nextMoved = null;\n }\n if (this._itTail !== null) {\n this._itTail._next = null;\n }\n if (this._removalsTail !== null) {\n this._removalsTail._nextRemoved = null;\n }\n if (this._identityChangesTail !== null) {\n this._identityChangesTail._nextIdentityChange = null;\n }\n }\n\n /** @internal */\n _reinsertAfter(\n record: IterableChangeRecord_<V>, prevRecord: IterableChangeRecord_<V>|null,\n index: number): IterableChangeRecord_<V> {\n if (this._unlinkedRecords !== null) {\n this._unlinkedRecords.remove(record);\n }\n const prev = record._prevRemoved;\n const next = record._nextRemoved;\n\n if (prev === null) {\n this._removalsHead = next;\n } else {\n prev._nextRemoved = next;\n }\n if (next === null) {\n this._removalsTail = prev;\n } else {\n next._prevRemoved = prev;\n }\n\n this._insertAfter(record, prevRecord, index);\n this._addToMoves(record, index);\n return record;\n }\n\n /** @internal */\n _moveAfter(\n record: IterableChangeRecord_<V>, prevRecord: IterableChangeRecord_<V>|null,\n index: number): IterableChangeRecord_<V> {\n this._unlink(record);\n this._insertAfter(record, prevRecord, index);\n this._addToMoves(record, index);\n return record;\n }\n\n /** @internal */\n _addAfter(\n record: IterableChangeRecord_<V>, prevRecord: IterableChangeRecord_<V>|null,\n index: number): IterableChangeRecord_<V> {\n this._insertAfter(record, prevRecord, index);\n\n if (this._additionsTail === null) {\n // assert(this._additionsHead === null);\n this._additionsTail = this._additionsHead = record;\n } else {\n // assert(_additionsTail._nextAdded === null);\n // assert(record._nextAdded === null);\n this._additionsTail = this._additionsTail._nextAdded = record;\n }\n return record;\n }\n\n /** @internal */\n _insertAfter(\n record: IterableChangeRecord_<V>, prevRecord: IterableChangeRecord_<V>|null,\n index: number): IterableChangeRecord_<V> {\n\n const next: IterableChangeRecord_<V>|null =\n prevRecord === null ? this._itHead : prevRecord._next;\n record._next = next;\n record._prev = prevRecord;\n if (next === null) {\n this._itTail = record;\n } else {\n next._prev = record;\n }\n if (prevRecord === null) {\n this._itHead = record;\n } else {\n prevRecord._next = record;\n }\n\n if (this._linkedRecords === null) {\n this._linkedRecords = new _DuplicateMap<V>();\n }\n this._linkedRecords.put(record);\n\n record.currentIndex = index;\n return record;\n }\n\n /** @internal */\n _remove(record: IterableChangeRecord_<V>): IterableChangeRecord_<V> {\n return this._addToRemovals(this._unlink(record));\n }\n\n /** @internal */\n _unlink(record: IterableChangeRecord_<V>): IterableChangeRecord_<V> {\n if (this._linkedRecords !== null) {\n this._linkedRecords.remove(record);\n }\n\n const prev = record._prev;\n const next = record._next;\n\n if (prev === null) {\n this._itHead = next;\n } else {\n prev._next = next;\n }\n if (next === null) {\n this._itTail = prev;\n } else {\n next._prev = prev;\n }\n\n return record;\n }\n\n /** @internal */\n _addToMoves(record: IterableChangeRecord_<V>, toIndex: number): IterableChangeRecord_<V> {\n if (record.previousIndex === toIndex) {\n return record;\n }\n\n if (this._movesTail === null) {\n this._movesTail = this._movesHead = record;\n } else {\n this._movesTail = this._movesTail._nextMoved = record;\n }\n\n return record;\n }\n\n private _addToRemovals(record: IterableChangeRecord_<V>): IterableChangeRecord_<V> {\n if (this._unlinkedRecords === null) {\n this._unlinkedRecords = new _DuplicateMap<V>();\n }\n this._unlinkedRecords.put(record);\n record.currentIndex = null;\n record._nextRemoved = null;\n\n if (this._removalsTail === null) {\n this._removalsTail = this._removalsHead = record;\n record._prevRemoved = null;\n } else {\n record._prevRemoved = this._removalsTail;\n this._removalsTail = this._removalsTail._nextRemoved = record;\n }\n return record;\n }\n\n /** @internal */\n _addIdentityChange(record: IterableChangeRecord_<V>, item: V) {\n record.item = item;\n if (this._identityChangesTail === null) {\n this._identityChangesTail = this._identityChangesHead = record;\n } else {\n this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;\n }\n return record;\n }\n}\n\nexport class IterableChangeRecord_<V> implements IterableChangeRecord<V> {\n currentIndex: number|null = null;\n previousIndex: number|null = null;\n\n /** @internal */\n _nextPrevious: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _prev: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _next: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _prevDup: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _nextDup: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _prevRemoved: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _nextRemoved: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _nextAdded: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _nextMoved: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _nextIdentityChange: IterableChangeRecord_<V>|null = null;\n\n\n constructor(public item: V, public trackById: any) {}\n}\n\n// A linked list of IterableChangeRecords with the same IterableChangeRecord_.item\nclass _DuplicateItemRecordList<V> {\n /** @internal */\n _head: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _tail: IterableChangeRecord_<V>|null = null;\n\n /**\n * Append the record to the list of duplicates.\n *\n * Note: by design all records in the list of duplicates hold the same value in record.item.\n */\n add(record: IterableChangeRecord_<V>): void {\n if (this._head === null) {\n this._head = this._tail = record;\n record._nextDup = null;\n record._prevDup = null;\n } else {\n this._tail!._nextDup = record;\n record._prevDup = this._tail;\n record._nextDup = null;\n this._tail = record;\n }\n }\n\n // Returns a IterableChangeRecord_ having IterableChangeRecord_.trackById == trackById and\n // IterableChangeRecord_.currentIndex >= atOrAfterIndex\n get(trackById: any, atOrAfterIndex: number|null): IterableChangeRecord_<V>|null {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._head; record !== null; record = record._nextDup) {\n if ((atOrAfterIndex === null || atOrAfterIndex <= record.currentIndex!) &&\n Object.is(record.trackById, trackById)) {\n return record;\n }\n }\n return null;\n }\n\n /**\n * Remove one {@link IterableChangeRecord_} from the list of duplicates.\n *\n * Returns whether the list of duplicates is empty.\n */\n remove(record: IterableChangeRecord_<V>): boolean {\n\n const prev: IterableChangeRecord_<V>|null = record._prevDup;\n const next: IterableChangeRecord_<V>|null = record._nextDup;\n if (prev === null) {\n this._head = next;\n } else {\n prev._nextDup = next;\n }\n if (next === null) {\n this._tail = prev;\n } else {\n next._prevDup = prev;\n }\n return this._head === null;\n }\n}\n\nclass _DuplicateMap<V> {\n map = new Map<any, _DuplicateItemRecordList<V>>();\n\n put(record: IterableChangeRecord_<V>) {\n const key = record.trackById;\n\n let duplicates = this.map.get(key);\n if (!duplicates) {\n duplicates = new _DuplicateItemRecordList<V>();\n this.map.set(key, duplicates);\n }\n duplicates.add(record);\n }\n\n /**\n * Retrieve the `value` using key. Because the IterableChangeRecord_ value may be one which we\n * have already iterated over, we use the `atOrAfterIndex` to pretend it is not there.\n *\n * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we\n * have any more `a`s needs to return the second `a`.\n */\n get(trackById: any, atOrAfterIndex: number|null): IterableChangeRecord_<V>|null {\n const key = trackById;\n const recordList = this.map.get(key);\n return recordList ? recordList.get(trackById, atOrAfterIndex) : null;\n }\n\n /**\n * Removes a {@link IterableChangeRecord_} from the list of duplicates.\n *\n * The list of duplicates also is removed from the map if it gets empty.\n */\n remove(record: IterableChangeRecord_<V>): IterableChangeRecord_<V> {\n const key = record.trackById;\n const recordList: _DuplicateItemRecordList<V> = this.map.get(key)!;\n // Remove the list of duplicates when it gets empty\n if (recordList.remove(record)) {\n this.map.delete(key);\n }\n return record;\n }\n\n get isEmpty(): boolean {\n return this.map.size === 0;\n }\n\n clear() {\n this.map.clear();\n }\n}\n\nfunction getPreviousIndex(item: any, addRemoveOffset: number, moveOffsets: number[]|null): number {\n const previousIndex = item.previousIndex;\n if (previousIndex === null) return previousIndex;\n let moveOffset = 0;\n if (moveOffsets && previousIndex < moveOffsets.length) {\n moveOffset = moveOffsets[previousIndex];\n }\n return previousIndex + addRemoveOffset + moveOffset;\n}\n","import {\n Ancestor,\n ComponentType,\n PlaitBoard,\n PlaitChildrenContext,\n PlaitElement,\n PlaitNode,\n PlaitPluginElementContext\n} from '../interfaces';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../utils/weak-maps';\nimport { isSelectedElement, replaceSelectedElement } from '../utils/selected-element';\nimport { ElementFlavour } from './element/element-flavour';\nimport { DefaultIterableDiffer } from '../differs/default_iterable_differ';\nimport { IterableChangeRecord, IterableDiffer } from '../differs/iterable_differs';\nimport { isDebug } from '../utils/debug';\n\nexport class ListRender {\n private children: PlaitElement[] = [];\n private instances: ElementFlavour[] = [];\n private contexts: PlaitPluginElementContext[] = [];\n private differ: IterableDiffer<PlaitElement> | null = null;\n public initialized = false;\n\n constructor(private board: PlaitBoard) {}\n\n public initialize(children: PlaitElement[], childrenContext: PlaitChildrenContext) {\n this.initialized = true;\n this.children = children;\n children.forEach((descendant, index) => {\n NODE_TO_INDEX.set(descendant, index);\n NODE_TO_PARENT.set(descendant, childrenContext.parent);\n const context = getContext(this.board, descendant, index, childrenContext.parent);\n const componentType = getComponentType(this.board, context);\n const instance = createPluginComponent(this.board, componentType, context, childrenContext);\n this.instances.push(instance);\n this.contexts.push(context);\n });\n this.differ = new DefaultIterableDiffer<PlaitElement>(trackBy);\n this.differ.diff(children);\n }\n\n public update(children: PlaitElement[], childrenContext: PlaitChildrenContext) {\n if (!this.initialized) {\n this.initialize(children, childrenContext);\n return;\n }\n if (!this.differ) {\n throw new Error('Exception: Can not find differ ');\n }\n const { board, parent } = childrenContext;\n const diffResult = this.differ.diff(children);\n if (diffResult) {\n const newContexts: PlaitPluginElementContext[] = [];\n const newInstances: ElementFlavour[] = [];\n // for moving scene: the current index for first element before moving\n let currentIndexForFirstElement: number | null = null;\n diffResult.forEachItem((record: IterableChangeRecord<PlaitElement>) => {\n NODE_TO_INDEX.set(record.item, record.currentIndex as number);\n NODE_TO_PARENT.set(record.item, childrenContext.parent);\n const previousContext = record.previousIndex === null ? undefined : this.contexts[record.previousIndex];\n const context = getContext(board, record.item, record.currentIndex as number, parent, previousContext);\n if (record.previousIndex === null) {\n const componentType = getComponentType(board, context);\n const componentRef = createPluginComponent(board, componentType, context, childrenContext);\n newContexts.push(context);\n newInstances.push(componentRef);\n } else {\n const instance = this.instances[record.previousIndex];\n instance.context = context;\n newInstances.push(instance);\n newContexts.push(context);\n }\n // item might has been changed, so need to compare the id\n if (record.item === this.children[0] || record.item.id === this.children[0]?.id) {\n currentIndexForFirstElement = record.currentIndex;\n }\n });\n diffResult.forEachOperation(record => {\n // removed\n if (record.currentIndex === null) {\n const componentRef = this.instances[record.previousIndex as number];\n componentRef?.destroy();\n }\n // moved\n if (record.previousIndex !== null && record.currentIndex !== null) {\n mountOnItemMove(record.item, record.currentIndex, childrenContext, currentIndexForFirstElement);\n }\n });\n this.instances = newInstances;\n this.contexts = newContexts;\n this.children = children;\n } else {\n const newContexts: PlaitPluginElementContext[] = [];\n this.children.forEach((element, index) => {\n NODE_TO_INDEX.set(element, index);\n NODE_TO_PARENT.set(element, childrenContext.parent);\n const previousContext = this.contexts[index];\n const previousInstance = this.instances[index];\n const context = getContext(board, element, index, parent, previousContext);\n previousInstance.context = context;\n newContexts.push(context);\n });\n this.contexts = newContexts;\n }\n }\n\n public destroy() {\n this.children.forEach((element: PlaitElement, index: number) => {\n if (this.instances[index]) {\n this.instances[index].destroy();\n }\n });\n this.instances = [];\n this.children = [];\n this.contexts = [];\n this.initialized = false;\n this.differ = null;\n }\n}\n\nconst trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n};\n\nconst createPluginComponent = (\n board: PlaitBoard,\n componentType: ComponentType<ElementFlavour>,\n context: PlaitPluginElementContext,\n childrenContext: PlaitChildrenContext\n) => {\n const instance = new componentType();\n instance.context = context;\n board.normalizeElement(context);\n try {\n instance.initialize();\n } catch (error) {\n if (isDebug()) {\n console.error('list-render-initialize', error, 'context', context);\n }\n }\n const g = instance.getContainerG();\n mountElementG(context.index, g, childrenContext);\n instance.initializeListRender();\n return instance;\n};\n\nconst getComponentType = (board: PlaitBoard, context: PlaitPluginElementContext) => {\n const result = board.drawElement(context);\n return result;\n};\n\nconst getContext = (\n board: PlaitBoard,\n element: PlaitElement,\n index: number,\n parent: Ancestor,\n previousContext?: PlaitPluginElementContext\n): PlaitPluginElementContext => {\n let isSelected = isSelectedElement(board, element);\n const previousElement = previousContext && previousContext.element;\n if (previousElement && previousElement !== element && isSelectedElement(board, previousElement)) {\n isSelected = true;\n replaceSelectedElement(board, previousElement, element);\n }\n const context: PlaitPluginElementContext = {\n element: element,\n parent: parent,\n board: board,\n selected: isSelected,\n index,\n hasThemeChanged: !!board.operations?.find(op => op.type === 'set_theme')\n };\n return context;\n};\n\n// the g depth of root element:[1]-[2]-[3]-[4]\n// the g depth of root element and children element(the [2] element has children):\n// [1]-\n// [2]([2-1-1][2-1-2][2-1][2-2][2-3-1][2-3-2][2-3][2])-\n// [3]-\n// [4]\nexport const mountElementG = (\n index: number,\n g: SVGGElement,\n childrenContext: PlaitChildrenContext,\n // for moving scene: the current index for first element before moving\n currentIndexForFirstElement: number | null = null\n) => {\n const { parent, parentG } = childrenContext;\n if (PlaitBoard.isBoard(parent)) {\n if (index > 0) {\n const previousElement = parent.children[index - 1];\n const previousContainerG = PlaitElement.getContainerG(previousElement, { suppressThrow: false });\n previousContainerG.insertAdjacentElement('afterend', g);\n } else {\n if (currentIndexForFirstElement !== null) {\n const firstElement = parent.children[currentIndexForFirstElement];\n const firstContainerG = firstElement && PlaitElement.getContainerG(firstElement, { suppressThrow: true });\n if (firstElement && firstContainerG) {\n parentG.insertBefore(g, firstContainerG);\n } else {\n throw new Error('fail to mount container on moving');\n }\n } else {\n parentG.append(g);\n }\n }\n } else {\n if (index > 0) {\n const previousElement = (parent.children as PlaitElement[])[index - 1];\n const previousElementG = PlaitElement.getElementG(previousElement);\n previousElementG.insertAdjacentElement('afterend', g);\n } else {\n if (currentIndexForFirstElement) {\n const nextElement = (parent.children as PlaitElement[])[currentIndexForFirstElement];\n const nextPath = nextElement && PlaitBoard.findPath(childrenContext.board, nextElement);\n const first = nextPath && PlaitNode.first(childrenContext.board, nextPath);\n const firstContainerG = first && PlaitElement.getContainerG(first, { suppressThrow: false });\n if (firstContainerG) {\n parentG.insertBefore(g, firstContainerG);\n } else {\n throw new Error('fail to mount container on moving');\n }\n } else {\n let parentElementG = PlaitElement.getElementG(parent);\n parentG.insertBefore(g, parentElementG);\n }\n }\n }\n};\n\nconst mountOnItemMove = (\n element: PlaitElement,\n index: number,\n childrenContext: PlaitChildrenContext,\n currentIndexForFirstElement: number | null\n) => {\n const containerG = PlaitElement.getContainerG(element, { suppressThrow: false });\n mountElementG(index, containerG, childrenContext, currentIndexForFirstElement);\n if (element.children && !PlaitElement.isRootElement(element) && childrenContext.board.isExpanded(element)) {\n element.children.forEach((child, index) => {\n mountOnItemMove(child, index, { ...childrenContext, parent: element }, null);\n });\n }\n};\n","/**\n * 基于 element-flavour 实现元素的绘制,取代 Angular 组件\n */\n\nimport { PlaitBoard, PlaitChildrenContext, PlaitElement, PlaitNode, PlaitPluginElementContext } from '../../interfaces';\nimport { removeSelectedElement } from '../../utils/selected-element';\nimport { createG } from '../../utils/dom/common';\nimport { hasBeforeContextChange, hasOnContextChanged } from './context-change';\nimport { ListRender } from '../list-render';\nimport { ELEMENT_TO_REF, NODE_TO_CONTAINER_G, NODE_TO_G } from '../../utils/weak-maps';\nimport { PlaitElementRef } from './element-ref';\nimport { getElementMap } from '../../utils/element';\n\nexport class ElementFlavour<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard,\n R extends PlaitElementRef = PlaitElementRef\n> {\n private _g!: SVGGElement;\n\n private _containerG!: SVGGElement;\n\n // children elements's render need rootContainerG\n // the value of rootContainerG come from the containerG of root element\n private _rootContainerG?: SVGGElement;\n\n initialized = false;\n\n protected _context!: PlaitPluginElementContext<T, K>;\n\n get hasChildren() {\n return !!this.element.children;\n }\n\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.initialized) {\n const elementG = this.getElementG();\n const containerG = this.getContainerG();\n NODE_TO_G.set(this.element, elementG);\n NODE_TO_CONTAINER_G.set(this.element, containerG);\n getElementMap(this.board).set(this.element.id, this.element);\n ELEMENT_TO_REF.set(this.element, this.ref);\n this.updateListRender();\n if (hasOnContextChanged<T>(this)) {\n this.onContextChanged(value, previousContext);\n }\n } else {\n if (PlaitElement.isRootElement(this.element) && this.hasChildren) {\n this._g = createG();\n this._containerG = createG();\n this._containerG.append(this._g);\n } else {\n this._g = createG();\n this._containerG = this._g;\n }\n NODE_TO_G.set(this.element, this._g);\n NODE_TO_CONTAINER_G.set(this.element, this._containerG);\n ELEMENT_TO_REF.set(this.element, this.ref);\n getElementMap(this.board).set(this.element.id, this.element);\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 listRender?: ListRender;\n\n getContainerG() {\n return this._containerG;\n }\n\n getElementG() {\n return this._g;\n }\n\n constructor(private ref: R) {}\n\n initialize() {\n if (this.element.type) {\n this.getContainerG().setAttribute(`plait-${this.element.type}`, 'true');\n }\n if (this.hasChildren) {\n if (PlaitElement.isRootElement(this.element)) {\n this._rootContainerG = this._containerG;\n } else {\n const path = PlaitBoard.findPath(this.board, this.element);\n const rootNode = PlaitNode.get(this.board, path.slice(0, 1));\n this._rootContainerG = PlaitElement.getContainerG(rootNode, { suppressThrow: false });\n }\n }\n this.getContainerG().setAttribute('plait-data-id', this.element.id);\n this.initialized = true;\n }\n\n public initializeListRender() {\n if (this.hasChildren) {\n this.listRender = new ListRender(this.board);\n if (this.board.isExpanded(this.element)) {\n this.listRender.initialize(this.element.children!, this.initializeChildrenContext());\n }\n }\n }\n\n public getRef() {\n return this.ref;\n }\n\n private updateListRender() {\n if (this.hasChildren) {\n if (!this.listRender) {\n throw new Error('incorrectly initialize list render');\n }\n if (this.board.isExpanded(this.element)) {\n this.listRender.update(this.element.children!, this.initializeChildrenContext());\n } else {\n if (this.listRender.initialized) {\n this.listRender.destroy();\n }\n }\n }\n }\n\n private initializeChildrenContext(): PlaitChildrenContext {\n if (!this._rootContainerG) {\n throw new Error('can not resolve root container g');\n }\n return {\n board: this.board,\n parent: this.element,\n parentG: this._rootContainerG\n };\n }\n\n destroy() {\n if (NODE_TO_G.get(this.element) === this._g) {\n NODE_TO_G.delete(this.element);\n }\n getElementMap(this.board).delete(this.element.id);\n if (NODE_TO_CONTAINER_G.get(this.element) === this._containerG) {\n NODE_TO_CONTAINER_G.delete(this.element);\n }\n if (ELEMENT_TO_REF.get(this.element) === this.ref) {\n ELEMENT_TO_REF.set(this.element, this.ref);\n }\n removeSelectedElement(this.board, this.element);\n this.getContainerG().remove();\n this.listRender?.destroy();\n }\n}\n","import { Subject } from 'rxjs';\nimport { ImageEntry } from './interfaces/element';\n\nexport class PlaitBoardContext {\n private _stable = new Subject();\n\n private uploadingFiles: ImageEntry[] = [];\n\n getUploadingFile(url: string) {\n return this.uploadingFiles.find(file => file.url === url);\n }\n\n setUploadingFile(file: ImageEntry) {\n return this.uploadingFiles.push(file);\n }\n\n removeUploadingFile(fileEntry: ImageEntry) {\n this.uploadingFiles = this.uploadingFiles.filter(file => file.url !== fileEntry.url);\n }\n\n onStable() {\n return this._stable.asObservable();\n }\n\n nextStable() {\n this._stable.next('');\n }\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';\nimport { CoreTransforms } from '../transforms/element';\nimport { ClipboardData, WritableClipboardContext, WritableClipboardOperationType, drawSelectionRectangleG } from '../utils';\nimport { Point, RectangleClient } from '../interfaces';\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.afterChange();\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 afterChange: () => {},\n drawSelectionRectangle: () => {\n return drawSelectionRectangleG(board);\n },\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 globalKeyDown: (event: KeyboardEvent) => {},\n keyUp: (event: KeyboardEvent) => {},\n dblClick: (event: MouseEvent) => {},\n buildFragment: (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => clipboardContext,\n insertFragment: (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {},\n deleteFragment: (elements: PlaitElement[]) => {\n CoreTransforms.removeElements(board, elements);\n },\n getDeletedFragment: (data: PlaitElement[]) => data,\n getRelatedFragment: (data: PlaitElement[], originData?: PlaitElement[]) => data,\n normalizeElement: (context: PlaitPluginElementContext) => {\n },\n drawElement: (context: PlaitPluginElementContext) => {\n throw new Error(`can not resolve plugin element component type: ${context.element.type}`);\n },\n isWithinSelection: element => false,\n isRectangleHit: element => false,\n isHit: element => false,\n isInsidePoint: element => false,\n getOneHitElement: (data: PlaitElement[]) => data[0],\n isRecursion: element => true,\n isMovable: element => false,\n getRectangle: element => null,\n applyTheme: (element: PlaitElement) => {},\n isAlign: element => false,\n pointerDown: pointer => {},\n pointerMove: pointer => {},\n pointerUp: pointer => {},\n pointerCancel: pointer => {},\n pointerOut: pointer => {},\n pointerLeave: pointer => {},\n globalPointerMove: pointer => {},\n globalPointerUp: pointer => {},\n isImageBindingAllowed: (element: PlaitElement) => false,\n canAddToGroup: (element: PlaitElement) => true,\n canSetZIndex: (element: PlaitElement) => true,\n isExpanded: (element: PlaitElement) => true\n };\n return board;\n}\n","import { BOARD_TO_ON_CHANGE, BOARD_TO_AFTER_CHANGE } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\n\nexport function withBoard(board: PlaitBoard) {\n const { onChange, afterChange } = board;\n\n board.onChange = () => {\n const onContextChange = BOARD_TO_ON_CHANGE.get(board);\n if (onContextChange) {\n onContextChange();\n }\n onChange();\n };\n\n board.afterChange = () => {\n const afterContextChange = BOARD_TO_AFTER_CHANGE.get(board);\n if (afterContextChange) {\n afterContextChange();\n }\n afterChange();\n }\n\n return board;\n}\n","import { PlaitBoard, PlaitPointerType } from '../interfaces';\nimport { isMobileDeviceEvent } from './pointer';\n\nexport const isSmartHand = (board: PlaitBoard, event: PointerEvent) => {\n return (\n PlaitBoard.isPointer(board, PlaitPointerType.hand) ||\n (PlaitBoard.isPointer(board, PlaitPointerType.selection) && isMobileDeviceEvent(event))\n );\n};\n","import { DRAG_SELECTION_PRESS_AND_MOVE_BUFFER } from '../constants';\nimport { PlaitPointerType, PlaitBoard, PlaitBoardMove, WithHandPluginOptions, PlaitPluginKey } from '../interfaces';\nimport { BoardTransforms } from '../transforms';\nimport { distanceBetweenPointAndPoint, isHitElement, isMovingElements, isSelectionMoving, toHostPoint, toViewBoxPoint } from '../utils';\nimport { isMainPointer } from '../utils/dom/common';\nimport { isSmartHand } from '../utils/mobile';\nimport { updateViewportContainerScroll } from '../utils/viewport';\nimport { PlaitOptionsBoard } from './with-options';\n\nexport function withHandPointer<T extends PlaitBoard>(board: T) {\n const { pointerDown, pointerMove, globalPointerUp, keyDown, keyUp, pointerUp } = board;\n let isMoving: boolean = false;\n let movingPoint: PlaitBoardMove | null = null;\n let pointerDownEvent: PointerEvent | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n const options = (board as unknown as PlaitOptionsBoard).getPluginOptions<WithHandPluginOptions>(PlaitPluginKey.withHand);\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const isHitTarget = isHitElement(board, point);\n if ((options?.isHandMode(board, event) || (isSmartHand(board, event) && !isHitTarget)) && isMainPointer(event)) {\n movingPoint = {\n x: event.x,\n y: event.y\n };\n }\n pointerDownEvent = event;\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n const options = (board as unknown as PlaitOptionsBoard).getPluginOptions<WithHandPluginOptions>(PlaitPluginKey.withHand);\n // 阈值必须大于 withSelection 中 pointerMove 的 PRESS_AND_MOVE_BUFFER:\n // 1. 首先检测是否满足进入拖选状态的条件\n // 2. 仅当不满足拖选条件时,才会考虑触发 withHand 行为\n // Must exceed the DRAG_SELECTION_PRESS_AND_MOVE_BUFFER threshold defined in withSelection's pointerMove.\n // The system first checks for drag selection state eligibility\n // withHand behavior is only triggered if drag selection state is not initiated.\n const triggerDistance = DRAG_SELECTION_PRESS_AND_MOVE_BUFFER + 4;\n if (\n movingPoint &&\n !isMoving &&\n !isSelectionMoving(board) &&\n pointerDownEvent &&\n distanceBetweenPointAndPoint(pointerDownEvent.x, pointerDownEvent.y, event.x, event.y) > triggerDistance &&\n !isMovingElements(board)\n ) {\n isMoving = true;\n PlaitBoard.getBoardContainer(board).classList.add('viewport-moving');\n }\n if (\n (options?.isHandMode(board, event) || isSmartHand(board, event)) &&\n isMoving &&\n movingPoint &&\n !isSelectionMoving(board) &&\n !isMovingElements(board)\n ) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n const left = viewportContainer.scrollLeft - (event.x - movingPoint.x);\n const top = viewportContainer.scrollTop - (event.y - movingPoint.y);\n updateViewportContainerScroll(board, left, top, false);\n movingPoint.x = event.x;\n movingPoint.y = event.y;\n }\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n if (isMoving) {\n return;\n }\n pointerUp(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (movingPoint) {\n movingPoint = null;\n }\n if (isMoving) {\n isMoving = false;\n PlaitBoard.getBoardContainer(board).classList.remove('viewport-moving');\n }\n globalPointerUp(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","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 (PlaitHistoryBoard.isSplittingOnce(board)) {\n merge = false;\n PlaitHistoryBoard.setSplittingOnce(board, undefined);\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 { isHotkey, isKeyHotkey } from 'is-hotkey';\nimport { Ancestor, PlaitBoard, PlaitElement, PlaitPluginKey, WithSelectionPluginOptions } from '../interfaces';\nimport { BoardTransforms, Transforms } from '../transforms';\nimport { deleteFragment, depthFirstRecursion, duplicateElements, getSelectedElements, hotkeys } from '../utils';\nimport { PlaitOptionsBoard } from './with-options';\n\nexport const withHotkey = (board: PlaitBoard) => {\n const { keyDown, keyUp, globalKeyDown } = board;\n\n board.keyDown = (event: KeyboardEvent) => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithSelectionPluginOptions>(PlaitPluginKey.withSelection);\n if (!PlaitBoard.isReadonly(board) && options.isMultipleSelection && isHotkey('mod+a', event)) {\n event.preventDefault();\n let elements: PlaitElement[] = [];\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (PlaitBoard.isBoard(node)) {\n return;\n }\n elements.push(node as PlaitElement);\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 Transforms.addSelectionWithTemporaryElements(board, elements);\n return;\n }\n if (!PlaitBoard.isReadonly(board)) {\n if (isKeyHotkey('mod+]', event)) {\n event.preventDefault();\n Transforms.moveUp(board);\n return;\n }\n if (isKeyHotkey('mod+[', event)) {\n event.preventDefault();\n Transforms.moveDown(board);\n return;\n }\n if (isKeyHotkey('mod+option+‘', event)) {\n event.preventDefault();\n Transforms.moveToTop(board);\n return;\n }\n if (isKeyHotkey('mod+option+“', event)) {\n event.preventDefault();\n Transforms.moveToBottom(board);\n return;\n }\n }\n\n const selectedElements = getSelectedElements(board);\n if (!PlaitBoard.isReadonly(board) && selectedElements.length > 0) {\n if (isKeyHotkey('mod+d', event)) {\n event.preventDefault();\n duplicateElements(board);\n return;\n }\n }\n if (\n !PlaitBoard.isReadonly(board) &&\n selectedElements.length > 0 &&\n (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event))\n ) {\n event.preventDefault();\n deleteFragment(board);\n }\n\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n keyUp(event);\n };\n\n board.globalKeyDown = (event: KeyboardEvent) => {\n if (PlaitBoard.getMovingPointInBoard(board) || PlaitBoard.isMovingPointInBoard(board)) {\n if (isHotkey(['mod+=', 'mod++'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, board.viewport.zoom + 0.1);\n return;\n }\n if (isHotkey(['mod+shift+=', 'mod+shift++'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.fitViewport(board);\n return;\n }\n if (isHotkey(['mod+-', 'mod+shift+-'])(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, board.viewport.zoom - 0.1);\n return;\n }\n if (isHotkey(['mod+0', 'mod+shift+0'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, 1);\n return;\n }\n }\n globalKeyDown(event);\n };\n\n return board;\n};\n","import { PlaitBoard } from '../../interfaces/board';\nimport { createG } from '../dom/common';\nimport { PlaitElement } from '../../interfaces/element';\nimport { Point, RectangleClient } from '../../interfaces';\nimport {\n drawPointSnapLines,\n drawSolidLines,\n GapSnapRef,\n getMinPointDelta,\n getSnapRectangles,\n getTripleAxis,\n SNAP_TOLERANCE,\n SnapDelta,\n SnapRef\n} from './snap';\n\nexport function getSnapMovingRef(board: PlaitBoard, activeRectangle: RectangleClient, activeElements: PlaitElement[]): SnapRef {\n const snapRectangles = getSnapRectangles(board, activeElements);\n const snapG = createG();\n let snapDelta = getPointLineDelta(activeRectangle, snapRectangles);\n const pointLinesG = drawMovingPointSnapLines(board, snapDelta, activeRectangle, snapRectangles);\n snapG.append(pointLinesG);\n const result = getGapSnapLinesAndDelta(board, snapDelta, activeRectangle, snapRectangles);\n snapDelta = result.snapDelta;\n snapG.append(result.snapG);\n return { ...snapDelta, snapG };\n}\n\nfunction getPointLineDeltas(activeRectangle: RectangleClient, snapRectangles: RectangleClient[], isHorizontal: boolean) {\n const axis = getTripleAxis(activeRectangle, isHorizontal);\n const deltaStart = getMinPointDelta(snapRectangles, axis[0], isHorizontal);\n const deltaMiddle = getMinPointDelta(snapRectangles, axis[1], isHorizontal);\n const deltaEnd = getMinPointDelta(snapRectangles, axis[2], isHorizontal);\n return [deltaStart, deltaMiddle, deltaEnd];\n}\n\nfunction getPointLineDelta(activeRectangle: RectangleClient, snapRectangles: RectangleClient[]) {\n let snapDelta: SnapDelta = {\n deltaX: 0,\n deltaY: 0\n };\n function getDelta(isHorizontal: boolean) {\n let delta = 0;\n const deltas = getPointLineDeltas(activeRectangle, snapRectangles, isHorizontal);\n for (let i = 0; i < deltas.length; i++) {\n if (Math.abs(deltas[i]) < SNAP_TOLERANCE) {\n delta = deltas[i];\n break;\n }\n }\n return delta;\n }\n snapDelta.deltaX = getDelta(true);\n snapDelta.deltaY = getDelta(false);\n return snapDelta;\n}\n\nfunction updateActiveRectangle(snapDelta: SnapDelta, activeRectangle: RectangleClient) {\n const { deltaX, deltaY } = snapDelta;\n const { x, y, width, height } = activeRectangle;\n return {\n x: x + deltaX,\n y: y + deltaY,\n width,\n height\n };\n}\n\nfunction drawMovingPointSnapLines(\n board: PlaitBoard,\n snapDelta: SnapDelta,\n activeRectangle: RectangleClient,\n snapRectangles: RectangleClient[]\n) {\n const newActiveRectangle = updateActiveRectangle(snapDelta, activeRectangle);\n return drawPointSnapLines(board, newActiveRectangle, snapRectangles, true, true, true);\n}\n\nfunction getGapSnapLinesAndDelta(\n board: PlaitBoard,\n snapDelta: SnapDelta,\n activeRectangle: RectangleClient,\n snapRectangles: RectangleClient[]\n) {\n let deltaX = snapDelta.deltaX;\n let deltaY = snapDelta.deltaY;\n const gapHorizontalResult = getGapLinesAndDelta(activeRectangle, snapRectangles, true);\n const gapVerticalResult = getGapLinesAndDelta(activeRectangle, snapRectangles, false);\n const gapSnapLines: Point[][] = [...gapHorizontalResult.lines, ...gapVerticalResult.lines];\n if (gapHorizontalResult.delta) {\n deltaX = gapHorizontalResult.delta;\n }\n if (gapVerticalResult.delta) {\n deltaY = gapVerticalResult.delta;\n }\n return {\n snapDelta: { deltaX, deltaY },\n snapG: drawSolidLines(board, gapSnapLines)\n };\n}\n\nfunction getGapLinesAndDelta(activeRectangle: RectangleClient, snapRectangles: RectangleClient[], isHorizontal: boolean) {\n let lines: any[] = [];\n let delta = 0;\n let rectangles: RectangleClient[] = [];\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n\n const activeRectangleCenter = activeRectangle[axis] + activeRectangle[side] / 2;\n snapRectangles.forEach(rec => {\n const isCross = isHorizontal ? isHorizontalCross(rec, activeRectangle) : isVerticalCross(rec, activeRectangle);\n if (isCross && !RectangleClient.isHit(rec, activeRectangle)) {\n rectangles.push(rec);\n }\n });\n rectangles = [...rectangles, activeRectangle].sort((a, b) => a[axis] - b[axis]);\n\n const refArray: GapSnapRef[] = [];\n let gapDistance = 0;\n let beforeIndex = undefined;\n let afterIndex = undefined;\n\n for (let i = 0; i < rectangles.length; i++) {\n for (let j = i + 1; j < rectangles.length; j++) {\n const before = rectangles[i];\n const after = rectangles[j];\n const distance = after[axis] - (before[axis] + before[side]);\n let dif = Infinity;\n if (refArray[i]?.after) {\n refArray[i].after.push({ distance, index: j });\n } else {\n refArray[i] = { ...refArray[i], after: [{ distance, index: j }] };\n }\n\n if (refArray[j]?.before) {\n refArray[j].before.push({ distance, index: i });\n } else {\n refArray[j] = { ...refArray[j], before: [{ distance, index: i }] };\n }\n\n //middle\n let _center = (before[axis] + before[side] + after[axis]) / 2;\n dif = Math.abs(_center - activeRectangleCenter);\n if (dif < SNAP_TOLERANCE) {\n gapDistance = (after[axis] - (before[axis] + before[side]) - activeRectangle[side]) / 2;\n delta = _center - activeRectangleCenter;\n beforeIndex = i;\n afterIndex = j;\n }\n\n //after\n const distanceRight = after[axis] - (before[axis] + before[side]);\n _center = after[axis] + after[side] + distanceRight + activeRectangle[side] / 2;\n dif = Math.abs(_center - activeRectangleCenter);\n if ((!gapDistance || gapDistance !== distanceRight) && dif < SNAP_TOLERANCE) {\n gapDistance = distanceRight;\n beforeIndex = j;\n delta = _center - activeRectangleCenter;\n }\n\n //before\n const distanceBefore = after[axis] - (before[axis] + before[side]);\n _center = before[axis] - distanceBefore - activeRectangle[side] / 2;\n dif = Math.abs(_center - activeRectangleCenter);\n\n if (!gapDistance && dif < SNAP_TOLERANCE) {\n gapDistance = distanceBefore;\n afterIndex = i;\n delta = _center - activeRectangleCenter;\n }\n }\n }\n\n const activeIndex = rectangles.indexOf(activeRectangle);\n let beforeIndexes: number[] = [];\n let afterIndexes: number[] = [];\n if (beforeIndex !== undefined) {\n beforeIndexes.push(beforeIndex);\n findRectangle(gapDistance, refArray[beforeIndex], 'before', beforeIndexes);\n }\n\n if (afterIndex !== undefined) {\n afterIndexes.push(afterIndex);\n findRectangle(gapDistance, refArray[afterIndex], 'after', afterIndexes);\n }\n\n if (beforeIndexes.length || afterIndexes.length) {\n const indexArr = [...beforeIndexes.reverse(), activeIndex, ...afterIndexes];\n activeRectangle[axis] += delta;\n for (let i = 1; i < indexArr.length; i++) {\n lines.push(getLinePoints(rectangles[indexArr[i - 1]], rectangles[indexArr[i]]));\n }\n }\n\n function findRectangle(distance: number, ref: GapSnapRef, direction: string, rectangleIndexes: number[]) {\n const arr = ref[direction as keyof GapSnapRef];\n const index = refArray.indexOf(ref);\n if ((index === 0 && direction === 'before') || (index === refArray.length - 1 && direction === 'after')) return;\n for (let i = 0; i < arr.length; i++) {\n if (Math.abs(arr[i].distance - distance) < 0.1) {\n rectangleIndexes.push(arr[i].index);\n findRectangle(distance, refArray[arr[i].index], direction, rectangleIndexes);\n return;\n }\n }\n }\n\n function getLinePoints(beforeRectangle: RectangleClient, afterRectangle: RectangleClient) {\n const oppositeAxis = axis === 'x' ? 'y' : 'x';\n const oppositeSide = side === 'width' ? 'height' : 'width';\n const snap = [\n beforeRectangle[oppositeAxis],\n beforeRectangle[oppositeAxis] + beforeRectangle[oppositeSide],\n afterRectangle[oppositeAxis],\n afterRectangle[oppositeAxis] + afterRectangle[oppositeSide]\n ];\n const sortArr = snap.sort((a, b) => a - b);\n const average = (sortArr[1] + sortArr[2]) / 2;\n const offset = 3;\n return isHorizontal\n ? [\n [beforeRectangle.x + beforeRectangle.width + offset, average],\n [afterRectangle.x - offset, average]\n ]\n : [\n [average, beforeRectangle.y + beforeRectangle.height + offset],\n [average, afterRectangle.y - offset]\n ];\n }\n return { delta, lines };\n}\n\nfunction isHorizontalCross(rectangle: RectangleClient, other: RectangleClient) {\n return !(rectangle.y + rectangle.height < other.y || rectangle.y > other.y + other.height);\n}\n\nfunction isVerticalCross(rectangle: RectangleClient, other: RectangleClient) {\n return !(rectangle.x + rectangle.width < other.x || rectangle.x > other.x + other.width);\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { isInPlaitBoard } from '../utils/board';\nimport { createG, isMainPointer } from '../utils/dom/common';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { PlaitElement } from '../interfaces/element';\nimport { getHitElementByPoint, getSelectedElements } from '../utils/selected-element';\nimport { PlaitNode } from '../interfaces/node';\nimport { throttleRAF } from '../utils/common';\nimport { cacheMovingElements, getMovingElements, isMovingElements, removeMovingElements } from '../utils/moving-element';\nimport { MERGING } from '../interfaces/history';\nimport {\n getRectangleByElements,\n distanceBetweenPointAndPoint,\n toHostPoint,\n toViewBoxPoint,\n hotkeys,\n getElementsInGroupByElement,\n getRectangleByAngle,\n getSelectionAngle,\n duplicateElements,\n drawRectangle,\n depthFirstRecursion,\n getAngleByElement,\n setAngleForG,\n NODE_TO_INDEX\n} from '../utils';\nimport { getSnapMovingRef } from '../utils/snap/snap-moving';\nimport { PlaitGroupElement, PlaitPointerType, RectangleClient, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR } from '../interfaces';\nimport { ACTIVE_MOVING_CLASS_NAME, PRESS_AND_MOVE_BUFFER } from '../constants';\nimport { addSelectionWithTemporaryElements } from '../transforms/selection';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function withMoving(board: PlaitBoard) {\n const { pointerDown, pointerMove, globalPointerUp, globalPointerMove, globalKeyDown, keyUp } = board;\n\n let offsetX = 0;\n let offsetY = 0;\n let isPreventDefault = false;\n let startPoint: Point | null;\n let activeElements: PlaitElement[] = [];\n let snapG: SVGGElement | null = null;\n let activeElementsRectangle: RectangleClient | null = null;\n let selectedTargetElements: PlaitElement[] | null = null;\n let hitTargetElement: PlaitElement | undefined = undefined;\n let isHitSelectedTarget: boolean | undefined = undefined;\n let pendingNodesG: SVGGElement | null = null;\n\n board.globalKeyDown = (event: KeyboardEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n if (isKeyHotkey('option', event)) {\n event.preventDefault();\n if (startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {\n pendingNodesG = drawPendingNodesG(board, activeElements, offsetX, offsetY);\n pendingNodesG && PlaitBoard.getElementActiveHost(board).append(pendingNodesG);\n }\n }\n }\n globalKeyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n if (pendingNodesG && startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {\n event.preventDefault();\n const currentElements = updatePoints(board, activeElements, offsetX, offsetY);\n PlaitBoard.getBoardContainer(board).classList.add('element-moving');\n cacheMovingElements(board, currentElements as PlaitElement[]);\n }\n }\n pendingNodesG?.remove();\n keyUp(event);\n };\n\n board.pointerDown = (event: PointerEvent) => {\n if (PlaitBoard.isReadonly(board) || !PlaitBoard.isPointer(board, PlaitPointerType.selection) || !isMainPointer(event)) {\n pointerDown(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n hitTargetElement = getHitElementByPoint(board, point, el => board.isMovable(el));\n selectedTargetElements = getSelectedTargetElements(board);\n isHitSelectedTarget = hitTargetElement && selectedTargetElements.includes(hitTargetElement);\n if (hitTargetElement && isHitSelectedTarget) {\n startPoint = point;\n activeElements = selectedTargetElements;\n activeElementsRectangle = getRectangleByElements(board, activeElements, true);\n } else if (hitTargetElement) {\n startPoint = point;\n const relatedElements = board.getRelatedFragment([], [hitTargetElement]);\n activeElements = [...getElementsInGroupByElement(board, hitTargetElement), ...relatedElements];\n activeElementsRectangle = getRectangleByElements(board, activeElements, true);\n } else {\n // 只有判定用户未击中元素之后才可以验证用户是否击中了已选元素所在的空白区域\n // Only after it is determined that the user has not hit the element can it be verified whether the user hit the blank area where the selected element is located.\n const targetRectangle = selectedTargetElements.length > 0 && getRectangleByElements(board, selectedTargetElements, false);\n const isHitInTargetRectangle = targetRectangle && RectangleClient.isPointInRectangle(targetRectangle, point);\n if (isHitInTargetRectangle) {\n startPoint = point;\n activeElements = selectedTargetElements;\n activeElementsRectangle = targetRectangle;\n }\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {\n if (!isPreventDefault) {\n isPreventDefault = true;\n }\n snapG?.remove();\n pendingNodesG?.remove();\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n offsetX = endPoint[0] - startPoint[0];\n offsetY = endPoint[1] - startPoint[1];\n const distance = distanceBetweenPointAndPoint(...endPoint, ...startPoint);\n if (distance > PRESS_AND_MOVE_BUFFER || getMovingElements(board).length > 0) {\n if (hitTargetElement && !isHitSelectedTarget && selectedTargetElements && selectedTargetElements.length > 0) {\n addSelectionWithTemporaryElements(board, []);\n hitTargetElement = undefined;\n selectedTargetElements = null;\n isHitSelectedTarget = undefined;\n }\n throttleRAF(board, 'with-moving', () => {\n if (!activeElementsRectangle) {\n return;\n }\n const newRectangle = {\n ...activeElementsRectangle,\n x: activeElementsRectangle.x + offsetX,\n y: activeElementsRectangle.y + offsetY\n };\n const activeRectangle = getRectangleByAngle(newRectangle, getSelectionAngle(activeElements));\n const ref = getSnapMovingRef(board, activeRectangle, activeElements);\n offsetX += ref.deltaX;\n offsetY += ref.deltaY;\n snapG = ref.snapG;\n snapG.classList.add(ACTIVE_MOVING_CLASS_NAME);\n PlaitBoard.getElementActiveHost(board).append(snapG);\n if (event.altKey) {\n pendingNodesG = drawPendingNodesG(board, activeElements, offsetX, offsetY);\n pendingNodesG && PlaitBoard.getElementActiveHost(board).append(pendingNodesG);\n } else {\n const currentElements = updatePoints(board, activeElements, offsetX, offsetY);\n PlaitBoard.getBoardContainer(board).classList.add('element-moving');\n cacheMovingElements(board, currentElements as PlaitElement[]);\n }\n });\n }\n }\n if (isPreventDefault) {\n // Prevent canvas scrolling behavior from being triggered during move\n event.preventDefault();\n }\n pointerMove(event);\n };\n\n board.globalPointerMove = (event: PointerEvent) => {\n if (startPoint) {\n const inPlaitBoardElement = isInPlaitBoard(board, event.x, event.y);\n if (!inPlaitBoardElement) {\n cancelMove(board);\n }\n }\n globalPointerMove(event);\n };\n\n board.globalPointerUp = event => {\n if (event.altKey && activeElements.length) {\n const validElements = getValidElements(board, activeElements);\n const rectangle = getRectangleByElements(board, validElements, false);\n duplicateElements(board, validElements, [rectangle.x + offsetX, rectangle.y + offsetY]);\n }\n isPreventDefault = false;\n hitTargetElement = undefined;\n selectedTargetElements = null;\n isHitSelectedTarget = undefined;\n if (startPoint) {\n cancelMove(board);\n }\n globalPointerUp(event);\n };\n\n function cancelMove(board: PlaitBoard) {\n snapG?.remove();\n pendingNodesG?.remove();\n startPoint = null;\n activeElementsRectangle = null;\n offsetX = 0;\n offsetY = 0;\n activeElements = [];\n if (isMovingElements(board)) {\n removeMovingElements(board);\n }\n MERGING.set(board, false);\n PlaitBoard.getBoardContainer(board).classList.remove('element-moving');\n }\n\n return withArrowMoving(board);\n}\n\nexport function withArrowMoving(board: PlaitBoard) {\n const { keyDown, keyUp } = board;\n board.keyDown = (event: KeyboardEvent) => {\n const selectedElements = getSelectedElements(board);\n if (!PlaitBoard.isReadonly(board) && selectedElements.length > 0 && (hotkeys.isArrow(event) || hotkeys.isExtendArrow(event))) {\n event.preventDefault();\n const isShift = event.shiftKey ? true : false;\n const offset = [0, 0];\n const buffer = isShift ? 10 : 1;\n switch (true) {\n case hotkeys.isMoveUp(event) || hotkeys.isExtendUp(event): {\n offset[1] = -buffer;\n break;\n }\n case hotkeys.isMoveDown(event) || hotkeys.isExtendDown(event): {\n offset[1] = buffer;\n break;\n }\n case hotkeys.isMoveBackward(event) || hotkeys.isExtendBackward(event): {\n offset[0] = -buffer;\n break;\n }\n case hotkeys.isMoveForward(event) || hotkeys.isExtendForward(event): {\n offset[0] = buffer;\n break;\n }\n }\n const targetElements = getSelectedTargetElements(board);\n throttleRAF(board, 'with-arrow-moving', () => {\n updatePoints(board, targetElements, offset[0], offset[1]);\n });\n }\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n MERGING.set(board, false);\n keyUp(event);\n };\n return board;\n}\n\nexport function getSelectedTargetElements(board: PlaitBoard) {\n const selectedElements = getSelectedElements(board);\n const movableElements = board.children.filter(item => board.isMovable(item));\n const targetElements = selectedElements.filter(element => {\n return movableElements.includes(element);\n });\n const relatedElements = board.getRelatedFragment([]);\n targetElements.push(...relatedElements);\n return targetElements;\n}\n\nexport function getValidElements(board: PlaitBoard, activeElements: PlaitElement[]) {\n const validElements = [...activeElements].filter(element => !PlaitGroupElement.isGroup(element) && PlaitElement.isRootElement(element));\n return validElements;\n}\n\nexport function updatePoints(board: PlaitBoard, activeElements: PlaitElement[], offsetX: number, offsetY: number) {\n const validElements = getValidElements(board, activeElements);\n const currentElements = validElements.map(element => {\n const points = element.points || [];\n const newPoints = points.map(p => [p[0] + offsetX, p[1] + offsetY]) as Point[];\n const index = NODE_TO_INDEX.get(element as PlaitElement) as number;\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n [index]\n );\n MERGING.set(board, true);\n return PlaitNode.get(board, [index]);\n });\n return currentElements;\n}\n\nexport function drawPendingNodesG(board: PlaitBoard, activeElements: PlaitElement[], offsetX: number, offsetY: number) {\n let pendingNodesG: SVGElement | null = null;\n const elements: PlaitElement[] = [];\n const validElements = getValidElements(board, activeElements);\n validElements.forEach(element => {\n depthFirstRecursion(\n element,\n node => {\n elements.push(node);\n },\n () => true\n );\n });\n elements.forEach(item => {\n let rectangle = board.getRectangle(item);\n if (rectangle) {\n rectangle = {\n x: rectangle.x + offsetX,\n y: rectangle.y + offsetY,\n width: rectangle.width,\n height: rectangle.height\n };\n const movingG = drawRectangle(board, rectangle!, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n if (!pendingNodesG) {\n pendingNodesG = createG();\n pendingNodesG.classList.add(ACTIVE_MOVING_CLASS_NAME);\n }\n const angle = getAngleByElement(item);\n angle && setAngleForG(movingG, RectangleClient.getCenterPoint(rectangle), angle);\n pendingNodesG.append(movingG);\n }\n });\n return pendingNodesG;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { WithPluginOptions } from '../interfaces/plugin';\n\nexport interface PlaitOptionsBoard extends PlaitBoard {\n getPluginOptions: <K = WithPluginOptions>(key: string) => K;\n setPluginOptions: <K = WithPluginOptions>(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 { PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';\nimport { WritableClipboardContext, WritableClipboardType, WritableClipboardOperationType, addOrCreateClipboardContext } from '../utils';\n\nexport function withRelatedFragment(board: PlaitBoard) {\n const { buildFragment } = board;\n\n board.buildFragment = (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => {\n let relatedFragment = board.getRelatedFragment(originData || []);\n if (relatedFragment) {\n if (originData?.length) {\n relatedFragment = relatedFragment.filter(item => !originData.map(element => element.id).includes(item.id));\n }\n if (relatedFragment.length) {\n const addition: WritableClipboardContext = {\n text: '',\n type: WritableClipboardType.elements,\n elements: relatedFragment\n };\n clipboardContext = addOrCreateClipboardContext(clipboardContext, addition);\n }\n }\n return buildFragment(clipboardContext, rectangle, operationType, originData);\n };\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { isMainPointer } from '../utils/dom/common';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport {\n cacheSelectedElements,\n clearSelectedElement,\n getHitElementsBySelection,\n getSelectedElements,\n isHitElement,\n removeSelectedElement\n} from '../utils/selected-element';\nimport { PlaitElement, PlaitPointerType, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR } from '../interfaces';\nimport { ATTACHED_ELEMENT_CLASS_NAME } from '../constants/selection';\nimport {\n clearSelectionMoving,\n deleteTemporaryElements,\n drawRectangle,\n getTemporaryElements,\n isDragging,\n isHandleSelection,\n isSelectionMoving,\n setSelectionMoving,\n throttleRAF,\n toHostPoint,\n toViewBoxPoint,\n setSelectedElementsWithGroup,\n hasSetSelectionOperation,\n getSelectionOptions,\n setSelectionOptions,\n distanceBetweenPointAndPoint,\n isMobileDeviceEvent\n} from '../utils';\nimport { Selection } from '../interfaces/selection';\nimport { DRAG_SELECTION_PRESS_AND_MOVE_BUFFER } from '../constants';\n\nexport function withSelection(board: PlaitBoard) {\n const { pointerDown, pointerUp, pointerMove, globalPointerUp, onChange, afterChange, drawSelectionRectangle } = board;\n let start: Point | null = null;\n let end: Point | null = null;\n let selectionMovingG: SVGGElement;\n let selectionRectangleG: SVGGElement | null;\n let previousSelectedElements: PlaitElement[];\n let isShift = false;\n let timerId: ReturnType<typeof setTimeout> | null = null;\n let pointerDownEvent: PointerEvent | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!isShift && event.shiftKey) {\n isShift = true;\n }\n if (isShift && !event.shiftKey) {\n isShift = false;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const isHitTarget = isHitElement(board, point);\n const options = getSelectionOptions(board);\n if (\n PlaitBoard.isPointer(board, PlaitPointerType.selection) &&\n !isHitTarget &&\n options.isMultipleSelection &&\n !options.isDisabledSelection\n ) {\n // start drag selection\n if (isMobileDeviceEvent(event)) {\n timerId = setTimeout(() => {\n start = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n timerId = null;\n }, 120);\n } else {\n start = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n }\n }\n pointerDownEvent = event;\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (\n timerId &&\n pointerDownEvent &&\n distanceBetweenPointAndPoint(pointerDownEvent.x, pointerDownEvent.y, event.x, event.y) > DRAG_SELECTION_PRESS_AND_MOVE_BUFFER\n ) {\n clearTimeout(timerId);\n timerId = null;\n }\n if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && start) {\n const movedTarget = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const rectangle = RectangleClient.getRectangleByPoints([start, movedTarget]);\n selectionMovingG?.remove();\n end = movedTarget;\n throttleRAF(board, 'with-selection', () => {\n if (start && end) {\n Transforms.setSelection(board, { anchor: start, focus: end });\n }\n });\n setSelectionMoving(board);\n selectionMovingG = drawRectangle(board, rectangle, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n PlaitBoard.getElementActiveHost(board).append(selectionMovingG);\n }\n pointerMove(event);\n };\n\n // handle the end of click select\n board.pointerUp = (event: PointerEvent) => {\n const isSetSelectionPointer =\n PlaitBoard.isPointer(board, PlaitPointerType.selection) || PlaitBoard.isPointer(board, PlaitPointerType.hand);\n const isSkip = !isMainPointer(event) || isDragging(board) || !isSetSelectionPointer;\n if (isSkip) {\n pointerUp(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const selection = { anchor: point, focus: point };\n Transforms.setSelection(board, selection);\n pointerUp(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (start && end) {\n selectionMovingG?.remove();\n clearSelectionMoving(board);\n Transforms.setSelection(board, { anchor: start, focus: end });\n }\n const options = getSelectionOptions(board);\n if (PlaitBoard.isFocus(board) && !options.isPreventClearSelection) {\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 start = null;\n end = null;\n if (timerId) {\n clearTimeout(timerId);\n timerId = null;\n }\n pointerDownEvent = null;\n globalPointerUp(event);\n };\n\n board.onChange = () => {\n const options = getSelectionOptions(board);\n if (options.isDisabledSelection) {\n clearSelectedElement(board);\n }\n // remove selected element if include\n board.operations.forEach((op) => {\n if (op.type === 'remove_node') {\n removeSelectedElement(board, op.node, true);\n }\n });\n if (isHandleSelection(board) && hasSetSelectionOperation(board)) {\n try {\n if (!isShift) {\n selectionRectangleG?.remove();\n }\n const temporaryElements = getTemporaryElements(board);\n if (temporaryElements) {\n cacheSelectedElements(board, [...temporaryElements]);\n } else {\n let elements = getHitElementsBySelection(board);\n if (!options.isMultipleSelection && elements.length > 1) {\n elements = [elements[0]];\n }\n const isHitElementWithGroup = elements.some((item) => item.groupId);\n const selectedElements = getSelectedElements(board);\n if (isHitElementWithGroup) {\n setSelectedElementsWithGroup(board, elements, isShift);\n } else {\n if (board.selection && Selection.isCollapsed(board.selection)) {\n const element = board.getOneHitElement(elements);\n if (element) {\n elements = [element];\n }\n }\n if (isShift) {\n const newElements = [...selectedElements];\n if (board.selection && Selection.isCollapsed(board.selection)) {\n elements.forEach((element) => {\n if (newElements.includes(element)) {\n newElements.splice(newElements.indexOf(element), 1);\n } else {\n newElements.push(element);\n }\n });\n cacheSelectedElements(board, newElements);\n } else {\n elements.forEach((element) => {\n if (!newElements.includes(element)) {\n newElements.push(element);\n }\n });\n cacheSelectedElements(board, [...newElements]);\n }\n } else {\n cacheSelectedElements(board, [...elements]);\n }\n }\n }\n const newElements = getSelectedElements(board);\n previousSelectedElements = [...newElements];\n deleteTemporaryElements(board);\n if (!isSelectionMoving(board)) {\n selectionRectangleG?.remove();\n if (newElements.length > 1) {\n selectionRectangleG = board.drawSelectionRectangle();\n PlaitBoard.getElementActiveHost(board).append(selectionRectangleG!);\n }\n }\n } catch (error) {\n console.error(error);\n }\n }\n onChange();\n };\n\n board.afterChange = () => {\n if (isHandleSelection(board) && !hasSetSelectionOperation(board)) {\n try {\n const currentSelectedElements = getSelectedElements(board);\n if (currentSelectedElements.length && currentSelectedElements.length > 1) {\n if (\n previousSelectedElements &&\n (currentSelectedElements.length !== previousSelectedElements.length ||\n currentSelectedElements.some((c, index) => c !== previousSelectedElements[index]))\n ) {\n selectionRectangleG?.remove();\n selectionRectangleG = board.drawSelectionRectangle();\n PlaitBoard.getElementActiveHost(board).append(selectionRectangleG!);\n previousSelectedElements = [...currentSelectedElements];\n }\n } else {\n selectionRectangleG?.remove();\n }\n } catch (error) {\n console.error(error);\n }\n }\n afterChange();\n };\n\n setSelectionOptions(board, {\n isMultipleSelection: true,\n isDisabledSelection: false,\n isPreventClearSelection: false\n });\n\n return board;\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.length && board.operations.some(op => op.type === 'set_viewport');\n const isOnlySetSelection = board.operations.length && board.operations.every(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 { PlaitBoardOptions, PlaitElement, PlaitPlugin } from '../../interfaces';\nimport { createBoard } from '../../plugins/create-board';\nimport { KEY_TO_ELEMENT_MAP } from '../../utils';\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 KEY_TO_ELEMENT_MAP.set(board, new Map());\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 * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { IS_MAC } from '../../utils/dom/environment';\nimport { ModifierKeys } from '../test-element';\n\n/** Used to generate unique IDs for events. */\nlet uniqueIds = 0;\n\n/**\n * Creates a browser MouseEvent with the specified options.\n * @docs-private\n */\nexport function createMouseEvent(\n type: string,\n clientX = 0,\n clientY = 0,\n offsetX = 1,\n offsetY = 1,\n button = 0,\n modifiers: ModifierKeys = {}\n) {\n // Note: We cannot determine the position of the mouse event based on the screen\n // because the dimensions and position of the browser window are not available\n // To provide reasonable `screenX` and `screenY` coordinates, we simply use the\n // client coordinates as if the browser is opened in fullscreen.\n const screenX = clientX;\n const screenY = clientY;\n\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n detail: 0,\n relatedTarget: null,\n screenX,\n screenY,\n clientX,\n clientY,\n ctrlKey: modifiers.control,\n altKey: modifiers.alt,\n shiftKey: modifiers.shift,\n metaKey: modifiers.meta,\n button: button,\n buttons: 1\n });\n\n // The `MouseEvent` constructor doesn't allow us to pass these properties into the constructor.\n // Override them to `1`, because they're used for fake screen reader event detection.\n if (offsetX != null) {\n defineReadonlyEventProperty(event, 'offsetX', offsetX);\n }\n\n if (offsetY != null) {\n defineReadonlyEventProperty(event, 'offsetY', offsetY);\n }\n\n return event;\n}\n\n/**\n * Creates a browser `PointerEvent` with the specified options. Pointer events\n * by default will appear as if they are the primary pointer of their type.\n * https://www.w3.org/TR/pointerevents2/#dom-pointerevent-isprimary.\n *\n * For example, if pointer events for a multi-touch interaction are created, the non-primary\n * pointer touches would need to be represented by non-primary pointer events.\n *\n * @docs-private\n */\nexport function createPointerEvent(\n type: string,\n clientX = 0,\n clientY = 0,\n offsetX?: number,\n offsetY?: number,\n options: PointerEventInit = { isPrimary: true }\n) {\n const event = new PointerEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n clientX,\n clientY,\n ...options\n });\n\n if (offsetX != null) {\n defineReadonlyEventProperty(event, 'offsetX', offsetX);\n }\n\n if (offsetY != null) {\n defineReadonlyEventProperty(event, 'offsetY', offsetY);\n }\n\n return event;\n}\n\n/**\n * Creates a browser TouchEvent with the specified pointer coordinates.\n * @docs-private\n */\nexport function createTouchEvent(type: string, pageX = 0, pageY = 0, clientX = 0, clientY = 0) {\n // We cannot use the `TouchEvent` or `Touch` because Firefox and Safari lack support.\n const event = document.createEvent('UIEvent');\n const touchDetails = { pageX, pageY, clientX, clientY, identifier: uniqueIds++ };\n\n // TS3.6 removes the initUIEvent method and suggests porting to \"new UIEvent()\".\n (event as any).initUIEvent(type, true, true, window, 0);\n\n // Most of the browsers don't have a \"initTouchEvent\" method that can be used to define\n // the touch details.\n defineReadonlyEventProperty(event, 'touches', [touchDetails]);\n defineReadonlyEventProperty(event, 'targetTouches', [touchDetails]);\n defineReadonlyEventProperty(event, 'changedTouches', [touchDetails]);\n\n return event;\n}\n\n/**\n * Creates a keyboard event with the specified key and modifiers.\n * @docs-private\n */\nexport function createKeyboardEvent(type: string, keyCode: number = 0, key: string = '', modifiers: ModifierKeys = {}) {\n return new KeyboardEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n keyCode: keyCode,\n key: key,\n shiftKey: modifiers.shift,\n metaKey: modifiers.meta,\n altKey: modifiers.alt,\n ctrlKey: modifiers.control\n });\n}\n\n/**\n * Creates a fake event object with any desired event type.\n * @docs-private\n */\nexport function createFakeEvent(type: string, bubbles = false, cancelable = true, composed = true) {\n return new Event(type, { bubbles, cancelable, composed });\n}\n\n/**\n * Defines a readonly property on the given event object. Readonly properties on an event object\n * are always set as configurable as that matches default readonly properties for DOM event objects.\n */\nfunction defineReadonlyEventProperty(event: Event, propertyName: string, value: any) {\n Object.defineProperty(event, propertyName, { get: () => value, configurable: true });\n}\n\nexport function createModModifierKeys() {\n const modifiers = IS_MAC ? { meta: true } : { control: true };\n return modifiers;\n}\n","/*\n * Public API Surface of plait\n */\nexport * from './constants';\nexport * from './core/element/context-change';\nexport * from './core/element/element-flavour';\nexport * from './core/element/element-ref';\nexport * from './core/list-render';\nexport * from './interfaces';\nexport * from './transforms';\nexport * from './utils';\nexport * from './context';\nexport * from './plugins';\nexport * from './testing';\nexport * from './utils/debug';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ViewportTransforms"],"mappings":"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"}
1
+ {"version":3,"file":"plait-core.mjs","sources":["../../../packages/core/src/constants/keycodes.ts","../../../packages/core/src/constants/cursor.ts","../../../packages/core/src/constants/selection.ts","../../../packages/core/src/constants/zoom.ts","../../../packages/core/src/constants/index.ts","../../../packages/core/src/core/element/context-change.ts","../../../packages/core/src/utils/weak-maps.ts","../../../packages/core/src/utils/helper.ts","../../../packages/core/src/interfaces/viewport.ts","../../../packages/core/src/interfaces/path.ts","../../../packages/core/src/interfaces/node.ts","../../../packages/core/src/transforms/general.ts","../../../packages/core/src/interfaces/rectangle-client.ts","../../../packages/core/src/utils/math.ts","../../../packages/core/src/utils/board.ts","../../../packages/core/src/utils/dom/common.ts","../../../packages/core/src/utils/dom/foreign.ts","../../../packages/core/src/utils/dom/environment.ts","../../../packages/core/src/utils/environment.ts","../../../packages/core/src/utils/history.ts","../../../packages/core/src/utils/hotkeys.ts","../../../packages/core/src/utils/id-creator.ts","../../../packages/core/src/utils/tree.ts","../../../packages/core/src/interfaces/selection.ts","../../../packages/core/src/interfaces/element.ts","../../../packages/core/src/utils/position.ts","../../../packages/core/src/utils/debug.ts","../../../packages/core/src/interfaces/plugin.ts","../../../packages/core/src/utils/selected-element.ts","../../../packages/core/src/utils/drawing/rectangle.ts","../../../packages/core/src/utils/drawing/arrow.ts","../../../packages/core/src/utils/drawing/circle.ts","../../../packages/core/src/utils/drawing/line.ts","../../../packages/core/src/transforms/viewport.ts","../../../packages/core/src/transforms/theme.ts","../../../packages/core/src/transforms/board.ts","../../../packages/core/src/utils/to-point.ts","../../../packages/core/src/utils/viewport.ts","../../../packages/core/src/transforms/node.ts","../../../packages/core/src/utils/common.ts","../../../packages/core/src/utils/dnd.ts","../../../packages/core/src/utils/moving-element.ts","../../../packages/core/src/utils/to-image.ts","../../../packages/core/src/utils/clipboard/types.ts","../../../packages/core/src/utils/clipboard/common.ts","../../../packages/core/src/utils/clipboard/data-transfer.ts","../../../packages/core/src/utils/clipboard/navigator-clipboard.ts","../../../packages/core/src/utils/clipboard/clipboard.ts","../../../packages/core/src/utils/selection.ts","../../../packages/core/src/utils/group.ts","../../../packages/core/src/utils/fragment.ts","../../../packages/core/src/utils/snap/snap.ts","../../../packages/core/src/utils/z-index.ts","../../../packages/core/src/utils/pointer.ts","../../../packages/core/src/transforms/group.ts","../../../packages/core/src/transforms/selection.ts","../../../packages/core/src/transforms/z-index.ts","../../../packages/core/src/transforms/element.ts","../../../packages/core/src/transforms/index.ts","../../../packages/core/src/utils/angle.ts","../../../packages/core/src/utils/element.ts","../../../packages/core/src/interfaces/theme.ts","../../../packages/core/src/interfaces/board.ts","../../../packages/core/src/interfaces/pointer.ts","../../../packages/core/src/interfaces/custom-types.ts","../../../packages/core/src/interfaces/operation.ts","../../../packages/core/src/interfaces/point.ts","../../../packages/core/src/interfaces/history.ts","../../../packages/core/src/interfaces/direction.ts","../../../packages/core/src/interfaces/group.ts","../../../packages/core/src/utils/iterable.ts","../../../packages/core/src/differs/default_iterable_differ.ts","../../../packages/core/src/core/list-render.ts","../../../packages/core/src/core/element/element-flavour.ts","../../../packages/core/src/context.ts","../../../packages/core/src/interfaces/path-ref.ts","../../../packages/core/src/plugins/create-board.ts","../../../packages/core/src/plugins/with-board.ts","../../../packages/core/src/utils/mobile.ts","../../../packages/core/src/plugins/with-hand.ts","../../../packages/core/src/plugins/with-history.ts","../../../packages/core/src/plugins/with-hotkey.ts","../../../packages/core/src/utils/snap/snap-moving.ts","../../../packages/core/src/plugins/with-moving.ts","../../../packages/core/src/plugins/with-options.ts","../../../packages/core/src/plugins/with-related-fragment.ts","../../../packages/core/src/plugins/with-selection.ts","../../../packages/core/src/plugins/with-viewport.ts","../../../packages/core/src/testing/core/create-board.ts","../../../packages/core/src/testing/core/fake-weak-map.ts","../../../packages/core/src/testing/fake-events/event-objects.ts","../../../packages/core/src/public-api.ts","../../../packages/core/src/plait-core.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const MAC_ENTER = 3;\nexport const BACKSPACE = 8;\nexport const TAB = 9;\nexport const NUM_CENTER = 12;\nexport const ENTER = 13;\nexport const SHIFT = 16;\nexport const CONTROL = 17;\nexport const ALT = 18;\nexport const PAUSE = 19;\nexport const CAPS_LOCK = 20;\nexport const ESCAPE = 27;\nexport const SPACE = 32;\nexport const PAGE_UP = 33;\nexport const PAGE_DOWN = 34;\nexport const END = 35;\nexport const HOME = 36;\nexport const LEFT_ARROW = 37;\nexport const UP_ARROW = 38;\nexport const RIGHT_ARROW = 39;\nexport const DOWN_ARROW = 40;\nexport const PLUS_SIGN = 43;\nexport const PRINT_SCREEN = 44;\nexport const INSERT = 45;\nexport const DELETE = 46;\nexport const ZERO = 48;\nexport const ONE = 49;\nexport const TWO = 50;\nexport const THREE = 51;\nexport const FOUR = 52;\nexport const FIVE = 53;\nexport const SIX = 54;\nexport const SEVEN = 55;\nexport const EIGHT = 56;\nexport const NINE = 57;\nexport const FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\nexport const FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\nexport const QUESTION_MARK = 63;\nexport const AT_SIGN = 64;\nexport const A = 65;\nexport const B = 66;\nexport const C = 67;\nexport const D = 68;\nexport const E = 69;\nexport const F = 70;\nexport const G = 71;\nexport const H = 72;\nexport const I = 73;\nexport const J = 74;\nexport const K = 75;\nexport const L = 76;\nexport const M = 77;\nexport const N = 78;\nexport const O = 79;\nexport const P = 80;\nexport const Q = 81;\nexport const R = 82;\nexport const S = 83;\nexport const T = 84;\nexport const U = 85;\nexport const V = 86;\nexport const W = 87;\nexport const X = 88;\nexport const Y = 89;\nexport const Z = 90;\nexport const META = 91; // WIN_KEY_LEFT\nexport const MAC_WK_CMD_LEFT = 91;\nexport const MAC_WK_CMD_RIGHT = 93;\nexport const CONTEXT_MENU = 93;\nexport const NUMPAD_ZERO = 96;\nexport const NUMPAD_ONE = 97;\nexport const NUMPAD_TWO = 98;\nexport const NUMPAD_THREE = 99;\nexport const NUMPAD_FOUR = 100;\nexport const NUMPAD_FIVE = 101;\nexport const NUMPAD_SIX = 102;\nexport const NUMPAD_SEVEN = 103;\nexport const NUMPAD_EIGHT = 104;\nexport const NUMPAD_NINE = 105;\nexport const NUMPAD_MULTIPLY = 106;\nexport const NUMPAD_PLUS = 107;\nexport const NUMPAD_MINUS = 109;\nexport const NUMPAD_PERIOD = 110;\nexport const NUMPAD_DIVIDE = 111;\nexport const F1 = 112;\nexport const F2 = 113;\nexport const F3 = 114;\nexport const F4 = 115;\nexport const F5 = 116;\nexport const F6 = 117;\nexport const F7 = 118;\nexport const F8 = 119;\nexport const F9 = 120;\nexport const F10 = 121;\nexport const F11 = 122;\nexport const F12 = 123;\nexport const NUM_LOCK = 144;\nexport const SCROLL_LOCK = 145;\nexport const FIRST_MEDIA = 166;\nexport const FF_MINUS = 173;\nexport const MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\nexport const VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\nexport const VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\nexport const FF_MUTE = 181;\nexport const FF_VOLUME_DOWN = 182;\nexport const LAST_MEDIA = 183;\nexport const FF_VOLUME_UP = 183;\nexport const SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\nexport const EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\nexport const COMMA = 188;\nexport const DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\nexport const PERIOD = 190;\nexport const SLASH = 191;\nexport const APOSTROPHE = 192;\nexport const TILDE = 192;\nexport const OPEN_SQUARE_BRACKET = 219;\nexport const BACKSLASH = 220;\nexport const CLOSE_SQUARE_BRACKET = 221;\nexport const SINGLE_QUOTE = 222;\nexport const MAC_META = 224;\n","export enum ResizeCursorClass {\n ew = 'ew-resize',\n ns = 'ns-resize',\n nesw = 'nesw-resize',\n nwse = 'nwse-resize'\n}\n\nexport enum CursorClass {\n crosshair = 'crosshair'\n}\n\nexport const RESIZE_CURSORS = [ResizeCursorClass.ns, ResizeCursorClass.nesw, ResizeCursorClass.ew, ResizeCursorClass.nwse];\n","export const ATTACHED_ELEMENT_CLASS_NAME = 'plait-board-attached';\n\nexport const ACTIVE_STROKE_WIDTH = 1;\n\nexport const SNAPPING_STROKE_WIDTH = 2;\n\nexport const SELECTION_RECTANGLE_CLASS_NAME = 'selection-rectangle';\n\nexport const SELECTION_RECTANGLE_BOUNDING_CLASS_NAME = 'selection-rectangle-bounding';\n","export const ZOOM_STEP = 0.1;\nexport const MIN_ZOOM = 0.1;\nexport const MAX_ZOOM = 4;\n","export * from './keycodes';\nexport * from './cursor';\nexport * from './selection';\nexport * from './zoom';\n\nexport const HOST_CLASS_NAME = 'plait-board-container';\n\nexport const ACTIVE_MOVING_CLASS_NAME = 'active-with-moving';\n\nexport const ROTATE_HANDLE_CLASS_NAME = 'rotate-handle';\n\nexport const RESIZE_HANDLE_CLASS_NAME = 'resize-handle';\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;\n\nexport const PRESS_AND_MOVE_BUFFER = 3;\n\nexport const DRAG_SELECTION_PRESS_AND_MOVE_BUFFER = 10;\n\nexport const HIT_DISTANCE_BUFFER = 5;\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 { RoughSVG } from 'roughjs/bin/svg';\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';\nimport { PlaitElementRef } from '../core/element/element-ref';\nimport { PlaitBoardContext } from '../context';\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 KEY_TO_ELEMENT_MAP = new WeakMap<PlaitBoard, Map<String, PlaitElement>>();\n\nexport const NODE_TO_G = new WeakMap<PlaitNode, SVGGElement>();\n\nexport const NODE_TO_CONTAINER_G = new WeakMap<PlaitNode, SVGGElement>();\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_AFTER_CHANGE = new WeakMap<PlaitBoard, () => void>();\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_CONTEXT = new WeakMap<PlaitBoard, PlaitBoardContext>();\n\nexport const IS_BOARD_ALIVE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ELEMENT_HOST = new WeakMap<\n PlaitBoard,\n {\n lowerHost: SVGGElement;\n host: SVGGElement;\n upperHost: SVGGElement;\n activeHost: SVGGElement;\n container: HTMLElement;\n viewportContainer: HTMLElement;\n }\n>();\n\nexport const BOARD_TO_SELECTED_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_POINT_IN_BOARD = new WeakMap<PlaitBoard, Point>();\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, { elements: PlaitElement[]; timeoutId: any }>();\n\nexport const BOARD_TO_MOVING_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const PATH_REFS: WeakMap<PlaitBoard, Set<PathRef>> = new WeakMap();\n\nexport const ELEMENT_TO_REF: WeakMap<PlaitElement, PlaitElementRef> = new WeakMap();\n","import { PlaitElement } from '../interfaces';\n\nexport function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n\n/**\n * get {x,y} 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\nexport const RgbaToHEX = (Rgb: string, opacity: number) => {\n return Rgb + Math.floor(opacity * 255).toString(16);\n};\n\nexport function isContextmenu(event: MouseEvent) {\n return event.button === 2;\n}\n\nexport function uniqueById(elements: PlaitElement[]) {\n const uniqueMap = new Map();\n\n elements.forEach(item => {\n if (!uniqueMap.has(item.id)) {\n uniqueMap.set(item.id, item);\n }\n });\n\n return Array.from(uniqueMap.values());\n}\n\nexport const findLastIndex = <T>(\n array: readonly T[],\n cb: (element: T, index: number, array: readonly T[]) => boolean,\n fromIndex: number = array.length - 1\n) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\n let index = fromIndex + 1;\n while (--index > -1) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\n\nexport const findIndex = <T>(\n array: readonly T[],\n cb: (element: T, index: number, array: readonly T[]) => boolean,\n fromIndex: number = 0\n) => {\n // fromIndex = 2\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\n let index = fromIndex - 1;\n while (++index < array.length) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\n\nexport const isIndicesContinuous = (indexes: number[]): boolean => {\n indexes.sort((a, b) => a - b);\n for (let i = 1; i < indexes.length; i++) {\n if (indexes[i] !== indexes[i - 1] + 1) {\n return false;\n }\n }\n return true;\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 { 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 hasPrevious(path: Path): boolean {\n return path[path.length - 1] > 0;\n },\n previous(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the previous path of a root path [${path}], because it has no previous index.`);\n }\n\n const last = path[path.length - 1];\n\n if (last <= 0) {\n throw new Error(`Cannot get the previous path of a first child path [${path}] because it would result in a negative index.`);\n }\n\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 if (!path) return null;\n // PERF: use destructing instead of immer\n const p = [...path];\n\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (path.length === 0) {\n return p;\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 p;\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice();\n\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","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 first(board: PlaitBoard, path: Path) {\n const p = path.slice();\n let n = PlaitNode.get(board, p);\n if (!n.children || !board.isExpanded(n)) {\n return n;\n }\n while (n) {\n if (n.children!.length === 0) {\n break;\n } else {\n n = n.children![0];\n p.push(0);\n }\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 = newProperties;\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 { rotate } from '../utils';\nimport { Point } from './point';\n\nexport interface RectangleClient {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * [x, y] x,y between 0 and 1\n * represents a point in the rectangle\n */\nexport type PointOfRectangle = [number, number];\n\nexport const RectangleClient = {\n isHit: (origin: RectangleClient, target: RectangleClient) => {\n return RectangleClient.isHitX(origin, target) && RectangleClient.isHitY(origin, target);\n },\n isHitX: (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 // float calculate error( eg: 1.4210854715202004e-14 > 0)\n if (Math.floor(maxX - minX - origin.width - target.width) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n isHitY: (origin: RectangleClient, target: RectangleClient) => {\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(maxY - minY - origin.height - target.height) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n getPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height]\n ] as [Point, Point];\n },\n getRectangleByCenterPoint(point: Point, width: number, height: number) {\n return RectangleClient.getRectangleByPoint([point[0] - width / 2, point[1] - height / 2], width, height);\n },\n getRectangleByPoint(point: Point, width: number, height: number): RectangleClient {\n return {\n x: point[0],\n y: point[1],\n width,\n height\n };\n },\n getRectangleByPoints(points: Point[] | Point[][]): RectangleClient {\n if (isPointArray(points)) {\n points = [points];\n }\n let xMin = Infinity;\n let yMin = Infinity;\n let xMax = -Infinity;\n let yMax = -Infinity;\n for (const point of points) {\n const xArray = point.map(ele => ele[0]);\n const yArray = point.map(ele => ele[1]);\n xMin = Math.min(xMin, ...xArray);\n yMin = Math.min(yMin, ...yArray);\n xMax = Math.max(xMax, ...xArray);\n yMin = Math.min(yMin, ...yArray);\n yMax = Math.max(yMax, ...yArray);\n }\n const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n return rect;\n },\n getCornerPointsByPoints(points: 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 return [\n [xMin, yMin],\n [xMax, yMin],\n [xMax, yMax],\n [xMin, yMax]\n ] as [Point, Point, Point, Point];\n },\n getOutlineRectangle: (rectangle: RectangleClient, offset: number) => {\n return {\n x: rectangle.x + offset,\n y: rectangle.y + offset,\n width: rectangle.width - offset * 2,\n height: rectangle.height - offset * 2\n };\n },\n inflate: (rectangle: RectangleClient, delta: number) => {\n const half = delta / 2;\n return {\n x: rectangle.x - half,\n y: rectangle.y - half,\n width: rectangle.width + half * 2,\n height: rectangle.height + half * 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 getCornerPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ] as [Point, Point, Point, Point];\n },\n getCenterPoint: (rectangle: RectangleClient) => {\n return [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2] as Point;\n },\n getCenterPointByPoints: (points: Point[]) => {\n return RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(points));\n },\n getEdgeCenterPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ] as [Point, Point, Point, Point];\n },\n getConnectionPoint: (rectangle: RectangleClient, point: PointOfRectangle) => {\n return [rectangle.x + rectangle.width * point[0], rectangle.y + rectangle.height * point[1]] as Point;\n },\n expand(rectangle: RectangleClient, left: number, top: number = left, right: number = left, bottom: number = top) {\n return {\n x: rectangle.x - left,\n y: rectangle.y - top,\n width: rectangle.width + left + right,\n height: rectangle.height + top + bottom\n };\n },\n getGapCenter(rectangle1: RectangleClient, rectangle2: RectangleClient, isHorizontal: boolean) {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n const align = [rectangle1[axis], rectangle1[axis] + rectangle1[side], rectangle2[axis], rectangle2[axis] + rectangle2[side]];\n const sortArr = align.sort((a, b) => a - b);\n return (sortArr[1] + sortArr[2]) / 2;\n },\n isPointInRectangle(rectangle: RectangleClient, point: Point) {\n const x = point[0],\n y = point[1];\n return x > rectangle.x && x < rectangle.x + rectangle.width && y > rectangle.y && y < rectangle.y + rectangle.height;\n },\n getBoundingRectangle(rectangles: RectangleClient[]): RectangleClient {\n if (rectangles.length === 0) {\n throw new Error('rectangles can not be empty array');\n }\n let minX = Number.MAX_VALUE;\n let minY = Number.MAX_VALUE;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n rectangles.forEach(rect => {\n minX = Math.min(minX, rect.x);\n minY = Math.min(minY, rect.y);\n maxX = Math.max(maxX, rect.x + rect.width);\n maxY = Math.max(maxY, rect.y + rect.height);\n });\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n};\n\nfunction isPointArray(data: Point[] | Point[][]): data is Point[] {\n return (\n Array.isArray(data) &&\n data.every(item => Array.isArray(item) && item.length === 2 && typeof item[0] === 'number' && typeof item[1] === 'number')\n );\n}\n","import { Point } from '../interfaces';\nimport { 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 getNearestPointBetweenPointAndSegment(point: Point, linePoints: [Point, Point]) {\n const x = point[0],\n y = point[1],\n x1 = linePoints[0][0],\n y1 = linePoints[0][1],\n x2 = linePoints[1][0],\n y2 = linePoints[1][1];\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 return [xx, yy] as Point;\n}\n\nexport function distanceBetweenPointAndSegments(points: Point[], point: Point) {\n const len = points.length;\n let distance = Infinity;\n if (points.length === 1) {\n return distanceBetweenPointAndPoint(...points[0], ...point);\n }\n for (let i = 0; i < len - 1; i++) {\n const p = points[i];\n const p2 = points[i + 1];\n const currentDistance = distanceBetweenPointAndSegment(point[0], point[1], p[0], p[1], p2[0], p2[1]);\n if (currentDistance < distance) {\n distance = currentDistance;\n }\n }\n return distance;\n}\n\nexport function getNearestPointBetweenPointAndSegments(point: Point, points: Point[], isClose: Boolean = true) {\n const len = points.length;\n let distance = Infinity;\n let result: Point = point;\n\n for (let i = 0; i < len; i++) {\n const p = points[i];\n if (i === len - 1 && !isClose) continue;\n const p2 = i === len - 1 ? points[0] : points[i + 1];\n const currentDistance = distanceBetweenPointAndSegment(point[0], point[1], p[0], p[1], p2[0], p2[1]);\n if (currentDistance < distance) {\n distance = currentDistance;\n result = getNearestPointBetweenPointAndSegment(point, [p, p2]);\n }\n }\n return result;\n}\n\nexport function getNearestPointBetweenPointAndEllipse(point: Point, center: Point, rx: number, ry: number): Point {\n const rectangleClient = {\n x: center[0] - rx,\n y: center[1] - ry,\n height: ry * 2,\n width: rx * 2\n };\n // https://stackoverflow.com/a/46007540/232122\n const px = Math.abs(point[0] - rectangleClient.x - rectangleClient.width / 2);\n const py = Math.abs(point[1] - rectangleClient.y - rectangleClient.height / 2);\n\n let tx = 0.707;\n let ty = 0.707;\n\n const a = Math.abs(rectangleClient.width) / 2;\n const b = Math.abs(rectangleClient.height) / 2;\n\n [0, 1, 2, 3].forEach((x) => {\n const xx = a * tx;\n const yy = b * ty;\n\n const ex = ((a * a - b * b) * tx ** 3) / a;\n const ey = ((b * b - a * a) * ty ** 3) / b;\n\n const rx = xx - ex;\n const ry = yy - ey;\n\n const qx = px - ex;\n const qy = py - ey;\n\n const r = Math.hypot(ry, rx);\n const q = Math.hypot(qy, qx);\n\n tx = Math.min(1, Math.max(0, ((qx * r) / q + ex) / a));\n ty = Math.min(1, Math.max(0, ((qy * r) / q + ey) / b));\n const t = Math.hypot(ty, tx);\n tx /= t;\n ty /= t;\n });\n const signX = point[0] > center[0] ? 1 : -1;\n const signY = point[1] > center[1] ? 1 : -1;\n\n return [center[0] + a * tx * signX, center[1] + b * ty * signY];\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\nexport const isLineHitLine = (a: Point, b: Point, c: Point, d: Point): boolean => {\n if (Point.isEquals(a, b) && Point.isEquals(c, d) && !Point.isEquals(a, c)) {\n return false;\n }\n\n const crossProduct = (v1: Point, v2: Point) => v1[0] * v2[1] - v1[1] * v2[0];\n\n const ab: Point = [b[0] - a[0], b[1] - a[1]];\n const ac: Point = [c[0] - a[0], c[1] - a[1]];\n const ad: Point = [d[0] - a[0], d[1] - a[1]];\n\n const ca: Point = [a[0] - c[0], a[1] - c[1]];\n const cb: Point = [b[0] - c[0], b[1] - c[1]];\n const cd: Point = [d[0] - c[0], d[1] - c[1]];\n\n return crossProduct(ab, ac) * crossProduct(ab, ad) <= 0 && crossProduct(cd, ca) * crossProduct(cd, cb) <= 0;\n};\n\nexport const isLineHitRectangle = (points: Point[], rectangle: RectangleClient) => {\n if (points.length === 1) {\n return RectangleClient.isPointInRectangle(rectangle, points[0]);\n }\n const rectanglePoints = RectangleClient.getCornerPoints(rectangle);\n const len = points.length;\n for (let i = 0; i < len; i++) {\n if (i === len - 1) continue;\n const p1 = points[i];\n const p2 = points[(i + 1) % len];\n const isHit = isSingleLineHitRectangleEdge(p1, p2, rectangle);\n if (isHit || isPointInPolygon(p1, rectanglePoints) || isPointInPolygon(p2, rectanglePoints)) {\n return true;\n }\n }\n return false;\n};\n\nexport const isLineHitRectangleEdge = (points: Point[], rectangle: RectangleClient, isClose: boolean = true) => {\n const len = points.length;\n for (let i = 0; i < len; i++) {\n if (i === len - 1 && !isClose) continue;\n const p1 = points[i];\n const p2 = points[(i + 1) % len];\n const isHit = isSingleLineHitRectangleEdge(p1, p2, rectangle);\n if (isHit) {\n return true;\n }\n }\n return false;\n};\n\nexport const isSingleLineHitRectangleEdge = (p1: Point, p2: Point, rectangle: RectangleClient) => {\n const rectanglePoints = RectangleClient.getCornerPoints(rectangle);\n return (\n isLineHitLine(p1, p2, rectanglePoints[0], rectanglePoints[1]) ||\n isLineHitLine(p1, p2, rectanglePoints[1], rectanglePoints[2]) ||\n isLineHitLine(p1, p2, rectanglePoints[2], rectanglePoints[3]) ||\n isLineHitLine(p1, p2, rectanglePoints[3], rectanglePoints[0])\n );\n};\n\n//https://stackoverflow.com/questions/22521982/check-if-point-is-inside-a-polygon\nexport const isPointInPolygon = (point: Point, points: Point[]) => {\n // ray-casting algorithm based on\n // https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n\n const x = point[0],\n y = point[1];\n\n let inside = false;\n for (var i = 0, j = points.length - 1; i < points.length; j = i++) {\n let xi = points[i][0],\n yi = points[i][1];\n let xj = points[j][0],\n yj = points[j][1];\n\n let intersect = yi > y != yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n};\n\nexport const isPointInEllipse = (point: Point, center: Point, rx: number, ry: number, angle = 0) => {\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const x1 = (point[0] - center[0]) * cosAngle + (point[1] - center[1]) * sinAngle;\n const y1 = (point[1] - center[1]) * cosAngle - (point[0] - center[0]) * sinAngle;\n\n return (x1 * x1) / (rx * rx) + (y1 * y1) / (ry * ry) <= 1;\n};\n\nexport const isPointInRoundRectangle = (point: Point, rectangle: RectangleClient, radius: number, angle = 0) => {\n const { x: rectX, y: rectY, width, height } = rectangle;\n const isInRectangle = point[0] >= rectX && point[0] <= rectX + width && point[1] >= rectY && point[1] <= rectY + height;\n const handleLeftTop =\n point[0] >= rectX &&\n point[0] <= rectX + radius &&\n point[1] >= rectY &&\n point[1] <= rectY + radius &&\n Math.hypot(point[0] - (rectX + radius), point[1] - (rectY + radius)) > radius;\n const handleLeftBottom =\n point[0] >= rectX &&\n point[0] <= rectX + radius &&\n point[1] >= rectY + height &&\n point[1] <= rectY + height - radius &&\n Math.hypot(point[0] - (rectX + radius), point[1] - (rectY + height - radius)) > radius;\n const handleRightTop =\n point[0] >= rectX + width - radius &&\n point[0] <= rectX + width &&\n point[1] >= rectY &&\n point[1] <= rectY + radius &&\n Math.hypot(point[0] - (rectX + width - radius), point[1] - (rectY + radius)) > radius;\n const handleRightBottom =\n point[0] >= rectX + width - radius &&\n point[0] <= rectX + width &&\n point[1] >= rectY + height - radius &&\n point[1] <= rectY + height &&\n Math.hypot(point[0] - (rectX + width - radius), point[1] - (rectY + height - radius)) > radius;\n const isInCorner = handleLeftTop || handleLeftBottom || handleRightTop || handleRightBottom;\n\n return isInRectangle && !isInCorner;\n};\n\n// https://gist.github.com/nicholaswmin/c2661eb11cad5671d816\nexport const catmullRomFitting = function (points: Point[]) {\n const alpha = 0.5;\n let p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M;\n var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;\n const result: Point[] = [];\n result.push([Math.round(points[0][0]), Math.round(points[0][1])]);\n var length = points.length;\n for (var i = 0; i < length - 1; i++) {\n p0 = i == 0 ? points[0] : points[i - 1];\n p1 = points[i];\n p2 = points[i + 1];\n p3 = i + 2 < length ? points[i + 2] : p2;\n\n d1 = Math.sqrt(Math.pow(p0[0] - p1[0], 2) + Math.pow(p0[1] - p1[1], 2));\n d2 = Math.sqrt(Math.pow(p1[0] - p2[0], 2) + Math.pow(p1[1] - p2[1], 2));\n d3 = Math.sqrt(Math.pow(p2[0] - p3[0], 2) + Math.pow(p2[1] - p3[1], 2));\n\n // Catmull-Rom to Cubic Bezier conversion matrix\n // A = 2d1^2a + 3d1^a * d2^a + d3^2a\n // B = 2d3^2a + 3d3^a * d2^a + d2^2a\n // [ 0 1 0 0 ]\n // [ -d2^2a /N A/N d1^2a /N 0 ]\n // [ 0 d3^2a /M B/M -d2^2a /M ]\n // [ 0 0 1 0 ]\n\n d3powA = Math.pow(d3, alpha);\n d3pow2A = Math.pow(d3, 2 * alpha);\n d2powA = Math.pow(d2, alpha);\n d2pow2A = Math.pow(d2, 2 * alpha);\n d1powA = Math.pow(d1, alpha);\n d1pow2A = Math.pow(d1, 2 * alpha);\n\n A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A;\n B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A;\n N = 3 * d1powA * (d1powA + d2powA);\n if (N > 0) {\n N = 1 / N;\n }\n M = 3 * d3powA * (d3powA + d2powA);\n if (M > 0) {\n M = 1 / M;\n }\n\n bp1 = [(-d2pow2A * p0[0] + A * p1[0] + d1pow2A * p2[0]) * N, (-d2pow2A * p0[1] + A * p1[1] + d1pow2A * p2[1]) * N];\n bp2 = [(d3pow2A * p1[0] + B * p2[0] - d2pow2A * p3[0]) * M, (d3pow2A * p1[1] + B * p2[1] - d2pow2A * p3[1]) * M];\n\n if (bp1[0] == 0 && bp1[1] == 0) {\n bp1 = p1;\n }\n if (bp2[0] == 0 && bp2[1] == 0) {\n bp2 = p2;\n }\n\n result.push(bp1 as Point, bp2 as Point, p2 as Point);\n }\n\n return result;\n};\n\n/**\n * the result of slope is based on Cartesian coordinate system\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getEllipseTangentSlope(x: number, y: number, a: number, b: number) {\n if (Math.abs(y) === 0) {\n return x > 0 ? -Infinity : Infinity;\n }\n const k = (-b * b * x) / (a * a * y);\n return k;\n}\n\n/**\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getVectorFromPointAndSlope(x: number, y: number, slope: number) {\n if (slope === Infinity) {\n return [0, -1] as Point;\n } else if (slope === -Infinity) {\n return [0, 1] as Point;\n }\n let vector = [1, -slope] as Point;\n if (y < 0) {\n vector = [-vector[0], -vector[1]];\n }\n return vector as Point;\n}\n\n/**\n * The DOM likes values to be fixed to 3 decimal places\n */\nexport function toDomPrecision(v: number) {\n return +v.toFixed(4);\n}\n\nexport function toFixed(v: number) {\n return +v.toFixed(2);\n}\n\nexport function ceilToDecimal(value: number, decimalPlaces: number) {\n const factor = Math.pow(10, decimalPlaces);\n return Math.ceil(value * factor) / factor;\n}\n\n/**\n * Whether two numbers numbers a and b are approximately equal.\n *\n * @param a - The first point.\n * @param b - The second point.\n * @public\n */\nexport function approximately(a: number, b: number, precision = 0.000001) {\n return Math.abs(a - b) <= precision;\n}\n\n// https://medium.com/@steveruiz/find-the-points-where-a-line-segment-intercepts-an-angled-ellipse-in-javascript-typescript-e451524beece\nexport function getCrossingPointsBetweenEllipseAndSegment(\n startPoint: Point,\n endPoint: Point,\n cx: number,\n cy: number,\n rx: number,\n ry: number,\n segment_only = true\n) {\n // If the ellipse or line segment are empty, return no tValues.\n if (rx === 0 || ry === 0 || (startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1])) {\n return [];\n }\n\n rx = rx < 0 ? rx : -rx;\n ry = ry < 0 ? ry : -ry;\n\n startPoint[0] -= cx;\n startPoint[1] -= cy;\n endPoint[0] -= cx;\n endPoint[1] -= cy;\n\n // Calculate the quadratic parameters.\n var A =\n ((endPoint[0] - startPoint[0]) * (endPoint[0] - startPoint[0])) / rx / rx +\n ((endPoint[1] - startPoint[1]) * (endPoint[1] - startPoint[1])) / ry / ry;\n var B = (2 * startPoint[0] * (endPoint[0] - startPoint[0])) / rx / rx + (2 * startPoint[1] * (endPoint[1] - startPoint[1])) / ry / ry;\n var C = (startPoint[0] * startPoint[0]) / rx / rx + (startPoint[1] * startPoint[1]) / ry / ry - 1;\n\n // Make a list of t values (normalized points on the line where intersections occur).\n var tValues: number[] = [];\n\n // Calculate the discriminant.\n var discriminant = B * B - 4 * A * C;\n\n if (discriminant === 0) {\n // One real solution.\n tValues.push(-B / 2 / A);\n } else if (discriminant > 0) {\n // Two real solutions.\n tValues.push((-B + Math.sqrt(discriminant)) / 2 / A);\n tValues.push((-B - Math.sqrt(discriminant)) / 2 / A);\n }\n return (\n tValues\n // Filter to only points that are on the segment.\n .filter((t) => !segment_only || (t >= 0 && t <= 1))\n // Solve for points.\n .map((t) => [startPoint[0] + (endPoint[0] - startPoint[0]) * t + cx, startPoint[1] + (endPoint[1] - startPoint[1]) * t + cy])\n );\n}\n\n/**\n * Get a point between two points.\n * @param x0 The x-axis coordinate of the first point.\n * @param y0 The y-axis coordinate of the first point.\n * @param x1 The x-axis coordinate of the second point.\n * @param y1 The y-axis coordinate of the second point.\n * @param d Normalized\n */\nexport function getPointBetween(x0: number, y0: number, x1: number, y1: number, d = 0.5) {\n return [x0 + (x1 - x0) * d, y0 + (y1 - y0) * d];\n}\n\n/**\n * 获取点到半椭圆弧段的最近点\n * @param point 目标点\n * @param startPoint 弧段起点\n * @param arcPoint 弧段数据\n */\n/**\n * 计算椭圆弧的中心点和实际半径\n */\nexport function getEllipseArcCenter(\n startPoint: Point,\n arcPoint: {\n rx: number;\n ry: number;\n xAxisRotation: number;\n largeArcFlag: 0 | 1;\n sweepFlag: 0 | 1;\n endX: number;\n endY: number;\n }\n): { center: Point; rx: number; ry: number } {\n // 1. 将坐标转换到标准位置\n const dx = (arcPoint.endX - startPoint[0]) / 2;\n const dy = (arcPoint.endY - startPoint[1]) / 2;\n const cosAngle = Math.cos(arcPoint.xAxisRotation);\n const sinAngle = Math.sin(arcPoint.xAxisRotation);\n \n // 旋转到椭圆坐标系\n const x1 = cosAngle * dx + sinAngle * dy;\n const y1 = -sinAngle * dx + cosAngle * dy;\n \n // 2. 计算中心点\n const rx = Math.abs(arcPoint.rx);\n const ry = Math.abs(arcPoint.ry);\n \n // 确保半径足够大\n const lambda = (x1 * x1) / (rx * rx) + (y1 * y1) / (ry * ry);\n const factor = lambda > 1 ? Math.sqrt(lambda) : 1;\n \n const adjustedRx = rx * factor;\n const adjustedRy = ry * factor;\n \n // 计算中心点坐标\n const sign = arcPoint.largeArcFlag === arcPoint.sweepFlag ? -1 : 1;\n const sq = ((adjustedRx * adjustedRx * adjustedRy * adjustedRy) - \n (adjustedRx * adjustedRx * y1 * y1) - \n (adjustedRy * adjustedRy * x1 * x1)) / \n ((adjustedRx * adjustedRx * y1 * y1) + \n (adjustedRy * adjustedRy * x1 * x1));\n const coef = sign * Math.sqrt(Math.max(0, sq));\n \n const centerX = coef * ((adjustedRx * y1) / adjustedRy);\n const centerY = coef * (-(adjustedRy * x1) / adjustedRx);\n \n // 3. 转换回原始坐标系\n const cx = cosAngle * centerX - sinAngle * centerY + (startPoint[0] + arcPoint.endX) / 2;\n const cy = sinAngle * centerX + cosAngle * centerY + (startPoint[1] + arcPoint.endY) / 2;\n\n return {\n center: [cx, cy],\n rx: adjustedRx,\n ry: adjustedRy\n };\n}\n\nexport function getNearestPointBetweenPointAndArc(\n point: Point,\n startPoint: Point,\n arcPoint: {\n rx: number;\n ry: number;\n xAxisRotation: number;\n largeArcFlag: 0 | 1;\n sweepFlag: 0 | 1;\n endX: number;\n endY: number;\n }\n): Point {\n const { center, rx, ry } = getEllipseArcCenter(startPoint, arcPoint);\n\n // 获取椭圆上的最近点\n const nearestPoint = getNearestPointBetweenPointAndEllipse(\n point,\n center,\n rx,\n ry\n );\n\n // 判断最近点是否在弧段上\n const startAngle = Math.atan2(startPoint[1] - center[1], startPoint[0] - center[0]);\n const endAngle = Math.atan2(arcPoint.endY - center[1], arcPoint.endX - center[0]);\n const pointAngle = Math.atan2(nearestPoint[1] - center[1], nearestPoint[0] - center[0]);\n\n // 检查点是否在弧段范围内\n const isInArc = isAngleBetween(pointAngle, startAngle, endAngle, arcPoint.sweepFlag === 1);\n\n if (isInArc) {\n return nearestPoint;\n }\n\n // 如果不在弧段上,返回最近的端点\n const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], arcPoint.endX, arcPoint.endY);\n\n return distanceToStart < distanceToEnd ? startPoint : [arcPoint.endX, arcPoint.endY];\n}\n\nfunction isAngleBetween(angle: number, start: number, end: number, clockwise: boolean): boolean {\n // 标准化角度到 [0, 2π]\n const normalize = (a: number) => ((a % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\n \n const a = normalize(angle);\n const s = normalize(start);\n const e = normalize(end);\n\n if (clockwise) {\n return s <= e ? (a >= s && a <= e) : (a >= s || a <= e);\n } else {\n return s >= e ? (a <= s && a >= e) : (a <= s || a >= e);\n }\n}\n","import { PlaitBoard } from '../interfaces/board';\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 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}\n","import { Options } from 'roughjs/bin/core';\nimport { POINTER_BUTTON } from '../../constants';\nimport { RectangleClient } from '../../interfaces';\n\nexport const NS = 'http://www.w3.org/2000/svg';\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 createRect(rectangle: RectangleClient, options?: Options) {\n const rect = document.createElementNS(NS, 'rect');\n rect.setAttribute('x', `${rectangle.x}`);\n rect.setAttribute('y', `${rectangle.y}`);\n rect.setAttribute('width', `${rectangle.width}`);\n rect.setAttribute('height', `${rectangle.height}`);\n for (let key in options) {\n const optionKey = key as keyof Options;\n rect.setAttribute(key, `${options[optionKey]}`);\n }\n return rect;\n}\n\nexport const setStrokeLinecap = (g: SVGGElement, value: 'round' | 'square') => {\n g.setAttribute('stroke-linecap', value);\n};\n\nexport const setPathStrokeLinecap = (g: SVGGElement, value: 'round' | 'square') => {\n g.querySelectorAll('path').forEach(path => {\n path.setAttribute('stroke-linecap', value);\n });\n};\n\nexport function createMask() {\n return document.createElementNS(NS, 'mask');\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};\n","import { ceilToDecimal } from '../math';\nimport { 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', `${ceilToDecimal(width, 0)}`);\n newForeignObject.setAttribute('height', `${height}`);\n return newForeignObject;\n}\n\nexport function updateForeignObject(target: SVGForeignObjectElement | SVGGElement, width: number, height: number, x: number, y: number) {\n const foreignObject = target instanceof SVGForeignObjectElement ? target : target.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${ceilToDecimal(width, 0)}`);\n foreignObject.setAttribute('height', `${height}`);\n foreignObject.setAttribute('x', `${x}`);\n foreignObject.setAttribute('y', `${y}`);\n }\n}\n\nexport function updateForeignObjectWidth(target: SVGForeignObjectElement | SVGGElement, width: number) {\n const foreignObject = target instanceof SVGForeignObjectElement ? target : target.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${ceilToDecimal(width, 0)}`);\n }\n}\n","export const IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\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","// Credits to slate - https://github.com/ianstormtaylor/slate\n\nimport { MERGING, PlaitBoard, PlaitOperation, SAVING, SPLITTING_ONCE } 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 * Get the splitting once flag's current value.\n */\n\n isSplittingOnce(board: PlaitBoard): boolean | undefined {\n return SPLITTING_ONCE.get(board);\n },\n\n setSplittingOnce(board: PlaitBoard, value: boolean | undefined): void {\n SPLITTING_ONCE.set(board, value);\n },\n\n /**\n * Apply a series of changes inside a synchronous `fn`, These operations will\n * be merged into the previous history.\n */\n withMerging(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isMerging(board);\n MERGING.set(board, true);\n fn();\n MERGING.set(board, prev);\n },\n\n /**\n * Apply a series of changes inside a synchronous `fn`, ensuring that the first\n * operation starts a new batch in the history. Subsequent operations will be\n * merged as usual.\n */\n withNewBatch(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isMerging(board);\n MERGING.set(board, true);\n SPLITTING_ONCE.set(board, true);\n fn();\n MERGING.set(board, prev);\n SPLITTING_ONCE.delete(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 arrow: ['down', 'left', 'right', 'up'],\n extendArrow: ['shift+down', 'shift+left', 'shift+right', 'shift+up'],\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 extendUp: 'shift+up',\n extendDown: 'shift+down',\n italic: 'mod+i',\n splitBlock: 'shift?+enter',\n undo: 'mod+z',\n shift: 'shift'\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 isArrow: create('arrow'),\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 isExtendUp: create('extendUp'),\n isExtendDown: create('extendDown'),\n isExtendArrow: create('extendArrow'),\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 isShift: create('shift')\n};\nexport default hotkeys;\nexport { hotkeys };\n","export function idCreator(length = 5) {\n // remove numeral\n const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /**** Easily confusing characters are removed by default 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 { PlaitBoard } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\n\nexport 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 (node.children && (!recursion || recursion(node))) {\n let children: TreeNode[] = [...node.children];\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 const getIsRecursionFunc = (board: PlaitBoard) => {\n return (element: PlaitElement | PlaitBoard) => {\n if (PlaitBoard.isBoard(element) || board.isRecursion(element)) {\n return true;\n } else {\n return false;\n }\n };\n};\n\nexport interface TreeNode {\n children?: TreeNode[];\n}\n","import { Point } from './point';\n\nexport const SELECTION_BORDER_COLOR = '#6698FF';\nexport const SELECTION_FILL_COLOR = '#6698FF25'; // opacity 0.25\n\nexport interface Selection {\n anchor: Point;\n focus: Point;\n}\n\nexport const Selection = {\n isCollapsed(selection: Selection) {\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 { ELEMENT_TO_REF, NODE_TO_CONTAINER_G, NODE_TO_G, NODE_TO_PARENT } from '../utils';\nimport { PlaitBoard } from './board';\nimport { Point } from './point';\nimport { PlaitElementRef } from '../core/element/element-ref';\n\nexport interface PlaitElement {\n [key: string]: any;\n id: string;\n children?: PlaitElement[];\n points?: Point[];\n type?: string;\n groupId?: string;\n angle?: number;\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 getElementRef<T extends PlaitElementRef = PlaitElementRef>(value: PlaitElement) {\n return ELEMENT_TO_REF.get(value) as T;\n },\n getElementG(value: PlaitElement) {\n const g = NODE_TO_G.get(value);\n if (!g) {\n throw new Error(`can not resolve element g: ${JSON.stringify(value)}`);\n }\n return g;\n },\n hasMounted(element: PlaitElement) {\n const containerG = PlaitElement.getContainerG(element, { suppressThrow: true });\n if (containerG) {\n return true;\n } else {\n return false;\n }\n },\n getContainerG<T extends boolean>(\n value: PlaitElement,\n options: {\n suppressThrow: T;\n }\n ): T extends true ? SVGGElement | null : SVGGElement {\n const containerG = NODE_TO_CONTAINER_G.get(value) || null;\n if (!containerG) {\n if (options.suppressThrow) {\n return null as T extends true ? SVGGElement | null : SVGGElement;\n }\n throw new Error('can not resolve container g');\n }\n return containerG;\n }\n};\n\nexport interface ComponentType<T> {\n new (...args: any[]): T;\n}\n\nexport interface ImageEntry {\n url: string;\n file: File;\n}\n","import { PlaitBoard, PlaitElement } from '../interfaces';\n\nexport const sortElements = (board: PlaitBoard, elements: PlaitElement[], ascendingOrder = true) => {\n return [...elements].sort((a: PlaitElement, b: PlaitElement) => {\n const pathA = PlaitBoard.findPath(board, a);\n const pathB = PlaitBoard.findPath(board, b);\n return ascendingOrder ? pathA[0] - pathB[0] : pathB[0] - pathA[0];\n });\n};\n","import { Options } from 'roughjs/bin/core';\nimport { PlaitBoard, Point, RectangleClient } from '../interfaces';\n\nconst TEMPORARY_G = new Map();\n\nconst getTemporaryGArray = (debugKey: string): SVGGElement[] => {\n return TEMPORARY_G.get(debugKey) || [];\n};\n\nconst setTemporaryGArray = (debugKey: string, gArray: SVGGElement[]) => {\n TEMPORARY_G.set(debugKey, gArray);\n};\n\nexport class DebugGenerator {\n constructor(private debugKey: string) {}\n isDebug() {\n return isDebug(this.debugKey);\n }\n clear() {\n if (!this.isDebug()) {\n return;\n }\n const gArray = getTemporaryGArray(this.debugKey);\n setTemporaryGArray(this.debugKey, []);\n gArray.forEach(g => g.remove());\n }\n drawPolygon(board: PlaitBoard, points: Point[], options?: Options) {\n if (!isDebug(this.debugKey)) {\n return;\n }\n const polygonG = PlaitBoard.getRoughSVG(board).polygon(points, options || { stroke: 'red' });\n polygonG.classList.add(this.debugKey);\n PlaitBoard.getElementActiveHost(board).append(polygonG);\n const gArray = getTemporaryGArray(this.debugKey);\n gArray.push(polygonG);\n setTemporaryGArray(this.debugKey, gArray);\n return polygonG;\n }\n drawLine(board: PlaitBoard, points: Point[], options?: Options) {\n if (!isDebug(this.debugKey)) {\n return;\n }\n const lineG = PlaitBoard.getRoughSVG(board).linearPath(points, options || { stroke: 'red' });\n lineG.classList.add(this.debugKey);\n PlaitBoard.getElementActiveHost(board).append(lineG);\n const gArray = getTemporaryGArray(this.debugKey);\n gArray.push(lineG);\n setTemporaryGArray(this.debugKey, gArray);\n return lineG;\n }\n drawRectangle(board: PlaitBoard, data: Point[] | RectangleClient, options?: Options) {\n if (!isDebug(this.debugKey)) {\n return;\n }\n let rectangle: RectangleClient;\n if (data instanceof Array) {\n rectangle = RectangleClient.getRectangleByPoints(data);\n } else {\n rectangle = data;\n }\n const rectangleG = PlaitBoard.getRoughSVG(board).rectangle(\n rectangle.x,\n rectangle.y,\n rectangle.width,\n rectangle.height,\n options || { stroke: 'red' }\n );\n rectangleG.classList.add(this.debugKey);\n PlaitBoard.getElementActiveHost(board).append(rectangleG);\n const gArray = getTemporaryGArray(this.debugKey);\n gArray.push(rectangleG);\n setTemporaryGArray(this.debugKey, gArray);\n return rectangleG;\n }\n drawCircles(board: PlaitBoard, points: Point[], diameter: number = 0, isCumulativeDiameter: boolean = false, options?: Options) {\n if (!isDebug(this.debugKey)) {\n return;\n }\n const result: SVGGElement[] = [];\n points.forEach((p, i) => {\n const circle = PlaitBoard.getRoughSVG(board).circle(\n p[0],\n p[1],\n isCumulativeDiameter ? diameter * (i + 1) : diameter,\n Object.assign({}, { stroke: 'red', fill: 'red', fillStyle: 'solid' }, options || {})\n );\n circle.classList.add(this.debugKey);\n PlaitBoard.getElementActiveHost(board).append(circle);\n const gArray = getTemporaryGArray(this.debugKey);\n gArray.push(circle);\n result.push(circle);\n setTemporaryGArray(this.debugKey, gArray);\n });\n return result;\n }\n}\n\nexport const createDebugGenerator = (debugKey: string) => {\n return new DebugGenerator(debugKey);\n};\n\nexport const isDebug = (key?: string) => {\n const defaultKey = 'debug:plait';\n return localStorage.getItem(key || defaultKey) === 'true';\n};\n","import { PlaitBoard } from './board';\n\nexport type PlaitPlugin = (board: PlaitBoard) => PlaitBoard;\n\nexport interface WithPluginOptions {\n disabled?: boolean;\n}\n\nexport interface WithSelectionPluginOptions extends WithPluginOptions {\n isMultipleSelection: boolean;\n isDisabledSelection: boolean;\n isPreventClearSelection: boolean; // is clear selection on click outside of board container\n}\n\nexport interface WithHandPluginOptions extends WithPluginOptions {\n isHandMode: (board: PlaitBoard, event: PointerEvent) => boolean;\n}\n\nexport enum PlaitPluginKey {\n 'withSelection' = 'withSelection',\n 'withHand' = 'withHand'\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Ancestor } from '../interfaces/node';\nimport { depthFirstRecursion, getIsRecursionFunc } from './tree';\nimport { BOARD_TO_SELECTED_ELEMENT } from './weak-maps';\nimport { Selection } from '../interfaces/selection';\nimport { PlaitElement } from '../interfaces/element';\nimport { Point } from '../interfaces/point';\nimport { sortElements } from './position';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport { getRectangleByElements } from './element';\nimport { PlaitOptionsBoard } from '../plugins/with-options';\nimport { isDebug } from './debug';\nimport { PlaitPluginKey, WithSelectionPluginOptions } from '../interfaces/plugin';\n\nexport const getHitElementsBySelection = (\n board: PlaitBoard,\n selection?: Selection,\n match: (element: PlaitElement) => boolean = () => true\n) => {\n const newSelection = selection || (board.selection as Selection);\n const rectangleHitElements: PlaitElement[] = [];\n if (!newSelection) {\n return [];\n }\n const isCollapsed = Selection.isCollapsed(newSelection);\n if (isCollapsed) {\n const hitElements = getHitElementsByPoint(board, newSelection.anchor, match);\n if (hitElements?.length) {\n return hitElements;\n } else {\n return [];\n }\n }\n depthFirstRecursion<Ancestor>(\n board,\n (node) => {\n if (!PlaitBoard.isBoard(node) && match(node)) {\n let isRectangleHit = false;\n try {\n isRectangleHit = board.isRectangleHit(node, newSelection);\n } catch (error) {\n if (isDebug()) {\n console.error('isRectangleHit', error, 'node', node);\n }\n }\n if (isRectangleHit) {\n rectangleHitElements.push(node);\n }\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return rectangleHitElements;\n};\n\nexport const getHitElementsByPoint = (\n board: PlaitBoard,\n point: Point,\n match: (element: PlaitElement) => boolean = () => true,\n isStrict = true\n): PlaitElement[] => {\n let hitElements: PlaitElement[] = [];\n depthFirstRecursion<Ancestor>(\n board,\n (node) => {\n if (PlaitBoard.isBoard(node) || !match(node) || !PlaitElement.hasMounted(node)) {\n return;\n }\n let isHit = false;\n try {\n isHit = board.isHit(node, point, isStrict);\n } catch (error) {\n if (isDebug()) {\n console.error('isHit', error, 'node', node);\n }\n }\n if (isHit) {\n hitElements.push(node);\n return;\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return hitElements;\n};\n\nexport const getHitElementByPoint = (\n board: PlaitBoard,\n point: Point,\n match: (element: PlaitElement) => boolean = () => true,\n isStrict = true\n): undefined | PlaitElement => {\n const pointHitElements = getHitElementsByPoint(board, point, match, isStrict);\n const hitElement = board.getOneHitElement(pointHitElements);\n return hitElement;\n};\n\nexport const getHitSelectedElements = (board: PlaitBoard, point: Point) => {\n const selectedElements = getSelectedElements(board);\n const targetRectangle = selectedElements.length > 0 && getRectangleByElements(board, selectedElements, false);\n const isInTargetRectangle = targetRectangle && RectangleClient.isPointInRectangle(targetRectangle, point);\n if (isInTargetRectangle) {\n return selectedElements;\n } else {\n return [];\n }\n};\n\nexport const cacheSelectedElements = (board: PlaitBoard, selectedElements: PlaitElement[]) => {\n const sortedElements = sortElements(board, selectedElements);\n BOARD_TO_SELECTED_ELEMENT.set(board, sortedElements);\n};\n\nexport const getSelectedElements = (board: PlaitBoard) => {\n return BOARD_TO_SELECTED_ELEMENT.get(board) || [];\n};\n\nexport const addSelectedElement = (board: PlaitBoard, element: PlaitElement | PlaitElement[]) => {\n let elements = [];\n if (Array.isArray(element)) {\n elements.push(...element);\n } else {\n elements.push(element);\n }\n const selectedElements = getSelectedElements(board);\n cacheSelectedElements(board, [...selectedElements, ...elements]);\n};\n\nexport const removeSelectedElement = (board: PlaitBoard, element: PlaitElement, isRemoveChildren = false) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements.includes(element)) {\n const targetElements: PlaitElement[] = [];\n if (board.isRecursion(element) && isRemoveChildren) {\n depthFirstRecursion(\n element,\n (node) => {\n targetElements.push(node);\n },\n (node) => board.isRecursion(node)\n );\n } else {\n targetElements.push(element);\n }\n const newSelectedElements = selectedElements.filter((value) => !targetElements.includes(value));\n cacheSelectedElements(board, newSelectedElements);\n }\n};\n\nexport const replaceSelectedElement = (board: PlaitBoard, element: PlaitElement, newElement: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n selectedElements.splice(selectedElements.indexOf(element), 1, newElement);\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\nexport const temporaryDisableSelection = (board: PlaitOptionsBoard) => {\n const currentOptions = board.getPluginOptions(PlaitPluginKey.withSelection);\n board.setPluginOptions<WithSelectionPluginOptions>(PlaitPluginKey.withSelection, {\n isDisabledSelection: true\n });\n setTimeout(() => {\n board.setPluginOptions<WithSelectionPluginOptions>(PlaitPluginKey.withSelection, { ...currentOptions });\n }, 0);\n};\n\nexport const isHitSelectedRectangle = (board: PlaitBoard, point: Point) => {\n const hitSelectedElements = getHitSelectedElements(board, point);\n return hitSelectedElements.length > 0;\n};\n\nexport const isHitElement = (board: PlaitBoard, point: Point) => {\n const hitElement = getHitElementByPoint(board, point);\n return !!hitElement || isHitSelectedRectangle(board, point);\n};\n","import { Options } from 'roughjs/bin/core';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MAX_RADIUS } from '../../constants';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { RectangleClient } from '../../interfaces/rectangle-client';\nimport { setStrokeLinecap } from '../dom/common';\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 let radius = borderRadius || 0;\n if (radius === 0) {\n const defaultRadius = Math.min(width, height) / 8;\n let radius = defaultRadius;\n if (defaultRadius > MAX_RADIUS) {\n radius = outline ? MAX_RADIUS + 2 : MAX_RADIUS;\n }\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 const rectangleG = 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 setStrokeLinecap(rectangleG, 'round');\n return rectangleG;\n}\n\nexport const drawRectangle = (board: PlaitBoard, rectangle: RectangleClient, options: Options) => {\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const rectangleG = roughSVG.rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height, options);\n setStrokeLinecap(rectangleG, 'round');\n return rectangleG;\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, 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 / 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, 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, closePath?: boolean) {\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 if (closePath) {\n polylinePath += 'Z';\n }\n\n path.setAttribute('d', polylinePath);\n path.setAttribute('stroke', `${options?.stroke}`);\n path.setAttribute('stroke-width', `${options?.strokeWidth}`);\n path.setAttribute('fill', `${options?.fill || 'none'}`);\n options?.strokeLineDash && path.setAttribute('stroke-dasharray', `${options.strokeLineDash}`);\n g.appendChild(path);\n return g;\n}\n\nexport function drawBezierPath(points: Point[], options?: Options) {\n const g = createG();\n const path = createPath();\n\n let polylinePath = '';\n for (let i = 0; i < points.length - 3; i += 3) {\n if (i === 0) {\n polylinePath += `M ${points[0][0]} ${points[0][1]} `;\n } else {\n polylinePath += `C ${points[i + 1][0]} ${points[i + 1][1]}, ${points[i + 2][0]} ${points[i + 2][1]}, ${points[i + 3][0]} ${\n points[i + 3][1]\n }`;\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 { SetViewportOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Viewport } from '../interfaces/viewport';\n\nexport function setViewport(board: PlaitBoard, viewport: Viewport) {\n const operation: SetViewportOperation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };\n board.apply(operation);\n}\n\nexport interface ViewportTransforms {\n setViewport: (board: PlaitBoard, viewport: Viewport) => void;\n}\n\nexport const ViewportTransforms: ViewportTransforms = {\n setViewport\n};\n","import { 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 { 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 { setViewport } from './viewport';\nimport { depthFirstRecursion, getRealScrollBarWidth, getSelectedElements } from '../utils';\nimport { PlaitElement } from '../interfaces/element';\nimport { setTheme } from './theme';\nimport { FitViewportOptions } from '../interfaces/viewport';\nimport { PlaitPointerType } from '../interfaces/pointer';\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\nfunction updateZoom(board: PlaitBoard, newZoom: number, center?: Point) {\n newZoom = clampZoomLevel(newZoom);\n\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 (center && distanceBetweenPointAndRectangle(center[0], center[1], nativeElementRect) === 0) {\n focusPoint = [center[0] - nativeElementRect.x, center[1] - nativeElementRect.y];\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\nconst updatePointerType = <T extends string = PlaitPointerType>(board: PlaitBoard, pointer: T) => {\n if (board.pointer === pointer) return;\n board.pointer = pointer;\n};\n\nfunction moveToCenter(board: PlaitBoard, centerPoint: Point) {\n const plaitElement = getSelectedElements(board)?.[0];\n if (plaitElement) {\n const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const scrollBarWidth = getRealScrollBarWidth(board);\n const oldCenterPoint = getViewBoxCenterPoint(board);\n const left = centerPoint[0] - oldCenterPoint[0];\n const top = centerPoint[1] - oldCenterPoint[1];\n const zoom = board.viewport.zoom;\n\n const origination = [\n left - boardContainerRect.width / 2 / zoom + scrollBarWidth / 2 / zoom,\n top - boardContainerRect.height / 2 / zoom + scrollBarWidth / 2 / zoom\n ] as Point;\n\n setViewport(board, {\n ...board.viewport,\n origination\n });\n clearViewportOrigination(board);\n }\n}\n\nexport const BoardTransforms = {\n updatePointerType,\n updateViewport,\n fitViewport,\n updateZoom,\n updateThemeColor,\n fitViewportWidth,\n moveToCenter\n};\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\n\nexport const getViewBox = (board: PlaitBoard) => {\n return PlaitBoard.getHost(board).viewBox.baseVal;\n};\n\n/**\n * Get the screen point starting from the upper left corner of the svg element (based on the svg screen coordinate system)\n */\nexport function toHostPoint(board: PlaitBoard, x: number, y: number): Point {\n const host = PlaitBoard.getHost(board);\n const rect = host.getBoundingClientRect();\n return [x - rect.x, y - rect.y];\n}\n\n/**\n * Get the point in the coordinate system of the svg viewBox\n */\nexport function toViewBoxPoint(board: PlaitBoard, hostPoint: Point) {\n const viewBox = getViewBox(board);\n const { zoom } = board.viewport;\n const x = hostPoint[0] / zoom + viewBox.x;\n const y = hostPoint[1] / zoom + viewBox.y;\n const newPoint = [x, y] as Point;\n return newPoint;\n}\n\nexport function toViewBoxPoints(board: PlaitBoard, hostPoints: Point[]) {\n const newPoints = hostPoints.map(point => {\n return toViewBoxPoint(board, point);\n });\n return newPoints;\n}\n\n/**\n * `toHostPoint` reverse processing\n * Get the screen point starting from the upper left corner of the browser window or the viewport (based on the screen coordinate system)\n */\nexport function toScreenPointFromHostPoint(board: PlaitBoard, hostPoint: Point) {\n const host = PlaitBoard.getHost(board);\n const rect = host.getBoundingClientRect();\n return [hostPoint[0] + rect.x, hostPoint[1] + rect.y] as Point;\n}\n\n/**\n * `toViewBoxPoint` reverse processing\n */\nexport function toHostPointFromViewBoxPoint(board: PlaitBoard, viewBoxPoint: Point) {\n const { zoom } = board.viewport;\n const viewBox = getViewBox(board);\n const x = (viewBoxPoint[0] - viewBox.x) * zoom;\n const y = (viewBoxPoint[1] - viewBox.y) * zoom;\n return [x, y] as Point;\n}\n","import { SCROLL_BAR_WIDTH } from '../constants';\nimport { MAX_ZOOM, MIN_ZOOM } from '../constants/zoom';\nimport { PlaitBoard, Point, RectangleClient } from '../interfaces';\nimport { BoardTransforms } from '../transforms/board';\nimport { getRectangleByElements } from './element';\nimport { approximately } from './math';\nimport { toHostPointFromViewBoxPoint, toViewBoxPoint } from './to-point';\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 * Normalize the scaling ratio, or return the corrected scaling ratio if the limit is exceeded\n */\nexport function clampZoomLevel(zoom: number, minZoom = MIN_ZOOM, maxZoom = MAX_ZOOM) {\n return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;\n}\n\nexport function calcNewViewBox(board: PlaitBoard, zoom: number) {\n const boardContainerRectangle = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const elementHostBBox = getElementHostBBox(board, zoom);\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) {\n return;\n }\n const [scrollLeft, scrollTop] = toHostPointFromViewBoxPoint(board, origination);\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 const previousScrollLeft = viewportContainer.scrollLeft;\n const previousScrollTop = viewportContainer.scrollTop;\n // scrollTop assign 11.8 will get 11.5 in chrome\n // scrollTop assign 11.8 will get 11 in firefox, safari\n // scrollTop assign 11.4 will get 11 in chrome, firefox, safari\n // use approximately method to determine the new value is valid updating to avoid debouncing\n if (!approximately(viewportContainer.scrollLeft, left, 1) || !approximately(viewportContainer.scrollTop, top, 1)) {\n viewportContainer.scrollLeft = left;\n viewportContainer.scrollTop = top;\n const offsetWidth = viewportContainer.offsetWidth;\n const offsetHeight = viewportContainer.offsetHeight;\n if (previousScrollLeft === viewportContainer.scrollLeft && previousScrollTop === viewportContainer.scrollTop) {\n // The scroll event cannot be triggered, so the origination is modified directly based on the scroll distance.\n updateViewportByScrolling(board, previousScrollLeft, previousScrollTop);\n } else {\n const isValidLeftOrTop =\n left > 0 &&\n top > 0 &&\n left < viewportContainer.scrollWidth - offsetWidth &&\n top < viewportContainer.scrollHeight - offsetHeight;\n if (isFromViewportChange && isValidLeftOrTop) {\n setIsFromViewportChange(board, true);\n }\n }\n }\n}\n\nexport function updateViewportByScrolling(board: PlaitBoard, scrollLeft: number, scrollTop: number) {\n const origination = toViewBoxPoint(board, [scrollLeft, scrollTop]);\n if (Point.isEquals(origination, getViewportOrigination(board))) {\n return;\n }\n BoardTransforms.updateViewport(board, origination);\n setIsFromScrolling(board, true);\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 = calcNewViewBox(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 = calcNewViewBox(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 { 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 { Path, PlaitElement } from '../interfaces';\nimport { PlaitBoard } from '../interfaces/board';\nimport { NodeTransforms } from '../transforms/node';\nimport { sortElements } from './position';\n\nconst BOARD_TO_RAF = new WeakMap<PlaitBoard, { [key: string]: number | null }>();\n\nexport interface MoveNodeOption {\n element: PlaitElement;\n newPath: Path;\n}\n\nconst getTimerId = (board: PlaitBoard, key: string) => {\n const state = getRAFState(board);\n return state[key] || null;\n};\n\nconst getRAFState = (board: PlaitBoard) => {\n return BOARD_TO_RAF.get(board) || {};\n};\n\nexport const throttleRAF = (board: PlaitBoard, key: string, fn: () => void) => {\n const scheduleFunc = () => {\n let timerId = requestAnimationFrame(() => {\n const value = BOARD_TO_RAF.get(board) || {};\n value[key] = null;\n BOARD_TO_RAF.set(board, value);\n PlaitBoard.isAlive(board) && fn();\n });\n const state = getRAFState(board);\n state[key] = timerId;\n BOARD_TO_RAF.set(board, state);\n };\n let timerId = getTimerId(board, key);\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n }\n scheduleFunc();\n};\n\nexport const debounce = <T>(func: (args?: T) => void, wait: number, options?: { leading: boolean }) => {\n let timeoutId: any = null;\n return (args?: T) => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n func(args);\n timeoutId = null;\n }, wait);\n } else {\n if (options?.leading) {\n func(args);\n }\n timeoutId = setTimeout(() => {\n timeoutId = null;\n if (!options?.leading) {\n func(args);\n }\n }, wait);\n }\n };\n};\n\nexport const getElementsIndices = (board: PlaitBoard, elements: PlaitElement[]): number[] => {\n sortElements(board, elements);\n return elements\n .map(item => {\n return board.children.map(item => item.id).indexOf(item.id);\n })\n .filter(item => item >= 0);\n};\n\nexport const getHighestIndexOfElement = (board: PlaitBoard, elements: PlaitElement[]) => {\n const indices = getElementsIndices(board, elements);\n return indices[indices.length - 1];\n};\n\nexport const moveElementsToNewPath = (board: PlaitBoard, moveOptions: MoveNodeOption[]) => {\n moveOptions\n .map(item => {\n const path = PlaitBoard.findPath(board, item.element);\n const ref = board.pathRef(path);\n return () => {\n ref.current && NodeTransforms.moveNode(board, ref.current, item.newPath);\n ref.unref();\n };\n })\n .forEach(action => {\n action();\n });\n};\n","import { PlaitBoard } from \"../interfaces/board\";\n\nexport const IS_DRAGGING = new WeakMap<PlaitBoard, boolean>();\n\n\nexport const isDragging = (board: PlaitBoard) => {\n return !!IS_DRAGGING.get(board);\n};\n\nexport const setDragging = (board: PlaitBoard, state: boolean) => {\n IS_DRAGGING.set(board, state);\n}","import { PlaitBoard, PlaitElement } from '../interfaces';\nimport { setDragging } from './dnd';\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 isMovingElements = (board: PlaitBoard) => {\n return (BOARD_TO_MOVING_ELEMENT.get(board) || []).length > 0;\n};\n\nexport const removeMovingElements = (board: PlaitBoard) => {\n BOARD_TO_MOVING_ELEMENT.delete(board);\n setDragging(board, false);\n};\n\nexport const cacheMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n BOARD_TO_MOVING_ELEMENT.set(board, elements);\n setDragging(board, true);\n};\n","import { PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';\nimport { findElements, getRectangleByElements } from './element';\n\nconst FOREIGN_OBJECT_EXPRESSION = `foreignObject[class^='foreign-object']`;\n\nexport interface ToImageOptions {\n elements?: PlaitElement[];\n name?: string;\n ratio?: number;\n padding?: number;\n fillStyle?: string;\n // List of class names. The list must be in the form class1,class2,...\n inlineStyleClassNames?: string;\n}\n\n/**\n * Is element node\n * @param node\n * @returns\n */\nfunction isElementNode(node: Node): node is HTMLElement {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n\n/**\n * load image resources\n * @param url image url\n * @returns image element\n */\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => resolve(img);\n img.onerror = () => reject(new Error('Failed to load image'));\n img.src = src;\n });\n}\n\n/**\n * create and return canvas and context\n * @param width canvas width\n * @param height canvas height\n * @param fillStyle fill style\n * @returns canvas and context\n */\nfunction createCanvas(width: number, height: number, fillStyle = 'transparent') {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d')!;\n\n canvas.width = width;\n canvas.height = height;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n ctx.strokeStyle = '#ffffff';\n ctx.fillStyle = fillStyle;\n ctx.fillRect(0, 0, width, height);\n\n return {\n canvas,\n ctx\n };\n}\n\n/**\n * convert image to base64\n * @param url image url\n * @returns image base64\n */\nasync function convertImageToBase64(url: string): Promise<string> {\n const response = await fetch(url);\n const blob = await response.blob();\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\n\n/**\n * clone node style\n * @param nativeNode source node\n * @param clonedNode clone node\n */\nfunction cloneCSSStyle<T extends HTMLElement>(nativeNode: T, clonedNode: T) {\n const targetStyle = clonedNode?.style;\n if (!targetStyle) {\n return;\n }\n\n const sourceStyle = window.getComputedStyle(nativeNode);\n if (sourceStyle.cssText) {\n targetStyle.cssText = sourceStyle.cssText;\n targetStyle.transformOrigin = sourceStyle.transformOrigin;\n } else {\n Array.from(sourceStyle).forEach(name => {\n let value = sourceStyle.getPropertyValue(name);\n targetStyle.setProperty(name, value, sourceStyle.getPropertyPriority(name));\n });\n }\n}\n\n/**\n * batch clone target styles\n * @param sourceNode\n * @param cloneNode\n * @param inlineStyleClassNames\n */\nfunction batchCloneCSSStyle(sourceNode: SVGGElement, cloneNode: SVGGElement, inlineStyleClassNames: string) {\n if (inlineStyleClassNames) {\n const classNames = inlineStyleClassNames + `, ${FOREIGN_OBJECT_EXPRESSION}`;\n const sourceNodes = Array.from(sourceNode.querySelectorAll(classNames));\n const cloneNodes = Array.from(cloneNode.querySelectorAll(classNames));\n\n sourceNodes.forEach((node, index) => {\n const childElements = Array.from(node.querySelectorAll('*')).filter(isElementNode) as HTMLElement[];\n const cloneChildElements = Array.from(cloneNodes[index].querySelectorAll('*')).filter(isElementNode) as HTMLElement[];\n sourceNodes.push(...childElements);\n cloneNodes.push(...cloneChildElements);\n });\n\n // processing styles\n sourceNodes.map((node, index) => {\n cloneCSSStyle(node as HTMLElement, cloneNodes[index] as HTMLElement);\n });\n }\n}\n\n/**\n * convert images in target nodes in batches\n * @param sourceNode\n * @param cloneNode\n */\nasync function batchConvertImage(sourceNode: SVGGElement, cloneNode: SVGGElement) {\n const sourceImageNodes = Array.from(sourceNode.querySelectorAll(`${FOREIGN_OBJECT_EXPRESSION}`));\n const cloneImageNodes = Array.from(cloneNode.querySelectorAll(`${FOREIGN_OBJECT_EXPRESSION}`));\n await Promise.all(\n sourceImageNodes.map((_, index) => {\n return new Promise(resolve => {\n const cloneImageNode = cloneImageNodes[index];\n // processing image\n const image = (cloneImageNode as HTMLElement).querySelector('img');\n const url = image?.getAttribute('src');\n if (!url) {\n return resolve(true);\n }\n convertImageToBase64(url).then(base64Image => {\n image?.setAttribute('src', base64Image);\n resolve(true);\n });\n });\n })\n );\n}\n\n/**\n * clone svg element\n * @param board board\n * @param options parameter configuration\n * @returns clone svg element\n */\nasync function cloneSvg(board: PlaitBoard, elements: PlaitElement[], rectangle: RectangleClient, options: ToImageOptions) {\n const { width, height, x, y } = rectangle;\n const { padding = 4, inlineStyleClassNames } = options;\n const sourceSvg = PlaitBoard.getHost(board);\n const selectedGElements = elements.map(value => PlaitElement.getElementG(value));\n const cloneSvgElement = sourceSvg.cloneNode() as SVGElement;\n const newHostElement = PlaitBoard.getElementHost(board).cloneNode() as SVGGElement;\n\n cloneSvgElement.style.width = `${width}px`;\n cloneSvgElement.style.height = `${height}px`;\n cloneSvgElement.style.backgroundColor = '';\n cloneSvgElement.setAttribute('width', `${width}`);\n cloneSvgElement.setAttribute('height', `${height}`);\n cloneSvgElement.setAttribute('viewBox', [x - padding, y - padding, width + 2 * padding, height + 2 * padding].join(','));\n\n await Promise.all(\n selectedGElements.map(async (child, i) => {\n const cloneChild = child.cloneNode(true) as SVGGElement;\n batchCloneCSSStyle(child, cloneChild, inlineStyleClassNames as string);\n\n await batchConvertImage(child, cloneChild);\n newHostElement.appendChild(cloneChild);\n })\n );\n cloneSvgElement.appendChild(newHostElement);\n return cloneSvgElement;\n}\n\n/**\n * current board transfer pictures\n * @param board board\n * @param options parameter configuration\n * @returns images in the specified format base64\n */\nexport async function toImage(board: PlaitBoard, options: ToImageOptions) {\n if (!board) {\n return undefined;\n }\n const elements = options.elements || findElements(board, { match: () => true, recursion: () => true, isReverse: false });\n const targetRectangle = getRectangleByElements(board, elements, false);\n const { ratio = 2, fillStyle = 'transparent' } = options;\n const { width, height } = targetRectangle;\n const ratioWidth = width * ratio;\n const ratioHeight = height * ratio;\n\n const cloneSvgElement = await cloneSvg(board, elements, targetRectangle, options);\n const { canvas, ctx } = createCanvas(ratioWidth, ratioHeight, fillStyle);\n\n const svgStr = new XMLSerializer().serializeToString(cloneSvgElement);\n const imgSrc = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgStr)}`;\n\n try {\n const img = await loadImage(imgSrc);\n ctx.drawImage(img, 0, 0, ratioWidth, ratioHeight);\n return canvas.toDataURL('image/png');\n } catch (error) {\n console.error('Error converting SVG to image:', error);\n return undefined;\n }\n}\n\n/**\n * download the file with the specified name\n * @param url download url\n * @param name file name\n */\nexport function downloadImage(url: string, name: string) {\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n a.click();\n a.remove();\n}\n","import { PlaitElement } from '../../interfaces';\n\nexport enum WritableClipboardType {\n 'medias' = 'medias',\n 'elements' = 'elements'\n}\n\nexport enum WritableClipboardOperationType {\n 'copy' = 'copy',\n 'cut' = 'cut',\n 'duplicate' = 'duplicate',\n 'paste' = 'paste'\n}\n\nexport type WritableClipboardData = PlaitElement[] | any[];\n\nexport interface WritableClipboardContext {\n text: string;\n type: WritableClipboardType;\n elements: WritableClipboardData;\n}\n\nexport interface ClipboardData {\n files?: File[];\n elements?: PlaitElement[];\n medias?: any[];\n text?: string;\n operationType?: WritableClipboardOperationType;\n}\n","import { ClipboardData, WritableClipboardContext, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const buildPlaitHtml = (type: WritableClipboardType, data: WritableClipboardData) => {\n const stringifiedClipboard = replaceAngleBrackets(\n JSON.stringify({\n type,\n data\n })\n );\n return `<plait>${stringifiedClipboard}</plait>`;\n};\n\nexport const getClipboardFromHtml = (html: string): ClipboardData | null => {\n let plaitString = html?.match(/<plait[^>]*>(.*)<\\/plait>/)?.[1];\n if (plaitString) {\n plaitString = reverseReplaceAngleBrackets(plaitString);\n try {\n const plaitJson = JSON.parse(plaitString);\n if (plaitJson) {\n if (plaitJson.type === WritableClipboardType.elements) {\n return {\n elements: plaitJson.data\n };\n } else if (plaitJson.type === WritableClipboardType.medias) {\n return {\n medias: plaitJson.data\n };\n }\n }\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n return null;\n};\n\nexport const stripHtml = (html: string) => {\n // See <https://github.com/developit/preact-markup/blob/4788b8d61b4e24f83688710746ee36e7464f7bbc/src/parse-markup.js#L60-L69>\n const doc = document.implementation.createHTMLDocument('');\n doc.documentElement.innerHTML = html.trim();\n return doc.body.textContent || doc.body.innerText || '';\n};\n\nexport const getProbablySupportsClipboardWrite = () => {\n return 'clipboard' in navigator && 'write' in navigator.clipboard;\n};\n\nexport const getProbablySupportsClipboardWriteText = () => {\n return 'clipboard' in navigator && 'writeText' in navigator.clipboard;\n};\n\nexport const getProbablySupportsClipboardRead = () => {\n return 'clipboard' in navigator && 'read' in navigator.clipboard;\n};\n\nexport const createClipboardContext = (\n type: WritableClipboardType,\n elements: WritableClipboardData,\n text: string\n): WritableClipboardContext => {\n return {\n type,\n elements,\n text\n };\n};\n\nexport const addClipboardContext = (\n clipboardContext: WritableClipboardContext,\n addition: WritableClipboardContext\n): WritableClipboardContext => {\n const { type, elements, text } = clipboardContext;\n if (type === addition.type) {\n return {\n type,\n elements: elements.concat(addition.elements),\n text: text + ' ' + addition.text\n };\n }\n return clipboardContext;\n};\n\nexport const addOrCreateClipboardContext = (clipboardContext: WritableClipboardContext | null, addition: WritableClipboardContext) => {\n if (!clipboardContext) {\n return addition;\n } else {\n return addClipboardContext(clipboardContext, addition);\n }\n};\n\nexport const replaceAngleBrackets = (str: string) => {\n return str.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n};\n\nexport const reverseReplaceAngleBrackets = (str: string) => {\n return str.replace(/&lt;/g, '<').replace(/&gt;/g, '>');\n};\n","import { buildPlaitHtml, getClipboardFromHtml } from './common';\nimport { ClipboardData, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const setDataTransferClipboard = (dataTransfer: DataTransfer | null, type: WritableClipboardType, data: WritableClipboardData) => {\n dataTransfer?.setData(`text/html`, buildPlaitHtml(type, data));\n};\n\nexport const setDataTransferClipboardText = (data: DataTransfer | null, text: string) => {\n data?.setData(`text/plain`, text);\n};\n\nexport const getDataTransferClipboard = (data: DataTransfer | null): ClipboardData => {\n const html = data?.getData(`text/html`);\n if (html) {\n const htmlClipboardData = getClipboardFromHtml(html);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n }\n\n return {};\n};\n\nexport const getDataTransferClipboardText = (data: DataTransfer | null) => {\n if (!data) {\n return {};\n }\n const text = data?.getData(`text/plain`);\n if (text) {\n const htmlClipboardData = getClipboardFromHtml(text);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n }\n return {\n text\n };\n};\n","import {\n buildPlaitHtml,\n getClipboardFromHtml,\n getProbablySupportsClipboardRead,\n getProbablySupportsClipboardWrite,\n stripHtml\n} from './common';\nimport { ClipboardData, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const setNavigatorClipboard = async (type: WritableClipboardType, data: WritableClipboardData, text: string = '') => {\n let textClipboard = text;\n if (getProbablySupportsClipboardWrite()) {\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([buildPlaitHtml(type, data)], {\n type: 'text/html'\n }),\n 'text/plain': new Blob([JSON.stringify(textClipboard ?? data)], { type: 'text/plain' })\n })\n ]);\n }\n};\n\nexport const getNavigatorClipboard = async (): Promise<ClipboardData> => {\n if (!getProbablySupportsClipboardRead()) {\n return {};\n }\n const clipboardItems = await navigator.clipboard.read();\n let clipboardData: ClipboardData = {};\n\n if (Array.isArray(clipboardItems) && clipboardItems[0] instanceof ClipboardItem) {\n for (const item of clipboardItems) {\n if (isFile(item)) {\n const clipboardFiles = item.types.filter(type => type.match(/^image\\//));\n const fileBlobs = await Promise.all(clipboardFiles.map(type => item.getType(type)!));\n const urls = (fileBlobs.filter(Boolean) as (File | Blob)[]).map(blob => URL.createObjectURL(blob));\n const files = await Promise.all(\n urls.map(async url => {\n const blob = await (await fetch(url)).blob();\n return new File([blob], 'plait-file', { type: blob.type });\n })\n );\n return {\n files\n };\n }\n if (item.types.includes('text/html')) {\n const htmlContent = await blobAsString(await item.getType('text/html'));\n const htmlClipboardData = getClipboardFromHtml(htmlContent);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n if (htmlContent && htmlContent.trim()) {\n clipboardData = { text: stripHtml(htmlContent) };\n }\n }\n if (item.types.includes('text/plain')) {\n const textContent = await blobAsString(await item.getType('text/plain'));\n clipboardData = {\n text: stripHtml(textContent)\n };\n }\n }\n }\n return clipboardData;\n};\n\nconst isFile = (item: ClipboardItem) => {\n return item.types.find(i => i.match(/^image\\//));\n};\n\nconst blobAsString = (blob: Blob) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', () => {\n const text = reader.result;\n resolve(text as string);\n });\n reader.addEventListener('error', () => {\n reject(reader.error);\n });\n reader.readAsText(blob);\n });\n};\n","import {\n buildPlaitHtml,\n getProbablySupportsClipboardRead,\n getProbablySupportsClipboardWrite,\n getProbablySupportsClipboardWriteText\n} from './common';\nimport {\n getDataTransferClipboard,\n getDataTransferClipboardText,\n setDataTransferClipboard,\n setDataTransferClipboardText\n} from './data-transfer';\nimport { getNavigatorClipboard, setNavigatorClipboard } from './navigator-clipboard';\nimport { ClipboardData, WritableClipboardContext } from './types';\n\nexport const getClipboardData = async (dataTransfer: DataTransfer | null): Promise<ClipboardData> => {\n let clipboardData = {};\n if (dataTransfer) {\n if (dataTransfer.files.length) {\n return { files: Array.from(dataTransfer.files) };\n }\n clipboardData = getDataTransferClipboard(dataTransfer);\n if (Object.keys(clipboardData).length === 0) {\n clipboardData = getDataTransferClipboardText(dataTransfer);\n }\n return clipboardData;\n }\n if (getProbablySupportsClipboardRead()) {\n return await getNavigatorClipboard();\n }\n return clipboardData;\n};\n\nexport const setClipboardData = async (dataTransfer: DataTransfer | null, clipboardContext: WritableClipboardContext | null) => {\n if (!clipboardContext) {\n return;\n }\n const { type, elements, text } = clipboardContext;\n\n if (getProbablySupportsClipboardWrite()) {\n return await setNavigatorClipboard(type, elements, text);\n }\n\n if (dataTransfer) {\n setDataTransferClipboard(dataTransfer, type, elements);\n setDataTransferClipboardText(dataTransfer, text);\n return;\n }\n\n // Compatible with situations where navigator.clipboard.write is not supported and dataTransfer is empty\n // Such as contextmenu copy in Firefox.\n if (getProbablySupportsClipboardWriteText()) {\n return await navigator.clipboard.writeText(buildPlaitHtml(type, elements));\n }\n};\n","import { ACTIVE_STROKE_WIDTH, SELECTION_RECTANGLE_BOUNDING_CLASS_NAME, SELECTION_RECTANGLE_CLASS_NAME } from '../constants';\nimport {\n PlaitBoard,\n PlaitElement,\n PlaitGroup,\n PlaitOperation,\n PlaitPluginKey,\n PlaitPointerType,\n RectangleClient,\n SELECTION_BORDER_COLOR,\n WithSelectionPluginOptions\n} from '../interfaces';\nimport { setDragging } from './dnd';\nimport { getRectangleByElements } from './element';\nimport { BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_TEMPORARY_ELEMENTS } from './weak-maps';\nimport { drawRectangle } from './drawing/rectangle';\nimport { cacheSelectedElements, getSelectedElements } from './selected-element';\nimport { getSelectionAngle, setAngleForG } from './angle';\nimport { filterSelectedGroups, getAllElementsInGroup, getElementsInGroup, getElementsInGroupByElement, getGroupByElement } from './group';\nimport { uniqueById } from './helper';\nimport { Selection } from '../interfaces/selection';\nimport { PlaitOptionsBoard } from '../plugins/with-options';\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 setDragging(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 setDragging(board, false);\n}\n\nexport function isHandleSelection(board: PlaitBoard) {\n const options = getSelectionOptions(board);\n return board.pointer !== PlaitPointerType.hand && !options.isDisabledSelection && !PlaitBoard.isReadonly(board);\n}\n\nexport function hasSetSelectionOperation(board: PlaitBoard) {\n return !!board.operations.find(op => PlaitOperation.isSetSelectionOperation(op));\n}\n\nexport function getTemporaryElements(board: PlaitBoard) {\n const ref = BOARD_TO_TEMPORARY_ELEMENTS.get(board);\n if (ref) {\n return ref.elements;\n } else {\n return undefined;\n }\n}\n\nexport function getTemporaryRef(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 drawSelectionRectangleG(board: PlaitBoard) {\n const elements = getSelectedElements(board);\n const rectangle = getRectangleByElements(board, elements, false);\n if (rectangle.width > 0 && rectangle.height > 0 && elements.length > 1) {\n const selectionRectangleG = drawRectangle(board, RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH), {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n fillStyle: 'solid'\n });\n selectionRectangleG.classList.add(SELECTION_RECTANGLE_CLASS_NAME, SELECTION_RECTANGLE_BOUNDING_CLASS_NAME);\n const angle = getSelectionAngle(elements);\n if (angle) {\n setAngleForG(selectionRectangleG, RectangleClient.getCenterPoint(rectangle), angle);\n }\n return selectionRectangleG;\n }\n return null;\n}\n\nexport function setSelectedElementsWithGroup(board: PlaitBoard, elements: PlaitElement[], isShift: boolean) {\n if (!board.selection) {\n return;\n }\n const selectedElements = getSelectedElements(board);\n if (!Selection.isCollapsed(board.selection)) {\n let newElements = [...selectedElements];\n elements.forEach(item => {\n if (!item.groupId) {\n newElements.push(item);\n } else {\n newElements.push(...getElementsInGroupByElement(board, item));\n }\n });\n cacheSelectedElements(board, uniqueById(newElements));\n return;\n }\n if (Selection.isCollapsed(board.selection)) {\n const hitElement = elements[0];\n const hitElementGroups = getGroupByElement(board, hitElement, true) as PlaitGroup[];\n if (hitElementGroups.length) {\n const elementsInHighestGroup = getElementsInGroup(board, hitElementGroups[hitElementGroups.length - 1], true) || [];\n const isSelectGroupElement = selectedElements.some(element => elementsInHighestGroup.map(item => item.id).includes(element.id));\n if (isShift) {\n cacheSelectedElementsWithGroupOnShift(board, elements, isSelectGroupElement, elementsInHighestGroup);\n } else {\n cacheSelectedElementsWithGroup(board, elements, isSelectGroupElement, hitElementGroups);\n }\n }\n }\n}\n\nexport function cacheSelectedElementsWithGroupOnShift(\n board: PlaitBoard,\n elements: PlaitElement[],\n isSelectGroupElement: boolean,\n elementsInHighestGroup: PlaitElement[]\n) {\n const selectedElements = getSelectedElements(board);\n let newElements = [...selectedElements];\n const hitElement = elements[0];\n let pendingElements: PlaitElement[] = [];\n if (!isSelectGroupElement) {\n pendingElements = elementsInHighestGroup;\n } else {\n const isHitSelectedElement = selectedElements.some(item => item.id === hitElement.id);\n const selectedElementsInGroup = elementsInHighestGroup.filter(item => selectedElements.includes(item));\n if (isHitSelectedElement) {\n pendingElements = selectedElementsInGroup.filter(item => item.id !== hitElement.id);\n } else {\n pendingElements.push(...selectedElementsInGroup, ...elements);\n }\n }\n elementsInHighestGroup.forEach(element => {\n if (newElements.includes(element)) {\n newElements.splice(newElements.indexOf(element), 1);\n }\n });\n if (pendingElements.length) {\n newElements.push(...pendingElements);\n }\n cacheSelectedElements(board, uniqueById(newElements));\n}\n\nexport function cacheSelectedElementsWithGroup(\n board: PlaitBoard,\n elements: PlaitElement[],\n isSelectGroupElement: boolean,\n hitElementGroups: PlaitGroup[]\n) {\n let newElements = [...elements];\n const selectedGroups = filterSelectedGroups(board, hitElementGroups);\n if (selectedGroups.length > 0) {\n if (selectedGroups.length > 1) {\n newElements = getAllElementsInGroup(board, selectedGroups[selectedGroups.length - 2], true);\n }\n } else {\n const elementsInGroup = getAllElementsInGroup(board, hitElementGroups[hitElementGroups.length - 1], true);\n if (!isSelectGroupElement) {\n newElements = elementsInGroup;\n }\n }\n cacheSelectedElements(board, uniqueById(newElements));\n}\n\nexport const getSelectionOptions = (board: PlaitBoard) => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithSelectionPluginOptions>(PlaitPluginKey.withSelection);\n return options;\n};\n\nexport const setSelectionOptions = (board: PlaitBoard, options: Partial<WithSelectionPluginOptions>) => {\n (board as PlaitOptionsBoard).setPluginOptions<WithSelectionPluginOptions>(PlaitPluginKey.withSelection, options);\n};\n","import { ACTIVE_STROKE_WIDTH } from '../constants';\nimport { Path, PlaitBoard, PlaitElement, PlaitGroup, PlaitGroupElement, RectangleClient, SELECTION_BORDER_COLOR } from '../interfaces';\nimport { getSelectionAngle, setAngleForG } from './angle';\nimport { createG } from './dom';\nimport { drawRectangle } from './drawing/rectangle';\nimport { getRectangleByElements } from './element';\nimport { idCreator } from './id-creator';\nimport { getSelectedElements } from './selected-element';\nimport { isSelectionMoving } from './selection';\nimport { depthFirstRecursion } from './tree';\nimport { moveElementsToNewPath } from './common';\nimport { sortElements } from './position';\n\nexport const getElementsInGroup = (board: PlaitBoard, group: PlaitGroup, recursion?: boolean, includeGroup?: boolean) => {\n let result: PlaitElement[] = [];\n const elements = board.children.filter(value => (value as PlaitElement).groupId === group.id) as PlaitElement[];\n if (recursion) {\n elements.forEach(item => {\n if (PlaitGroupElement.isGroup(item)) {\n if (includeGroup) {\n result.push(item);\n }\n result.push(...getElementsInGroup(board, item, recursion, includeGroup));\n } else {\n result.push(item);\n }\n });\n } else {\n result = includeGroup ? elements : (elements.filter(item => !PlaitGroupElement.isGroup(item)) as PlaitElement[]);\n }\n return result;\n};\n\nexport const getAllElementsInGroup = (board: PlaitBoard, group: PlaitGroup, recursion?: boolean, includeGroup?: boolean) => {\n const elementsInGroup = getElementsInGroup(board, group, recursion, includeGroup);\n const result: PlaitElement[] = [];\n elementsInGroup.forEach(element => {\n depthFirstRecursion(\n element,\n node => {\n result.push(node);\n },\n () => true\n );\n });\n return result;\n};\n\nexport const getRectangleByGroup = (board: PlaitBoard, group: PlaitGroup, recursion?: boolean) => {\n const elementsInGroup = getAllElementsInGroup(board, group, recursion) as PlaitElement[];\n return getRectangleByElements(board, elementsInGroup, false);\n};\n\nexport const getGroupByElement = (\n board: PlaitBoard,\n element: PlaitElement,\n recursion?: boolean,\n originElements?: PlaitElement[]\n): PlaitGroup | PlaitGroup[] | null => {\n const group = (originElements || board.children).find(item => item.id === element?.groupId);\n if (!group) {\n return recursion ? [] : null;\n }\n if (recursion) {\n const groups = [group];\n const grandGroups = getGroupByElement(board, group, recursion, originElements) as PlaitGroup[];\n if (grandGroups.length) {\n groups.push(...grandGroups);\n }\n return groups as PlaitGroup[];\n } else {\n return group as PlaitGroup;\n }\n};\n\nexport const getHighestGroup = (board: PlaitBoard, element: PlaitElement) => {\n const hitElementGroups = getGroupByElement(board, element, true) as PlaitGroup[];\n if (hitElementGroups.length) {\n return hitElementGroups[hitElementGroups.length - 1];\n }\n return null;\n};\n\nexport const getElementsInGroupByElement = (board: PlaitBoard, element: PlaitElement) => {\n const highestGroup = getHighestGroup(board, element);\n if (highestGroup) {\n return getAllElementsInGroup(board, highestGroup, true) as PlaitGroup[];\n } else {\n return [element];\n }\n};\n\nexport const isSelectedElementOrGroup = (board: PlaitBoard, element: PlaitElement, elements?: PlaitElement[]) => {\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n if (PlaitGroupElement.isGroup(element)) {\n return isSelectedAllElementsInGroup(board, element, elements);\n }\n return selectedElements.map(item => item.id).includes(element.id);\n};\n\nexport const isSelectedAllElementsInGroup = (board: PlaitBoard, group: PlaitGroup, elements?: PlaitElement[]) => {\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n const elementsInGroup = getElementsInGroup(board, group, true);\n return elementsInGroup.every(item => selectedElements.map(element => element.id).includes(item.id));\n};\n\nexport const filterSelectedGroups = (board: PlaitBoard, groups: PlaitGroup[], elements?: PlaitElement[]): PlaitGroup[] => {\n const selectedGroups: PlaitGroup[] = [];\n groups.forEach(item => {\n if (isSelectedElementOrGroup(board, item, elements)) {\n selectedGroups.push(item);\n }\n });\n return selectedGroups;\n};\n\nexport const getSelectedGroups = (board: PlaitBoard, elements?: PlaitElement[], originElements?: PlaitElement[]): PlaitGroup[] => {\n const highestSelectedGroups = getHighestSelectedGroups(board, elements, originElements);\n const groups: PlaitGroup[] = [];\n highestSelectedGroups.forEach(item => {\n groups.push(item);\n const elementsInGroup = getElementsInGroup(board, item, true, true);\n groups.push(...(elementsInGroup.filter(item => PlaitGroupElement.isGroup(item)) as PlaitGroup[]));\n });\n return groups;\n};\n\nexport const getHighestSelectedGroup = (\n board: PlaitBoard,\n element: PlaitElement,\n elements?: PlaitElement[],\n originElements?: PlaitElement[]\n): PlaitGroup | null => {\n const hitElementGroups = getGroupByElement(board, element, true, originElements) as PlaitGroup[];\n const selectedGroups = filterSelectedGroups(board, hitElementGroups, elements);\n if (selectedGroups.length) {\n return selectedGroups[selectedGroups.length - 1];\n }\n return null;\n};\n\nexport const getHighestSelectedGroups = (board: PlaitBoard, elements?: PlaitElement[], originElements?: PlaitElement[]): PlaitGroup[] => {\n let result: PlaitGroup[] = [];\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n selectedElements.forEach(item => {\n if (item.groupId) {\n const group = getHighestSelectedGroup(board, item, elements, originElements);\n if (group && !result.includes(group)) {\n result.push(group);\n }\n }\n });\n return result;\n};\n\nexport const getSelectedIsolatedElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n let result: PlaitElement[] = [];\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n selectedElements\n .filter(item => !PlaitGroupElement.isGroup(item))\n .forEach(item => {\n if (!item.groupId) {\n result.push(item);\n } else {\n const group = getHighestSelectedGroup(board, item, elements);\n if (!group) {\n result.push(item);\n }\n }\n });\n return result;\n};\n\nexport const getSelectedIsolatedElementsCanAddToGroup = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedIsolatedElements = getSelectedIsolatedElements(board, elements);\n return selectedIsolatedElements.filter(item => board.canAddToGroup(item));\n};\n\nexport const getHighestSelectedElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n return [...getHighestSelectedGroups(board, elements), ...getSelectedIsolatedElements(board, elements)];\n};\n\nexport const createGroupRectangleG = (board: PlaitBoard, elements: PlaitElement[]): SVGGElement | null => {\n const selectedElementIds = getSelectedElements(board).map(item => item.id);\n let groupRectangleG: SVGGElement | null = null;\n const isMoving = isSelectionMoving(board);\n\n elements.forEach(item => {\n const isRender = (!selectedElementIds.includes(item.id) && !isMoving) || isMoving;\n if (item.groupId && isRender) {\n if (!groupRectangleG) {\n groupRectangleG = createG();\n }\n const elements = getElementsInGroupByElement(board, item);\n const rectangle = getRectangleByElements(board, elements, false);\n const rectangleG = drawRectangle(board, rectangle, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n strokeLineDash: [5]\n });\n const angle = getSelectionAngle(elements);\n if (angle) {\n setAngleForG(rectangleG, RectangleClient.getCenterPoint(rectangle), angle);\n }\n groupRectangleG.append(rectangleG);\n }\n });\n return groupRectangleG;\n};\n\nexport const createGroup = (groupId?: string): PlaitGroup => {\n return groupId\n ? {\n id: idCreator(),\n type: 'group',\n groupId\n }\n : {\n id: idCreator(),\n type: 'group'\n };\n};\n\nexport const nonGroupInHighestSelectedElements = (elements: PlaitElement[]) => {\n return elements.every(item => !item.groupId);\n};\n\nexport const hasSelectedElementsInSameGroup = (elements: PlaitElement[]) => {\n return elements.every(item => item.groupId && item.groupId === elements[0].groupId);\n};\n\nexport const canAddGroup = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const highestSelectedElements = getHighestSelectedElements(board, elements);\n const rootElements = highestSelectedElements.filter(item => board.canAddToGroup(item));\n if (rootElements.length > 1) {\n return nonGroupInHighestSelectedElements(rootElements) || hasSelectedElementsInSameGroup(rootElements);\n }\n return false;\n};\n\nexport const canRemoveGroup = (board: PlaitBoard, elements?: PlaitElement[], originElements?: PlaitElement[]) => {\n const selectedGroups = getHighestSelectedGroups(board, elements, originElements);\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n return selectedElements.length > 0 && selectedGroups.length > 0;\n};\n\nexport const getEditingGroup = (board: PlaitBoard, element: PlaitElement) => {\n const groups = getGroupByElement(board, element, true) as PlaitGroup[];\n let editingGroup = null;\n if (groups?.length) {\n for (let i = 0; i < groups?.length; i++) {\n if (!isSelectedAllElementsInGroup(board, groups[i])) {\n editingGroup = groups[i];\n break;\n }\n }\n }\n return editingGroup;\n};\n\nexport const moveElementsToNewPathAfterAddGroup = (board: PlaitBoard, selectedElements: PlaitElement[], newPath: Path) => {\n const moveElements = [...selectedElements];\n sortElements(board, moveElements);\n moveElements.pop();\n moveElementsToNewPath(\n board,\n moveElements.map(element => {\n return {\n element,\n newPath\n };\n })\n );\n};\n","import { PlaitBoard, PlaitElement, Point } from '../interfaces';\nimport { WritableClipboardOperationType } from './clipboard';\nimport { setClipboardData } from './clipboard/clipboard';\nimport { getRectangleByElements } from './element';\nimport { getSelectedElements } from './selected-element';\n\nexport const deleteFragment = (board: PlaitBoard) => {\n const elements = board.getDeletedFragment([]);\n board.deleteFragment(elements);\n};\n\nexport const setFragment = (board: PlaitBoard, operationType: WritableClipboardOperationType, clipboardData: DataTransfer | null) => {\n const selectedElements = getSelectedElements(board);\n const rectangle = getRectangleByElements(board, selectedElements, false);\n const clipboardContext = board.buildFragment(null, rectangle, operationType);\n clipboardContext && setClipboardData(clipboardData, clipboardContext);\n};\n\nexport const duplicateElements = (board: PlaitBoard, elements?: PlaitElement[], point?: Point) => {\n const targetElements = elements?.length ? elements : getSelectedElements(board);\n const targetRectangle = getRectangleByElements(board, targetElements, false);\n const clipboardContext = board.buildFragment(null, targetRectangle, WritableClipboardOperationType.duplicate, targetElements);\n const stringifiedContext = clipboardContext && JSON.stringify(clipboardContext);\n const clonedContext = stringifiedContext && JSON.parse(stringifiedContext);\n clonedContext &&\n board.insertFragment(\n {\n ...clonedContext,\n text: undefined\n },\n point || [targetRectangle.x + targetRectangle.width / 2, targetRectangle.y + targetRectangle.height / 2],\n WritableClipboardOperationType.duplicate\n );\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, SELECTION_BORDER_COLOR } from '../../interfaces';\nimport { getRectangleByAngle } from '../angle';\nimport { createG } from '../dom';\nimport { findElements } from '../element';\n\nexport interface SnapDelta {\n deltaX: number;\n deltaY: number;\n}\n\nexport interface SnapRef extends SnapDelta {\n snapG: SVGGElement;\n}\n\nexport interface GapSnapRef {\n before: { distance: number; index: number }[];\n after: { distance: number; index: number }[];\n}\n\ntype PointSnapLineRef = {\n axis: number;\n isHorizontal: boolean;\n pointRectangles: RectangleClient[];\n};\n\ntype TripleSnapAxis = [number, number, number];\n\nexport const SNAP_TOLERANCE = 2;\n\nconst SNAP_SPACING = 24;\n\nexport function getSnapRectangles(board: PlaitBoard, activeElements: PlaitElement[]) {\n const elements = findElements(board, {\n match: element => board.isAlign(element) && !activeElements.some(item => item.id === element.id),\n recursion: () => true,\n isReverse: false\n });\n return elements.map(item => {\n const rectangle = board.getRectangle(item)!;\n return getRectangleByAngle(rectangle, item.angle || 0);\n });\n}\n\nexport function getBarPoint(point: Point, isHorizontal: boolean) {\n return isHorizontal\n ? [\n [point[0], point[1] - 4],\n [point[0], point[1] + 4]\n ]\n : [\n [point[0] - 4, point[1]],\n [point[0] + 4, point[1]]\n ];\n}\n\nexport function getMinPointDelta(pointRectangles: RectangleClient[], axis: number, isHorizontal: boolean) {\n let delta = SNAP_TOLERANCE;\n pointRectangles.forEach(item => {\n const distance = getNearestDelta(axis, item, isHorizontal);\n if (Math.abs(distance) < Math.abs(delta)) {\n delta = distance;\n }\n });\n return delta;\n}\n\nexport const getNearestDelta = (axis: number, rectangle: RectangleClient, isHorizontal: boolean) => {\n const pointAxis = getTripleAxis(rectangle, isHorizontal);\n const deltas = pointAxis.map(item => item - axis);\n const absDeltas = deltas.map(item => Math.abs(item));\n const index = absDeltas.indexOf(Math.min(...absDeltas));\n return deltas[index];\n};\n\nexport const getTripleAxis = (rectangle: RectangleClient, isHorizontal: boolean): TripleSnapAxis => {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n return [rectangle[axis], rectangle[axis] + rectangle[side] / 2, rectangle[axis] + rectangle[side]];\n};\n\nexport function getNearestPointRectangle(snapRectangles: RectangleClient[], activeRectangle: RectangleClient) {\n let minDistance = Infinity;\n let nearestRectangle = snapRectangles[0];\n\n snapRectangles.forEach(item => {\n const distance = Math.sqrt(Math.pow(activeRectangle.x - item.x, 2) + Math.pow(activeRectangle.y - item.y, 2));\n if (distance < minDistance) {\n minDistance = distance;\n nearestRectangle = item;\n }\n });\n return nearestRectangle;\n}\n\nexport const isSnapPoint = (axis: number, rectangle: RectangleClient, isHorizontal: boolean) => {\n const pointAxis = getTripleAxis(rectangle, isHorizontal);\n return pointAxis.includes(axis);\n};\n\nexport function drawPointSnapLines(\n board: PlaitBoard,\n activeRectangle: RectangleClient,\n snapRectangles: RectangleClient[],\n drawHorizontal = true,\n drawVertical = true,\n snapMiddle = false\n) {\n let pointLinePoints: [Point, Point][] = [];\n const pointAxisX = getTripleAxis(activeRectangle, true);\n const pointAxisY = getTripleAxis(activeRectangle, false);\n const pointLineRefs: PointSnapLineRef[] = [\n {\n axis: pointAxisX[0],\n isHorizontal: true,\n pointRectangles: []\n },\n {\n axis: pointAxisX[1],\n isHorizontal: true,\n pointRectangles: []\n },\n {\n axis: pointAxisX[2],\n isHorizontal: true,\n pointRectangles: []\n },\n {\n axis: pointAxisY[0],\n isHorizontal: false,\n pointRectangles: []\n },\n {\n axis: pointAxisY[1],\n isHorizontal: false,\n pointRectangles: []\n },\n {\n axis: pointAxisY[2],\n isHorizontal: false,\n pointRectangles: []\n }\n ];\n for (let index = 0; index < snapRectangles.length; index++) {\n const element = snapRectangles[index];\n if (isSnapPoint(pointLineRefs[0].axis, element, pointLineRefs[0].isHorizontal)) {\n pointLineRefs[0].pointRectangles.push(element);\n }\n if (isSnapPoint(pointLineRefs[1].axis, element, pointLineRefs[1].isHorizontal)) {\n pointLineRefs[1].pointRectangles.push(element);\n }\n if (isSnapPoint(pointLineRefs[2].axis, element, pointLineRefs[2].isHorizontal)) {\n pointLineRefs[2].pointRectangles.push(element);\n }\n if (isSnapPoint(pointLineRefs[3].axis, element, pointLineRefs[3].isHorizontal)) {\n pointLineRefs[3].pointRectangles.push(element);\n }\n if (isSnapPoint(pointLineRefs[4].axis, element, pointLineRefs[4].isHorizontal)) {\n pointLineRefs[4].pointRectangles.push(element);\n }\n if (isSnapPoint(pointLineRefs[5].axis, element, pointLineRefs[5].isHorizontal)) {\n pointLineRefs[5].pointRectangles.push(element);\n }\n }\n\n const setResizePointSnapLine = (axis: number, pointRectangle: RectangleClient, isHorizontal: boolean) => {\n const boundingRectangle = RectangleClient.inflate(\n RectangleClient.getBoundingRectangle([activeRectangle, pointRectangle]),\n SNAP_SPACING\n );\n if (isHorizontal) {\n const pointStart = [axis, boundingRectangle.y] as Point;\n const pointEnd = [axis, boundingRectangle.y + boundingRectangle.height] as Point;\n pointLinePoints.push([pointStart, pointEnd]);\n } else {\n const pointStart = [boundingRectangle.x, axis] as Point;\n const pointEnd = [boundingRectangle.x + boundingRectangle.width, axis] as Point;\n pointLinePoints.push([pointStart, pointEnd]);\n }\n };\n if (drawHorizontal && pointLineRefs[0].pointRectangles.length) {\n const leftRectangle =\n pointLineRefs[0].pointRectangles.length === 1\n ? pointLineRefs[0].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[0].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[0].axis, leftRectangle, pointLineRefs[0].isHorizontal);\n }\n if (drawHorizontal && snapMiddle && pointLineRefs[1].pointRectangles.length) {\n const middleRectangle =\n pointLineRefs[1].pointRectangles.length === 1\n ? pointLineRefs[1].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[1].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[1].axis, middleRectangle, pointLineRefs[1].isHorizontal);\n }\n\n if (drawHorizontal && pointLineRefs[2].pointRectangles.length) {\n const rightRectangle =\n pointLineRefs[2].pointRectangles.length === 1\n ? pointLineRefs[2].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[2].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[2].axis, rightRectangle, pointLineRefs[2].isHorizontal);\n }\n\n if (drawVertical && pointLineRefs[3].pointRectangles.length) {\n const topRectangle =\n pointLineRefs[3].pointRectangles.length === 1\n ? pointLineRefs[3].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[3].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[3].axis, topRectangle, pointLineRefs[3].isHorizontal);\n }\n\n if (drawVertical && snapMiddle && pointLineRefs[4].pointRectangles.length) {\n const middleRectangle =\n pointLineRefs[4].pointRectangles.length === 1\n ? pointLineRefs[4].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[4].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[4].axis, middleRectangle, pointLineRefs[4].isHorizontal);\n }\n\n if (drawVertical && pointLineRefs[5].pointRectangles.length) {\n const rightRectangle =\n pointLineRefs[5].pointRectangles.length === 1\n ? pointLineRefs[5].pointRectangles[0]\n : getNearestPointRectangle(pointLineRefs[5].pointRectangles, activeRectangle);\n setResizePointSnapLine(pointLineRefs[5].axis, rightRectangle, pointLineRefs[5].isHorizontal);\n }\n\n return drawDashedLines(board, pointLinePoints);\n}\n\nexport function drawDashedLines(board: PlaitBoard, lines: [Point, Point][]) {\n const g = createG();\n lines.forEach(points => {\n if (!points.length) return;\n const line = PlaitBoard.getRoughSVG(board).line(points[0][0], points[0][1], points[1][0], points[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n strokeLineDash: [4, 4]\n });\n g.appendChild(line);\n });\n return g;\n}\n\nexport function drawSolidLines(board: PlaitBoard, lines: Point[][]) {\n const g = createG();\n lines.forEach(points => {\n if (!points.length) return;\n let isHorizontal = points[0][1] === points[1][1];\n const line = PlaitBoard.getRoughSVG(board).line(points[0][0], points[0][1], points[1][0], points[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(line);\n\n points.forEach(point => {\n const barPoint = getBarPoint(point, isHorizontal);\n const bar = PlaitBoard.getRoughSVG(board).line(barPoint[0][0], barPoint[0][1], barPoint[1][0], barPoint[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(bar);\n });\n });\n return g;\n}\n","import { PlaitBoard, PlaitElement, PlaitGroupElement, PlaitGroup } from '../interfaces';\nimport { MoveNodeOption, getElementsIndices } from './common';\nimport { getEditingGroup, getElementsInGroup, getGroupByElement, getHighestGroup, isSelectedAllElementsInGroup } from './group';\nimport { findIndex, findLastIndex } from './helper';\nimport { sortElements } from './position';\nimport { getSelectedElements } from './selected-element';\n\nexport const getOneMoveOptions = (board: PlaitBoard, direction: 'down' | 'up'): MoveNodeOption[] => {\n const indicesToMove = getElementsIndices(board, getSelectedElements(board));\n let groupedIndices = toContiguousGroups(board, indicesToMove);\n if (direction === 'up') {\n groupedIndices = groupedIndices.reverse();\n }\n let moveContents: MoveNodeOption[] = [];\n groupedIndices.forEach((indices, i) => {\n const leadingIndex = indices[0];\n const trailingIndex = indices[indices.length - 1];\n const boundaryIndex = direction === 'down' ? leadingIndex : trailingIndex;\n const targetIndex = getTargetIndex(board, boundaryIndex, direction);\n if (targetIndex === -1 || boundaryIndex === targetIndex) {\n return;\n }\n if (direction === 'down') {\n indices = indices.reverse();\n }\n moveContents.push(\n ...indices.map(path => {\n return {\n element: board.children[path],\n newPath: [targetIndex]\n };\n })\n );\n });\n\n return moveContents;\n};\n\nexport const getAllMoveOptions = (board: PlaitBoard, direction: 'down' | 'up'): MoveNodeOption[] => {\n const indicesToMove = getElementsIndices(board, getSelectedElements(board));\n let groupedIndices = toContiguousGroups(board, indicesToMove);\n let moveContents: MoveNodeOption[] = [];\n if (direction === 'down') {\n groupedIndices = groupedIndices.reverse();\n }\n groupedIndices.forEach(indices => {\n const leadingIndex = indices[0];\n const trailingIndex = indices[indices.length - 1];\n const boundaryIndex = direction === 'down' ? leadingIndex : trailingIndex;\n const sourceElement = board.children[boundaryIndex];\n const editingGroup = getEditingGroup(board, sourceElement);\n let targetIndex = direction === 'down' ? 0 : board.children.length - 1;\n if (editingGroup) {\n const elementsInGroup = sortElements(board, getElementsInGroup(board, editingGroup, true, true));\n targetIndex =\n direction === 'down'\n ? board.children.indexOf(elementsInGroup[0])\n : board.children.indexOf(elementsInGroup[elementsInGroup.length - 1]);\n }\n if (direction === 'down') {\n indices = indices.reverse();\n }\n moveContents.push(\n ...indices.map(path => {\n return {\n element: board.children[path],\n newPath: [targetIndex]\n };\n })\n );\n });\n\n return moveContents;\n};\n\nexport const canSetZIndex = (board: PlaitBoard) => {\n const selectedElements = getSelectedElements(board).filter(item => board.canSetZIndex(item));\n return selectedElements.length > 0;\n};\n\nconst toContiguousGroups = (board: PlaitBoard, array: number[]) => {\n let cursor = 0;\n return array.reduce((acc, value, index) => {\n if (index > 0) {\n const currentElement = board.children[value];\n const previousElement = board.children[array[index - 1]];\n const isContiguous =\n value - 1 === array[index - 1]\n ? true\n : board.children.every((item, childIndex) => {\n if (childIndex > array[index - 1] && childIndex <= value - 1) {\n return PlaitGroupElement.isGroup(item);\n }\n return true;\n });\n let isPartialSelectGroupElement = false;\n if (previousElement?.groupId || (currentElement?.groupId && previousElement?.groupId !== currentElement?.groupId)) {\n let isPartialSelectPreviousGroup = false;\n let isPartialSelectCurrentElement = false;\n if (previousElement.groupId) {\n const highestGroup = getHighestGroup(board, previousElement);\n isPartialSelectPreviousGroup = !isSelectedAllElementsInGroup(board, highestGroup!);\n }\n if (currentElement.groupId) {\n const highestGroup = getHighestGroup(board, currentElement);\n isPartialSelectCurrentElement = !isSelectedAllElementsInGroup(board, highestGroup!);\n }\n isPartialSelectGroupElement = isPartialSelectPreviousGroup || isPartialSelectCurrentElement;\n }\n if (!isContiguous || isPartialSelectGroupElement) {\n cursor = ++cursor;\n }\n }\n (acc[cursor] || (acc[cursor] = [])).push(value);\n return acc;\n }, [] as number[][]);\n};\n\n/**\n * Returns next candidate index that's available to be moved to. Currently that\n * is a non-deleted element, and not inside a group (unless we're editing it).\n */\nconst getTargetIndex = (board: PlaitBoard, boundaryIndex: number, direction: 'down' | 'up') => {\n if ((boundaryIndex === 0 && direction === 'down') || (boundaryIndex === board.children.length - 1 && direction === 'up')) {\n return -1;\n }\n const indexFilter = (element: PlaitElement) => {\n if (element.isDeleted || PlaitGroupElement.isGroup(element)) {\n return false;\n }\n return true;\n };\n const candidateIndex =\n direction === 'down'\n ? findLastIndex(board.children, el => indexFilter(el), Math.max(0, boundaryIndex - 1))\n : findIndex(board.children, el => indexFilter(el), boundaryIndex + 1);\n\n const nextElement = board.children[candidateIndex];\n if (!nextElement) {\n return -1;\n }\n\n const elements = [...board.children];\n const sourceElement = elements[boundaryIndex];\n const editingGroup = getEditingGroup(board, sourceElement);\n const nextElementGroups = (getGroupByElement(board, nextElement, true) || []) as PlaitGroup[];\n // candidate element is a sibling in current editing group → return\n if (editingGroup && sourceElement?.groupId !== nextElement?.groupId) {\n // candidate element is outside current editing group → prevent\n if (!(nextElementGroups as PlaitGroup[]).find(item => item.id === editingGroup.id)) {\n return -1;\n }\n }\n\n if (!nextElement.groupId) {\n return candidateIndex;\n }\n\n let siblingGroup: PlaitGroup;\n if (editingGroup) {\n siblingGroup = nextElementGroups[nextElementGroups.indexOf(editingGroup) - 1];\n } else {\n siblingGroup = nextElementGroups[nextElementGroups.length - 1];\n }\n if (siblingGroup) {\n let elementsInSiblingGroup = getElementsInGroup(board, siblingGroup, true, false);\n if (elementsInSiblingGroup.length) {\n elementsInSiblingGroup.sort((a, b) => {\n const indexA = board.children.findIndex(child => child.id === a.id);\n const indexB = board.children.findIndex(child => child.id === b.id);\n return indexA - indexB;\n });\n // assumes getElementsInGroup() returned elements are sorted\n // by zIndex (ascending)\n return direction === 'down'\n ? elements.indexOf(elementsInSiblingGroup[0])\n : elements.indexOf(elementsInSiblingGroup[elementsInSiblingGroup.length - 1]);\n }\n }\n\n return candidateIndex;\n};\n","export const isMobileDeviceEvent = (event: PointerEvent) => {\n return isPencilEvent(event) || isTouchEvent(event);\n};\n\nexport const isPencilEvent = (event: PointerEvent) => {\n return event.pointerType === 'pen';\n};\n\nexport const isTouchEvent = (event: PointerEvent) => {\n return event.pointerType === 'touch';\n};\n\nexport const isMouseEvent = (event: PointerEvent) => {\n return event.pointerType === 'mouse';\n};\n","import { PlaitBoard, PlaitElement } from '../interfaces';\nimport {\n getHighestSelectedGroups,\n getSelectedIsolatedElementsCanAddToGroup,\n createGroup,\n canAddGroup,\n hasSelectedElementsInSameGroup,\n canRemoveGroup,\n findElements,\n getElementsIndices,\n isIndicesContinuous,\n getSelectedElements,\n getHighestIndexOfElement,\n moveElementsToNewPathAfterAddGroup\n} from '../utils';\nimport { NodeTransforms } from './node';\n\nexport const addGroup = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedGroups = getHighestSelectedGroups(board, elements);\n const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);\n const highestSelectedElements = [...selectedGroups, ...selectedIsolatedElements];\n const group = createGroup();\n if (canAddGroup(board)) {\n highestSelectedElements.forEach(item => {\n const path = PlaitBoard.findPath(board, item);\n NodeTransforms.setNode(board, { groupId: group.id }, path);\n });\n const selectedElements = getSelectedElements(board);\n const highestIndexOfSelectedElement = getHighestIndexOfElement(board, selectedElements);\n const indices = getElementsIndices(board, highestSelectedElements);\n const isContinuous = isIndicesContinuous(indices);\n if (!isContinuous) {\n moveElementsToNewPathAfterAddGroup(board, selectedElements, [highestIndexOfSelectedElement - 1]);\n }\n if (hasSelectedElementsInSameGroup(highestSelectedElements)) {\n const newGroupId = selectedIsolatedElements[0].groupId;\n NodeTransforms.insertNode(\n board,\n {\n ...group,\n groupId: newGroupId\n },\n [board.children.length]\n );\n } else {\n NodeTransforms.insertNode(board, group, [board.children.length]);\n }\n }\n};\n\nexport const removeGroup = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedGroups = getHighestSelectedGroups(board, elements);\n if (canRemoveGroup(board)) {\n selectedGroups.forEach(group => {\n const elementsInGroup = findElements(board, {\n match: item => item.groupId === group.id,\n recursion: () => false\n });\n elementsInGroup.forEach(element => {\n const path = PlaitBoard.findPath(board, element);\n NodeTransforms.setNode(board, { groupId: group.groupId || undefined }, path);\n });\n });\n selectedGroups\n .map(group => {\n const groupPath = PlaitBoard.findPath(board, group);\n const groupRef = board.pathRef(groupPath);\n return () => {\n groupRef.current && NodeTransforms.removeNode(board, groupRef.current);\n groupRef.unref();\n };\n })\n .forEach(action => {\n action();\n });\n }\n};\n\nexport interface GroupTransforms {\n addGroup: (board: PlaitBoard, elements?: PlaitElement[]) => void;\n removeGroup: (board: PlaitBoard, elements?: PlaitElement[]) => void;\n}\n\nexport const GroupTransforms = {\n addGroup,\n removeGroup\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';\nimport { getTemporaryRef } from '../utils';\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 addSelectionWithTemporaryElements: (board: PlaitBoard, elements: PlaitElement[]) => void;\n}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection,\n addSelectionWithTemporaryElements\n};\n\nexport function addSelectionWithTemporaryElements(board: PlaitBoard, elements: PlaitElement[]) {\n const timeoutId = setTimeout(() => {\n setSelection(board, { anchor: [0, 0], focus: [0, 0] });\n }, 0);\n let ref = getTemporaryRef(board);\n if (ref) {\n clearTimeout(ref.timeoutId);\n const currentElements = ref.elements;\n ref.elements.push(...elements.filter(element => !currentElements.includes(element)));\n ref.timeoutId = timeoutId;\n } else {\n BOARD_TO_TEMPORARY_ELEMENTS.set(board, { timeoutId, elements });\n }\n}\n","import { PlaitBoard } from '../interfaces';\nimport { moveElementsToNewPath } from '../utils';\nimport { getAllMoveOptions, getOneMoveOptions } from '../utils/z-index';\n\nconst moveToTop = (board: PlaitBoard) => {\n const moveOptions = getAllMoveOptions(board, 'up');\n moveElementsToNewPath(board, moveOptions);\n};\n\nconst moveToBottom = (board: PlaitBoard) => {\n const moveOptions = getAllMoveOptions(board, 'down');\n moveElementsToNewPath(board, moveOptions);\n};\n\nconst moveUp = (board: PlaitBoard) => {\n const moveOptions = getOneMoveOptions(board, 'up');\n moveElementsToNewPath(board, moveOptions);\n};\n\nconst moveDown = (board: PlaitBoard) => {\n const moveOptions = getOneMoveOptions(board, 'down');\n moveElementsToNewPath(board, moveOptions);\n};\n\nexport interface ZIndexTransforms {\n moveUp: (board: PlaitBoard) => void;\n moveDown: (board: PlaitBoard) => void;\n moveToTop: (board: PlaitBoard) => void;\n moveToBottom: (board: PlaitBoard) => void;\n}\n\nexport const ZIndexTransforms = { moveUp, moveDown, moveToTop, moveToBottom };\n","import { PlaitBoard } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { removeSelectedElement } from '../utils/selected-element';\nimport { removeNode } from './node';\n\nexport const removeElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n elements\n .map(element => {\n const path = PlaitBoard.findPath(board, element);\n const ref = board.pathRef(path);\n return () => {\n ref.current && removeNode(board, ref.current);\n ref.unref();\n removeSelectedElement(board, element, true);\n };\n })\n .forEach(action => {\n action();\n });\n};\n\nexport const CoreTransforms = {\n removeElements\n};\n","import { GeneralTransforms } from './general';\nimport { GroupTransforms } from './group';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\nimport { ZIndexTransforms } from './z-index';\n\nexport { BoardTransforms } from './board';\nexport { CoreTransforms } from './element';\n\nexport const Transforms: GeneralTransforms &\n ViewportTransforms &\n SelectionTransforms &\n NodeTransforms &\n GroupTransforms &\n ZIndexTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms,\n ...GroupTransforms,\n ...ZIndexTransforms\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient } from '../interfaces';\nimport { Transforms } from '../transforms';\nimport { getRectangleByElements } from './element';\nimport { approximately, rotate } from './math';\n\nexport const rotatePoints = <T>(points: T, centerPoint: Point, angle?: number): T => {\n if (!angle) {\n angle = 0;\n }\n if (Array.isArray(points) && typeof points[0] === 'number') {\n return rotate(points[0], points[1], centerPoint[0], centerPoint[1], angle) as T;\n } else {\n return (points as Point[]).map(point => {\n return rotate(point[0], point[1], centerPoint[0], centerPoint[1], angle || 0);\n }) as T;\n }\n};\n\nexport const getSelectionAngle = (elements: PlaitElement[]) => {\n let angle = elements[0]?.angle || 0;\n elements.forEach(item => {\n if (item.angle !== angle && !approximately(((item.angle || 0) % (Math.PI / 2)) - (angle % (Math.PI / 2)), 0)) {\n angle = 0;\n }\n });\n return angle;\n};\n\nexport const hasSameAngle = (elements: PlaitElement[]) => {\n if (!elements.length) {\n return false;\n }\n\n const angle = elements[0].angle;\n if (angle === undefined) {\n return false;\n }\n\n return !elements.some(item => item.angle !== angle);\n};\n\nexport const getRotatedBoundingRectangle = (rectanglesCornerPoints: [Point, Point, Point, Point][], angle: number) => {\n let rectanglesFromOrigin: RectangleClient[] = [];\n for (let i = 0; i < rectanglesCornerPoints.length; i++) {\n const cornerPoints = rectanglesCornerPoints[i];\n const invertCornerPointsFromOrigin = rotatePoints(cornerPoints, [0, 0], -angle);\n rectanglesFromOrigin.push(RectangleClient.getRectangleByPoints(invertCornerPointsFromOrigin));\n }\n\n const selectionRectangleFromOrigin = RectangleClient.getBoundingRectangle(rectanglesFromOrigin);\n const selectionCornerPoints = RectangleClient.getCornerPoints(selectionRectangleFromOrigin);\n const cornerPointsFromOrigin = rotatePoints(selectionCornerPoints, [0, 0], angle);\n const centerPoint = RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(cornerPointsFromOrigin));\n return RectangleClient.getRectangleByPoints(rotatePoints(cornerPointsFromOrigin, centerPoint, -angle));\n};\n\nexport const getOffsetAfterRotate = (rectangle: RectangleClient, rotateCenterPoint: Point, angle: number) => {\n const targetCenterPoint = RectangleClient.getCenterPoint(rectangle);\n const [rotatedCenterPoint] = rotatePoints([targetCenterPoint], rotateCenterPoint, angle);\n const offsetX = rotatedCenterPoint[0] - targetCenterPoint[0];\n const offsetY = rotatedCenterPoint[1] - targetCenterPoint[1];\n return { offsetX, offsetY };\n};\n\nexport const rotatedDataPoints = (points: Point[], rotateCenterPoint: Point, angle: number): Point[] => {\n const { offsetX, offsetY } = getOffsetAfterRotate(RectangleClient.getRectangleByPoints(points), rotateCenterPoint, angle);\n return points.map(p => [p[0] + offsetX, p[1] + offsetY]) as Point[];\n};\n\nexport const hasValidAngle = (node: PlaitElement) => {\n return isValidAngle(node.angle);\n};\n\nexport const isValidAngle = (angle: undefined | number) => {\n return angle && angle !== 0;\n};\n\nexport const rotatePointsByElement = <T>(points: T, element: PlaitElement): T | null => {\n if (hasValidAngle(element)) {\n let rectangle = RectangleClient.getRectangleByPoints(element.points!);\n const centerPoint = RectangleClient.getCenterPoint(rectangle);\n return rotatePoints(points, centerPoint, element.angle);\n } else {\n return null;\n }\n};\n\nexport const rotatePointsByAngle = (points: Point[], angle: number | undefined): Point[] | null => {\n if (isValidAngle(angle)) {\n let rectangle = RectangleClient.getRectangleByPoints(points);\n const centerPoint = RectangleClient.getCenterPoint(rectangle);\n return rotatePoints(points, centerPoint, angle);\n } else {\n return null;\n }\n};\n\nexport const rotateAntiPointsByElement = <T>(points: T, element: PlaitElement): T | null => {\n if (hasValidAngle(element)) {\n let rectangle = RectangleClient.getRectangleByPoints(element.points!);\n const centerPoint = RectangleClient.getCenterPoint(rectangle);\n return rotatePoints(points, centerPoint, element.angle ? -element.angle : 0);\n } else {\n return null;\n }\n};\n\nexport const getRectangleByAngle = (rectangle: RectangleClient, angle: number) => {\n if (angle) {\n const cornerPoints = RectangleClient.getCornerPoints(rectangle);\n const centerPoint = RectangleClient.getCenterPoint(rectangle);\n return RectangleClient.getRectangleByPoints(rotatePoints(cornerPoints, centerPoint, angle));\n }\n return rectangle;\n};\n\nexport const isAxisChangedByAngle = (angle: number) => {\n const unitAngle = Math.abs(angle) % Math.PI;\n return unitAngle >= (1 / 4) * Math.PI && unitAngle <= (3 / 4) * Math.PI;\n};\n\nexport function degreesToRadians(d: number): number {\n return (d / 180) * Math.PI;\n}\n\nexport function radiansToDegrees(r: number): number {\n return (r / Math.PI) * 180;\n}\n\nexport function rotateElements(board: PlaitBoard, elements: PlaitElement[], angle: number) {\n const selectionRectangle = getRectangleByElements(board, elements, false);\n const selectionCenterPoint = RectangleClient.getCenterPoint(selectionRectangle);\n elements.forEach(item => {\n const originAngle = item.angle;\n const points = rotatedDataPoints(item.points!, selectionCenterPoint, normalizeAngle(angle));\n const path = PlaitBoard.findPath(board, item);\n Transforms.setNode(board, { points, angle: normalizeAngle((originAngle || 0) + angle) }, path);\n });\n}\n\nexport const normalizeAngle = (angle: number): number => {\n if (angle < 0) {\n return angle + 2 * Math.PI;\n }\n if (angle >= 2 * Math.PI) {\n return angle - 2 * Math.PI;\n }\n return angle;\n};\n\nexport const getAngleBetweenPoints = (startPoint: Point, endPoint: Point, centerPoint: Point): number => {\n const startAngle = (5 * Math.PI) / 2 + Math.atan2(startPoint[1] - centerPoint[1], startPoint[0] - centerPoint[0]);\n const endAngle = (5 * Math.PI) / 2 + Math.atan2(endPoint[1] - centerPoint[1], endPoint[0] - centerPoint[0]);\n return normalizeAngle(endAngle - startAngle);\n};\n\nexport const getAngleByElement = (element: PlaitElement): number | undefined => {\n return element?.angle;\n};\n\nexport const setAngleForG = (g: SVGGElement, centerPoint: Point, angle: number) => {\n if (angle === 0) {\n g.removeAttribute('transform');\n return;\n }\n var centerX = centerPoint[0];\n var centerY = centerPoint[1];\n\n let cosTheta = Math.cos(angle);\n let sinTheta = Math.sin(angle);\n\n let transformMatrix = [\n cosTheta,\n sinTheta,\n -sinTheta,\n cosTheta,\n centerX * (1 - cosTheta) + centerY * sinTheta,\n centerY * (1 - cosTheta) - centerX * sinTheta\n ];\n\n let matrix = 'matrix(' + transformMatrix.join(',') + ')';\n g.setAttribute('transform', `${matrix}`);\n};\n","import { Ancestor, PlaitBoard, PlaitElement, Point, RectangleClient } from '../interfaces';\nimport { getSelectionAngle, hasSameAngle, getRotatedBoundingRectangle, rotatePointsByElement, getRectangleByAngle } from './angle';\nimport { depthFirstRecursion, getIsRecursionFunc } from './tree';\nimport { KEY_TO_ELEMENT_MAP } from './weak-maps';\n\nexport function getRectangleByElements(board: PlaitBoard, elements: PlaitElement[], recursion: boolean): RectangleClient {\n const rectanglesCornerPoints: [Point, Point, Point, Point][] = [];\n const callback = (node: PlaitElement) => {\n const nodeRectangle = board.getRectangle(node);\n if (nodeRectangle) {\n const cornerPoints = RectangleClient.getCornerPoints(nodeRectangle);\n const rotatedCornerPoints = rotatePointsByElement(cornerPoints, node) || cornerPoints;\n rectanglesCornerPoints.push(rotatedCornerPoints);\n } else {\n console.error(`can not get rectangle of element:`, node);\n }\n };\n elements.forEach(element => {\n if (recursion) {\n depthFirstRecursion(\n element,\n node => callback(node),\n node => board.isRecursion(node)\n );\n } else {\n callback(element);\n }\n });\n if (rectanglesCornerPoints.length > 0) {\n if (hasSameAngle(elements)) {\n const angle = getSelectionAngle(elements);\n return getRotatedBoundingRectangle(rectanglesCornerPoints, angle);\n } else {\n const flatCornerPoints: Point[] = rectanglesCornerPoints.reduce((acc: Point[], val) => {\n return acc.concat(val);\n }, []);\n return RectangleClient.getRectangleByPoints(flatCornerPoints);\n }\n } else {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n}\n\nexport function getBoundingRectangleByElements(board: PlaitBoard, elements: PlaitElement[], recursion: boolean): RectangleClient {\n const rectangle = getRectangleByElements(board, elements, recursion)!;\n const angle = getSelectionAngle(elements);\n return getRectangleByAngle(rectangle, angle);\n}\n\nexport function getBoardRectangle(board: PlaitBoard): RectangleClient {\n return getRectangleByElements(board, board.children, true);\n}\n\nexport function getElementById<T extends PlaitElement = PlaitElement>(\n board: PlaitBoard,\n id: string,\n dataSource?: PlaitElement[]\n): T | undefined {\n const cachedElement = !dataSource && getElementMap(board).get(id);\n if (cachedElement) {\n return cachedElement as T;\n }\n if (!dataSource) {\n dataSource = findElements(board, { match: element => true, recursion: element => true });\n }\n let element = dataSource.find(element => element.id === id) as T;\n return element;\n}\n\nexport function getElementMap(board: PlaitBoard) {\n const elementMap = KEY_TO_ELEMENT_MAP.get(board);\n if (!elementMap) {\n throw new Error('can not resolve element map');\n }\n return elementMap;\n}\n\nexport function findElements<T extends PlaitElement = PlaitElement>(\n board: PlaitBoard,\n options: {\n match: (element: PlaitElement) => boolean;\n recursion: (element: PlaitElement) => boolean;\n isReverse?: boolean;\n }\n): T[] {\n let elements: T[] = [];\n const isReverse = options.isReverse ?? true;\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (!PlaitBoard.isBoard(node) && options.match(node)) {\n elements.push(node as T);\n }\n },\n (value: Ancestor) => {\n if (PlaitBoard.isBoard(value)) {\n return true;\n } else {\n return getIsRecursionFunc(board)(value) && options.recursion(value);\n }\n },\n isReverse\n );\n return elements;\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 DEFAULT_COLOR = '#333333';\n\nexport const DefaultThemeColor: ThemeColor = {\n mode: ThemeColorMode.default,\n boardBackground: '#ffffff',\n textColor: DEFAULT_COLOR\n};\n\nexport const ColorfulThemeColor: ThemeColor = {\n mode: ThemeColorMode.colorful,\n boardBackground: '#ffffff',\n textColor: DEFAULT_COLOR\n};\n\nexport const SoftThemeColor: ThemeColor = {\n mode: ThemeColorMode.soft,\n boardBackground: '#f5f5f5',\n textColor: DEFAULT_COLOR\n};\n\nexport const RetroThemeColor: ThemeColor = {\n mode: ThemeColorMode.retro,\n boardBackground: '#f9f8ed',\n textColor: DEFAULT_COLOR\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 } from './selection';\nimport { Viewport } from './viewport';\nimport {\n BOARD_TO_CONTEXT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_ROUGH_SVG,\n IS_BOARD_ALIVE,\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 { 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';\nimport { distanceBetweenPointAndRectangle } from '../utils/math';\nimport { ClipboardData, WritableClipboardContext, WritableClipboardOperationType } from '../utils';\nimport { ElementFlavour } from '../core/element/element-flavour';\nimport { PlaitBoardContext } from '../context';\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 afterChange: () => void;\n drawSelectionRectangle: () => SVGGElement | null;\n mousedown: (event: MouseEvent) => void;\n mousemove: (event: MouseEvent) => void;\n mouseleave: (event: MouseEvent) => void;\n mouseup: (event: MouseEvent) => void;\n globalMousemove: (event: MouseEvent) => void;\n globalMouseup: (event: MouseEvent) => void;\n keyDown: (event: KeyboardEvent) => void;\n globalKeyDown: (event: KeyboardEvent) => void;\n keyUp: (event: KeyboardEvent) => void;\n buildFragment: (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => WritableClipboardContext | null;\n insertFragment: (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => void;\n deleteFragment: (data: PlaitElement[]) => void;\n getDeletedFragment: (data: PlaitElement[]) => PlaitElement[];\n getRelatedFragment: (data: PlaitElement[], originData?: PlaitElement[]) => PlaitElement[];\n dblClick: (event: MouseEvent) => void;\n normalizeElement: (context: PlaitPluginElementContext) => void;\n drawElement: (context: PlaitPluginElementContext) => ComponentType<ElementFlavour>;\n isRectangleHit: (element: PlaitElement, range: Selection) => boolean;\n // When the element has no fill color, it is considered a hit only if it hits the border.\n isHit: (element: PlaitElement, point: Point, isStrict?: boolean) => boolean;\n isInsidePoint: (element: PlaitElement, point: Point) => boolean;\n // the hit element is determined by the plugin\n getOneHitElement: (hitElements: PlaitElement[]) => PlaitElement;\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 isAlign: (element: PlaitElement) => boolean;\n isImageBindingAllowed: (element: PlaitElement) => boolean;\n canAddToGroup: (element: PlaitElement) => boolean;\n canSetZIndex: (element: PlaitElement) => boolean;\n isExpanded: (element: PlaitElement) => boolean;\n // pointer hook\n pointerDown: (pointer: PointerEvent) => void;\n pointerMove: (pointer: PointerEvent) => void;\n pointerUp: (pointer: PointerEvent) => void;\n pointerCancel: (pointer: PointerEvent) => void;\n pointerOut: (pointer: PointerEvent) => void;\n pointerLeave: (pointer: PointerEvent) => void;\n globalPointerMove: (pointer: PointerEvent) => void;\n globalPointerUp: (pointer: PointerEvent) => void;\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 isAlive(board: PlaitBoard) {\n const isAlive = IS_BOARD_ALIVE.get(board);\n return !!isAlive;\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 getElementLowerHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.lowerHost as SVGSVGElement;\n },\n getElementHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.host as SVGSVGElement;\n },\n getElementUpperHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.upperHost as SVGSVGElement;\n },\n getElementActiveHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.activeHost as SVGSVGElement;\n },\n getRoughSVG(board: PlaitBoard) {\n return BOARD_TO_ROUGH_SVG.get(board) as RoughSVG;\n },\n getBoardContainer(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.container as HTMLElement;\n },\n getBoardContext(board: PlaitBoard) {\n return BOARD_TO_CONTEXT.get(board) as PlaitBoardContext;\n },\n getRectangle(board: PlaitBoard) {\n return getRectangleByElements(board, board.children, true);\n },\n getViewportContainer(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.viewportContainer 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 isInPointer<T = PlaitPointerType>(board: PlaitBoard, pointers: T[]) {\n const point = board.pointer as T;\n return pointers.includes(point);\n },\n getMovingPointInBoard(board: PlaitBoard) {\n return BOARD_TO_MOVING_POINT_IN_BOARD.get(board);\n },\n isMovingPointInBoard(board: PlaitBoard) {\n const point = BOARD_TO_MOVING_POINT.get(board);\n const rect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n if (point && distanceBetweenPointAndRectangle(point[0], point[1], rect) === 0) {\n return true;\n }\n return false;\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","/**\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 { PlaitNode } from './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: PlaitOperation) => boolean;\n isSetSelectionOperation: (value: PlaitOperation) => boolean;\n isSetThemeOperation: (value: PlaitOperation) => boolean;\n}\n\nexport const isSetViewportOperation = (value: any): value is SetViewportOperation => {\n return value.type === 'set_viewport';\n};\n\nexport const isSetSelectionOperation = (value: any): value is SetSelectionOperation => {\n return value.type === 'set_selection';\n};\n\nexport const isSetThemeOperation = (value: any): value is SetThemeOperation => {\n return value.type === 'set_theme';\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 isSetSelectionOperation,\n isSetThemeOperation,\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 isHorizontal(point?: Point, otherPoint?: Point, tolerance = 0) {\n return point && otherPoint && Point.isOverHorizontal([point, otherPoint], tolerance);\n },\n isOverHorizontal(points: Point[], tolerance: number = 0) {\n return points.every(point => Math.abs(point[1] - points[0][1]) <= tolerance);\n },\n isVertical(point?: Point, otherPoint?: Point, tolerance = 0) {\n return point && otherPoint && Point.isOverVertical([point, otherPoint], tolerance);\n },\n isOverVertical(points: Point[], tolerance: number = 0) {\n return points.every(point => Math.abs(point[0] - points[0][0]) <= tolerance);\n },\n isAlign(points: Point[], tolerance: number = 0) {\n return Point.isOverHorizontal(points, tolerance) || Point.isOverVertical(points, tolerance);\n },\n getOffsetX(point1: Point, point2: Point) {\n return point2[0] - point1[0];\n },\n getOffsetY(point1: Point, point2: Point) {\n return point2[1] - point1[1];\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>();\nexport const HISTORY = new WeakMap<PlaitBoard, History>();\nexport const SPLITTING_ONCE = new WeakMap<PlaitBoard, boolean | undefined>();\n","export enum Direction {\n left = 'left',\n top = 'top',\n right = 'right',\n bottom = 'bottom'\n}\n\nexport type Vector = [number, number];\n\nexport type DirectionFactor = -1 | 0 | 1;\n\nexport type DirectionFactors = [DirectionFactor, DirectionFactor];\n","import { PlaitElement } from \"./element\";\n\nexport interface PlaitGroup extends PlaitElement {\n type: 'group';\n}\n\nexport const PlaitGroupElement = {\n isGroup: (value: any): value is PlaitGroup => {\n return value.type === 'group';\n }\n}","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport function isListLikeIterable(obj: any): boolean {\n if (!isJsObject(obj)) return false;\n return (\n Array.isArray(obj) ||\n (!(obj instanceof Map) && // JS Map are iterables but return entries as [k, v]\n Symbol.iterator in obj)\n ); // JS Iterable have a Symbol.iterator prop\n}\n\nexport function isJsObject(o: any): boolean {\n return o !== null && (typeof o === 'function' || typeof o === 'object');\n}\n\nexport function iterateListLike<T>(obj: Iterable<T>, fn: (p: T) => void) {\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n fn(obj[i]);\n }\n } else {\n const iterator = obj[Symbol.iterator]();\n let item: IteratorResult<T, any>;\n while (!(item = iterator.next()).done) {\n fn(item.value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {isListLikeIterable, iterateListLike} from '../utils/iterable';\n\nimport {IterableChangeRecord, IterableChanges, IterableDiffer, CustomIterable, TrackByFunction} from './iterable_differs';\n\n\nconst trackByIdentity = (index: number, item: any) => item;\n\nexport type Writable<T> = {\n -readonly[K in keyof T]: T[K];\n};\n\nexport class DefaultIterableDiffer<V> implements IterableDiffer<V>, IterableChanges<V> {\n public readonly length: number = 0;\n public readonly collection!: V[]|Iterable<V>|null;\n // Keeps track of the used records at any point in time (during & across `_check()` calls)\n private _linkedRecords: _DuplicateMap<V>|null = null;\n // Keeps track of the removed records at any point in time during `_check()` calls.\n private _unlinkedRecords: _DuplicateMap<V>|null = null;\n private _previousItHead: IterableChangeRecord_<V>|null = null;\n private _itHead: IterableChangeRecord_<V>|null = null;\n private _itTail: IterableChangeRecord_<V>|null = null;\n private _additionsHead: IterableChangeRecord_<V>|null = null;\n private _additionsTail: IterableChangeRecord_<V>|null = null;\n private _movesHead: IterableChangeRecord_<V>|null = null;\n private _movesTail: IterableChangeRecord_<V>|null = null;\n private _removalsHead: IterableChangeRecord_<V>|null = null;\n private _removalsTail: IterableChangeRecord_<V>|null = null;\n // Keeps track of records where custom track by is the same, but item identity has changed\n private _identityChangesHead: IterableChangeRecord_<V>|null = null;\n private _identityChangesTail: IterableChangeRecord_<V>|null = null;\n private _trackByFn: TrackByFunction<V>;\n\n constructor(trackByFn?: TrackByFunction<V>) {\n this._trackByFn = trackByFn || trackByIdentity;\n }\n\n forEachItem(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._itHead; record !== null; record = record._next) {\n fn(record);\n }\n }\n\n forEachOperation(\n fn: (item: IterableChangeRecord<V>, previousIndex: number|null, currentIndex: number|null) =>\n void) {\n let nextIt = this._itHead;\n let nextRemove = this._removalsHead;\n let addRemoveOffset = 0;\n let moveOffsets: number[]|null = null;\n while (nextIt || nextRemove) {\n // Figure out which is the next record to process\n // Order: remove, add, move\n const record: IterableChangeRecord<V> = !nextRemove ||\n nextIt &&\n nextIt.currentIndex! <\n getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ?\n nextIt! :\n nextRemove;\n const adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);\n const currentIndex = record.currentIndex;\n\n // consume the item, and adjust the addRemoveOffset and update moveDistance if necessary\n if (record === nextRemove) {\n addRemoveOffset--;\n nextRemove = nextRemove._nextRemoved;\n } else {\n nextIt = nextIt!._next;\n if (record.previousIndex == null) {\n addRemoveOffset++;\n } else {\n // INVARIANT: currentIndex < previousIndex\n if (!moveOffsets) moveOffsets = [];\n const localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;\n const localCurrentIndex = currentIndex! - addRemoveOffset;\n if (localMovePreviousIndex != localCurrentIndex) {\n for (let i = 0; i < localMovePreviousIndex; i++) {\n const offset = i < moveOffsets.length ? moveOffsets[i] : (moveOffsets[i] = 0);\n const index = offset + i;\n if (localCurrentIndex <= index && index < localMovePreviousIndex) {\n moveOffsets[i] = offset + 1;\n }\n }\n const previousIndex = record.previousIndex;\n moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;\n }\n }\n }\n\n if (adjPreviousIndex !== currentIndex) {\n fn(record, adjPreviousIndex, currentIndex);\n }\n }\n }\n\n forEachPreviousItem(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._previousItHead; record !== null; record = record._nextPrevious) {\n fn(record);\n }\n }\n\n forEachAddedItem(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n fn(record);\n }\n }\n\n forEachMovedItem(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._movesHead; record !== null; record = record._nextMoved) {\n fn(record);\n }\n }\n\n forEachRemovedItem(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n fn(record);\n }\n }\n\n forEachIdentityChange(fn: (record: IterableChangeRecord_<V>) => void) {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {\n fn(record);\n }\n }\n\n diff(collection: CustomIterable<V>|null|undefined): DefaultIterableDiffer<V>|null {\n if (collection == null) collection = [];\n if (!isListLikeIterable(collection)) {\n throw new Error('Exception: Error trying to diff. Only arrays and iterables are allowed');\n }\n\n if (this.check(collection)) {\n return this;\n } else {\n return null;\n }\n }\n\n onDestroy() {}\n\n check(collection: CustomIterable<V>): boolean {\n this._reset();\n\n let record: IterableChangeRecord_<V>|null = this._itHead;\n let mayBeDirty: boolean = false;\n let index: number;\n let item: V;\n let itemTrackBy: any;\n if (Array.isArray(collection)) {\n (this as Writable<this>).length = collection.length;\n\n for (let index = 0; index < this.length; index++) {\n item = collection[index];\n itemTrackBy = this._trackByFn(index, item);\n if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n record = this._mismatch(record, item, itemTrackBy, index);\n mayBeDirty = true;\n } else {\n if (mayBeDirty) {\n record = this._verifyReinsertion(record, item, itemTrackBy, index);\n }\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n }\n\n record = record._next;\n }\n } else {\n index = 0;\n iterateListLike(collection, (item: V) => {\n itemTrackBy = this._trackByFn(index, item);\n if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n record = this._mismatch(record, item, itemTrackBy, index);\n mayBeDirty = true;\n } else {\n if (mayBeDirty) {\n record = this._verifyReinsertion(record, item, itemTrackBy, index);\n }\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n }\n record = record._next;\n index++;\n });\n (this as Writable<this>).length = index;\n }\n\n this._truncate(record);\n (this as Writable<this>).collection = collection;\n return this.isDirty;\n }\n\n /* CollectionChanges is considered dirty if it has any additions, moves, removals, or identity\n * changes.\n */\n get isDirty(): boolean {\n return this._additionsHead !== null || this._movesHead !== null ||\n this._removalsHead !== null || this._identityChangesHead !== null;\n }\n\n /**\n * Reset the state of the change objects to show no changes. This means set previousKey to\n * currentKey, and clear all of the queues (additions, moves, removals).\n * Set the previousIndexes of moved and added items to their currentIndexes\n * Reset the list of additions, moves and removals\n *\n * @internal\n */\n _reset() {\n if (this.isDirty) {\n let record: IterableChangeRecord_<V>|null;\n\n for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {\n record._nextPrevious = record._next;\n }\n\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n record.previousIndex = record.currentIndex;\n }\n this._additionsHead = this._additionsTail = null;\n\n for (record = this._movesHead; record !== null; record = record._nextMoved) {\n record.previousIndex = record.currentIndex;\n }\n this._movesHead = this._movesTail = null;\n this._removalsHead = this._removalsTail = null;\n this._identityChangesHead = this._identityChangesTail = null;\n }\n }\n\n /**\n * This is the core function which handles differences between collections.\n *\n * - `record` is the record which we saw at this position last time. If null then it is a new\n * item.\n * - `item` is the current item in the collection\n * - `index` is the position of the item in the collection\n *\n * @internal\n */\n _mismatch(record: IterableChangeRecord_<V>|null, item: V, itemTrackBy: any, index: number):\n IterableChangeRecord_<V> {\n // The previous record after which we will append the current one.\n let previousRecord: IterableChangeRecord_<V>|null;\n\n if (record === null) {\n previousRecord = this._itTail;\n } else {\n previousRecord = record._prev;\n // Remove the record from the collection since we know it does not match the item.\n this._remove(record);\n }\n\n // See if we have evicted the item, which used to be at some anterior position of _itHead list.\n record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n if (record !== null) {\n // It is an item which we have evicted earlier: reinsert it back into the list.\n // But first we need to check if identity changed, so we can update in view if necessary.\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n\n this._reinsertAfter(record, previousRecord, index);\n } else {\n // Attempt to see if the item is at some posterior position of _itHead list.\n record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);\n if (record !== null) {\n // We have the item in _itHead at/after `index` position. We need to move it forward in the\n // collection.\n // But first we need to check if identity changed, so we can update in view if necessary.\n if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n\n this._moveAfter(record, previousRecord, index);\n } else {\n // It is a new item: add it.\n record =\n this._addAfter(new IterableChangeRecord_<V>(item, itemTrackBy), previousRecord, index);\n }\n }\n return record;\n }\n\n /**\n * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)\n *\n * Use case: `[a, a]` => `[b, a, a]`\n *\n * If we did not have this check then the insertion of `b` would:\n * 1) evict first `a`\n * 2) insert `b` at `0` index.\n * 3) leave `a` at index `1` as is. <-- this is wrong!\n * 3) reinsert `a` at index 2. <-- this is wrong!\n *\n * The correct behavior is:\n * 1) evict first `a`\n * 2) insert `b` at `0` index.\n * 3) reinsert `a` at index 1.\n * 3) move `a` at from `1` to `2`.\n *\n *\n * Double check that we have not evicted a duplicate item. We need to check if the item type may\n * have already been removed:\n * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted\n * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a\n * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'\n * at the end.\n *\n * @internal\n */\n _verifyReinsertion(record: IterableChangeRecord_<V>, item: V, itemTrackBy: any, index: number):\n IterableChangeRecord_<V> {\n let reinsertRecord: IterableChangeRecord_<V>|null =\n this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n if (reinsertRecord !== null) {\n record = this._reinsertAfter(reinsertRecord, record._prev!, index);\n } else if (record.currentIndex != index) {\n record.currentIndex = index;\n this._addToMoves(record, index);\n }\n return record;\n }\n\n /**\n * Get rid of any excess {@link IterableChangeRecord_}s from the previous collection\n *\n * - `record` The first excess {@link IterableChangeRecord_}.\n *\n * @internal\n */\n _truncate(record: IterableChangeRecord_<V>|null) {\n // Anything after that needs to be removed;\n while (record !== null) {\n const nextRecord: IterableChangeRecord_<V>|null = record._next;\n this._addToRemovals(this._unlink(record));\n record = nextRecord;\n }\n if (this._unlinkedRecords !== null) {\n this._unlinkedRecords.clear();\n }\n\n if (this._additionsTail !== null) {\n this._additionsTail._nextAdded = null;\n }\n if (this._movesTail !== null) {\n this._movesTail._nextMoved = null;\n }\n if (this._itTail !== null) {\n this._itTail._next = null;\n }\n if (this._removalsTail !== null) {\n this._removalsTail._nextRemoved = null;\n }\n if (this._identityChangesTail !== null) {\n this._identityChangesTail._nextIdentityChange = null;\n }\n }\n\n /** @internal */\n _reinsertAfter(\n record: IterableChangeRecord_<V>, prevRecord: IterableChangeRecord_<V>|null,\n index: number): IterableChangeRecord_<V> {\n if (this._unlinkedRecords !== null) {\n this._unlinkedRecords.remove(record);\n }\n const prev = record._prevRemoved;\n const next = record._nextRemoved;\n\n if (prev === null) {\n this._removalsHead = next;\n } else {\n prev._nextRemoved = next;\n }\n if (next === null) {\n this._removalsTail = prev;\n } else {\n next._prevRemoved = prev;\n }\n\n this._insertAfter(record, prevRecord, index);\n this._addToMoves(record, index);\n return record;\n }\n\n /** @internal */\n _moveAfter(\n record: IterableChangeRecord_<V>, prevRecord: IterableChangeRecord_<V>|null,\n index: number): IterableChangeRecord_<V> {\n this._unlink(record);\n this._insertAfter(record, prevRecord, index);\n this._addToMoves(record, index);\n return record;\n }\n\n /** @internal */\n _addAfter(\n record: IterableChangeRecord_<V>, prevRecord: IterableChangeRecord_<V>|null,\n index: number): IterableChangeRecord_<V> {\n this._insertAfter(record, prevRecord, index);\n\n if (this._additionsTail === null) {\n // assert(this._additionsHead === null);\n this._additionsTail = this._additionsHead = record;\n } else {\n // assert(_additionsTail._nextAdded === null);\n // assert(record._nextAdded === null);\n this._additionsTail = this._additionsTail._nextAdded = record;\n }\n return record;\n }\n\n /** @internal */\n _insertAfter(\n record: IterableChangeRecord_<V>, prevRecord: IterableChangeRecord_<V>|null,\n index: number): IterableChangeRecord_<V> {\n\n const next: IterableChangeRecord_<V>|null =\n prevRecord === null ? this._itHead : prevRecord._next;\n record._next = next;\n record._prev = prevRecord;\n if (next === null) {\n this._itTail = record;\n } else {\n next._prev = record;\n }\n if (prevRecord === null) {\n this._itHead = record;\n } else {\n prevRecord._next = record;\n }\n\n if (this._linkedRecords === null) {\n this._linkedRecords = new _DuplicateMap<V>();\n }\n this._linkedRecords.put(record);\n\n record.currentIndex = index;\n return record;\n }\n\n /** @internal */\n _remove(record: IterableChangeRecord_<V>): IterableChangeRecord_<V> {\n return this._addToRemovals(this._unlink(record));\n }\n\n /** @internal */\n _unlink(record: IterableChangeRecord_<V>): IterableChangeRecord_<V> {\n if (this._linkedRecords !== null) {\n this._linkedRecords.remove(record);\n }\n\n const prev = record._prev;\n const next = record._next;\n\n if (prev === null) {\n this._itHead = next;\n } else {\n prev._next = next;\n }\n if (next === null) {\n this._itTail = prev;\n } else {\n next._prev = prev;\n }\n\n return record;\n }\n\n /** @internal */\n _addToMoves(record: IterableChangeRecord_<V>, toIndex: number): IterableChangeRecord_<V> {\n if (record.previousIndex === toIndex) {\n return record;\n }\n\n if (this._movesTail === null) {\n this._movesTail = this._movesHead = record;\n } else {\n this._movesTail = this._movesTail._nextMoved = record;\n }\n\n return record;\n }\n\n private _addToRemovals(record: IterableChangeRecord_<V>): IterableChangeRecord_<V> {\n if (this._unlinkedRecords === null) {\n this._unlinkedRecords = new _DuplicateMap<V>();\n }\n this._unlinkedRecords.put(record);\n record.currentIndex = null;\n record._nextRemoved = null;\n\n if (this._removalsTail === null) {\n this._removalsTail = this._removalsHead = record;\n record._prevRemoved = null;\n } else {\n record._prevRemoved = this._removalsTail;\n this._removalsTail = this._removalsTail._nextRemoved = record;\n }\n return record;\n }\n\n /** @internal */\n _addIdentityChange(record: IterableChangeRecord_<V>, item: V) {\n record.item = item;\n if (this._identityChangesTail === null) {\n this._identityChangesTail = this._identityChangesHead = record;\n } else {\n this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;\n }\n return record;\n }\n}\n\nexport class IterableChangeRecord_<V> implements IterableChangeRecord<V> {\n currentIndex: number|null = null;\n previousIndex: number|null = null;\n\n /** @internal */\n _nextPrevious: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _prev: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _next: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _prevDup: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _nextDup: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _prevRemoved: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _nextRemoved: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _nextAdded: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _nextMoved: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _nextIdentityChange: IterableChangeRecord_<V>|null = null;\n\n\n constructor(public item: V, public trackById: any) {}\n}\n\n// A linked list of IterableChangeRecords with the same IterableChangeRecord_.item\nclass _DuplicateItemRecordList<V> {\n /** @internal */\n _head: IterableChangeRecord_<V>|null = null;\n /** @internal */\n _tail: IterableChangeRecord_<V>|null = null;\n\n /**\n * Append the record to the list of duplicates.\n *\n * Note: by design all records in the list of duplicates hold the same value in record.item.\n */\n add(record: IterableChangeRecord_<V>): void {\n if (this._head === null) {\n this._head = this._tail = record;\n record._nextDup = null;\n record._prevDup = null;\n } else {\n this._tail!._nextDup = record;\n record._prevDup = this._tail;\n record._nextDup = null;\n this._tail = record;\n }\n }\n\n // Returns a IterableChangeRecord_ having IterableChangeRecord_.trackById == trackById and\n // IterableChangeRecord_.currentIndex >= atOrAfterIndex\n get(trackById: any, atOrAfterIndex: number|null): IterableChangeRecord_<V>|null {\n let record: IterableChangeRecord_<V>|null;\n for (record = this._head; record !== null; record = record._nextDup) {\n if ((atOrAfterIndex === null || atOrAfterIndex <= record.currentIndex!) &&\n Object.is(record.trackById, trackById)) {\n return record;\n }\n }\n return null;\n }\n\n /**\n * Remove one {@link IterableChangeRecord_} from the list of duplicates.\n *\n * Returns whether the list of duplicates is empty.\n */\n remove(record: IterableChangeRecord_<V>): boolean {\n\n const prev: IterableChangeRecord_<V>|null = record._prevDup;\n const next: IterableChangeRecord_<V>|null = record._nextDup;\n if (prev === null) {\n this._head = next;\n } else {\n prev._nextDup = next;\n }\n if (next === null) {\n this._tail = prev;\n } else {\n next._prevDup = prev;\n }\n return this._head === null;\n }\n}\n\nclass _DuplicateMap<V> {\n map = new Map<any, _DuplicateItemRecordList<V>>();\n\n put(record: IterableChangeRecord_<V>) {\n const key = record.trackById;\n\n let duplicates = this.map.get(key);\n if (!duplicates) {\n duplicates = new _DuplicateItemRecordList<V>();\n this.map.set(key, duplicates);\n }\n duplicates.add(record);\n }\n\n /**\n * Retrieve the `value` using key. Because the IterableChangeRecord_ value may be one which we\n * have already iterated over, we use the `atOrAfterIndex` to pretend it is not there.\n *\n * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we\n * have any more `a`s needs to return the second `a`.\n */\n get(trackById: any, atOrAfterIndex: number|null): IterableChangeRecord_<V>|null {\n const key = trackById;\n const recordList = this.map.get(key);\n return recordList ? recordList.get(trackById, atOrAfterIndex) : null;\n }\n\n /**\n * Removes a {@link IterableChangeRecord_} from the list of duplicates.\n *\n * The list of duplicates also is removed from the map if it gets empty.\n */\n remove(record: IterableChangeRecord_<V>): IterableChangeRecord_<V> {\n const key = record.trackById;\n const recordList: _DuplicateItemRecordList<V> = this.map.get(key)!;\n // Remove the list of duplicates when it gets empty\n if (recordList.remove(record)) {\n this.map.delete(key);\n }\n return record;\n }\n\n get isEmpty(): boolean {\n return this.map.size === 0;\n }\n\n clear() {\n this.map.clear();\n }\n}\n\nfunction getPreviousIndex(item: any, addRemoveOffset: number, moveOffsets: number[]|null): number {\n const previousIndex = item.previousIndex;\n if (previousIndex === null) return previousIndex;\n let moveOffset = 0;\n if (moveOffsets && previousIndex < moveOffsets.length) {\n moveOffset = moveOffsets[previousIndex];\n }\n return previousIndex + addRemoveOffset + moveOffset;\n}\n","import {\n Ancestor,\n ComponentType,\n PlaitBoard,\n PlaitChildrenContext,\n PlaitElement,\n PlaitNode,\n PlaitPluginElementContext\n} from '../interfaces';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../utils/weak-maps';\nimport { isSelectedElement, replaceSelectedElement } from '../utils/selected-element';\nimport { ElementFlavour } from './element/element-flavour';\nimport { DefaultIterableDiffer } from '../differs/default_iterable_differ';\nimport { IterableChangeRecord, IterableDiffer } from '../differs/iterable_differs';\nimport { isDebug } from '../utils/debug';\n\nexport class ListRender {\n private children: PlaitElement[] = [];\n private instances: ElementFlavour[] = [];\n private contexts: PlaitPluginElementContext[] = [];\n private differ: IterableDiffer<PlaitElement> | null = null;\n public initialized = false;\n\n constructor(private board: PlaitBoard) {}\n\n public initialize(children: PlaitElement[], childrenContext: PlaitChildrenContext) {\n this.initialized = true;\n this.children = children;\n children.forEach((descendant, index) => {\n NODE_TO_INDEX.set(descendant, index);\n NODE_TO_PARENT.set(descendant, childrenContext.parent);\n const context = getContext(this.board, descendant, index, childrenContext.parent);\n const componentType = getComponentType(this.board, context);\n const instance = createPluginComponent(this.board, componentType, context, childrenContext);\n this.instances.push(instance);\n this.contexts.push(context);\n });\n this.differ = new DefaultIterableDiffer<PlaitElement>(trackBy);\n this.differ.diff(children);\n }\n\n public update(children: PlaitElement[], childrenContext: PlaitChildrenContext) {\n if (!this.initialized) {\n this.initialize(children, childrenContext);\n return;\n }\n if (!this.differ) {\n throw new Error('Exception: Can not find differ ');\n }\n const { board, parent } = childrenContext;\n const diffResult = this.differ.diff(children);\n if (diffResult) {\n const newContexts: PlaitPluginElementContext[] = [];\n const newInstances: ElementFlavour[] = [];\n // for moving scene: the current index for first element before moving\n let currentIndexForFirstElement: number | null = null;\n diffResult.forEachItem((record: IterableChangeRecord<PlaitElement>) => {\n NODE_TO_INDEX.set(record.item, record.currentIndex as number);\n NODE_TO_PARENT.set(record.item, childrenContext.parent);\n const previousContext = record.previousIndex === null ? undefined : this.contexts[record.previousIndex];\n const context = getContext(board, record.item, record.currentIndex as number, parent, previousContext);\n if (record.previousIndex === null) {\n const componentType = getComponentType(board, context);\n const componentRef = createPluginComponent(board, componentType, context, childrenContext);\n newContexts.push(context);\n newInstances.push(componentRef);\n } else {\n const instance = this.instances[record.previousIndex];\n instance.context = context;\n newInstances.push(instance);\n newContexts.push(context);\n }\n // item might has been changed, so need to compare the id\n if (record.item === this.children[0] || record.item.id === this.children[0]?.id) {\n currentIndexForFirstElement = record.currentIndex;\n }\n });\n diffResult.forEachOperation(record => {\n // removed\n if (record.currentIndex === null) {\n const componentRef = this.instances[record.previousIndex as number];\n componentRef?.destroy();\n }\n // moved\n if (record.previousIndex !== null && record.currentIndex !== null) {\n mountOnItemMove(record.item, record.currentIndex, childrenContext, currentIndexForFirstElement);\n }\n });\n this.instances = newInstances;\n this.contexts = newContexts;\n this.children = children;\n } else {\n const newContexts: PlaitPluginElementContext[] = [];\n this.children.forEach((element, index) => {\n NODE_TO_INDEX.set(element, index);\n NODE_TO_PARENT.set(element, childrenContext.parent);\n const previousContext = this.contexts[index];\n const previousInstance = this.instances[index];\n const context = getContext(board, element, index, parent, previousContext);\n previousInstance.context = context;\n newContexts.push(context);\n });\n this.contexts = newContexts;\n }\n }\n\n public destroy() {\n this.children.forEach((element: PlaitElement, index: number) => {\n if (this.instances[index]) {\n this.instances[index].destroy();\n }\n });\n this.instances = [];\n this.children = [];\n this.contexts = [];\n this.initialized = false;\n this.differ = null;\n }\n}\n\nconst trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n};\n\nconst createPluginComponent = (\n board: PlaitBoard,\n componentType: ComponentType<ElementFlavour>,\n context: PlaitPluginElementContext,\n childrenContext: PlaitChildrenContext\n) => {\n const instance = new componentType();\n instance.context = context;\n board.normalizeElement(context);\n try {\n instance.initialize();\n } catch (error) {\n if (isDebug()) {\n console.error('list-render-initialize', error, 'context', context);\n }\n }\n const g = instance.getContainerG();\n mountElementG(context.index, g, childrenContext);\n instance.initializeListRender();\n return instance;\n};\n\nconst getComponentType = (board: PlaitBoard, context: PlaitPluginElementContext) => {\n const result = board.drawElement(context);\n return result;\n};\n\nconst getContext = (\n board: PlaitBoard,\n element: PlaitElement,\n index: number,\n parent: Ancestor,\n previousContext?: PlaitPluginElementContext\n): PlaitPluginElementContext => {\n let isSelected = isSelectedElement(board, element);\n const previousElement = previousContext && previousContext.element;\n if (previousElement && previousElement !== element && isSelectedElement(board, previousElement)) {\n isSelected = true;\n replaceSelectedElement(board, previousElement, element);\n }\n const context: PlaitPluginElementContext = {\n element: element,\n parent: parent,\n board: board,\n selected: isSelected,\n index,\n hasThemeChanged: !!board.operations?.find(op => op.type === 'set_theme')\n };\n return context;\n};\n\n// the g depth of root element:[1]-[2]-[3]-[4]\n// the g depth of root element and children element(the [2] element has children):\n// [1]-\n// [2]([2-1-1][2-1-2][2-1][2-2][2-3-1][2-3-2][2-3][2])-\n// [3]-\n// [4]\nexport const mountElementG = (\n index: number,\n g: SVGGElement,\n childrenContext: PlaitChildrenContext,\n // for moving scene: the current index for first element before moving\n currentIndexForFirstElement: number | null = null\n) => {\n const { parent, parentG } = childrenContext;\n if (PlaitBoard.isBoard(parent)) {\n if (index > 0) {\n const previousElement = parent.children[index - 1];\n const previousContainerG = PlaitElement.getContainerG(previousElement, { suppressThrow: false });\n previousContainerG.insertAdjacentElement('afterend', g);\n } else {\n if (currentIndexForFirstElement !== null) {\n const firstElement = parent.children[currentIndexForFirstElement];\n const firstContainerG = firstElement && PlaitElement.getContainerG(firstElement, { suppressThrow: true });\n if (firstElement && firstContainerG) {\n parentG.insertBefore(g, firstContainerG);\n } else {\n throw new Error('fail to mount container on moving');\n }\n } else {\n parentG.append(g);\n }\n }\n } else {\n if (index > 0) {\n const previousElement = (parent.children as PlaitElement[])[index - 1];\n const previousElementG = PlaitElement.getElementG(previousElement);\n previousElementG.insertAdjacentElement('afterend', g);\n } else {\n if (currentIndexForFirstElement) {\n const nextElement = (parent.children as PlaitElement[])[currentIndexForFirstElement];\n const nextPath = nextElement && PlaitBoard.findPath(childrenContext.board, nextElement);\n const first = nextPath && PlaitNode.first(childrenContext.board, nextPath);\n const firstContainerG = first && PlaitElement.getContainerG(first, { suppressThrow: false });\n if (firstContainerG) {\n parentG.insertBefore(g, firstContainerG);\n } else {\n throw new Error('fail to mount container on moving');\n }\n } else {\n let parentElementG = PlaitElement.getElementG(parent);\n parentG.insertBefore(g, parentElementG);\n }\n }\n }\n};\n\nconst mountOnItemMove = (\n element: PlaitElement,\n index: number,\n childrenContext: PlaitChildrenContext,\n currentIndexForFirstElement: number | null\n) => {\n const containerG = PlaitElement.getContainerG(element, { suppressThrow: false });\n mountElementG(index, containerG, childrenContext, currentIndexForFirstElement);\n if (element.children && !PlaitElement.isRootElement(element) && childrenContext.board.isExpanded(element)) {\n element.children.forEach((child, index) => {\n mountOnItemMove(child, index, { ...childrenContext, parent: element }, null);\n });\n }\n};\n","/**\n * 基于 element-flavour 实现元素的绘制,取代 Angular 组件\n */\n\nimport { PlaitBoard, PlaitChildrenContext, PlaitElement, PlaitNode, PlaitPluginElementContext } from '../../interfaces';\nimport { removeSelectedElement } from '../../utils/selected-element';\nimport { createG } from '../../utils/dom/common';\nimport { hasBeforeContextChange, hasOnContextChanged } from './context-change';\nimport { ListRender } from '../list-render';\nimport { ELEMENT_TO_REF, NODE_TO_CONTAINER_G, NODE_TO_G } from '../../utils/weak-maps';\nimport { PlaitElementRef } from './element-ref';\nimport { getElementMap } from '../../utils/element';\n\nexport class ElementFlavour<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard,\n R extends PlaitElementRef = PlaitElementRef\n> {\n private _g!: SVGGElement;\n\n private _containerG!: SVGGElement;\n\n // children elements's render need rootContainerG\n // the value of rootContainerG come from the containerG of root element\n private _rootContainerG?: SVGGElement;\n\n initialized = false;\n\n protected _context!: PlaitPluginElementContext<T, K>;\n\n get hasChildren() {\n return !!this.element.children;\n }\n\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.initialized) {\n const elementG = this.getElementG();\n const containerG = this.getContainerG();\n NODE_TO_G.set(this.element, elementG);\n NODE_TO_CONTAINER_G.set(this.element, containerG);\n getElementMap(this.board).set(this.element.id, this.element);\n ELEMENT_TO_REF.set(this.element, this.ref);\n this.updateListRender();\n if (hasOnContextChanged<T>(this)) {\n this.onContextChanged(value, previousContext);\n }\n } else {\n if (PlaitElement.isRootElement(this.element) && this.hasChildren) {\n this._g = createG();\n this._containerG = createG();\n this._containerG.append(this._g);\n } else {\n this._g = createG();\n this._containerG = this._g;\n }\n NODE_TO_G.set(this.element, this._g);\n NODE_TO_CONTAINER_G.set(this.element, this._containerG);\n ELEMENT_TO_REF.set(this.element, this.ref);\n getElementMap(this.board).set(this.element.id, this.element);\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 listRender?: ListRender;\n\n getContainerG() {\n return this._containerG;\n }\n\n getElementG() {\n return this._g;\n }\n\n constructor(private ref: R) {}\n\n initialize() {\n if (this.element.type) {\n this.getContainerG().setAttribute(`plait-${this.element.type}`, 'true');\n }\n if (this.hasChildren) {\n if (PlaitElement.isRootElement(this.element)) {\n this._rootContainerG = this._containerG;\n } else {\n const path = PlaitBoard.findPath(this.board, this.element);\n const rootNode = PlaitNode.get(this.board, path.slice(0, 1));\n this._rootContainerG = PlaitElement.getContainerG(rootNode, { suppressThrow: false });\n }\n }\n this.getContainerG().setAttribute('plait-data-id', this.element.id);\n this.initialized = true;\n }\n\n public initializeListRender() {\n if (this.hasChildren) {\n this.listRender = new ListRender(this.board);\n if (this.board.isExpanded(this.element)) {\n this.listRender.initialize(this.element.children!, this.initializeChildrenContext());\n }\n }\n }\n\n public getRef() {\n return this.ref;\n }\n\n private updateListRender() {\n if (this.hasChildren) {\n if (!this.listRender) {\n throw new Error('incorrectly initialize list render');\n }\n if (this.board.isExpanded(this.element)) {\n this.listRender.update(this.element.children!, this.initializeChildrenContext());\n } else {\n if (this.listRender.initialized) {\n this.listRender.destroy();\n }\n }\n }\n }\n\n private initializeChildrenContext(): PlaitChildrenContext {\n if (!this._rootContainerG) {\n throw new Error('can not resolve root container g');\n }\n return {\n board: this.board,\n parent: this.element,\n parentG: this._rootContainerG\n };\n }\n\n destroy() {\n if (NODE_TO_G.get(this.element) === this._g) {\n NODE_TO_G.delete(this.element);\n }\n getElementMap(this.board).delete(this.element.id);\n if (NODE_TO_CONTAINER_G.get(this.element) === this._containerG) {\n NODE_TO_CONTAINER_G.delete(this.element);\n }\n if (ELEMENT_TO_REF.get(this.element) === this.ref) {\n ELEMENT_TO_REF.set(this.element, this.ref);\n }\n removeSelectedElement(this.board, this.element);\n this.getContainerG().remove();\n this.listRender?.destroy();\n }\n}\n","import { Subject } from 'rxjs';\nimport { ImageEntry } from './interfaces/element';\n\nexport class PlaitBoardContext {\n private _stable = new Subject();\n\n private uploadingFiles: ImageEntry[] = [];\n\n getUploadingFile(url: string) {\n return this.uploadingFiles.find(file => file.url === url);\n }\n\n setUploadingFile(file: ImageEntry) {\n return this.uploadingFiles.push(file);\n }\n\n removeUploadingFile(fileEntry: ImageEntry) {\n this.uploadingFiles = this.uploadingFiles.filter(file => file.url !== fileEntry.url);\n }\n\n onStable() {\n return this._stable.asObservable();\n }\n\n nextStable() {\n this._stable.next('');\n }\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';\nimport { CoreTransforms } from '../transforms/element';\nimport { ClipboardData, WritableClipboardContext, WritableClipboardOperationType, drawSelectionRectangleG } from '../utils';\nimport { Point, RectangleClient } from '../interfaces';\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.afterChange();\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 afterChange: () => {},\n drawSelectionRectangle: () => {\n return drawSelectionRectangleG(board);\n },\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 globalKeyDown: (event: KeyboardEvent) => {},\n keyUp: (event: KeyboardEvent) => {},\n dblClick: (event: MouseEvent) => {},\n buildFragment: (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => clipboardContext,\n insertFragment: (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {},\n deleteFragment: (elements: PlaitElement[]) => {\n CoreTransforms.removeElements(board, elements);\n },\n getDeletedFragment: (data: PlaitElement[]) => data,\n getRelatedFragment: (data: PlaitElement[], originData?: PlaitElement[]) => data,\n normalizeElement: (context: PlaitPluginElementContext) => {\n },\n drawElement: (context: PlaitPluginElementContext) => {\n throw new Error(`can not resolve plugin element component type: ${context.element.type}`);\n },\n isWithinSelection: element => false,\n isRectangleHit: element => false,\n isHit: element => false,\n isInsidePoint: element => false,\n getOneHitElement: (data: PlaitElement[]) => data[0],\n isRecursion: element => true,\n isMovable: element => false,\n getRectangle: element => null,\n applyTheme: (element: PlaitElement) => {},\n isAlign: element => false,\n pointerDown: pointer => {},\n pointerMove: pointer => {},\n pointerUp: pointer => {},\n pointerCancel: pointer => {},\n pointerOut: pointer => {},\n pointerLeave: pointer => {},\n globalPointerMove: pointer => {},\n globalPointerUp: pointer => {},\n isImageBindingAllowed: (element: PlaitElement) => false,\n canAddToGroup: (element: PlaitElement) => true,\n canSetZIndex: (element: PlaitElement) => true,\n isExpanded: (element: PlaitElement) => true\n };\n return board;\n}\n","import { BOARD_TO_ON_CHANGE, BOARD_TO_AFTER_CHANGE } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\n\nexport function withBoard(board: PlaitBoard) {\n const { onChange, afterChange } = board;\n\n board.onChange = () => {\n const onContextChange = BOARD_TO_ON_CHANGE.get(board);\n if (onContextChange) {\n onContextChange();\n }\n onChange();\n };\n\n board.afterChange = () => {\n const afterContextChange = BOARD_TO_AFTER_CHANGE.get(board);\n if (afterContextChange) {\n afterContextChange();\n }\n afterChange();\n }\n\n return board;\n}\n","import { PlaitBoard, PlaitPointerType } from '../interfaces';\nimport { isMobileDeviceEvent } from './pointer';\n\nexport const isSmartHand = (board: PlaitBoard, event: PointerEvent) => {\n return (\n PlaitBoard.isPointer(board, PlaitPointerType.hand) ||\n (PlaitBoard.isPointer(board, PlaitPointerType.selection) && isMobileDeviceEvent(event))\n );\n};\n","import { DRAG_SELECTION_PRESS_AND_MOVE_BUFFER } from '../constants';\nimport { PlaitPointerType, PlaitBoard, PlaitBoardMove, WithHandPluginOptions, PlaitPluginKey } from '../interfaces';\nimport { BoardTransforms } from '../transforms';\nimport { distanceBetweenPointAndPoint, isHitElement, isMovingElements, isSelectionMoving, toHostPoint, toViewBoxPoint } from '../utils';\nimport { isMainPointer } from '../utils/dom/common';\nimport { isSmartHand } from '../utils/mobile';\nimport { updateViewportContainerScroll } from '../utils/viewport';\nimport { PlaitOptionsBoard } from './with-options';\n\nexport function withHandPointer<T extends PlaitBoard>(board: T) {\n const { pointerDown, pointerMove, globalPointerUp, keyDown, keyUp, pointerUp } = board;\n let isMoving: boolean = false;\n let movingPoint: PlaitBoardMove | null = null;\n let pointerDownEvent: PointerEvent | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n const options = (board as unknown as PlaitOptionsBoard).getPluginOptions<WithHandPluginOptions>(PlaitPluginKey.withHand);\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const isHitTarget = isHitElement(board, point);\n if ((options?.isHandMode(board, event) || (isSmartHand(board, event) && !isHitTarget)) && isMainPointer(event)) {\n movingPoint = {\n x: event.x,\n y: event.y\n };\n }\n pointerDownEvent = event;\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n const options = (board as unknown as PlaitOptionsBoard).getPluginOptions<WithHandPluginOptions>(PlaitPluginKey.withHand);\n // 阈值必须大于 withSelection 中 pointerMove 的 PRESS_AND_MOVE_BUFFER:\n // 1. 首先检测是否满足进入拖选状态的条件\n // 2. 仅当不满足拖选条件时,才会考虑触发 withHand 行为\n // Must exceed the DRAG_SELECTION_PRESS_AND_MOVE_BUFFER threshold defined in withSelection's pointerMove.\n // The system first checks for drag selection state eligibility\n // withHand behavior is only triggered if drag selection state is not initiated.\n const triggerDistance = DRAG_SELECTION_PRESS_AND_MOVE_BUFFER + 4;\n if (\n movingPoint &&\n !isMoving &&\n !isSelectionMoving(board) &&\n pointerDownEvent &&\n distanceBetweenPointAndPoint(pointerDownEvent.x, pointerDownEvent.y, event.x, event.y) > triggerDistance &&\n !isMovingElements(board)\n ) {\n isMoving = true;\n PlaitBoard.getBoardContainer(board).classList.add('viewport-moving');\n }\n if (\n (options?.isHandMode(board, event) || isSmartHand(board, event)) &&\n isMoving &&\n movingPoint &&\n !isSelectionMoving(board) &&\n !isMovingElements(board)\n ) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n const left = viewportContainer.scrollLeft - (event.x - movingPoint.x);\n const top = viewportContainer.scrollTop - (event.y - movingPoint.y);\n updateViewportContainerScroll(board, left, top, false);\n movingPoint.x = event.x;\n movingPoint.y = event.y;\n }\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n if (isMoving) {\n return;\n }\n pointerUp(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (movingPoint) {\n movingPoint = null;\n }\n if (isMoving) {\n isMoving = false;\n PlaitBoard.getBoardContainer(board).classList.remove('viewport-moving');\n }\n globalPointerUp(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","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 (PlaitHistoryBoard.isSplittingOnce(board)) {\n merge = false;\n PlaitHistoryBoard.setSplittingOnce(board, undefined);\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 { isHotkey, isKeyHotkey } from 'is-hotkey';\nimport { Ancestor, PlaitBoard, PlaitElement, PlaitPluginKey, WithSelectionPluginOptions } from '../interfaces';\nimport { BoardTransforms, Transforms } from '../transforms';\nimport { deleteFragment, depthFirstRecursion, duplicateElements, getSelectedElements, hotkeys } from '../utils';\nimport { PlaitOptionsBoard } from './with-options';\n\nexport const withHotkey = (board: PlaitBoard) => {\n const { keyDown, keyUp, globalKeyDown } = board;\n\n board.keyDown = (event: KeyboardEvent) => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithSelectionPluginOptions>(PlaitPluginKey.withSelection);\n if (!PlaitBoard.isReadonly(board) && options.isMultipleSelection && isHotkey('mod+a', event)) {\n event.preventDefault();\n let elements: PlaitElement[] = [];\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (PlaitBoard.isBoard(node)) {\n return;\n }\n elements.push(node as PlaitElement);\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 Transforms.addSelectionWithTemporaryElements(board, elements);\n return;\n }\n if (!PlaitBoard.isReadonly(board)) {\n if (isKeyHotkey('mod+]', event)) {\n event.preventDefault();\n Transforms.moveUp(board);\n return;\n }\n if (isKeyHotkey('mod+[', event)) {\n event.preventDefault();\n Transforms.moveDown(board);\n return;\n }\n if (isKeyHotkey('mod+option+‘', event)) {\n event.preventDefault();\n Transforms.moveToTop(board);\n return;\n }\n if (isKeyHotkey('mod+option+“', event)) {\n event.preventDefault();\n Transforms.moveToBottom(board);\n return;\n }\n }\n\n const selectedElements = getSelectedElements(board);\n if (!PlaitBoard.isReadonly(board) && selectedElements.length > 0) {\n if (isKeyHotkey('mod+d', event)) {\n event.preventDefault();\n duplicateElements(board);\n return;\n }\n }\n if (\n !PlaitBoard.isReadonly(board) &&\n selectedElements.length > 0 &&\n (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event))\n ) {\n event.preventDefault();\n deleteFragment(board);\n }\n\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n keyUp(event);\n };\n\n board.globalKeyDown = (event: KeyboardEvent) => {\n if (PlaitBoard.getMovingPointInBoard(board) || PlaitBoard.isMovingPointInBoard(board)) {\n if (isHotkey(['mod+=', 'mod++'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, board.viewport.zoom + 0.1);\n return;\n }\n if (isHotkey(['mod+shift+=', 'mod+shift++'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.fitViewport(board);\n return;\n }\n if (isHotkey(['mod+-', 'mod+shift+-'])(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, board.viewport.zoom - 0.1);\n return;\n }\n if (isHotkey(['mod+0', 'mod+shift+0'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, 1);\n return;\n }\n }\n globalKeyDown(event);\n };\n\n return board;\n};\n","import { PlaitBoard } from '../../interfaces/board';\nimport { createG } from '../dom/common';\nimport { PlaitElement } from '../../interfaces/element';\nimport { Point, RectangleClient } from '../../interfaces';\nimport {\n drawPointSnapLines,\n drawSolidLines,\n GapSnapRef,\n getMinPointDelta,\n getSnapRectangles,\n getTripleAxis,\n SNAP_TOLERANCE,\n SnapDelta,\n SnapRef\n} from './snap';\n\nexport function getSnapMovingRef(board: PlaitBoard, activeRectangle: RectangleClient, activeElements: PlaitElement[]): SnapRef {\n const snapRectangles = getSnapRectangles(board, activeElements);\n const snapG = createG();\n let snapDelta = getPointLineDelta(activeRectangle, snapRectangles);\n const pointLinesG = drawMovingPointSnapLines(board, snapDelta, activeRectangle, snapRectangles);\n snapG.append(pointLinesG);\n const result = getGapSnapLinesAndDelta(board, snapDelta, activeRectangle, snapRectangles);\n snapDelta = result.snapDelta;\n snapG.append(result.snapG);\n return { ...snapDelta, snapG };\n}\n\nfunction getPointLineDeltas(activeRectangle: RectangleClient, snapRectangles: RectangleClient[], isHorizontal: boolean) {\n const axis = getTripleAxis(activeRectangle, isHorizontal);\n const deltaStart = getMinPointDelta(snapRectangles, axis[0], isHorizontal);\n const deltaMiddle = getMinPointDelta(snapRectangles, axis[1], isHorizontal);\n const deltaEnd = getMinPointDelta(snapRectangles, axis[2], isHorizontal);\n return [deltaStart, deltaMiddle, deltaEnd];\n}\n\nfunction getPointLineDelta(activeRectangle: RectangleClient, snapRectangles: RectangleClient[]) {\n let snapDelta: SnapDelta = {\n deltaX: 0,\n deltaY: 0\n };\n function getDelta(isHorizontal: boolean) {\n let delta = 0;\n const deltas = getPointLineDeltas(activeRectangle, snapRectangles, isHorizontal);\n for (let i = 0; i < deltas.length; i++) {\n if (Math.abs(deltas[i]) < SNAP_TOLERANCE) {\n delta = deltas[i];\n break;\n }\n }\n return delta;\n }\n snapDelta.deltaX = getDelta(true);\n snapDelta.deltaY = getDelta(false);\n return snapDelta;\n}\n\nfunction updateActiveRectangle(snapDelta: SnapDelta, activeRectangle: RectangleClient) {\n const { deltaX, deltaY } = snapDelta;\n const { x, y, width, height } = activeRectangle;\n return {\n x: x + deltaX,\n y: y + deltaY,\n width,\n height\n };\n}\n\nfunction drawMovingPointSnapLines(\n board: PlaitBoard,\n snapDelta: SnapDelta,\n activeRectangle: RectangleClient,\n snapRectangles: RectangleClient[]\n) {\n const newActiveRectangle = updateActiveRectangle(snapDelta, activeRectangle);\n return drawPointSnapLines(board, newActiveRectangle, snapRectangles, true, true, true);\n}\n\nfunction getGapSnapLinesAndDelta(\n board: PlaitBoard,\n snapDelta: SnapDelta,\n activeRectangle: RectangleClient,\n snapRectangles: RectangleClient[]\n) {\n let deltaX = snapDelta.deltaX;\n let deltaY = snapDelta.deltaY;\n const gapHorizontalResult = getGapLinesAndDelta(activeRectangle, snapRectangles, true);\n const gapVerticalResult = getGapLinesAndDelta(activeRectangle, snapRectangles, false);\n const gapSnapLines: Point[][] = [...gapHorizontalResult.lines, ...gapVerticalResult.lines];\n if (gapHorizontalResult.delta) {\n deltaX = gapHorizontalResult.delta;\n }\n if (gapVerticalResult.delta) {\n deltaY = gapVerticalResult.delta;\n }\n return {\n snapDelta: { deltaX, deltaY },\n snapG: drawSolidLines(board, gapSnapLines)\n };\n}\n\nfunction getGapLinesAndDelta(activeRectangle: RectangleClient, snapRectangles: RectangleClient[], isHorizontal: boolean) {\n let lines: any[] = [];\n let delta = 0;\n let rectangles: RectangleClient[] = [];\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n\n const activeRectangleCenter = activeRectangle[axis] + activeRectangle[side] / 2;\n snapRectangles.forEach(rec => {\n const isCross = isHorizontal ? isHorizontalCross(rec, activeRectangle) : isVerticalCross(rec, activeRectangle);\n if (isCross && !RectangleClient.isHit(rec, activeRectangle)) {\n rectangles.push(rec);\n }\n });\n rectangles = [...rectangles, activeRectangle].sort((a, b) => a[axis] - b[axis]);\n\n const refArray: GapSnapRef[] = [];\n let gapDistance = 0;\n let beforeIndex = undefined;\n let afterIndex = undefined;\n\n for (let i = 0; i < rectangles.length; i++) {\n for (let j = i + 1; j < rectangles.length; j++) {\n const before = rectangles[i];\n const after = rectangles[j];\n const distance = after[axis] - (before[axis] + before[side]);\n let dif = Infinity;\n if (refArray[i]?.after) {\n refArray[i].after.push({ distance, index: j });\n } else {\n refArray[i] = { ...refArray[i], after: [{ distance, index: j }] };\n }\n\n if (refArray[j]?.before) {\n refArray[j].before.push({ distance, index: i });\n } else {\n refArray[j] = { ...refArray[j], before: [{ distance, index: i }] };\n }\n\n //middle\n let _center = (before[axis] + before[side] + after[axis]) / 2;\n dif = Math.abs(_center - activeRectangleCenter);\n if (dif < SNAP_TOLERANCE) {\n gapDistance = (after[axis] - (before[axis] + before[side]) - activeRectangle[side]) / 2;\n delta = _center - activeRectangleCenter;\n beforeIndex = i;\n afterIndex = j;\n }\n\n //after\n const distanceRight = after[axis] - (before[axis] + before[side]);\n _center = after[axis] + after[side] + distanceRight + activeRectangle[side] / 2;\n dif = Math.abs(_center - activeRectangleCenter);\n if ((!gapDistance || gapDistance !== distanceRight) && dif < SNAP_TOLERANCE) {\n gapDistance = distanceRight;\n beforeIndex = j;\n delta = _center - activeRectangleCenter;\n }\n\n //before\n const distanceBefore = after[axis] - (before[axis] + before[side]);\n _center = before[axis] - distanceBefore - activeRectangle[side] / 2;\n dif = Math.abs(_center - activeRectangleCenter);\n\n if (!gapDistance && dif < SNAP_TOLERANCE) {\n gapDistance = distanceBefore;\n afterIndex = i;\n delta = _center - activeRectangleCenter;\n }\n }\n }\n\n const activeIndex = rectangles.indexOf(activeRectangle);\n let beforeIndexes: number[] = [];\n let afterIndexes: number[] = [];\n if (beforeIndex !== undefined) {\n beforeIndexes.push(beforeIndex);\n findRectangle(gapDistance, refArray[beforeIndex], 'before', beforeIndexes);\n }\n\n if (afterIndex !== undefined) {\n afterIndexes.push(afterIndex);\n findRectangle(gapDistance, refArray[afterIndex], 'after', afterIndexes);\n }\n\n if (beforeIndexes.length || afterIndexes.length) {\n const indexArr = [...beforeIndexes.reverse(), activeIndex, ...afterIndexes];\n activeRectangle[axis] += delta;\n for (let i = 1; i < indexArr.length; i++) {\n lines.push(getLinePoints(rectangles[indexArr[i - 1]], rectangles[indexArr[i]]));\n }\n }\n\n function findRectangle(distance: number, ref: GapSnapRef, direction: string, rectangleIndexes: number[]) {\n const arr = ref[direction as keyof GapSnapRef];\n const index = refArray.indexOf(ref);\n if ((index === 0 && direction === 'before') || (index === refArray.length - 1 && direction === 'after')) return;\n for (let i = 0; i < arr.length; i++) {\n if (Math.abs(arr[i].distance - distance) < 0.1) {\n rectangleIndexes.push(arr[i].index);\n findRectangle(distance, refArray[arr[i].index], direction, rectangleIndexes);\n return;\n }\n }\n }\n\n function getLinePoints(beforeRectangle: RectangleClient, afterRectangle: RectangleClient) {\n const oppositeAxis = axis === 'x' ? 'y' : 'x';\n const oppositeSide = side === 'width' ? 'height' : 'width';\n const snap = [\n beforeRectangle[oppositeAxis],\n beforeRectangle[oppositeAxis] + beforeRectangle[oppositeSide],\n afterRectangle[oppositeAxis],\n afterRectangle[oppositeAxis] + afterRectangle[oppositeSide]\n ];\n const sortArr = snap.sort((a, b) => a - b);\n const average = (sortArr[1] + sortArr[2]) / 2;\n const offset = 3;\n return isHorizontal\n ? [\n [beforeRectangle.x + beforeRectangle.width + offset, average],\n [afterRectangle.x - offset, average]\n ]\n : [\n [average, beforeRectangle.y + beforeRectangle.height + offset],\n [average, afterRectangle.y - offset]\n ];\n }\n return { delta, lines };\n}\n\nfunction isHorizontalCross(rectangle: RectangleClient, other: RectangleClient) {\n return !(rectangle.y + rectangle.height < other.y || rectangle.y > other.y + other.height);\n}\n\nfunction isVerticalCross(rectangle: RectangleClient, other: RectangleClient) {\n return !(rectangle.x + rectangle.width < other.x || rectangle.x > other.x + other.width);\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { isInPlaitBoard } from '../utils/board';\nimport { createG, isMainPointer } from '../utils/dom/common';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { PlaitElement } from '../interfaces/element';\nimport { getHitElementByPoint, getSelectedElements } from '../utils/selected-element';\nimport { PlaitNode } from '../interfaces/node';\nimport { throttleRAF } from '../utils/common';\nimport { cacheMovingElements, getMovingElements, isMovingElements, removeMovingElements } from '../utils/moving-element';\nimport { MERGING } from '../interfaces/history';\nimport {\n getRectangleByElements,\n distanceBetweenPointAndPoint,\n toHostPoint,\n toViewBoxPoint,\n hotkeys,\n getElementsInGroupByElement,\n getRectangleByAngle,\n getSelectionAngle,\n duplicateElements,\n drawRectangle,\n depthFirstRecursion,\n getAngleByElement,\n setAngleForG,\n NODE_TO_INDEX\n} from '../utils';\nimport { getSnapMovingRef } from '../utils/snap/snap-moving';\nimport { PlaitGroupElement, PlaitPointerType, RectangleClient, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR } from '../interfaces';\nimport { ACTIVE_MOVING_CLASS_NAME, PRESS_AND_MOVE_BUFFER } from '../constants';\nimport { addSelectionWithTemporaryElements } from '../transforms/selection';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function withMoving(board: PlaitBoard) {\n const { pointerDown, pointerMove, globalPointerUp, globalPointerMove, globalKeyDown, keyUp } = board;\n\n let offsetX = 0;\n let offsetY = 0;\n let isPreventDefault = false;\n let startPoint: Point | null;\n let activeElements: PlaitElement[] = [];\n let snapG: SVGGElement | null = null;\n let activeElementsRectangle: RectangleClient | null = null;\n let selectedTargetElements: PlaitElement[] | null = null;\n let hitTargetElement: PlaitElement | undefined = undefined;\n let isHitSelectedTarget: boolean | undefined = undefined;\n let pendingNodesG: SVGGElement | null = null;\n\n board.globalKeyDown = (event: KeyboardEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n if (isKeyHotkey('option', event)) {\n event.preventDefault();\n if (startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {\n pendingNodesG = drawPendingNodesG(board, activeElements, offsetX, offsetY);\n pendingNodesG && PlaitBoard.getElementActiveHost(board).append(pendingNodesG);\n }\n }\n }\n globalKeyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n if (!PlaitBoard.isReadonly(board)) {\n if (pendingNodesG && startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {\n event.preventDefault();\n const currentElements = updatePoints(board, activeElements, offsetX, offsetY);\n PlaitBoard.getBoardContainer(board).classList.add('element-moving');\n cacheMovingElements(board, currentElements as PlaitElement[]);\n }\n }\n pendingNodesG?.remove();\n keyUp(event);\n };\n\n board.pointerDown = (event: PointerEvent) => {\n if (PlaitBoard.isReadonly(board) || !PlaitBoard.isPointer(board, PlaitPointerType.selection) || !isMainPointer(event)) {\n pointerDown(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n hitTargetElement = getHitElementByPoint(board, point, el => board.isMovable(el));\n selectedTargetElements = getSelectedTargetElements(board);\n isHitSelectedTarget = hitTargetElement && selectedTargetElements.includes(hitTargetElement);\n if (hitTargetElement && isHitSelectedTarget) {\n startPoint = point;\n activeElements = selectedTargetElements;\n activeElementsRectangle = getRectangleByElements(board, activeElements, true);\n } else if (hitTargetElement) {\n startPoint = point;\n const relatedElements = board.getRelatedFragment([], [hitTargetElement]);\n activeElements = [...getElementsInGroupByElement(board, hitTargetElement), ...relatedElements];\n activeElementsRectangle = getRectangleByElements(board, activeElements, true);\n } else {\n // 只有判定用户未击中元素之后才可以验证用户是否击中了已选元素所在的空白区域\n // Only after it is determined that the user has not hit the element can it be verified whether the user hit the blank area where the selected element is located.\n const targetRectangle = selectedTargetElements.length > 0 && getRectangleByElements(board, selectedTargetElements, false);\n const isHitInTargetRectangle = targetRectangle && RectangleClient.isPointInRectangle(targetRectangle, point);\n if (isHitInTargetRectangle) {\n startPoint = point;\n activeElements = selectedTargetElements;\n activeElementsRectangle = targetRectangle;\n }\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {\n if (!isPreventDefault) {\n isPreventDefault = true;\n }\n snapG?.remove();\n pendingNodesG?.remove();\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n offsetX = endPoint[0] - startPoint[0];\n offsetY = endPoint[1] - startPoint[1];\n const distance = distanceBetweenPointAndPoint(...endPoint, ...startPoint);\n if (distance > PRESS_AND_MOVE_BUFFER || getMovingElements(board).length > 0) {\n if (hitTargetElement && !isHitSelectedTarget && selectedTargetElements && selectedTargetElements.length > 0) {\n addSelectionWithTemporaryElements(board, []);\n hitTargetElement = undefined;\n selectedTargetElements = null;\n isHitSelectedTarget = undefined;\n }\n throttleRAF(board, 'with-moving', () => {\n if (!activeElementsRectangle) {\n return;\n }\n const newRectangle = {\n ...activeElementsRectangle,\n x: activeElementsRectangle.x + offsetX,\n y: activeElementsRectangle.y + offsetY\n };\n const activeRectangle = getRectangleByAngle(newRectangle, getSelectionAngle(activeElements));\n const ref = getSnapMovingRef(board, activeRectangle, activeElements);\n offsetX += ref.deltaX;\n offsetY += ref.deltaY;\n snapG = ref.snapG;\n snapG.classList.add(ACTIVE_MOVING_CLASS_NAME);\n PlaitBoard.getElementActiveHost(board).append(snapG);\n if (event.altKey) {\n pendingNodesG = drawPendingNodesG(board, activeElements, offsetX, offsetY);\n pendingNodesG && PlaitBoard.getElementActiveHost(board).append(pendingNodesG);\n } else {\n const currentElements = updatePoints(board, activeElements, offsetX, offsetY);\n PlaitBoard.getBoardContainer(board).classList.add('element-moving');\n cacheMovingElements(board, currentElements as PlaitElement[]);\n }\n });\n }\n }\n if (isPreventDefault) {\n // Prevent canvas scrolling behavior from being triggered during move\n event.preventDefault();\n }\n pointerMove(event);\n };\n\n board.globalPointerMove = (event: PointerEvent) => {\n if (startPoint) {\n const inPlaitBoardElement = isInPlaitBoard(board, event.x, event.y);\n if (!inPlaitBoardElement) {\n cancelMove(board);\n }\n }\n globalPointerMove(event);\n };\n\n board.globalPointerUp = event => {\n if (event.altKey && activeElements.length) {\n const validElements = getValidElements(board, activeElements);\n const rectangle = getRectangleByElements(board, validElements, false);\n duplicateElements(board, validElements, [rectangle.x + offsetX, rectangle.y + offsetY]);\n }\n isPreventDefault = false;\n hitTargetElement = undefined;\n selectedTargetElements = null;\n isHitSelectedTarget = undefined;\n if (startPoint) {\n cancelMove(board);\n }\n globalPointerUp(event);\n };\n\n function cancelMove(board: PlaitBoard) {\n snapG?.remove();\n pendingNodesG?.remove();\n startPoint = null;\n activeElementsRectangle = null;\n offsetX = 0;\n offsetY = 0;\n activeElements = [];\n if (isMovingElements(board)) {\n removeMovingElements(board);\n }\n MERGING.set(board, false);\n PlaitBoard.getBoardContainer(board).classList.remove('element-moving');\n }\n\n return withArrowMoving(board);\n}\n\nexport function withArrowMoving(board: PlaitBoard) {\n const { keyDown, keyUp } = board;\n board.keyDown = (event: KeyboardEvent) => {\n const selectedElements = getSelectedElements(board);\n if (!PlaitBoard.isReadonly(board) && selectedElements.length > 0 && (hotkeys.isArrow(event) || hotkeys.isExtendArrow(event))) {\n event.preventDefault();\n const isShift = event.shiftKey ? true : false;\n const offset = [0, 0];\n const buffer = isShift ? 10 : 1;\n switch (true) {\n case hotkeys.isMoveUp(event) || hotkeys.isExtendUp(event): {\n offset[1] = -buffer;\n break;\n }\n case hotkeys.isMoveDown(event) || hotkeys.isExtendDown(event): {\n offset[1] = buffer;\n break;\n }\n case hotkeys.isMoveBackward(event) || hotkeys.isExtendBackward(event): {\n offset[0] = -buffer;\n break;\n }\n case hotkeys.isMoveForward(event) || hotkeys.isExtendForward(event): {\n offset[0] = buffer;\n break;\n }\n }\n const targetElements = getSelectedTargetElements(board);\n throttleRAF(board, 'with-arrow-moving', () => {\n updatePoints(board, targetElements, offset[0], offset[1]);\n });\n }\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n MERGING.set(board, false);\n keyUp(event);\n };\n return board;\n}\n\nexport function getSelectedTargetElements(board: PlaitBoard) {\n const selectedElements = getSelectedElements(board);\n const movableElements = board.children.filter(item => board.isMovable(item));\n const targetElements = selectedElements.filter(element => {\n return movableElements.includes(element);\n });\n const relatedElements = board.getRelatedFragment([]);\n targetElements.push(...relatedElements);\n return targetElements;\n}\n\nexport function getValidElements(board: PlaitBoard, activeElements: PlaitElement[]) {\n const validElements = [...activeElements].filter(element => !PlaitGroupElement.isGroup(element) && PlaitElement.isRootElement(element));\n return validElements;\n}\n\nexport function updatePoints(board: PlaitBoard, activeElements: PlaitElement[], offsetX: number, offsetY: number) {\n const validElements = getValidElements(board, activeElements);\n const currentElements = validElements.map(element => {\n const points = element.points || [];\n const newPoints = points.map(p => [p[0] + offsetX, p[1] + offsetY]) as Point[];\n const index = NODE_TO_INDEX.get(element as PlaitElement) as number;\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n [index]\n );\n MERGING.set(board, true);\n return PlaitNode.get(board, [index]);\n });\n return currentElements;\n}\n\nexport function drawPendingNodesG(board: PlaitBoard, activeElements: PlaitElement[], offsetX: number, offsetY: number) {\n let pendingNodesG: SVGElement | null = null;\n const elements: PlaitElement[] = [];\n const validElements = getValidElements(board, activeElements);\n validElements.forEach(element => {\n depthFirstRecursion(\n element,\n node => {\n elements.push(node);\n },\n () => true\n );\n });\n elements.forEach(item => {\n let rectangle = board.getRectangle(item);\n if (rectangle) {\n rectangle = {\n x: rectangle.x + offsetX,\n y: rectangle.y + offsetY,\n width: rectangle.width,\n height: rectangle.height\n };\n const movingG = drawRectangle(board, rectangle!, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n if (!pendingNodesG) {\n pendingNodesG = createG();\n pendingNodesG.classList.add(ACTIVE_MOVING_CLASS_NAME);\n }\n const angle = getAngleByElement(item);\n angle && setAngleForG(movingG, RectangleClient.getCenterPoint(rectangle), angle);\n pendingNodesG.append(movingG);\n }\n });\n return pendingNodesG;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { WithPluginOptions } from '../interfaces/plugin';\n\nexport interface PlaitOptionsBoard extends PlaitBoard {\n getPluginOptions: <K = WithPluginOptions>(key: string) => K;\n setPluginOptions: <K = WithPluginOptions>(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 { PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';\nimport { WritableClipboardContext, WritableClipboardType, WritableClipboardOperationType, addOrCreateClipboardContext } from '../utils';\n\nexport function withRelatedFragment(board: PlaitBoard) {\n const { buildFragment } = board;\n\n board.buildFragment = (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => {\n let relatedFragment = board.getRelatedFragment(originData || []);\n if (relatedFragment) {\n if (originData?.length) {\n relatedFragment = relatedFragment.filter(item => !originData.map(element => element.id).includes(item.id));\n }\n if (relatedFragment.length) {\n const addition: WritableClipboardContext = {\n text: '',\n type: WritableClipboardType.elements,\n elements: relatedFragment\n };\n clipboardContext = addOrCreateClipboardContext(clipboardContext, addition);\n }\n }\n return buildFragment(clipboardContext, rectangle, operationType, originData);\n };\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { isMainPointer } from '../utils/dom/common';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport {\n cacheSelectedElements,\n clearSelectedElement,\n getHitElementsBySelection,\n getSelectedElements,\n isHitElement,\n removeSelectedElement\n} from '../utils/selected-element';\nimport { PlaitElement, PlaitPointerType, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR } from '../interfaces';\nimport { ATTACHED_ELEMENT_CLASS_NAME } from '../constants/selection';\nimport {\n clearSelectionMoving,\n deleteTemporaryElements,\n drawRectangle,\n getTemporaryElements,\n isDragging,\n isHandleSelection,\n isSelectionMoving,\n setSelectionMoving,\n throttleRAF,\n toHostPoint,\n toViewBoxPoint,\n setSelectedElementsWithGroup,\n hasSetSelectionOperation,\n getSelectionOptions,\n setSelectionOptions,\n distanceBetweenPointAndPoint,\n isMobileDeviceEvent\n} from '../utils';\nimport { Selection } from '../interfaces/selection';\nimport { DRAG_SELECTION_PRESS_AND_MOVE_BUFFER } from '../constants';\n\nexport function withSelection(board: PlaitBoard) {\n const { pointerDown, pointerUp, pointerMove, globalPointerUp, onChange, afterChange, drawSelectionRectangle } = board;\n let start: Point | null = null;\n let end: Point | null = null;\n let selectionMovingG: SVGGElement;\n let selectionRectangleG: SVGGElement | null;\n let previousSelectedElements: PlaitElement[];\n let isShift = false;\n let timerId: ReturnType<typeof setTimeout> | null = null;\n let pointerDownEvent: PointerEvent | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!isShift && event.shiftKey) {\n isShift = true;\n }\n if (isShift && !event.shiftKey) {\n isShift = false;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const isHitTarget = isHitElement(board, point);\n const options = getSelectionOptions(board);\n if (\n PlaitBoard.isPointer(board, PlaitPointerType.selection) &&\n !isHitTarget &&\n options.isMultipleSelection &&\n !options.isDisabledSelection\n ) {\n // start drag selection\n if (isMobileDeviceEvent(event)) {\n timerId = setTimeout(() => {\n start = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n timerId = null;\n }, 120);\n } else {\n start = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n }\n }\n pointerDownEvent = event;\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (\n timerId &&\n pointerDownEvent &&\n distanceBetweenPointAndPoint(pointerDownEvent.x, pointerDownEvent.y, event.x, event.y) > DRAG_SELECTION_PRESS_AND_MOVE_BUFFER\n ) {\n clearTimeout(timerId);\n timerId = null;\n }\n if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && start) {\n const movedTarget = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const rectangle = RectangleClient.getRectangleByPoints([start, movedTarget]);\n selectionMovingG?.remove();\n end = movedTarget;\n throttleRAF(board, 'with-selection', () => {\n if (start && end) {\n Transforms.setSelection(board, { anchor: start, focus: end });\n }\n });\n setSelectionMoving(board);\n selectionMovingG = drawRectangle(board, rectangle, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n PlaitBoard.getElementActiveHost(board).append(selectionMovingG);\n }\n pointerMove(event);\n };\n\n // handle the end of click select\n board.pointerUp = (event: PointerEvent) => {\n const isSetSelectionPointer =\n PlaitBoard.isPointer(board, PlaitPointerType.selection) || PlaitBoard.isPointer(board, PlaitPointerType.hand);\n const isSkip = !isMainPointer(event) || isDragging(board) || !isSetSelectionPointer;\n if (isSkip) {\n pointerUp(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const selection = { anchor: point, focus: point };\n Transforms.setSelection(board, selection);\n pointerUp(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (start && end) {\n selectionMovingG?.remove();\n clearSelectionMoving(board);\n Transforms.setSelection(board, { anchor: start, focus: end });\n }\n const options = getSelectionOptions(board);\n if (PlaitBoard.isFocus(board) && !options.isPreventClearSelection) {\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 start = null;\n end = null;\n if (timerId) {\n clearTimeout(timerId);\n timerId = null;\n }\n pointerDownEvent = null;\n globalPointerUp(event);\n };\n\n board.onChange = () => {\n const options = getSelectionOptions(board);\n if (options.isDisabledSelection) {\n clearSelectedElement(board);\n }\n // remove selected element if include\n board.operations.forEach((op) => {\n if (op.type === 'remove_node') {\n removeSelectedElement(board, op.node, true);\n }\n });\n if (isHandleSelection(board) && hasSetSelectionOperation(board)) {\n try {\n if (!isShift) {\n selectionRectangleG?.remove();\n }\n const temporaryElements = getTemporaryElements(board);\n if (temporaryElements) {\n cacheSelectedElements(board, [...temporaryElements]);\n } else {\n let elements = getHitElementsBySelection(board);\n if (!options.isMultipleSelection && elements.length > 1) {\n elements = [elements[0]];\n }\n const isHitElementWithGroup = elements.some((item) => item.groupId);\n const selectedElements = getSelectedElements(board);\n if (isHitElementWithGroup) {\n setSelectedElementsWithGroup(board, elements, isShift);\n } else {\n if (board.selection && Selection.isCollapsed(board.selection)) {\n const element = board.getOneHitElement(elements);\n if (element) {\n elements = [element];\n }\n }\n if (isShift) {\n const newElements = [...selectedElements];\n if (board.selection && Selection.isCollapsed(board.selection)) {\n elements.forEach((element) => {\n if (newElements.includes(element)) {\n newElements.splice(newElements.indexOf(element), 1);\n } else {\n newElements.push(element);\n }\n });\n cacheSelectedElements(board, newElements);\n } else {\n elements.forEach((element) => {\n if (!newElements.includes(element)) {\n newElements.push(element);\n }\n });\n cacheSelectedElements(board, [...newElements]);\n }\n } else {\n cacheSelectedElements(board, [...elements]);\n }\n }\n }\n const newElements = getSelectedElements(board);\n previousSelectedElements = [...newElements];\n deleteTemporaryElements(board);\n if (!isSelectionMoving(board)) {\n selectionRectangleG?.remove();\n if (newElements.length > 1) {\n selectionRectangleG = board.drawSelectionRectangle();\n PlaitBoard.getElementActiveHost(board).append(selectionRectangleG!);\n }\n }\n } catch (error) {\n console.error(error);\n }\n }\n onChange();\n };\n\n board.afterChange = () => {\n if (isHandleSelection(board) && !hasSetSelectionOperation(board)) {\n try {\n const currentSelectedElements = getSelectedElements(board);\n if (currentSelectedElements.length && currentSelectedElements.length > 1) {\n if (\n previousSelectedElements &&\n (currentSelectedElements.length !== previousSelectedElements.length ||\n currentSelectedElements.some((c, index) => c !== previousSelectedElements[index]))\n ) {\n selectionRectangleG?.remove();\n selectionRectangleG = board.drawSelectionRectangle();\n PlaitBoard.getElementActiveHost(board).append(selectionRectangleG!);\n previousSelectedElements = [...currentSelectedElements];\n }\n } else {\n selectionRectangleG?.remove();\n }\n } catch (error) {\n console.error(error);\n }\n }\n afterChange();\n };\n\n setSelectionOptions(board, {\n isMultipleSelection: true,\n isDisabledSelection: false,\n isPreventClearSelection: false\n });\n\n return board;\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.length && board.operations.some(op => op.type === 'set_viewport');\n const isOnlySetSelection = board.operations.length && board.operations.every(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 { PlaitBoardOptions, PlaitElement, PlaitPlugin } from '../../interfaces';\nimport { createBoard } from '../../plugins/create-board';\nimport { KEY_TO_ELEMENT_MAP } from '../../utils';\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 KEY_TO_ELEMENT_MAP.set(board, new Map());\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 * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { IS_MAC } from '../../utils/dom/environment';\nimport { ModifierKeys } from '../test-element';\n\n/** Used to generate unique IDs for events. */\nlet uniqueIds = 0;\n\n/**\n * Creates a browser MouseEvent with the specified options.\n * @docs-private\n */\nexport function createMouseEvent(\n type: string,\n clientX = 0,\n clientY = 0,\n offsetX = 1,\n offsetY = 1,\n button = 0,\n modifiers: ModifierKeys = {}\n) {\n // Note: We cannot determine the position of the mouse event based on the screen\n // because the dimensions and position of the browser window are not available\n // To provide reasonable `screenX` and `screenY` coordinates, we simply use the\n // client coordinates as if the browser is opened in fullscreen.\n const screenX = clientX;\n const screenY = clientY;\n\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n detail: 0,\n relatedTarget: null,\n screenX,\n screenY,\n clientX,\n clientY,\n ctrlKey: modifiers.control,\n altKey: modifiers.alt,\n shiftKey: modifiers.shift,\n metaKey: modifiers.meta,\n button: button,\n buttons: 1\n });\n\n // The `MouseEvent` constructor doesn't allow us to pass these properties into the constructor.\n // Override them to `1`, because they're used for fake screen reader event detection.\n if (offsetX != null) {\n defineReadonlyEventProperty(event, 'offsetX', offsetX);\n }\n\n if (offsetY != null) {\n defineReadonlyEventProperty(event, 'offsetY', offsetY);\n }\n\n return event;\n}\n\n/**\n * Creates a browser `PointerEvent` with the specified options. Pointer events\n * by default will appear as if they are the primary pointer of their type.\n * https://www.w3.org/TR/pointerevents2/#dom-pointerevent-isprimary.\n *\n * For example, if pointer events for a multi-touch interaction are created, the non-primary\n * pointer touches would need to be represented by non-primary pointer events.\n *\n * @docs-private\n */\nexport function createPointerEvent(\n type: string,\n clientX = 0,\n clientY = 0,\n offsetX?: number,\n offsetY?: number,\n options: PointerEventInit = { isPrimary: true }\n) {\n const event = new PointerEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n clientX,\n clientY,\n ...options\n });\n\n if (offsetX != null) {\n defineReadonlyEventProperty(event, 'offsetX', offsetX);\n }\n\n if (offsetY != null) {\n defineReadonlyEventProperty(event, 'offsetY', offsetY);\n }\n\n return event;\n}\n\n/**\n * Creates a browser TouchEvent with the specified pointer coordinates.\n * @docs-private\n */\nexport function createTouchEvent(type: string, pageX = 0, pageY = 0, clientX = 0, clientY = 0) {\n // We cannot use the `TouchEvent` or `Touch` because Firefox and Safari lack support.\n const event = document.createEvent('UIEvent');\n const touchDetails = { pageX, pageY, clientX, clientY, identifier: uniqueIds++ };\n\n // TS3.6 removes the initUIEvent method and suggests porting to \"new UIEvent()\".\n (event as any).initUIEvent(type, true, true, window, 0);\n\n // Most of the browsers don't have a \"initTouchEvent\" method that can be used to define\n // the touch details.\n defineReadonlyEventProperty(event, 'touches', [touchDetails]);\n defineReadonlyEventProperty(event, 'targetTouches', [touchDetails]);\n defineReadonlyEventProperty(event, 'changedTouches', [touchDetails]);\n\n return event;\n}\n\n/**\n * Creates a keyboard event with the specified key and modifiers.\n * @docs-private\n */\nexport function createKeyboardEvent(type: string, keyCode: number = 0, key: string = '', modifiers: ModifierKeys = {}) {\n return new KeyboardEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n keyCode: keyCode,\n key: key,\n shiftKey: modifiers.shift,\n metaKey: modifiers.meta,\n altKey: modifiers.alt,\n ctrlKey: modifiers.control\n });\n}\n\n/**\n * Creates a fake event object with any desired event type.\n * @docs-private\n */\nexport function createFakeEvent(type: string, bubbles = false, cancelable = true, composed = true) {\n return new Event(type, { bubbles, cancelable, composed });\n}\n\n/**\n * Defines a readonly property on the given event object. Readonly properties on an event object\n * are always set as configurable as that matches default readonly properties for DOM event objects.\n */\nfunction defineReadonlyEventProperty(event: Event, propertyName: string, value: any) {\n Object.defineProperty(event, propertyName, { get: () => value, configurable: true });\n}\n\nexport function createModModifierKeys() {\n const modifiers = IS_MAC ? { meta: true } : { control: true };\n return modifiers;\n}\n","/*\n * Public API Surface of plait\n */\nexport * from './constants';\nexport * from './core/element/context-change';\nexport * from './core/element/element-flavour';\nexport * from './core/element/element-ref';\nexport * from './core/list-render';\nexport * from './interfaces';\nexport * from './transforms';\nexport * from './utils';\nexport * from './context';\nexport * from './plugins';\nexport * from './testing';\nexport * from './utils/debug';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ViewportTransforms"],"mappings":"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"}