@plait/core 0.0.39 → 0.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"plait-core.mjs","sources":["../../../packages/plait/src/interfaces/cursor.ts","../../../packages/plait/src/interfaces/path.ts","../../../packages/plait/src/interfaces/node.ts","../../../packages/plait/src/interfaces/operation.ts","../../../packages/plait/src/utils/helper.ts","../../../packages/plait/src/interfaces/viewport.ts","../../../packages/plait/src/interfaces/history.ts","../../../packages/plait/src/utils/weak-maps.ts","../../../packages/plait/src/transfroms/general.ts","../../../packages/plait/src/transfroms/node.ts","../../../packages/plait/src/transfroms/selection.ts","../../../packages/plait/src/transfroms/viewport.ts","../../../packages/plait/src/transfroms/index.ts","../../../packages/plait/src/plugins/create-board.ts","../../../packages/plait/src/plugins/with-board.ts","../../../packages/plait/src/utils/dom.ts","../../../packages/plait/src/utils/environment.ts","../../../packages/plait/src/utils/graph.ts","../../../packages/plait/src/utils/hotkeys.ts","../../../packages/plait/src/utils/id-creator.ts","../../../packages/plait/src/utils/math.ts","../../../packages/plait/src/utils/board.ts","../../../packages/plait/src/utils/history.ts","../../../packages/plait/src/plugins/with-history.ts","../../../packages/plait/src/plugins/with-selection.ts","../../../packages/plait/src/core/toolbar/toolbar.component.ts","../../../packages/plait/src/core/toolbar/toolbar.component.html","../../../packages/plait/src/core/element/element.component.ts","../../../packages/plait/src/board/board.component.ts","../../../packages/plait/src/plait.module.ts","../../../packages/plait/src/constants/index.ts","../../../packages/plait/src/public-api.ts","../../../packages/plait/src/plait-core.ts"],"sourcesContent":["export type CursorStatus = BaseCursorStatus | string;\nexport enum BaseCursorStatus {\n 'move' = 'move',\n 'select' = 'select'\n}\n","import produce from 'immer';\nimport { PlaitOperation } from './operation';\n\nexport type Path = number[];\n\nexport const Path = {\n parent(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the parent path of the root path [${path}].`);\n }\n\n return path.slice(0, -1);\n },\n next(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no next index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last + 1);\n },\n /**\n * Check if a path is an ancestor of another.\n */\n\n isAncestor(path: Path, another: Path): boolean {\n return path.length < another.length && Path.compare(path, another) === 0;\n },\n /**\n * Compare a path to another, returning an integer indicating whether the path\n * was before, at, or after the other.\n *\n * Note: Two paths of unequal length can still receive a `0` result if one is\n * directly above or below the other. If you want exact matching, use\n * [[Path.equals]] instead.\n */\n compare(path: Path, another: Path): -1 | 0 | 1 {\n const min = Math.min(path.length, another.length);\n\n for (let i = 0; i < min; i++) {\n if (path[i] < another[i]) return -1;\n if (path[i] > another[i]) return 1;\n }\n\n return 0;\n },\n\n /**\n * Check if a path is exactly equal to another.\n */\n\n equals(path: Path, another: Path): boolean {\n return path.length === another.length && path.every((n, i) => n === another[i]);\n },\n /**\n * Check if a path ends before one of the indexes in another.\n */\n\n endsBefore(path: Path, another: Path): boolean {\n const i = path.length - 1;\n const as = path.slice(0, i);\n const bs = another.slice(0, i);\n const av = path[i];\n const bv = another[i];\n return Path.equals(as, bs) && av < bv;\n },\n /**\n * Check if a path is a sibling of another.\n */\n isSibling(path: Path, another: Path): boolean {\n if (path.length !== another.length) {\n return false;\n }\n\n const as = path.slice(0, -1);\n const bs = another.slice(0, -1);\n const al = path[path.length - 1];\n const bl = another[another.length - 1];\n return al !== bl && Path.equals(as, bs);\n },\n transform(path: Path | null, operation: PlaitOperation): Path | null {\n return produce(path, p => {\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (!path || path?.length === 0) {\n return;\n }\n\n if (p === null) {\n return null;\n }\n\n switch (operation.type) {\n case 'insert_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.endsBefore(op, p) || Path.isAncestor(op, p)) {\n p[op.length - 1] += 1;\n }\n\n break;\n }\n\n case 'remove_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.isAncestor(op, p)) {\n return null;\n } else if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n\n case 'move_node': {\n const { path: op, newPath: onp } = operation;\n\n // If the old and new path are the same, it's a no-op.\n if (Path.equals(op, onp)) {\n return;\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice();\n // op.length <= onp.length is different for slate\n // resolve drag from [0, 0] to [0, 3] issue\n if (Path.endsBefore(op, onp) && op.length <= onp.length) {\n copy[op.length - 1] -= 1;\n }\n\n return copy.concat(p.slice(op.length));\n } else if (Path.isSibling(op, onp) && (Path.isAncestor(onp, p) || Path.equals(onp, p))) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n } else {\n p[op.length - 1] += 1;\n }\n } else if (Path.endsBefore(onp, p) || Path.equals(onp, p) || Path.isAncestor(onp, p)) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n p[onp.length - 1] += 1;\n } else if (Path.endsBefore(op, p)) {\n if (Path.equals(onp, p)) {\n p[onp.length - 1] += 1;\n }\n\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n }\n return null;\n });\n }\n};\n","import { PlaitBoard } from './board';\nimport { Path } from './path';\n\nexport interface PlaitNode {\n [key: string]: any;\n children?: PlaitNode[];\n id?: string;\n}\n\nexport type Ancestor = PlaitBoard | PlaitNode;\n\nexport interface PlaitNodeInterface {\n parent: (board: PlaitBoard, path: Path) => Ancestor;\n get: (board: PlaitBoard, path: Path) => PlaitNode;\n}\n\nexport const PlaitNode: PlaitNodeInterface = {\n parent: (board: PlaitBoard, path: Path) => {\n const parentPath = Path.parent(path);\n const p = PlaitNode.get(board, parentPath);\n return p;\n },\n get(board: PlaitBoard, path: Path): Ancestor {\n let node: PlaitBoard | PlaitNode = board;\n\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n\n node = node.children[p];\n }\n\n return node;\n }\n};\n","import { PlaitNode } from './node';\nimport { Path } from './path';\nimport { Selection } from './selection';\nimport { Viewport } from './viewport';\n\nexport type InsertNodeOperation = {\n type: 'insert_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type RemoveNodeOperation = {\n type: 'remove_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type MoveNodeOperation = {\n type: 'move_node';\n path: Path;\n newPath: Path;\n};\n\nexport type SetViewportOperation = {\n type: 'set_viewport';\n properties: Partial<Viewport>;\n newProperties: Partial<Viewport>;\n};\n\nexport type SetSelectionOperation = {\n type: 'set_selection';\n properties: Selection | null;\n newProperties: Selection | null;\n};\n\nexport type SetNodeOperation = {\n type: 'set_node';\n path: Path;\n properties: Partial<PlaitNode>;\n newProperties: Partial<PlaitNode>;\n};\n\nexport type PlaitOperation =\n | InsertNodeOperation\n | SetViewportOperation\n | SetSelectionOperation\n | SetNodeOperation\n | RemoveNodeOperation\n | MoveNodeOperation;\n\nexport interface PlaitOperationInterface {\n inverse: (op: PlaitOperation) => PlaitOperation;\n isSetViewportOperation: (value: any) => boolean;\n}\n\nexport const isSetViewportOperation = (value: any): value is SetViewportOperation => {\n return value.type === 'set_viewport';\n};\n\nexport const inverse = (op: PlaitOperation): PlaitOperation => {\n switch (op.type) {\n case 'insert_node': {\n return { ...op, type: 'remove_node' };\n }\n\n case 'remove_node': {\n return { ...op, type: 'insert_node' };\n }\n\n case 'move_node': {\n const { newPath, path } = op;\n\n // PERF: in this case the move operation is a no-op anyways.\n if (Path.equals(newPath, path)) {\n return op;\n }\n\n if (Path.isSibling(path, newPath)) {\n const inversePath = Path.transform(path, op)!;\n return { ...op, path: inversePath, newPath: path };\n }\n\n return { ...op, path: newPath, newPath: path };\n }\n\n case 'set_node': {\n const { properties, newProperties } = op;\n return { ...op, properties: newProperties, newProperties: properties };\n }\n\n case 'set_selection': {\n const { properties, newProperties } = op;\n\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: null\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: null,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n\n case 'set_viewport': {\n const { properties, newProperties } = op;\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: newProperties\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: properties,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n }\n};\n\nexport const PlaitOperation: PlaitOperationInterface = {\n isSetViewportOperation,\n inverse\n};\n","export function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n","import { isNullOrUndefined } from '../utils/helper';\nimport { ExtendedType } from './custom-types';\n\nexport interface BaseViewport {\n [key: string]: any;\n offsetX: number;\n offsetY: number;\n zoom: number;\n viewBackgroundColor: string;\n}\n\nexport type Viewport = ExtendedType<'Viewport', BaseViewport>;\n\nexport interface ViewportInterface {\n isViewport: (value: any) => value is Viewport;\n}\n\nexport const Viewport: ViewportInterface = {\n isViewport: (value: any): value is Viewport => {\n return (\n !isNullOrUndefined(value.offsetX) &&\n !isNullOrUndefined(value.offsetY) &&\n !isNullOrUndefined(value.zoom) &&\n !isNullOrUndefined(value.viewBackgroundColor)\n );\n }\n};\n","import { PlaitBoard } from './board';\nimport { PlaitOperation } from './operation';\n\nexport interface PlaitHistory {\n redos: PlaitOperation[][];\n undos: PlaitOperation[][];\n}\n\nexport const SAVING = new WeakMap<PlaitBoard, boolean | undefined>();\nexport const MERGING = new WeakMap<PlaitBoard, boolean | undefined>();\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { PlaitBoard } from '../interfaces/board';\n\n// record richtext type status\nexport const FLUSHING: WeakMap<PlaitBoard, boolean> = new WeakMap();\n\nexport const IS_TEXT_EDITABLE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ON_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const HOST_TO_ROUGH_SVG = new WeakMap<SVGElement, RoughSVG>();\n","import { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { createDraft, finishDraft, isDraft } from 'immer';\nimport { Viewport } from '../interfaces/viewport';\nimport { Selection } from '../interfaces/selection';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport interface GeneralTransforms {\n transform: (board: PlaitBoard, op: PlaitOperation) => void;\n}\n\nconst applyToDraft = (board: PlaitBoard, selection: Selection | null, viewport: Viewport, op: PlaitOperation) => {\n switch (op.type) {\n case 'insert_node': {\n const { path, node } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n\n parent.children.splice(index, 0, node);\n break;\n }\n case 'remove_node': {\n const { path } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n parent.children.splice(index, 1);\n break;\n }\n case 'move_node': {\n const { path, newPath } = op;\n\n if (Path.isAncestor(path, newPath)) {\n throw new Error(`Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.`);\n }\n\n const node = PlaitNode.get(board, path);\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n // This is tricky, but since the `path` and `newPath` both refer to\n // the same snapshot in time, there's a mismatch. After either\n // removing the original position, the second step's path can be out\n // of date. So instead of using the `op.newPath` directly, we\n // transform `op.path` to ascertain what the `newPath` would be after\n // the operation was applied.\n parent.children?.splice(index, 1);\n const truePath = Path.transform(path, op)!;\n const newParent = PlaitNode.get(board, Path.parent(truePath)) as Ancestor;\n const newIndex = truePath[truePath.length - 1];\n\n newParent.children?.splice(newIndex, 0, node);\n break;\n }\n case 'set_node': {\n const { path, properties, newProperties } = op;\n\n if (path.length === 0) {\n throw new Error(`Cannot set properties on the root node!`);\n }\n\n const node = PlaitNode.get(board, path);\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete node[key];\n } else {\n node[key] = value;\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete node[key];\n }\n }\n\n break;\n }\n case 'set_viewport': {\n const { newProperties } = op;\n if (newProperties == null) {\n viewport = newProperties;\n } else {\n if (viewport == null) {\n if (!Viewport.isViewport(newProperties)) {\n throw new Error(\n `Cannot apply an incomplete \"set_viewport\" operation properties ${JSON.stringify(\n newProperties\n )} when there is no current viewport.`\n );\n }\n viewport = { ...newProperties };\n }\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete viewport[key];\n } else {\n viewport[key] = value;\n }\n }\n }\n break;\n }\n case 'set_selection': {\n const { newProperties } = op;\n if (newProperties == null) {\n selection = newProperties;\n } else {\n if (selection === null) {\n selection = op.newProperties;\n } else {\n selection.anchor = newProperties.anchor;\n selection.focus = newProperties.focus;\n }\n }\n break;\n }\n }\n return { selection, viewport };\n};\n\nexport const GeneralTransforms: GeneralTransforms = {\n /**\n * Transform the board by an operation.\n */\n transform(board: PlaitBoard, op: PlaitOperation): void {\n board.children = createDraft(board.children);\n let viewport = board.viewport && createDraft(board.viewport);\n let selection = board.selection && createDraft(board.selection);\n\n try {\n const state = applyToDraft(board, selection, viewport, op);\n viewport = state.viewport;\n selection = state.selection;\n } finally {\n board.children = finishDraft(board.children);\n\n if (selection) {\n board.selection = isDraft(selection) ? (finishDraft(selection) as Selection) : selection;\n } else {\n board.selection = null;\n }\n board.viewport = isDraft(viewport) ? (finishDraft(viewport) as Viewport) : viewport;\n }\n }\n};\n","import { InsertNodeOperation, MoveNodeOperation, RemoveNodeOperation, SetNodeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport function insertNode(board: PlaitBoard, node: PlaitNode, path: Path) {\n const operation: InsertNodeOperation = { type: 'insert_node', node, path };\n board.apply(operation);\n}\n\nexport function setNode(board: PlaitBoard, props: Partial<PlaitNode>, path: Path) {\n const properties: Partial<PlaitNode> = {};\n const newProperties: Partial<PlaitNode> = {};\n const node = PlaitNode.get(board, path);\n for (const k in props) {\n if (node[k] !== props[k]) {\n if (node.hasOwnProperty(k)) {\n properties[k] = node[k];\n }\n if (props[k] != null) newProperties[k] = props[k];\n }\n }\n const operation: SetNodeOperation = { type: 'set_node', properties, newProperties, path };\n board.apply(operation);\n}\n\nexport function removeNode(board: PlaitBoard, path: Path) {\n const node = PlaitNode.get(board, path);\n const operation: RemoveNodeOperation = { type: 'remove_node', path, node };\n board.apply(operation);\n}\n\nexport function moveNode(board: PlaitBoard, path: Path, newPath: Path) {\n const operation: MoveNodeOperation = { type: 'move_node', path, newPath };\n board.apply(operation);\n}\n\nexport interface NodeTransforms {\n insertNode: (board: PlaitBoard, node: PlaitNode, path: Path) => void;\n setNode: (board: PlaitBoard, node: Partial<PlaitNode>, path: Path) => void;\n removeNode: (board: PlaitBoard, path: Path) => void;\n moveNode: (board: PlaitBoard, path: Path, newPath: Path) => void;\n}\n\nexport const NodeTransforms: NodeTransforms = {\n insertNode,\n setNode,\n removeNode,\n moveNode\n};\n","import { SetSelectionOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Selection } from '../interfaces/selection';\n\nexport function setSelection(board: PlaitBoard, selection: Selection | null) {\n const operation: SetSelectionOperation = { type: 'set_selection', properties: board.selection, newProperties: selection };\n board.apply(operation);\n}\n\nexport interface SelectionTransforms {\n setSelection: (board: PlaitBoard, selection: Selection | null) => void;\n}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection\n};\n","import { SetViewportOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Viewport } from '../interfaces/viewport';\n\nexport function setViewport(board: PlaitBoard, viewport: Viewport) {\n const operation: SetViewportOperation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };\n board.apply(operation);\n}\n\nexport interface ViewportTransforms {\n setViewport: (board: PlaitBoard, viewport: Viewport) => void;\n}\n\nexport const ViewportTransforms: ViewportTransforms = {\n setViewport\n};\n","import { GeneralTransforms } from './general';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\n\nexport const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms\n};\n","import { PlaitElement } from '../interfaces/element';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitElementContext } from '../interfaces/element-context';\nimport { SimpleChanges } from '@angular/core';\nimport { FLUSHING } from '../utils/weak-maps';\nimport { Transforms } from '../transfroms';\nimport { BaseCursorStatus } from '../interfaces/cursor';\n\nexport function createBoard(host: SVGElement, children: PlaitElement[], options: PlaitBoardOptions): PlaitBoard {\n const board: PlaitBoard = {\n host,\n viewport: {\n offsetX: 0,\n offsetY: 0,\n zoom: 1,\n viewBackgroundColor: '#000'\n },\n children,\n operations: [],\n history: {\n redos: [],\n undos: []\n },\n selection: null,\n cursor: BaseCursorStatus.select,\n readonly: options.readonly,\n allowClearBoard: options.allowClearBoard,\n undo: () => {},\n redo: () => {},\n apply: (operation: PlaitOperation) => {\n board.operations.push(operation);\n\n Transforms.transform(board, operation);\n\n if (!FLUSHING.get(board)) {\n FLUSHING.set(board, true);\n\n Promise.resolve().then(() => {\n FLUSHING.set(board, false);\n board.onChange();\n board.operations = [];\n });\n }\n },\n onChange: () => {},\n mousedown: (event: MouseEvent) => {},\n globalMouseup: (event: MouseEvent) => {},\n mousemove: (event: MouseEvent) => {},\n keydown: (event: KeyboardEvent) => {},\n keyup: (event: KeyboardEvent) => {},\n dblclick: (event: MouseEvent) => {},\n setFragment: (data: DataTransfer | null) => {},\n insertFragment: (data: DataTransfer | null) => {},\n deleteFragment: (data: DataTransfer | null) => {},\n drawElement: (context: PlaitElementContext) => [],\n redrawElement: (context: PlaitElementContext, changes: SimpleChanges) => [],\n destroyElement: () => {}\n };\n return board;\n}\n","import { BOARD_TO_ON_CHANGE } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\n\nexport function withBoard(board: PlaitBoard) {\n const { onChange } = board;\n\n board.onChange = () => {\n const onContextChange = BOARD_TO_ON_CHANGE.get(board);\n\n if (onContextChange) {\n onContextChange();\n }\n\n onChange();\n };\n\n return board;\n}\n","import { Point } from 'roughjs/bin/geometry';\n\nexport const NS = 'http://www.w3.org/2000/svg';\n\nexport function toPoint(x: number, y: number, container: SVGElement): Point {\n const rect = container.getBoundingClientRect();\n return [x - rect.x, y - rect.y];\n}\n\nexport function createG() {\n const newG = document.createElementNS(NS, 'g');\n return newG;\n}\n\nexport function createSVG() {\n const svg = document.createElementNS(NS, 'svg');\n return svg;\n}\n\nexport function createText(x: number, y: number,fill: string, textContent: string) {\n var text = document.createElementNS(NS, 'text');\n text.setAttribute('x', `${x}`);\n text.setAttribute('y', `${y}`);\n text.setAttribute('fill', fill);\n text.textContent = textContent;\n return text;\n}","export const IS_IOS =\n typeof navigator !== 'undefined' &&\n typeof window !== 'undefined' &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !(window as any).MSStream;\n\nexport const IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent);\n\nexport const IS_FIREFOX = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);\n\nexport const IS_SAFARI = typeof navigator !== 'undefined' && /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent);\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent);\n\nexport const IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent);\n\n// Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput\nexport const IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent);\n","import { RectangleClient } from '../interfaces/graph';\nimport { Point } from '../interfaces/point';\n\nexport function toRectangleClient(points: [Point, Point]): RectangleClient {\n const xArray = points.map(ele => ele[0]);\n const yArray = points.map(ele => ele[1]);\n const xMin = Math.min(...xArray);\n const xMax = Math.max(...xArray);\n const yMin = Math.min(...yArray);\n const yMax = Math.max(...yArray);\n const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n return rect;\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { IS_APPLE } from './environment';\n\n/**\n * Hotkey mappings for each platform.\n */\n\nconst HOTKEYS: any = {\n bold: 'mod+b',\n compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],\n moveBackward: 'left',\n moveForward: 'right',\n moveUp: 'up',\n moveDown: 'down',\n moveWordBackward: 'ctrl+left',\n moveWordForward: 'ctrl+right',\n deleteBackward: 'shift?+backspace',\n deleteForward: 'shift?+delete',\n extendBackward: 'shift+left',\n extendForward: 'shift+right',\n italic: 'mod+i',\n splitBlock: 'shift?+enter',\n undo: 'mod+z'\n};\n\nconst APPLE_HOTKEYS: any = {\n moveLineBackward: 'opt+up',\n moveLineForward: 'opt+down',\n moveWordBackward: 'opt+left',\n moveWordForward: 'opt+right',\n deleteBackward: ['ctrl+backspace', 'ctrl+h'],\n deleteForward: ['ctrl+delete', 'ctrl+d'],\n deleteLineBackward: 'cmd+shift?+backspace',\n deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],\n deleteWordBackward: 'opt+shift?+backspace',\n deleteWordForward: 'opt+shift?+delete',\n extendLineBackward: 'opt+shift+up',\n extendLineForward: 'opt+shift+down',\n redo: 'cmd+shift+z',\n transposeCharacter: 'ctrl+t'\n};\n\nconst WINDOWS_HOTKEYS: any = {\n deleteWordBackward: 'ctrl+shift?+backspace',\n deleteWordForward: 'ctrl+shift?+delete',\n redo: ['ctrl+y', 'ctrl+shift+z']\n};\n\n/**\n * Create a platform-aware hotkey checker.\n */\n\nconst create = (key: string) => {\n const generic = HOTKEYS[key];\n const apple = APPLE_HOTKEYS[key];\n const windows = WINDOWS_HOTKEYS[key];\n const isGeneric = generic && isKeyHotkey(generic);\n const isApple = apple && isKeyHotkey(apple);\n const isWindows = windows && isKeyHotkey(windows);\n\n return (event: KeyboardEvent) => {\n if (isGeneric && isGeneric(event)) {\n return true;\n }\n if (IS_APPLE && isApple && isApple(event)) {\n return true;\n }\n if (!IS_APPLE && isWindows && isWindows(event)) {\n return true;\n }\n return false;\n };\n};\n\n/**\n * Hotkeys.\n */\n\nconst hotkeys = {\n isBold: create('bold'),\n isCompose: create('compose'),\n isMoveBackward: create('moveBackward'),\n isMoveForward: create('moveForward'),\n isMoveUp: create('moveUp'),\n isMoveDown: create('moveDown'),\n isDeleteBackward: create('deleteBackward'),\n isDeleteForward: create('deleteForward'),\n isDeleteLineBackward: create('deleteLineBackward'),\n isDeleteLineForward: create('deleteLineForward'),\n isDeleteWordBackward: create('deleteWordBackward'),\n isDeleteWordForward: create('deleteWordForward'),\n isExtendBackward: create('extendBackward'),\n isExtendForward: create('extendForward'),\n isExtendLineBackward: create('extendLineBackward'),\n isExtendLineForward: create('extendLineForward'),\n isItalic: create('italic'),\n isMoveLineBackward: create('moveLineBackward'),\n isMoveLineForward: create('moveLineForward'),\n isMoveWordBackward: create('moveWordBackward'),\n isMoveWordForward: create('moveWordForward'),\n isRedo: create('redo'),\n isSplitBlock: create('splitBlock'),\n isTransposeCharacter: create('transposeCharacter'),\n isUndo: create('undo')\n};\nexport default hotkeys;\nexport { hotkeys };\n","export function idCreator(length = 5) {\n // remove numeral\n const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/\n const maxPosition = $chars.length;\n let key = '';\n for (let i = 0; i < length; i++) {\n key += $chars.charAt(Math.floor(Math.random() * maxPosition));\n }\n return key;\n}\n","// https://stackoverflow.com/a/6853926/232122\nexport function distanceBetweenPointAndSegment(x: number, y: number, x1: number, y1: number, x2: number, y2: number) {\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSquare = C * C + D * D;\n let param = -1;\n if (lenSquare !== 0) {\n // in case of 0 length line\n param = dot / lenSquare;\n }\n\n let xx, yy;\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n const dx = x - xx;\n const dy = y - yy;\n return Math.hypot(dx, dy);\n}\n\nexport function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) {\n // 𝑎′𝑥=(𝑎𝑥−𝑐𝑥)cos𝜃−(𝑎𝑦−𝑐𝑦)sin𝜃+𝑐𝑥\n // 𝑎′𝑦=(𝑎𝑥−𝑐𝑥)sin𝜃+(𝑎𝑦−𝑐𝑦)cos𝜃+𝑐𝑦.\n // https://math.stackexchange.com/questions/2204520/how-do-i-rotate-a-line-segment-in-a-specific-point-on-the-line\n return [(x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2];\n}\n\nexport function distanceBetweenPointAndPoint(x1: number, y1: number, x2: number, y2: number) {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.hypot(dx, dy);\n}","import { BaseCursorStatus, PlaitBoard, Point } from '../interfaces';\n\nexport function transformPoints(board: PlaitBoard, points: Point[]) {\n const newPoints = points.map(point => {\n return transformPoint(board, point);\n });\n return newPoints;\n}\n\nexport function transformPoint(board: PlaitBoard, point: Point) {\n const { width, height } = board.host.getBoundingClientRect();\n const viewBox = getViewBox(board);\n let x = (point[0] / width) * viewBox.width + viewBox.minX;\n let y = (point[1] / height) * viewBox.height + viewBox.minY;\n const newPoint = [x - board.viewport.offsetX, y - board.viewport.offsetY] as Point;\n return newPoint;\n}\n\nexport function getViewBox(board: PlaitBoard): ViewBox {\n const { width, height } = board.host.getBoundingClientRect() as DOMRect;\n const scaleWidth = (board.viewport.zoom - 1) * width;\n const scaleHeight = (board.viewport.zoom - 1) * height;\n const viewBoxWidth = width - scaleWidth;\n const viewBoxHeight = height - scaleHeight;\n const minX = scaleWidth / 2;\n const minY = scaleHeight / 2;\n return { minX, minY: minY, width: viewBoxWidth, height: viewBoxHeight };\n}\n\nexport function isNoSelectionElement(e: Event) {\n return (e.target as HTMLElement)?.closest('.plait-board-attached');\n}\n\n/**\n * viewZoom 转 zoom\n * @param viewZoom 视图上显示的 zoom 缩放级别 %\n * @returns zoom 真实的 zoom\n */\nexport const transformViewZoom = (viewZoom: number): number => (2 * viewZoom - 100) / viewZoom;\n\n/**\n * zoom 转 viewZoom\n * @param zoom this.board.viewport.zoom\n * @returns 视图上显示的 zoom 缩放级别 %\n */\nexport const transformZoom = (zoom: number): number => Number((100 / (2 - zoom)).toFixed(0));\n\nexport const updateCursorStatus = (board: PlaitBoard, cursor: BaseCursorStatus) => {\n if (cursor) {\n board.cursor = cursor;\n }\n};\n\nexport type ViewBox = {\n minX: number;\n minY: number;\n width: number;\n height: number;\n};\n","import { MERGING, PlaitBoard, PlaitOperation, SAVING } from '../interfaces';\n\n/**\n * Check whether to merge an operation into the previous operation.\n */\n\nexport const shouldMerge = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_viewport' && op.type === prev?.type) {\n return true;\n }\n return false;\n};\n\n/**\n * Check whether an operation needs to be saved to the history.\n */\n\nexport const shouldSave = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_selection' || op.type === 'set_viewport') {\n return false;\n }\n\n return true;\n};\n\n/**\n * Check whether an operation should clear the redos stack.\n */\n\nexport const shouldClear = (op: PlaitOperation): boolean => {\n if (op.type === 'set_selection') {\n return false;\n }\n\n return true;\n};\n\nexport const PlaitHistoryBoard = {\n /**\n * Get the saving flag's current value.\n */\n isSaving(board: PlaitBoard): boolean | undefined {\n return SAVING.get(board);\n },\n\n /**\n * Get the merge flag's current value.\n */\n\n isMerging(board: PlaitBoard): boolean | undefined {\n return MERGING.get(board);\n },\n\n /**\n * Apply a series of changes inside a synchronous `fn`, without merging any of\n * the new operations into previous save point in the history.\n */\n\n withoutMerging(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isMerging(board);\n MERGING.set(board, false);\n fn();\n MERGING.set(board, prev);\n },\n /**\n * Apply a series of changes inside a synchronous `fn`, without saving any of\n * their operations into the history.\n */\n\n withoutSaving(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isSaving(board);\n SAVING.set(board, false);\n fn();\n SAVING.set(board, prev);\n }\n};\n","import { PlaitBoard, PlaitOperation } from '../interfaces';\nimport { isHotkey } from 'is-hotkey';\nimport { PlaitHistoryBoard, shouldClear, shouldMerge, shouldSave } from '../utils';\n\nexport function withHistroy<T extends PlaitBoard>(board: T) {\n const { apply, keydown } = board;\n board.history = { undos: [], redos: [] };\n\n board.redo = () => {\n const { history } = board;\n const { redos } = history;\n\n if (redos.length > 0) {\n const batch = redos[redos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n for (const op of batch) {\n board.apply(op);\n }\n });\n\n history.redos.pop();\n history.undos.push(batch);\n }\n };\n\n board.undo = () => {\n const { history } = board;\n const { undos } = history;\n\n if (undos.length > 0) {\n const batch = undos[undos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n const inverseOps = batch.map(PlaitOperation.inverse).reverse();\n for (const op of inverseOps) {\n board.apply(op);\n }\n });\n\n history.redos.push(batch);\n history.undos.pop();\n }\n };\n\n board.apply = (op: PlaitOperation) => {\n const { operations, history } = board;\n const { undos } = history;\n const lastBatch = undos[undos.length - 1];\n const lastOp = lastBatch && lastBatch[lastBatch.length - 1];\n let save = PlaitHistoryBoard.isSaving(board);\n let merge = PlaitHistoryBoard.isMerging(board);\n\n if (save == null) {\n save = shouldSave(op, lastOp);\n }\n\n if (save) {\n if (!merge) {\n if (lastBatch == null) {\n merge = false;\n } else if (operations.length !== 0) {\n merge = true;\n } else {\n merge = shouldMerge(op, lastOp);\n }\n }\n\n if (lastBatch && merge) {\n lastBatch.push(op);\n } else {\n const batch = [op];\n undos.push(batch);\n }\n\n while (undos.length > 100) {\n undos.shift();\n }\n\n if (shouldClear(op)) {\n history.redos = [];\n }\n }\n apply(op);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (isHotkey('mod+z', event)) {\n board.undo();\n return;\n }\n if (isHotkey('mod+shift+z', event)) {\n board.redo();\n return;\n }\n keydown(event);\n };\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transfroms';\nimport { toPoint } from '../utils/dom';\nimport { toRectangleClient } from '../utils/graph';\nimport { isNoSelectionElement } from '../utils/board';\n\nexport function withSelection<T extends PlaitBoard>(board: T) {\n const { mousedown, mousemove, globalMouseup } = board;\n\n let start: Point | null = null;\n let end: Point | null = null;\n\n board.mousedown = (event: MouseEvent) => {\n if (isNoSelectionElement(event)) {\n mousedown(event);\n return;\n }\n if (event.target instanceof Node && board.host.contains(event.target)) {\n start = toPoint(event.x, event.y, board.host);\n }\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n const movedTarget = toPoint(event.x, event.y, board.host);\n if (start) {\n const rectangleClient = toRectangleClient([start, movedTarget]);\n if (start && Math.hypot(rectangleClient.width, rectangleClient.height) > 5) {\n end = movedTarget;\n }\n }\n mousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (isNoSelectionElement(event)) {\n return globalMouseup(event);\n }\n if (start) {\n Transforms.setSelection(board, { anchor: start, focus: start });\n } else {\n Transforms.setSelection(board, null);\n }\n start = null;\n end = null;\n\n globalMouseup(event);\n };\n\n return board;\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { BaseCursorStatus, CursorStatus } from '../../interfaces';\n\n@Component({\n selector: 'plait-toolbar',\n templateUrl: './toolbar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitToolbarComponent {\n @HostBinding('class') hostClass = `plait-board-toolbar`;\n\n @Input() cursorStatus!: CursorStatus;\n\n @Input() viewZoom!: number;\n\n @Output() moveHandle: EventEmitter<BaseCursorStatus> = new EventEmitter();\n\n @Output() adaptHandle = new EventEmitter();\n\n @Output() zoomInHandle = new EventEmitter();\n\n @Output() zoomOutHandle = new EventEmitter();\n\n @Output() resetZoomHandel = new EventEmitter();\n\n dragMove() {\n if (this.cursorStatus !== BaseCursorStatus.move) {\n this.moveHandle.emit(BaseCursorStatus.move);\n } else {\n this.moveHandle.emit(BaseCursorStatus.select);\n }\n }\n\n // 适应画布\n adapt() {\n this.adaptHandle.emit();\n }\n\n // 放大\n zoomIn() {\n this.zoomInHandle.emit();\n }\n\n // 缩小\n zoomOut() {\n this.zoomOutHandle.emit();\n }\n\n resetZoom() {\n this.resetZoomHandel.emit();\n }\n}\n","<div class=\"zoom-toolbar island plait-board-attached\">\n <a class=\"toolbar-item plait-action-icon\" [ngClass]=\"{ 'icon-active': cursorStatus === 'move' }\" (click)=\"dragMove()\">\n <ng-template [ngTemplateOutlet]=\"dragMoveTemplate\"></ng-template>\n </a>\n <div class=\"divider\"></div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"adapt()\">\n <ng-template [ngTemplateOutlet]=\"adaptTemplate\"></ng-template>\n </a>\n <div class=\"divider\"></div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"zoomOut()\">\n <ng-template [ngTemplateOutlet]=\"zoomOutTemplate\"></ng-template>\n </a>\n <div class=\"toolbar-item zoom-value\" (mousedown)=\"resetZoom()\">{{ viewZoom }}%</div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"zoomIn()\">\n <ng-template [ngTemplateOutlet]=\"zoomInTemplate\"></ng-template>\n </a>\n</div>\n\n<ng-template #dragMoveTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>1.Base基础/1.icon图标/2.normal/hand</title>\n <g id=\"1.Base基础/1.icon图标/2.normal/hand\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M8.44583468,0.500225887 C9.07406934,0.510185679 9.54739531,0.839591366 9.86192311,1.34305279 C9.89696656,1.39914649 9.92878401,1.45492964 9.9576026,1.50991157 L9.9576026,1.50991157 L10.0210033,1.64201027 L10.061978,1.62350755 C10.1972891,1.56834247 10.3444107,1.53218464 10.5027907,1.51755353 L10.5027907,1.51755353 L10.6649031,1.51019133 C11.4883708,1.51019133 12.0208782,1.99343346 12.3023042,2.66393278 C12.3903714,2.87392911 12.4344191,3.10047818 12.4339446,3.3257952 L12.4339446,3.3257952 L12.4360033,3.80501027 L12.5160535,3.78341501 C12.6124478,3.76124046 12.7138812,3.74739854 12.820201,3.74250274 L12.820201,3.74250274 L12.9833264,3.74194533 C13.6121166,3.7657478 14.0645887,4.0801724 14.3087062,4.56112689 C14.4521117,4.8436609 14.4987984,5.11349437 14.4999262,5.33449618 L14.4999262,5.33449618 L14.3922653,12.049414 C14.3784752,12.909177 14.0717787,13.7360948 13.5212406,14.3825228 C13.4055676,14.5183496 13.2843697,14.643961 13.1582361,14.7596335 C12.4634771,15.3967716 11.755103,15.6538706 11.1897396,15.7000055 L11.1897396,15.7000055 L7.4723083,15.6798158 C7.14276373,15.634268 6.81580098,15.5154267 6.49455235,15.3472501 C6.25643701,15.2225944 6.06881706,15.0975452 5.88705731,14.9494308 L5.88705731,14.9494308 L2.55198782,11.500873 C2.39559475,11.3769079 2.17626793,11.1748532 1.9548636,10.9139403 C1.57867502,10.4706225 1.33501976,10.0139923 1.30330257,9.52833025 C1.28093191,9.18578476 1.37200912,8.85641102 1.5826788,8.56872564 C1.82538833,8.23725279 2.12881965,8.02107162 2.47470569,7.92957033 C2.95807982,7.80169771 3.42705723,7.92468989 3.86509644,8.18731167 C4.04431391,8.29475961 4.1816109,8.40304483 4.26225571,8.47866867 L4.26225571,8.47866867 L4.61400328,8.79701027 L4.57247249,3.59275349 L4.57628524,3.46204923 C4.5897691,3.23444442 4.64087578,2.95701848 4.75937106,2.66961597 C5.01017272,2.06131302 5.49670227,1.64692543 6.21363856,1.60818786 C6.44223508,1.59583681 6.65042099,1.62176802 6.83696985,1.68057551 L6.83696985,1.68057551 L6.86400328,1.69001027 C6.88501862,1.63593052 6.90764242,1.58175442 6.9331867,1.52672633 L6.9331867,1.52672633 L7.01883595,1.35955614 C7.31549194,0.832047939 7.79476072,0.48993549 8.44583468,0.500225887 Z M8.42684173,1.70001476 C8.26825412,1.69756905 8.16339456,1.77242008 8.06478367,1.94776814 C8.03967773,1.99241107 8.01831703,2.03811495 8.00083464,2.07855067 L8.00083464,2.07855067 L7.94879157,2.2035905 L7.94354455,2.20731401 L7.943,3.161 L7.97170661,3.16123746 L7.97170661,7.60991883 L6.77170661,7.60991883 L6.771,3.338 L6.74362358,3.33880359 C6.74284189,3.29064626 6.73014163,3.20282206 6.7002616,3.11094408 L6.66446012,3.01903385 C6.58982025,2.85766739 6.49843292,2.79455071 6.27838133,2.80644008 C6.07001018,2.81769881 5.95642108,2.91444507 5.86877664,3.12702089 C5.79792279,3.29887224 5.77228127,3.48655908 5.77246879,3.58977183 L5.77246879,3.58977183 L5.83613619,11.5252021 L3.41863956,9.33477657 L3.31637296,9.25979571 L3.24805011,9.21651224 C3.06096922,9.10434987 2.89279975,9.06024641 2.78159879,9.0896637 C2.71007735,9.10858411 2.63607367,9.1613084 2.55086305,9.27768211 C2.51020424,9.33320478 2.49638061,9.38319687 2.50075171,9.4501283 C2.51206889,9.62341997 2.64503022,9.87260054 2.86983366,10.1375191 C3.03268834,10.3294345 3.19762053,10.4813781 3.35554956,10.6131022 L3.35554956,10.6131022 L6.68454317,14.0569073 C6.71106575,14.0773808 6.74806086,14.1037158 6.79369091,14.1335929 L6.79369091,14.1335929 L6.95464838,14.2315311 L7.05111031,14.2841211 C7.25978123,14.3933622 7.46253523,14.4670573 7.55685495,14.4854708 L7.55685495,14.4854708 L11.1407985,14.5022108 C11.1503576,14.5013899 11.1627905,14.4997539 11.1779002,14.4971772 L11.1779002,14.4971772 L11.2991076,14.4694224 C11.3491682,14.4557375 11.4083624,14.437284 11.4751158,14.4130563 C11.769383,14.3062543 12.066676,14.1324596 12.3471758,13.8752234 C12.4371203,13.7927386 12.5240597,13.7026333 12.607654,13.6044743 C12.9760464,13.1719172 13.183059,12.6137678 13.1924195,12.030173 L13.1924195,12.030173 L13.3000132,5.32832551 C13.2997939,5.29016685 13.2826117,5.19085946 13.2386527,5.10425262 C13.1843838,4.99733326 13.1129774,4.94771265 12.9379578,4.94108739 C12.6814739,4.93138871 12.534132,5.11189595 12.4756792,5.39480062 L12.4768718,7.52734922 L11.2768718,7.52734922 L11.276,5.688 L11.2462883,5.6883208 L11.2339541,3.32771285 C11.2341,3.2560396 11.2209054,3.18817621 11.1957482,3.12818892 C11.0820579,2.85732094 10.9199288,2.71019133 10.6649031,2.71019133 C10.456829,2.71019133 10.3197487,2.87378067 10.2524297,3.11264939 L10.2530225,7.512783 L9.05302254,7.512783 L9.053,3.288 L9.01554331,3.28724203 L8.98800328,2.29901027 L8.9629175,2.22263368 C8.94515567,2.17417174 8.92167756,2.11937748 8.8924232,2.06330056 L8.8924232,2.06330056 L8.84420197,1.9788544 C8.72758855,1.79219249 8.59915015,1.70280728 8.42684173,1.70001476 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n\n<ng-template #adaptTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>1.Base基础/1.icon图标/2.normal/Fit canvas</title>\n <g id=\"1.Base基础/1.icon图标/2.normal/Fit-canvas\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M14.9971494,10.4 L14.9971494,13.4020516 C14.9971494,14.2366152 14.3581879,14.9219414 13.542782,14.9955129 L13.3971494,15.0020516 L10.4,15.0020516 L10.4,13.8020516 L13.3971494,13.8020516 C13.590449,13.8020516 13.7517243,13.6649388 13.7890228,13.4826656 L13.7971494,13.4020516 L13.7971494,10.4 L14.9971494,10.4 Z M2.2,10.4 L2.2,13.3971494 C2.2,13.590449 2.3371128,13.7517243 2.51938605,13.7890228 L2.6,13.7971494 L5.60205161,13.7971494 L5.60205161,14.9971494 L2.6,14.9971494 C1.76543638,14.9971494 1.08011021,14.3581879 1.00653868,13.542782 L1,13.3971494 L1,10.4 L2.2,10.4 Z M10.5024511,4.9 C11.3861067,4.9 12.1024511,5.6163444 12.1024511,6.5 L12.1024511,6.5 L12.1024511,9.5 C12.1024511,10.3836556 11.3861067,11.1 10.5024511,11.1 L10.5024511,11.1 L5.50245112,11.1 C4.61879552,11.1 3.90245112,10.3836556 3.90245112,9.5 L3.90245112,9.5 L3.90245112,6.5 C3.90245112,5.6163444 4.61879552,4.9 5.50245112,4.9 L5.50245112,4.9 Z M10.5024511,6.1 L5.50245112,6.1 C5.28153722,6.1 5.10245112,6.2790861 5.10245112,6.5 L5.10245112,6.5 L5.10245112,9.5 C5.10245112,9.7209139 5.28153722,9.9 5.50245112,9.9 L5.50245112,9.9 L10.5024511,9.9 C10.723365,9.9 10.9024511,9.7209139 10.9024511,9.5 L10.9024511,9.5 L10.9024511,6.5 C10.9024511,6.2790861 10.723365,6.1 10.5024511,6.1 L10.5024511,6.1 Z M5.59714938,1 L5.59714938,2.2 L2.6,2.2 C2.40670034,2.2 2.24542508,2.3371128 2.20812658,2.51938605 L2.2,2.6 L2.2,5.60205161 L1,5.60205161 L1,2.6 C1,1.76543638 1.63896152,1.08011021 2.45436739,1.00653868 L2.6,1 L5.59714938,1 Z M13.3971494,1 L13.542782,1.00653868 C14.3581879,1.08011021 14.9971494,1.76543638 14.9971494,2.6 L14.9971494,2.6 L14.9971494,5.60205161 L13.7971494,5.60205161 L13.7971494,2.6 L13.7890228,2.51938605 C13.7517243,2.3371128 13.590449,2.2 13.3971494,2.2 L13.3971494,2.2 L10.4,2.2 L10.4,1 L13.3971494,1 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n<ng-template #zoomOutTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>action/zoom-out</title>\n <desc>Created with Sketch.</desc>\n <g id=\"action/zoom-out\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M6.85,2.73225886e-13 C10.6331505,2.73225886e-13 13.7,3.06684946 13.7,6.85 C13.7,8.54194045 13.0865836,10.0906098 12.0700142,11.2857448 L15.4201976,14.5717081 C15.6567367,14.8037768 15.6603607,15.1836585 15.4282919,15.4201976 C15.1962232,15.6567367 14.8163415,15.6603607 14.5798024,15.4282919 L14.5798024,15.4282919 L11.2163456,12.128262 C10.0309427,13.1099691 8.50937591,13.7 6.85,13.7 C3.06684946,13.7 4.58522109e-14,10.6331505 4.58522109e-14,6.85 C4.58522109e-14,3.06684946 3.06684946,2.73225886e-13 6.85,2.73225886e-13 Z M6.85,1.2 C3.72959116,1.2 1.2,3.72959116 1.2,6.85 C1.2,9.97040884 3.72959116,12.5 6.85,12.5 C8.31753357,12.5 9.65438791,11.9404957 10.6588859,11.0231643 C10.6855412,10.9625408 10.7245275,10.9050898 10.7743982,10.8542584 C10.8288931,10.7987137 10.8915387,10.7560124 10.9585649,10.7261903 C11.9144009,9.71595758 12.5,8.35136579 12.5,6.85 C12.5,3.72959116 9.97040884,1.2 6.85,1.2 Z M4.6,6.2 L9.12944565,6.2 C9.4608165,6.2 9.72944565,6.46862915 9.72944565,6.8 C9.72944565,7.09823376 9.51185604,7.34564675 9.22676876,7.39214701 L9.12944565,7.4 L4.6,7.4 C4.26862915,7.4 4,7.13137085 4,6.8 C4,6.50176624 4.21758961,6.25435325 4.50267688,6.20785299 L4.6,6.2 L9.12944565,6.2 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n\n<ng-template #zoomInTemplate\n ><svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>action/zoom-in</title>\n <desc>Created with Sketch.</desc>\n <g id=\"action/zoom-in\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M6.85,-1.81188398e-13 C10.6331505,-1.81188398e-13 13.7,3.06684946 13.7,6.85 C13.7,8.54194045 13.0865836,10.0906098 12.0700142,11.2857448 L15.4201976,14.5717081 C15.6567367,14.8037768 15.6603607,15.1836585 15.4282919,15.4201976 C15.1962232,15.6567367 14.8163415,15.6603607 14.5798024,15.4282919 L14.5798024,15.4282919 L11.2163456,12.128262 C10.0309427,13.1099691 8.50937591,13.7 6.85,13.7 C3.06684946,13.7 4.61852778e-14,10.6331505 4.61852778e-14,6.85 C4.61852778e-14,3.06684946 3.06684946,-1.81188398e-13 6.85,-1.81188398e-13 Z M6.85,1.2 C3.72959116,1.2 1.2,3.72959116 1.2,6.85 C1.2,9.97040884 3.72959116,12.5 6.85,12.5 C8.31753357,12.5 9.65438791,11.9404957 10.6588859,11.0231643 C10.6855412,10.9625408 10.7245275,10.9050898 10.7743982,10.8542584 C10.8288931,10.7987137 10.8915387,10.7560124 10.9585649,10.7261903 C11.9144009,9.71595758 12.5,8.35136579 12.5,6.85 C12.5,3.72959116 9.97040884,1.2 6.85,1.2 Z M6.86472282,3.93527718 C7.16295659,3.93527718 7.41036958,4.15286679 7.45686984,4.43795406 L7.46472282,4.53527718 L7.464,6.19927718 L9.12944565,6.2 C9.42767941,6.2 9.6750924,6.41758961 9.72159266,6.70267688 L9.72944565,6.8 C9.72944565,7.09823376 9.51185604,7.34564675 9.22676876,7.39214701 L9.12944565,7.4 L7.464,7.39927718 L7.46472282,9.06472282 C7.46472282,9.36295659 7.24713321,9.61036958 6.96204594,9.65686984 L6.86472282,9.66472282 C6.56648906,9.66472282 6.31907607,9.44713321 6.27257581,9.16204594 L6.26472282,9.06472282 L6.264,7.39927718 L4.6,7.4 C4.30176624,7.4 4.05435325,7.18241039 4.00785299,6.89732312 L4,6.8 C4,6.50176624 4.21758961,6.25435325 4.50267688,6.20785299 L4.6,6.2 L6.264,6.19927718 L6.26472282,4.53527718 C6.26472282,4.2701805 6.43664548,4.0452385 6.67507642,3.96586557 L6.76739971,3.94313016 L6.86472282,3.93527718 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { Selection } from '../../interfaces/selection';\nimport { createG } from '../../utils/dom';\nimport { Viewport } from '../../interfaces/viewport';\n\n@Component({\n selector: 'plait-element',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitElementComponent implements OnInit, OnChanges, OnDestroy {\n initialized = false;\n\n groupG!: SVGGElement;\n\n @Input() index!: number;\n\n @Input() element!: PlaitElement;\n\n @Input() board!: PlaitBoard;\n\n @Input() viewport!: Viewport;\n\n @Input() selection: Selection | null = null;\n\n @Input() host!: SVGElement;\n\n constructor(public renderer2: Renderer2, public viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.initialize();\n this.transform(true);\n this.drawElement();\n }\n\n initialize() {\n this.initialized = true;\n this.groupG = createG();\n this.renderer2.setAttribute(this.groupG, 'plait-element-group', this.index.toString());\n this.host.append(this.groupG);\n }\n\n transform(first = false) {\n if (first && this.viewport.offsetX === 0 && this.viewport.offsetY === 0) {\n return;\n }\n this.renderer2.setAttribute(this.groupG, 'transform', `translate(${this.viewport.offsetX} ${this.viewport.offsetY})`);\n }\n\n drawElement() {\n const gArray = this.board.drawElement({ elementInstance: this });\n gArray.forEach(g => {\n this.groupG.appendChild(g);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const viewport = changes['viewport'];\n if (this.initialized && viewport) {\n this.transform();\n }\n if (this.initialized) {\n this.board.redrawElement({ elementInstance: this }, changes);\n }\n }\n\n ngOnDestroy(): void {\n this.board.destroyElement();\n this.groupG.remove();\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { BaseCursorStatus } from '../interfaces';\nimport { PlaitBoardMove, PlaitBoard, PlaitBoardChangeEvent, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { PlaitPlugin } from '../interfaces/plugin';\nimport { Viewport } from '../interfaces/viewport';\nimport { createBoard } from '../plugins/create-board';\nimport { withBoard } from '../plugins/with-board';\nimport { withHistroy } from '../plugins/with-history';\nimport { withSelection } from '../plugins/with-selection';\nimport { Transforms } from '../transfroms';\nimport { getViewBox, transformViewZoom, transformZoom, updateCursorStatus } from '../utils/board';\nimport { BOARD_TO_ON_CHANGE, HOST_TO_ROUGH_SVG, IS_TEXT_EDITABLE } from '../utils/weak-maps';\n\n@Component({\n selector: 'plait-board',\n template: `\n <svg\n #svg\n width=\"100%\"\n height=\"100%\"\n style=\"position: relative\"\n [style.cursor]=\"isMoveMode ? (plaitBoardMove.isMoving ? 'grabbing' : 'grab') : 'auto'\"\n ></svg>\n <plait-toolbar\n *ngIf=\"isFocused && !toolbarTemplateRef\"\n [cursorStatus]=\"board.cursor\"\n [viewZoom]=\"viewZoom\"\n (moveHandle)=\"changeMoveMode($event)\"\n (adaptHandle)=\"adaptHandle()\"\n (zoomInHandle)=\"zoomInHandle()\"\n (zoomOutHandle)=\"zoomOutHandle()\"\n (resetZoomHandel)=\"resetZoomHandel()\"\n ></plait-toolbar>\n <plait-element\n *ngFor=\"let item of board.children; let index = index; trackBy: trackBy\"\n [index]=\"index\"\n [element]=\"item\"\n [board]=\"board\"\n [viewport]=\"board.viewport\"\n [selection]=\"board.selection\"\n [host]=\"host\"\n ></plait-element>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitBoardComponent implements OnInit, AfterViewInit, OnDestroy {\n @HostBinding('class')\n get hostClass() {\n return `plait-board-container ${this.board.cursor}`;\n }\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$: Subject<any> = new Subject();\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n @ContentChild('plaitToolbar')\n public toolbarTemplateRef!: TemplateRef<any>;\n\n private _viewZoom: number = 100;\n\n public get viewZoom(): number {\n const vZoom = transformZoom(this.board.viewport.zoom);\n if (this._viewZoom !== vZoom) {\n this._viewZoom = vZoom;\n }\n return vZoom;\n }\n\n public plaitBoardMove: PlaitBoardMove = {\n isMoving: false,\n x: 0,\n y: 0\n };\n\n public get isMoveMode(): boolean {\n return this.board.cursor === BaseCursorStatus.move;\n }\n\n get host(): SVGElement {\n return this.svg.nativeElement;\n }\n\n get isFocused() {\n if (!this.board?.selection && this.board.cursor === BaseCursorStatus.move) {\n this.changeMoveMode(BaseCursorStatus.select);\n }\n return this.board?.selection;\n }\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitReadonly = false;\n\n @Input() plaitAllowClearBoard = false;\n\n @Output() plaitChange: EventEmitter<PlaitBoardChangeEvent> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n @HostBinding('class.focused')\n get focused() {\n return this.isFocused;\n }\n\n constructor(private cdr: ChangeDetectorRef, private elementRef: ElementRef, private renderer2: Renderer2) {}\n\n ngOnInit(): void {\n const roughSVG = rough.svg(this.host as SVGSVGElement, { options: { roughness: 0, strokeWidth: 1 } });\n HOST_TO_ROUGH_SVG.set(this.host, roughSVG);\n this.initializePlugins();\n this.initializeEvents();\n this.updateViewport();\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.cdr.detectChanges();\n const changeEvent: PlaitBoardChangeEvent = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection\n };\n // update viewBox\n if (this.board.operations.some(op => PlaitOperation.isSetViewportOperation(op))) {\n this.updateViewport();\n }\n this.plaitChange.emit(changeEvent);\n });\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n }\n\n initializePlugins() {\n const options: PlaitBoardOptions = { readonly: this.plaitReadonly, allowClearBoard: this.plaitAllowClearBoard };\n let board = withHistroy(withSelection(withBoard(createBoard(this.host, this.plaitValue, options))));\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n }\n\n initializeEvents() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n this.isFocused && this.isMoveMode && this.initMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousemove(event);\n this.isFocused && this.isMoveMode && this.plaitBoardMove.isMoving && this.moving(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n this.isFocused && this.moveEnd();\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.dblclick(event);\n });\n\n fromEvent<WheelEvent>(this.host, 'wheel')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: WheelEvent) => {\n if (this.isFocused) {\n event.preventDefault();\n const viewport = this.board.viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n offsetX: viewport?.offsetX - event.deltaX,\n offsetY: viewport?.offsetY - event.deltaY\n });\n }\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keydown(event);\n if (this.isFocused && event.code === 'Space') {\n this.changeMoveMode(BaseCursorStatus.move);\n event.preventDefault();\n }\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyup(event);\n this.isFocused && event.code === 'Space' && this.changeMoveMode(BaseCursorStatus.select);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: ClipboardEvent) => {\n this.board?.insertFragment(event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n this.board?.deleteFragment(event.clipboardData);\n });\n\n window.onresize = () => {\n this.refreshViewport();\n };\n }\n\n refreshViewport() {\n const viewBoxModel = getViewBox(this.board);\n const viewBoxValues = this.host.getAttribute('viewBox')?.split(',') as string[];\n this.renderer2.setAttribute(\n this.host,\n 'viewBox',\n `${viewBoxValues[0].trim()}, ${viewBoxValues[1].trim()}, ${viewBoxModel.width}, ${viewBoxModel.height}`\n );\n }\n\n updateViewport() {\n const viewBox = getViewBox(this.board);\n this.renderer2.setAttribute(this.host, 'viewBox', `${viewBox.minX}, ${viewBox.minY}, ${viewBox.width}, ${viewBox.height}`);\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return index;\n };\n\n initMove(e: MouseEvent) {\n this.plaitBoardMove.isMoving = true;\n this.plaitBoardMove.x = e.x;\n this.plaitBoardMove.y = e.y;\n this.cdr.detectChanges();\n }\n\n moving(e: MouseEvent) {\n const viewport = this.board?.viewport as Viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n offsetX: viewport.offsetX + ((e.x - this.plaitBoardMove.x) * 100) / this._viewZoom,\n offsetY: viewport.offsetY + ((e.y - this.plaitBoardMove.y) * 100) / this._viewZoom\n });\n this.plaitBoardMove.x = e.x;\n this.plaitBoardMove.y = e.y;\n }\n\n moveEnd() {\n this.plaitBoardMove.isMoving = false;\n this.plaitBoardMove.x = 0;\n this.plaitBoardMove.y = 0;\n }\n\n // 拖拽模式\n changeMoveMode(cursorStatus: BaseCursorStatus) {\n updateCursorStatus(this.board, cursorStatus);\n this.cdr.markForCheck();\n }\n\n // 适应画布\n adaptHandle() {\n const viewport = this.board?.viewport as Viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n offsetX: 0,\n offsetY: 0\n });\n this.resetZoomHandel();\n }\n\n // 放大\n zoomInHandle() {\n if (this._viewZoom >= 400) {\n return;\n }\n this._viewZoom += 10;\n this.zoomChange();\n }\n\n // 缩小\n zoomOutHandle() {\n if (this._viewZoom <= 20) {\n return;\n }\n this._viewZoom -= 10;\n this.zoomChange();\n }\n\n resetZoomHandel() {\n this._viewZoom = 100;\n this.zoomChange();\n }\n\n zoomChange() {\n const viewport = this.board?.viewport as Viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n zoom: transformViewZoom(this._viewZoom)\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n HOST_TO_ROUGH_SVG.delete(this.host);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { PlaitBoardComponent } from './board/board.component';\nimport { PlaitElementComponent } from './core/element/element.component';\nimport { PlaitToolbarComponent } from './core/toolbar/toolbar.component';\n\nconst COMPONENTS = [PlaitBoardComponent, PlaitElementComponent, PlaitToolbarComponent];\n\n@NgModule({\n declarations: [...COMPONENTS],\n imports: [BrowserModule],\n exports: [...COMPONENTS]\n})\nexport class PlaitModule {}\n","export const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './plait.module';\nexport * from './utils';\nexport * from './transfroms';\nexport * from './interfaces';\nexport * from './core/base/detector';\nexport * from './core/element/element.component';\nexport * from './core/toolbar/toolbar.component';\nexport * from './constants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PlaitToolbarComponent","i2.PlaitElementComponent","i3"],"mappings":";;;;;;;;;;AACY,IAAA,iBAGX;AAHD,CAAA,UAAY,gBAAgB,EAAA;AACxB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAe,CAAA;AACf,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAmB,CAAA;AACvB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,GAG3B,EAAA,CAAA,CAAA;;ACCY,MAAA,IAAI,GAAG;AAChB,IAAA,MAAM,CAAC,IAAU,EAAA;AACb,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,IAAI,CAAA,EAAA,CAAI,CAAC,CAAC;AAC7E,SAAA;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAC5B;AACD,IAAA,IAAI,CAAC,IAAU,EAAA;AACX,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAA,gCAAA,CAAkC,CAAC,CAAC;AACvG,SAAA;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;KAC7C;AACD;;AAEG;IAEH,UAAU,CAAC,IAAU,EAAE,OAAa,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;KAC5E;AACD;;;;;;;AAOG;IACH,OAAO,CAAC,IAAU,EAAE,OAAa,EAAA;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;AACtC,SAAA;AAED,QAAA,OAAO,CAAC,CAAC;KACZ;AAED;;AAEG;IAEH,MAAM,CAAC,IAAU,EAAE,OAAa,EAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;KACnF;AACD;;AAEG;IAEH,UAAU,CAAC,IAAU,EAAE,OAAa,EAAA;AAChC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,QAAA,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;KACzC;AACD;;AAEG;IACH,SAAS,CAAC,IAAU,EAAE,OAAa,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;AAChC,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,QAAA,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KAC3C;IACD,SAAS,CAAC,IAAiB,EAAE,SAAyB,EAAA;AAClD,QAAA,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,IAAG;;AAErB,YAAA,IAAI,CAAC,IAAI,IAAI,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,MAAM,MAAK,CAAC,EAAE;gBAC7B,OAAO;AACV,aAAA;YAED,IAAI,CAAC,KAAK,IAAI,EAAE;AACZ,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;YAED,QAAQ,SAAS,CAAC,IAAI;gBAClB,KAAK,aAAa,EAAE;AAChB,oBAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;oBAE/B,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;wBACxE,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACzB,qBAAA;oBAED,MAAM;AACT,iBAAA;gBAED,KAAK,aAAa,EAAE;AAChB,oBAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;AAE/B,oBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC9C,wBAAA,OAAO,IAAI,CAAC;AACf,qBAAA;yBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;wBAC/B,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACzB,qBAAA;oBAED,MAAM;AACT,iBAAA;gBAED,KAAK,WAAW,EAAE;oBACd,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;;oBAG7C,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;wBACtB,OAAO;AACV,qBAAA;AAED,oBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC9C,wBAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;;;AAGzB,wBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE;4BACrD,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5B,yBAAA;AAED,wBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1C,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;wBACpF,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;4BACxB,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACzB,yBAAA;AAAM,6BAAA;4BACH,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACzB,yBAAA;AACJ,qBAAA;yBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;wBAClF,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;4BACxB,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACzB,yBAAA;wBAED,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1B,qBAAA;yBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;wBAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;4BACrB,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1B,yBAAA;wBAED,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACzB,qBAAA;oBAED,MAAM;AACT,iBAAA;AACJ,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AAChB,SAAC,CAAC,CAAC;KACN;;;AC3IQ,MAAA,SAAS,GAAuB;AACzC,IAAA,MAAM,EAAE,CAAC,KAAiB,EAAE,IAAU,KAAI;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC3C,QAAA,OAAO,CAAC,CAAC;KACZ;IACD,GAAG,CAAC,KAAiB,EAAE,IAAU,EAAA;QAC7B,IAAI,IAAI,GAA2B,KAAK,CAAC;AAEzC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAElB,YAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC9C,gBAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAA,CAAA,CAAG,CAAC,CAAC;AACjE,aAAA;AAED,YAAA,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACf;;;ACmBQ,MAAA,sBAAsB,GAAG,CAAC,KAAU,KAAmC;AAChF,IAAA,OAAO,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC;AACzC,EAAE;AAEW,MAAA,OAAO,GAAG,CAAC,EAAkB,KAAoB;IAC1D,QAAQ,EAAE,CAAC,IAAI;QACX,KAAK,aAAa,EAAE;AAChB,YAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAY,EAAE,CAAA,EAAA,EAAE,IAAI,EAAE,aAAa,EAAG,CAAA,CAAA;AACzC,SAAA;QAED,KAAK,aAAa,EAAE;AAChB,YAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAY,EAAE,CAAA,EAAA,EAAE,IAAI,EAAE,aAAa,EAAG,CAAA,CAAA;AACzC,SAAA;QAED,KAAK,WAAW,EAAE;AACd,YAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;;YAG7B,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;AAC5B,gBAAA,OAAO,EAAE,CAAC;AACb,aAAA;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;gBAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAE,CAAC;gBAC9C,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAE,KAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAG,CAAA,CAAA;AACtD,aAAA;YAED,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAE,KAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAG,CAAA,CAAA;AAClD,SAAA;QAED,KAAK,UAAU,EAAE;AACb,YAAA,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;YACzC,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAE,KAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAG,CAAA,CAAA;AAC1E,SAAA;QAED,KAAK,eAAe,EAAE;AAClB,YAAA,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;YAEzC,IAAI,UAAU,IAAI,IAAI,EAAE;gBACpB,OACO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAE,KACL,UAAU,EAAE,aAAa,EACzB,aAAa,EAAE,IAAI,EACrB,CAAA,CAAA;AACL,aAAA;iBAAM,IAAI,aAAa,IAAI,IAAI,EAAE;gBAC9B,OACO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAE,KACL,UAAU,EAAE,IAAI,EAChB,aAAa,EAAE,UAAU,EAC3B,CAAA,CAAA;AACL,aAAA;AAAM,iBAAA;gBACH,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAE,KAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAG,CAAA,CAAA;AAC1E,aAAA;AACJ,SAAA;QAED,KAAK,cAAc,EAAE;AACjB,YAAA,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;YACzC,IAAI,UAAU,IAAI,IAAI,EAAE;gBACpB,OACO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAE,KACL,UAAU,EAAE,aAAa,EACzB,aAAa,EAAE,aAAa,EAC9B,CAAA,CAAA;AACL,aAAA;iBAAM,IAAI,aAAa,IAAI,IAAI,EAAE;gBAC9B,OACO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAE,KACL,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,UAAU,EAC3B,CAAA,CAAA;AACL,aAAA;AAAM,iBAAA;gBACH,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAE,KAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAG,CAAA,CAAA;AAC1E,aAAA;AACJ,SAAA;AACJ,KAAA;AACL,EAAE;AAEW,MAAA,cAAc,GAA4B;IACnD,sBAAsB;IACtB,OAAO;;;ACrIL,SAAU,iBAAiB,CAAC,KAAU,EAAA;AACxC,IAAA,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AACjD;;ACea,MAAA,QAAQ,GAAsB;AACvC,IAAA,UAAU,EAAE,CAAC,KAAU,KAAuB;AAC1C,QAAA,QACI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC;AACjC,YAAA,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC;AACjC,YAAA,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,YAAA,CAAC,iBAAiB,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAC/C;KACL;;;ACjBQ,MAAA,MAAM,GAAG,IAAI,OAAO,GAAoC;AACxD,MAAA,OAAO,GAAG,IAAI,OAAO;;ACNlC;AACa,MAAA,QAAQ,GAAiC,IAAI,OAAO,GAAG;AAEvD,MAAA,gBAAgB,GAAG,IAAI,OAAO,GAAwB;AAEtD,MAAA,kBAAkB,GAAG,IAAI,OAAO,GAA2B;AAE3D,MAAA,iBAAiB,GAAG,IAAI,OAAO;;ACE5C,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,SAA2B,EAAE,QAAkB,EAAE,EAAkB,KAAI;;IAC5G,QAAQ,EAAE,CAAC,IAAI;QACX,KAAK,aAAa,EAAE;AAChB,YAAA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEpC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpD,gBAAA,MAAM,IAAI,KAAK,CACX,oDAAoD,IAAI,CAAA,sDAAA,CAAwD,CACnH,CAAC;AACL,aAAA;YAED,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM;AACT,SAAA;QACD,KAAK,aAAa,EAAE;AAChB,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEpC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpD,gBAAA,MAAM,IAAI,KAAK,CACX,oDAAoD,IAAI,CAAA,sDAAA,CAAwD,CACnH,CAAC;AACL,aAAA;YACD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACjC,MAAM;AACT,SAAA;QACD,KAAK,WAAW,EAAE;AACd,YAAA,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YAE7B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;gBAChC,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,IAAI,CAAkB,eAAA,EAAA,OAAO,CAA6C,2CAAA,CAAA,CAAC,CAAC;AACtH,aAAA;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;;;;;;;YAQpC,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAE,CAAC;AAC3C,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAa,CAAC;YAC1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAE/C,YAAA,CAAA,EAAA,GAAA,SAAS,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9C,MAAM;AACT,SAAA;QACD,KAAK,UAAU,EAAE;YACb,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;AAE/C,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,uCAAA,CAAyC,CAAC,CAAC;AAC9D,aAAA;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAExC,YAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC7B,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBAEjC,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AAAM,qBAAA;AACH,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACrB,iBAAA;AACJ,aAAA;;AAGD,YAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC1B,gBAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AACpC,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;YAED,MAAM;AACT,SAAA;QACD,KAAK,cAAc,EAAE;AACjB,YAAA,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;YAC7B,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,QAAQ,GAAG,aAAa,CAAC;AAC5B,aAAA;AAAM,iBAAA;gBACH,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClB,oBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;AACrC,wBAAA,MAAM,IAAI,KAAK,CACX,CAAA,+DAAA,EAAkE,IAAI,CAAC,SAAS,CAC5E,aAAa,CAChB,CAAqC,mCAAA,CAAA,CACzC,CAAC;AACL,qBAAA;oBACD,QAAQ,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,aAAa,CAAE,CAAC;AACnC,iBAAA;AAED,gBAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC7B,oBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;oBAEjC,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,wBAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACxB,qBAAA;AAAM,yBAAA;AACH,wBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACzB,qBAAA;AACJ,iBAAA;AACJ,aAAA;YACD,MAAM;AACT,SAAA;QACD,KAAK,eAAe,EAAE;AAClB,YAAA,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;YAC7B,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,SAAS,GAAG,aAAa,CAAC;AAC7B,aAAA;AAAM,iBAAA;gBACH,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,oBAAA,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC;AAChC,iBAAA;AAAM,qBAAA;AACH,oBAAA,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;AACxC,oBAAA,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;AACzC,iBAAA;AACJ,aAAA;YACD,MAAM;AACT,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAsB;AAChD;;AAEG;IACH,SAAS,CAAC,KAAiB,EAAE,EAAkB,EAAA;QAC3C,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7C,QAAA,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7D,QAAA,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEhE,IAAI;AACA,YAAA,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3D,YAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC1B,YAAA,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AAC/B,SAAA;AAAS,gBAAA;YACN,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAE7C,YAAA,IAAI,SAAS,EAAE;AACX,gBAAA,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,GAAI,WAAW,CAAC,SAAS,CAAe,GAAG,SAAS,CAAC;AAC5F,aAAA;AAAM,iBAAA;AACH,gBAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1B,aAAA;AACD,YAAA,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAI,WAAW,CAAC,QAAQ,CAAc,GAAG,QAAQ,CAAC;AACvF,SAAA;KACJ;CACJ;;SC/Je,UAAU,CAAC,KAAiB,EAAE,IAAe,EAAE,IAAU,EAAA;IACrE,MAAM,SAAS,GAAwB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3E,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;SAEe,OAAO,CAAC,KAAiB,EAAE,KAAyB,EAAE,IAAU,EAAA;IAC5E,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,aAAa,GAAuB,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACxC,IAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;QACnB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;gBACxB,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,aAAA;AACD,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;gBAAE,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD,SAAA;AACJ,KAAA;AACD,IAAA,MAAM,SAAS,GAAqB,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC1F,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAEe,SAAA,UAAU,CAAC,KAAiB,EAAE,IAAU,EAAA;IACpD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAwB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3E,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;SAEe,QAAQ,CAAC,KAAiB,EAAE,IAAU,EAAE,OAAa,EAAA;IACjE,MAAM,SAAS,GAAsB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC1E,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AASM,MAAM,cAAc,GAAmB;IAC1C,UAAU;IACV,OAAO;IACP,UAAU;IACV,QAAQ;CACX;;AC7Ce,SAAA,YAAY,CAAC,KAAiB,EAAE,SAA2B,EAAA;AACvE,IAAA,MAAM,SAAS,GAA0B,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;AAC1H,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAMM,MAAM,mBAAmB,GAAwB;IACpD,YAAY;CACf;;ACXe,SAAA,WAAW,CAAC,KAAiB,EAAE,QAAkB,EAAA;AAC7D,IAAA,MAAM,SAAS,GAAyB,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AACtH,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAMM,MAAM,kBAAkB,GAAuB;IAClD,WAAW;CACd;;ACVM,MAAM,UAAU,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChB,iBAAiB,CAAA,EACjB,kBAAkB,CAAA,EAClB,mBAAmB,CAAA,EACnB,cAAc;;SCAL,WAAW,CAAC,IAAgB,EAAE,QAAwB,EAAE,OAA0B,EAAA;AAC9F,IAAA,MAAM,KAAK,GAAe;QACtB,IAAI;AACJ,QAAA,QAAQ,EAAE;AACN,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,mBAAmB,EAAE,MAAM;AAC9B,SAAA;QACD,QAAQ;AACR,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,OAAO,EAAE;AACL,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,KAAK,EAAE,EAAE;AACZ,SAAA;AACD,QAAA,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,gBAAgB,CAAC,MAAM;QAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,eAAe,EAAE,OAAO,CAAC,eAAe;AACxC,QAAA,IAAI,EAAE,MAAK,GAAG;AACd,QAAA,IAAI,EAAE,MAAK,GAAG;AACd,QAAA,KAAK,EAAE,CAAC,SAAyB,KAAI;AACjC,YAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEjC,YAAA,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAEvC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtB,gBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAE1B,gBAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AACxB,oBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC3B,KAAK,CAAC,QAAQ,EAAE,CAAC;AACjB,oBAAA,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;AAC1B,iBAAC,CAAC,CAAC;AACN,aAAA;SACJ;AACD,QAAA,QAAQ,EAAE,MAAK,GAAG;AAClB,QAAA,SAAS,EAAE,CAAC,KAAiB,QAAO;AACpC,QAAA,aAAa,EAAE,CAAC,KAAiB,QAAO;AACxC,QAAA,SAAS,EAAE,CAAC,KAAiB,QAAO;AACpC,QAAA,OAAO,EAAE,CAAC,KAAoB,QAAO;AACrC,QAAA,KAAK,EAAE,CAAC,KAAoB,QAAO;AACnC,QAAA,QAAQ,EAAE,CAAC,KAAiB,QAAO;AACnC,QAAA,WAAW,EAAE,CAAC,IAAyB,QAAO;AAC9C,QAAA,cAAc,EAAE,CAAC,IAAyB,QAAO;AACjD,QAAA,cAAc,EAAE,CAAC,IAAyB,QAAO;AACjD,QAAA,WAAW,EAAE,CAAC,OAA4B,KAAK,EAAE;QACjD,aAAa,EAAE,CAAC,OAA4B,EAAE,OAAsB,KAAK,EAAE;AAC3E,QAAA,cAAc,EAAE,MAAK,GAAG;KAC3B,CAAC;AACF,IAAA,OAAO,KAAK,CAAC;AACjB;;ACzDM,SAAU,SAAS,CAAC,KAAiB,EAAA;AACvC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;AAE3B,IAAA,KAAK,CAAC,QAAQ,GAAG,MAAK;QAClB,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAEtD,QAAA,IAAI,eAAe,EAAE;AACjB,YAAA,eAAe,EAAE,CAAC;AACrB,SAAA;AAED,QAAA,QAAQ,EAAE,CAAC;AACf,KAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC;AACjB;;ACfO,MAAM,EAAE,GAAG,6BAA6B;SAE/B,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,SAAqB,EAAA;AAC/D,IAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;AAC/C,IAAA,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;SAEe,OAAO,GAAA;IACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC/C,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;SAEe,SAAS,GAAA;IACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAChD,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAEK,SAAU,UAAU,CAAC,CAAS,EAAE,CAAS,EAAC,IAAY,EAAE,WAAmB,EAAA;IAC7E,IAAI,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAG,EAAA,CAAC,CAAE,CAAA,CAAC,CAAC;IAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAG,EAAA,CAAC,CAAE,CAAA,CAAC,CAAC;AAC/B,IAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,IAAA,OAAO,IAAI,CAAC;AAChB;;AC1Ba,MAAA,MAAM,GACf,OAAO,SAAS,KAAK,WAAW;IAChC,OAAO,MAAM,KAAK,WAAW;AAC7B,IAAA,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAC5C,CAAE,MAAc,CAAC,SAAS;AAEjB,MAAA,QAAQ,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAEpF,MAAA,UAAU,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,kCAAkC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAE9G,MAAA,SAAS,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAElH;AACa,MAAA,cAAc,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,mCAAmC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAEnH,MAAA,SAAS,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAEjG;AACa,MAAA,gBAAgB,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,qCAAqC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS;;ACf5H,SAAU,iBAAiB,CAAC,MAAsB,EAAA;AACpD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC;AAC3E,IAAA,OAAO,IAAI,CAAC;AAChB;;ACTA;;AAEG;AAEH,MAAM,OAAO,GAAQ;AACjB,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC;AAC9D,IAAA,YAAY,EAAE,MAAM;AACpB,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,gBAAgB,EAAE,WAAW;AAC7B,IAAA,eAAe,EAAE,YAAY;AAC7B,IAAA,cAAc,EAAE,kBAAkB;AAClC,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,cAAc,EAAE,YAAY;AAC5B,IAAA,aAAa,EAAE,aAAa;AAC5B,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,IAAI,EAAE,OAAO;CAChB,CAAC;AAEF,MAAM,aAAa,GAAQ;AACvB,IAAA,gBAAgB,EAAE,QAAQ;AAC1B,IAAA,eAAe,EAAE,UAAU;AAC3B,IAAA,gBAAgB,EAAE,UAAU;AAC5B,IAAA,eAAe,EAAE,WAAW;AAC5B,IAAA,cAAc,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC;AAC5C,IAAA,aAAa,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC;AACxC,IAAA,kBAAkB,EAAE,sBAAsB;AAC1C,IAAA,iBAAiB,EAAE,CAAC,mBAAmB,EAAE,QAAQ,CAAC;AAClD,IAAA,kBAAkB,EAAE,sBAAsB;AAC1C,IAAA,iBAAiB,EAAE,mBAAmB;AACtC,IAAA,kBAAkB,EAAE,cAAc;AAClC,IAAA,iBAAiB,EAAE,gBAAgB;AACnC,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,kBAAkB,EAAE,QAAQ;CAC/B,CAAC;AAEF,MAAM,eAAe,GAAQ;AACzB,IAAA,kBAAkB,EAAE,uBAAuB;AAC3C,IAAA,iBAAiB,EAAE,oBAAoB;AACvC,IAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC;CACnC,CAAC;AAEF;;AAEG;AAEH,MAAM,MAAM,GAAG,CAAC,GAAW,KAAI;AAC3B,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7B,IAAA,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AACjC,IAAA,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO,CAAC,KAAoB,KAAI;AAC5B,QAAA,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;QACD,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;QACD,IAAI,CAAC,QAAQ,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;AAC5C,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;AACjB,KAAC,CAAC;AACN,CAAC,CAAC;AAEF;;AAEG;AAEH,MAAM,OAAO,GAAG;AACZ,IAAA,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;AACtB,IAAA,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAA,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC;AACtC,IAAA,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;AACpC,IAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;AAC1B,IAAA,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;AAC9B,IAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;AAC1C,IAAA,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC;AACxC,IAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC;AAClD,IAAA,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC;AAChD,IAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC;AAClD,IAAA,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC;AAChD,IAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;AAC1C,IAAA,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC;AACxC,IAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC;AAClD,IAAA,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC;AAChD,IAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;AAC1B,IAAA,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC;AAC9C,IAAA,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC;AAC5C,IAAA,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC;AAC9C,IAAA,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC;AAC5C,IAAA,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;AACtB,IAAA,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;AAClC,IAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC;AAClD,IAAA,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;;;ACvGV,SAAA,SAAS,CAAC,MAAM,GAAG,CAAC,EAAA;;AAEhC,IAAA,MAAM,MAAM,GAAG,2CAA2C,CAAC;AAC3D,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7B,QAAA,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;AACjE,KAAA;AACD,IAAA,OAAO,GAAG,CAAC;AACf;;ACTA;AACgB,SAAA,8BAA8B,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAA;AAC/G,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACjB,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACjB,IAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAClB,IAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;IAElB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,IAAI,SAAS,KAAK,CAAC,EAAE;;AAEjB,QAAA,KAAK,GAAG,GAAG,GAAG,SAAS,CAAC;AAC3B,KAAA;IAED,IAAI,EAAE,EAAE,EAAE,CAAC;IACX,IAAI,KAAK,GAAG,CAAC,EAAE;QACX,EAAE,GAAG,EAAE,CAAC;QACR,EAAE,GAAG,EAAE,CAAC;AACX,KAAA;SAAM,IAAI,KAAK,GAAG,CAAC,EAAE;QAClB,EAAE,GAAG,EAAE,CAAC;QACR,EAAE,GAAG,EAAE,CAAC;AACX,KAAA;AAAM,SAAA;AACH,QAAA,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AACpB,QAAA,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AACvB,KAAA;AAED,IAAA,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAEK,SAAU,MAAM,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,KAAa,EAAA;;;;IAIhF,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5I,CAAC;AAEK,SAAU,4BAA4B,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAA;AACvF,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9B;;ACzCgB,SAAA,eAAe,CAAC,KAAiB,EAAE,MAAe,EAAA;IAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAG;AACjC,QAAA,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxC,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC;AAEe,SAAA,cAAc,CAAC,KAAiB,EAAE,KAAY,EAAA;AAC1D,IAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7D,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAClC,IAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;AAC1D,IAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;AAC5D,IAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAU,CAAC;AACnF,IAAA,OAAO,QAAQ,CAAC;AACpB,CAAC;AAEK,SAAU,UAAU,CAAC,KAAiB,EAAA;AACxC,IAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAa,CAAC;AACxE,IAAA,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;AACrD,IAAA,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC;AACvD,IAAA,MAAM,YAAY,GAAG,KAAK,GAAG,UAAU,CAAC;AACxC,IAAA,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAC3C,IAAA,MAAM,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC;AAC5B,IAAA,MAAM,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC;AAC7B,IAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAC5E,CAAC;AAEK,SAAU,oBAAoB,CAAC,CAAQ,EAAA;;IACzC,OAAQ,CAAA,EAAA,GAAA,CAAC,CAAC,MAAsB,0CAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;AACvE,CAAC;AAED;;;;AAIG;AACU,MAAA,iBAAiB,GAAG,CAAC,QAAgB,KAAa,CAAC,CAAC,GAAG,QAAQ,GAAG,GAAG,IAAI,SAAS;AAE/F;;;;AAIG;AACU,MAAA,aAAa,GAAG,CAAC,IAAY,KAAa,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE;MAEhF,kBAAkB,GAAG,CAAC,KAAiB,EAAE,MAAwB,KAAI;AAC9E,IAAA,IAAI,MAAM,EAAE;AACR,QAAA,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,KAAA;AACL;;ACjDA;;AAEG;MAEU,WAAW,GAAG,CAAC,EAAkB,EAAE,IAAgC,KAAa;AACzF,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,IAAI,EAAE,CAAC,IAAI,MAAK,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,IAAI,CAAA,EAAE;AACtD,QAAA,OAAO,IAAI,CAAC;AACf,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;AAEF;;AAEG;MAEU,UAAU,GAAG,CAAC,EAAkB,EAAE,IAAgC,KAAa;IACxF,IAAI,EAAE,CAAC,IAAI,KAAK,eAAe,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,EAAE;AAC3D,QAAA,OAAO,KAAK,CAAC;AAChB,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AAChB,EAAE;AAEF;;AAEG;AAEU,MAAA,WAAW,GAAG,CAAC,EAAkB,KAAa;AACvD,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,eAAe,EAAE;AAC7B,QAAA,OAAO,KAAK,CAAC;AAChB,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AAChB,EAAE;AAEW,MAAA,iBAAiB,GAAG;AAC7B;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACtB,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC5B;AAED;;AAEG;AAEH,IAAA,SAAS,CAAC,KAAiB,EAAA;AACvB,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED;;;AAGG;IAEH,cAAc,CAAC,KAAiB,EAAE,EAAc,EAAA;QAC5C,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChD,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1B,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAC5B;AACD;;;AAGG;IAEH,aAAa,CAAC,KAAiB,EAAE,EAAc,EAAA;QAC3C,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACzB,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAC3B;;;ACtEC,SAAU,WAAW,CAAuB,KAAQ,EAAA;AACtD,IAAA,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AACjC,IAAA,KAAK,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAEzC,IAAA,KAAK,CAAC,IAAI,GAAG,MAAK;AACd,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AAC1B,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;AAE1B,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEtC,YAAA,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,MAAK;AACxC,gBAAA,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE;AACpB,oBAAA,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACnB,iBAAA;AACL,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AACpB,YAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAA;AACL,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,IAAI,GAAG,MAAK;AACd,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AAC1B,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;AAE1B,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEtC,YAAA,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,MAAK;AACxC,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AAC/D,gBAAA,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;AACzB,oBAAA,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACnB,iBAAA;AACL,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AACvB,SAAA;AACL,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,KAAK,GAAG,CAAC,EAAkB,KAAI;AACjC,QAAA,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AACtC,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5D,IAAI,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,KAAK,GAAG,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE/C,IAAI,IAAI,IAAI,IAAI,EAAE;AACd,YAAA,IAAI,GAAG,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACjC,SAAA;AAED,QAAA,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,KAAK,EAAE;gBACR,IAAI,SAAS,IAAI,IAAI,EAAE;oBACnB,KAAK,GAAG,KAAK,CAAC;AACjB,iBAAA;AAAM,qBAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;oBAChC,KAAK,GAAG,IAAI,CAAC;AAChB,iBAAA;AAAM,qBAAA;AACH,oBAAA,KAAK,GAAG,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACnC,iBAAA;AACJ,aAAA;YAED,IAAI,SAAS,IAAI,KAAK,EAAE;AACpB,gBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtB,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AACnB,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,aAAA;AAED,YAAA,OAAO,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;gBACvB,KAAK,CAAC,KAAK,EAAE,CAAC;AACjB,aAAA;AAED,YAAA,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE;AACjB,gBAAA,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;AACtB,aAAA;AACJ,SAAA;QACD,KAAK,CAAC,EAAE,CAAC,CAAC;AACd,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,OAAO,GAAG,CAAC,KAAoB,KAAI;AACrC,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YAC1B,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,OAAO;AACV,SAAA;AACD,QAAA,IAAI,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;YAChC,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,OAAO;AACV,SAAA;QACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,KAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC;AACjB;;AC5FM,SAAU,aAAa,CAAuB,KAAQ,EAAA;IACxD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAEtD,IAAI,KAAK,GAAiB,IAAI,CAAC;IAC/B,IAAI,GAAG,GAAiB,IAAI,CAAC;AAE7B,IAAA,KAAK,CAAC,SAAS,GAAG,CAAC,KAAiB,KAAI;AACpC,QAAA,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE;YAC7B,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO;AACV,SAAA;AACD,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACnE,YAAA,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACjD,SAAA;QACD,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,SAAS,GAAG,CAAC,KAAiB,KAAI;AACpC,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAA,IAAI,KAAK,EAAE;YACP,MAAM,eAAe,GAAG,iBAAiB,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AAChE,YAAA,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBACxE,GAAG,GAAG,WAAW,CAAC;AACrB,aAAA;AACJ,SAAA;QACD,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,aAAa,GAAG,CAAC,KAAiB,KAAI;AACxC,QAAA,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE;AAC7B,YAAA,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAA;AACD,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACnE,SAAA;AAAM,aAAA;AACH,YAAA,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACxC,SAAA;QACD,KAAK,GAAG,IAAI,CAAC;QACb,GAAG,GAAG,IAAI,CAAC;QAEX,aAAa,CAAC,KAAK,CAAC,CAAC;AACzB,KAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC;AACjB;;MC3Ca,qBAAqB,CAAA;AALlC,IAAA,WAAA,GAAA;AAM0B,QAAA,IAAS,CAAA,SAAA,GAAG,CAAA,mBAAA,CAAqB,CAAC;AAM9C,QAAA,IAAA,CAAA,UAAU,GAAmC,IAAI,YAAY,EAAE,CAAC;AAEhE,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC;AAEjC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAElC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;AAEnC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAE,CAAC;KA4BlD;IA1BG,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,gBAAgB,CAAC,IAAI,EAAE;YAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC/C,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACjD,SAAA;KACJ;;IAGD,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KAC3B;;IAGD,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC5B;;IAGD,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC7B;IAED,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;KAC/B;;mHA1CQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,+UCRlC,msZAkGA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;4FD1Fa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACI,eAAe,EAAA,eAAA,EAER,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,msZAAA,EAAA,CAAA;8BAGzB,SAAS,EAAA,CAAA;sBAA9B,WAAW;uBAAC,OAAO,CAAA;gBAEX,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEG,eAAe,EAAA,CAAA;sBAAxB,MAAM;;;MEDE,qBAAqB,CAAA;IAiB9B,WAAmB,CAAA,SAAoB,EAAS,gBAAkC,EAAA;AAA/D,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAAS,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAhBlF,QAAA,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAYX,QAAA,IAAS,CAAA,SAAA,GAAqB,IAAI,CAAC;KAI0C;IAEtF,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAED,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACjC;IAED,SAAS,CAAC,KAAK,GAAG,KAAK,EAAA;AACnB,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE;YACrE,OAAO;AACV,SAAA;QACD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAI,CAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAG,CAAA,CAAA,CAAC,CAAC;KACzH;IAED,WAAW,GAAA;AACP,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AACjE,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC/B,SAAC,CAAC,CAAC;KACN;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,QAAQ,EAAE;YAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;AACpB,SAAA;QACD,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;AAChE,SAAA;KACJ;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;KACxB;;mHA3DQ,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,sMAHpB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;4FAGH,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAClD,CAAA;+HAMY,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;MC+BG,mBAAmB,CAAA;AAoE5B,IAAA,WAAA,CAAoB,GAAsB,EAAU,UAAsB,EAAU,SAAoB,EAAA;AAApF,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AAAU,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAAU,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AA1DxG,QAAA,IAAA,CAAA,QAAQ,GAAiB,IAAI,OAAO,EAAE,CAAC;AAQ/B,QAAA,IAAS,CAAA,SAAA,GAAW,GAAG,CAAC;QAUzB,IAAA,CAAA,cAAc,GAAmB;AACpC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;SACP,CAAC;AAiBO,QAAA,IAAU,CAAA,UAAA,GAAmB,EAAE,CAAC;AAIhC,QAAA,IAAY,CAAA,YAAA,GAAkB,EAAE,CAAC;AAEjC,QAAA,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAEtB,QAAA,IAAoB,CAAA,oBAAA,GAAG,KAAK,CAAC;AAE5B,QAAA,IAAA,CAAA,WAAW,GAAwC,IAAI,YAAY,EAAE,CAAC;AAEtE,QAAA,IAAA,CAAA,qBAAqB,GAA6B,IAAI,YAAY,EAAE,CAAC;QA4K/E,IAAA,CAAA,OAAO,GAAG,CAAC,KAAa,EAAE,OAAqB,KAAI;AAC/C,YAAA,OAAO,KAAK,CAAC;AACjB,SAAC,CAAC;KAvK0G;AAnE5G,IAAA,IACI,SAAS,GAAA;AACT,QAAA,OAAO,yBAAyB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;KACvD;AAgBD,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAQD,IAAA,IAAW,UAAU,GAAA;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC,IAAI,CAAC;KACtD;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;KACjC;AAED,IAAA,IAAI,SAAS,GAAA;;AACT,QAAA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,0CAAE,SAAS,CAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC,IAAI,EAAE;AACvE,YAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAChD,SAAA;AACD,QAAA,OAAO,MAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,CAAC;KAChC;AAgBD,IAAA,IACI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAID,QAAQ,GAAA;QACJ,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAqB,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACtG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAK;AACpC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,YAAA,MAAM,WAAW,GAA0B;AACvC,gBAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC7B,gBAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;AACjC,gBAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC7B,gBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;aAClC,CAAC;;AAEF,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,cAAc,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,EAAE;gBAC7E,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,aAAA;AACD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;KACN;IAED,eAAe,GAAA;QACX,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/C;IAED,iBAAiB,GAAA;AACb,QAAA,MAAM,OAAO,GAAsB,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChH,IAAI,KAAK,GAAG,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,IAAG;AAC/B,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;AAC5C,SAAA;KACJ;IAED,gBAAgB,GAAA;AACZ,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AACxC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9D,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AACxC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5F,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,QAAQ,EAAE,SAAS,CAAC;AACrC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AACrC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;AACvC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACpC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;YAC7B,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AACrC,gBAAA,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAC1B,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,QAAQ,CACX,EAAA,EAAA,OAAO,EAAE,CAAA,QAAQ,aAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,OAAO,IAAG,KAAK,CAAC,MAAM,EACzC,OAAO,EAAE,CAAA,QAAQ,KAAR,IAAA,IAAA,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,OAAO,IAAG,KAAK,CAAC,MAAM,IAC3C,CAAC;AACN,aAAA;AACL,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAgB,QAAQ,EAAE,SAAS,CAAC;aACxC,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAK;AACR,YAAA,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AACvE,SAAC,CAAC,CACL;AACA,aAAA,SAAS,CAAC,CAAC,KAAoB,KAAI;;YAChC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AAC1C,gBAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC3C,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B,aAAA;AACL,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAgB,QAAQ,EAAE,OAAO,CAAC;aACtC,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAK;AACR,YAAA,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AACvE,SAAC,CAAC,CACL;AACA,aAAA,SAAS,CAAC,CAAC,KAAoB,KAAI;;YAChC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC7F,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAiB,QAAQ,EAAE,MAAM,CAAC;aACtC,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAK;AACR,YAAA,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AACvE,SAAC,CAAC,CACL;AACA,aAAA,SAAS,CAAC,CAAC,KAAqB,KAAI;;YACjC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACjD,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAiB,QAAQ,EAAE,OAAO,CAAC;aACvC,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAK;AACR,YAAA,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AACvE,SAAC,CAAC,CACL;AACA,aAAA,SAAS,CAAC,CAAC,KAAqB,KAAI;;YACjC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACpD,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAiB,QAAQ,EAAE,KAAK,CAAC;aACrC,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAK;AACR,YAAA,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AACvE,SAAC,CAAC,CACL;AACA,aAAA,SAAS,CAAC,CAAC,KAAqB,KAAI;;YACjC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC7C,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACpD,SAAC,CAAC,CAAC;AAEP,QAAA,MAAM,CAAC,QAAQ,GAAG,MAAK;YACnB,IAAI,CAAC,eAAe,EAAE,CAAC;AAC3B,SAAC,CAAC;KACL;IAED,eAAe,GAAA;;QACX,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAA,MAAM,aAAa,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAC,GAAG,CAAa,CAAC;AAChF,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACvB,IAAI,CAAC,IAAI,EACT,SAAS,EACT,CAAG,EAAA,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA,EAAA,EAAK,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA,EAAA,EAAK,YAAY,CAAC,KAAK,CAAK,EAAA,EAAA,YAAY,CAAC,MAAM,CAAA,CAAE,CAC1G,CAAC;KACL;IAED,cAAc,GAAA;QACV,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAA,EAAG,OAAO,CAAC,IAAI,CAAA,EAAA,EAAK,OAAO,CAAC,IAAI,CAAA,EAAA,EAAK,OAAO,CAAC,KAAK,CAAA,EAAA,EAAK,OAAO,CAAC,MAAM,CAAA,CAAE,CAAC,CAAC;KAC9H;AAMD,IAAA,QAAQ,CAAC,CAAa,EAAA;AAClB,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC5B;AAED,IAAA,MAAM,CAAC,CAAa,EAAA;;QAChB,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAoB,CAAC;AAClD,QAAA,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAC1B,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,QAAQ,CACX,EAAA,EAAA,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,EAClF,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,IACpF,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC/B;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC;KAC7B;;AAGD,IAAA,cAAc,CAAC,YAA8B,EAAA;AACzC,QAAA,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KAC3B;;IAGD,WAAW,GAAA;;QACP,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAoB,CAAC;AAClD,QAAA,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAC1B,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,QAAQ,CACX,EAAA,EAAA,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,CAAC,IACZ,CAAC;QACH,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;;IAGD,YAAY,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,EAAE;YACvB,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;;IAGD,aAAa,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE;YACtB,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAED,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAED,UAAU,GAAA;;QACN,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAoB,CAAC;AAClD,QAAA,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,kCAC1B,QAAQ,CAAA,EAAA,EACX,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IACzC,CAAC;KACN;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACzB,QAAA,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACvC;;iHAzTQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EA/BlB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAA,qBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;4FAGQ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAjC/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,IAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAClD,CAAA;yJAGO,SAAS,EAAA,CAAA;sBADZ,WAAW;uBAAC,OAAO,CAAA;gBAYpB,GAAG,EAAA,CAAA;sBADF,SAAS;gBAAC,IAAA,EAAA,CAAA,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAI3B,kBAAkB,EAAA,CAAA;sBADxB,YAAY;uBAAC,cAAc,CAAA;gBAkCnB,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBAGH,OAAO,EAAA,CAAA;sBADV,WAAW;uBAAC,eAAe,CAAA;;;AC7HhC,MAAM,UAAU,GAAG,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;MAO1E,WAAW,CAAA;;yGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAX,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,EAPJ,YAAA,EAAA,CAAA,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,CAIvE,EAAA,OAAA,EAAA,CAAA,aAAa,CAJP,EAAA,OAAA,EAAA,CAAA,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;0GAOxE,WAAW,EAAA,OAAA,EAAA,CAHX,CAAC,aAAa,CAAC,CAAA,EAAA,CAAA,CAAA;4FAGf,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC;oBAC7B,OAAO,EAAE,CAAC,aAAa,CAAC;AACxB,oBAAA,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC;iBAC3B,CAAA;;;ACZM,MAAM,qBAAqB,GAAG;;ACArC;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"plait-core.mjs","sources":["../../../packages/plait/src/interfaces/cursor.ts","../../../packages/plait/src/interfaces/path.ts","../../../packages/plait/src/interfaces/node.ts","../../../packages/plait/src/interfaces/operation.ts","../../../packages/plait/src/utils/helper.ts","../../../packages/plait/src/interfaces/viewport.ts","../../../packages/plait/src/interfaces/history.ts","../../../packages/plait/src/utils/weak-maps.ts","../../../packages/plait/src/transfroms/general.ts","../../../packages/plait/src/transfroms/node.ts","../../../packages/plait/src/transfroms/selection.ts","../../../packages/plait/src/transfroms/viewport.ts","../../../packages/plait/src/transfroms/index.ts","../../../packages/plait/src/plugins/create-board.ts","../../../packages/plait/src/plugins/with-board.ts","../../../packages/plait/src/utils/dom.ts","../../../packages/plait/src/utils/environment.ts","../../../packages/plait/src/utils/graph.ts","../../../packages/plait/src/utils/hotkeys.ts","../../../packages/plait/src/utils/id-creator.ts","../../../packages/plait/src/utils/math.ts","../../../packages/plait/src/utils/board.ts","../../../packages/plait/src/utils/history.ts","../../../packages/plait/src/plugins/with-history.ts","../../../packages/plait/src/plugins/with-selection.ts","../../../packages/plait/src/core/toolbar/toolbar.component.ts","../../../packages/plait/src/core/toolbar/toolbar.component.html","../../../packages/plait/src/core/element/element.component.ts","../../../packages/plait/src/board/board.component.ts","../../../packages/plait/src/plait.module.ts","../../../packages/plait/src/constants/index.ts","../../../packages/plait/src/public-api.ts","../../../packages/plait/src/plait-core.ts"],"sourcesContent":["export type CursorStatus = BaseCursorStatus | string;\nexport enum BaseCursorStatus {\n 'move' = 'move',\n 'select' = 'select'\n}\n","import produce from 'immer';\nimport { PlaitOperation } from './operation';\n\nexport type Path = number[];\n\nexport const Path = {\n parent(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the parent path of the root path [${path}].`);\n }\n\n return path.slice(0, -1);\n },\n next(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no next index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last + 1);\n },\n /**\n * Check if a path is an ancestor of another.\n */\n\n isAncestor(path: Path, another: Path): boolean {\n return path.length < another.length && Path.compare(path, another) === 0;\n },\n /**\n * Compare a path to another, returning an integer indicating whether the path\n * was before, at, or after the other.\n *\n * Note: Two paths of unequal length can still receive a `0` result if one is\n * directly above or below the other. If you want exact matching, use\n * [[Path.equals]] instead.\n */\n compare(path: Path, another: Path): -1 | 0 | 1 {\n const min = Math.min(path.length, another.length);\n\n for (let i = 0; i < min; i++) {\n if (path[i] < another[i]) return -1;\n if (path[i] > another[i]) return 1;\n }\n\n return 0;\n },\n\n /**\n * Check if a path is exactly equal to another.\n */\n\n equals(path: Path, another: Path): boolean {\n return path.length === another.length && path.every((n, i) => n === another[i]);\n },\n /**\n * Check if a path ends before one of the indexes in another.\n */\n\n endsBefore(path: Path, another: Path): boolean {\n const i = path.length - 1;\n const as = path.slice(0, i);\n const bs = another.slice(0, i);\n const av = path[i];\n const bv = another[i];\n return Path.equals(as, bs) && av < bv;\n },\n /**\n * Check if a path is a sibling of another.\n */\n isSibling(path: Path, another: Path): boolean {\n if (path.length !== another.length) {\n return false;\n }\n\n const as = path.slice(0, -1);\n const bs = another.slice(0, -1);\n const al = path[path.length - 1];\n const bl = another[another.length - 1];\n return al !== bl && Path.equals(as, bs);\n },\n transform(path: Path | null, operation: PlaitOperation): Path | null {\n return produce(path, p => {\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (!path || path?.length === 0) {\n return;\n }\n\n if (p === null) {\n return null;\n }\n\n switch (operation.type) {\n case 'insert_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.endsBefore(op, p) || Path.isAncestor(op, p)) {\n p[op.length - 1] += 1;\n }\n\n break;\n }\n\n case 'remove_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.isAncestor(op, p)) {\n return null;\n } else if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n\n case 'move_node': {\n const { path: op, newPath: onp } = operation;\n\n // If the old and new path are the same, it's a no-op.\n if (Path.equals(op, onp)) {\n return;\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice();\n // op.length <= onp.length is different for slate\n // resolve drag from [0, 0] to [0, 3] issue\n if (Path.endsBefore(op, onp) && op.length <= onp.length) {\n copy[op.length - 1] -= 1;\n }\n\n return copy.concat(p.slice(op.length));\n } else if (Path.isSibling(op, onp) && (Path.isAncestor(onp, p) || Path.equals(onp, p))) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n } else {\n p[op.length - 1] += 1;\n }\n } else if (Path.endsBefore(onp, p) || Path.equals(onp, p) || Path.isAncestor(onp, p)) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n p[onp.length - 1] += 1;\n } else if (Path.endsBefore(op, p)) {\n if (Path.equals(onp, p)) {\n p[onp.length - 1] += 1;\n }\n\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n }\n return null;\n });\n }\n};\n","import { PlaitBoard } from './board';\nimport { Path } from './path';\n\nexport interface PlaitNode {\n [key: string]: any;\n children?: PlaitNode[];\n id?: string;\n}\n\nexport type Ancestor = PlaitBoard | PlaitNode;\n\nexport interface PlaitNodeInterface {\n parent: (board: PlaitBoard, path: Path) => Ancestor;\n get: (board: PlaitBoard, path: Path) => PlaitNode;\n}\n\nexport const PlaitNode: PlaitNodeInterface = {\n parent: (board: PlaitBoard, path: Path) => {\n const parentPath = Path.parent(path);\n const p = PlaitNode.get(board, parentPath);\n return p;\n },\n get(board: PlaitBoard, path: Path): Ancestor {\n let node: PlaitBoard | PlaitNode = board;\n\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n\n node = node.children[p];\n }\n\n return node;\n }\n};\n","import { PlaitNode } from './node';\nimport { Path } from './path';\nimport { Selection } from './selection';\nimport { Viewport } from './viewport';\n\nexport type InsertNodeOperation = {\n type: 'insert_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type RemoveNodeOperation = {\n type: 'remove_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type MoveNodeOperation = {\n type: 'move_node';\n path: Path;\n newPath: Path;\n};\n\nexport type SetViewportOperation = {\n type: 'set_viewport';\n properties: Partial<Viewport>;\n newProperties: Partial<Viewport>;\n};\n\nexport type SetSelectionOperation = {\n type: 'set_selection';\n properties: Selection | null;\n newProperties: Selection | null;\n};\n\nexport type SetNodeOperation = {\n type: 'set_node';\n path: Path;\n properties: Partial<PlaitNode>;\n newProperties: Partial<PlaitNode>;\n};\n\nexport type PlaitOperation =\n | InsertNodeOperation\n | SetViewportOperation\n | SetSelectionOperation\n | SetNodeOperation\n | RemoveNodeOperation\n | MoveNodeOperation;\n\nexport interface PlaitOperationInterface {\n inverse: (op: PlaitOperation) => PlaitOperation;\n isSetViewportOperation: (value: any) => boolean;\n}\n\nexport const isSetViewportOperation = (value: any): value is SetViewportOperation => {\n return value.type === 'set_viewport';\n};\n\nexport const inverse = (op: PlaitOperation): PlaitOperation => {\n switch (op.type) {\n case 'insert_node': {\n return { ...op, type: 'remove_node' };\n }\n\n case 'remove_node': {\n return { ...op, type: 'insert_node' };\n }\n\n case 'move_node': {\n const { newPath, path } = op;\n\n // PERF: in this case the move operation is a no-op anyways.\n if (Path.equals(newPath, path)) {\n return op;\n }\n\n if (Path.isSibling(path, newPath)) {\n const inversePath = Path.transform(path, op)!;\n return { ...op, path: inversePath, newPath: path };\n }\n\n return { ...op, path: newPath, newPath: path };\n }\n\n case 'set_node': {\n const { properties, newProperties } = op;\n return { ...op, properties: newProperties, newProperties: properties };\n }\n\n case 'set_selection': {\n const { properties, newProperties } = op;\n\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: null\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: null,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n\n case 'set_viewport': {\n const { properties, newProperties } = op;\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: newProperties\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: properties,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n }\n};\n\nexport const PlaitOperation: PlaitOperationInterface = {\n isSetViewportOperation,\n inverse\n};\n","export function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n","import { isNullOrUndefined } from '../utils/helper';\nimport { ExtendedType } from './custom-types';\n\nexport interface BaseViewport {\n [key: string]: any;\n offsetX: number;\n offsetY: number;\n zoom: number;\n viewBackgroundColor: string;\n}\n\nexport type Viewport = ExtendedType<'Viewport', BaseViewport>;\n\nexport interface ViewportInterface {\n isViewport: (value: any) => value is Viewport;\n}\n\nexport const Viewport: ViewportInterface = {\n isViewport: (value: any): value is Viewport => {\n return (\n !isNullOrUndefined(value.offsetX) &&\n !isNullOrUndefined(value.offsetY) &&\n !isNullOrUndefined(value.zoom) &&\n !isNullOrUndefined(value.viewBackgroundColor)\n );\n }\n};\n","import { PlaitBoard } from './board';\nimport { PlaitOperation } from './operation';\n\nexport interface PlaitHistory {\n redos: PlaitOperation[][];\n undos: PlaitOperation[][];\n}\n\nexport const SAVING = new WeakMap<PlaitBoard, boolean | undefined>();\nexport const MERGING = new WeakMap<PlaitBoard, boolean | undefined>();\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { PlaitBoard } from '../interfaces/board';\n\n// record richtext type status\nexport const FLUSHING: WeakMap<PlaitBoard, boolean> = new WeakMap();\n\nexport const IS_TEXT_EDITABLE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ON_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const HOST_TO_ROUGH_SVG = new WeakMap<SVGElement, RoughSVG>();\n","import { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { createDraft, finishDraft, isDraft } from 'immer';\nimport { Viewport } from '../interfaces/viewport';\nimport { Selection } from '../interfaces/selection';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport interface GeneralTransforms {\n transform: (board: PlaitBoard, op: PlaitOperation) => void;\n}\n\nconst applyToDraft = (board: PlaitBoard, selection: Selection | null, viewport: Viewport, op: PlaitOperation) => {\n switch (op.type) {\n case 'insert_node': {\n const { path, node } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n\n parent.children.splice(index, 0, node);\n break;\n }\n case 'remove_node': {\n const { path } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n parent.children.splice(index, 1);\n break;\n }\n case 'move_node': {\n const { path, newPath } = op;\n\n if (Path.isAncestor(path, newPath)) {\n throw new Error(`Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.`);\n }\n\n const node = PlaitNode.get(board, path);\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n // This is tricky, but since the `path` and `newPath` both refer to\n // the same snapshot in time, there's a mismatch. After either\n // removing the original position, the second step's path can be out\n // of date. So instead of using the `op.newPath` directly, we\n // transform `op.path` to ascertain what the `newPath` would be after\n // the operation was applied.\n parent.children?.splice(index, 1);\n const truePath = Path.transform(path, op)!;\n const newParent = PlaitNode.get(board, Path.parent(truePath)) as Ancestor;\n const newIndex = truePath[truePath.length - 1];\n\n newParent.children?.splice(newIndex, 0, node);\n break;\n }\n case 'set_node': {\n const { path, properties, newProperties } = op;\n\n if (path.length === 0) {\n throw new Error(`Cannot set properties on the root node!`);\n }\n\n const node = PlaitNode.get(board, path);\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete node[key];\n } else {\n node[key] = value;\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete node[key];\n }\n }\n\n break;\n }\n case 'set_viewport': {\n const { newProperties } = op;\n if (newProperties == null) {\n viewport = newProperties;\n } else {\n if (viewport == null) {\n if (!Viewport.isViewport(newProperties)) {\n throw new Error(\n `Cannot apply an incomplete \"set_viewport\" operation properties ${JSON.stringify(\n newProperties\n )} when there is no current viewport.`\n );\n }\n viewport = { ...newProperties };\n }\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete viewport[key];\n } else {\n viewport[key] = value;\n }\n }\n }\n break;\n }\n case 'set_selection': {\n const { newProperties } = op;\n if (newProperties == null) {\n selection = newProperties;\n } else {\n if (selection === null) {\n selection = op.newProperties;\n } else {\n selection.anchor = newProperties.anchor;\n selection.focus = newProperties.focus;\n }\n }\n break;\n }\n }\n return { selection, viewport };\n};\n\nexport const GeneralTransforms: GeneralTransforms = {\n /**\n * Transform the board by an operation.\n */\n transform(board: PlaitBoard, op: PlaitOperation): void {\n board.children = createDraft(board.children);\n let viewport = board.viewport && createDraft(board.viewport);\n let selection = board.selection && createDraft(board.selection);\n\n try {\n const state = applyToDraft(board, selection, viewport, op);\n viewport = state.viewport;\n selection = state.selection;\n } finally {\n board.children = finishDraft(board.children);\n\n if (selection) {\n board.selection = isDraft(selection) ? (finishDraft(selection) as Selection) : selection;\n } else {\n board.selection = null;\n }\n board.viewport = isDraft(viewport) ? (finishDraft(viewport) as Viewport) : viewport;\n }\n }\n};\n","import { InsertNodeOperation, MoveNodeOperation, RemoveNodeOperation, SetNodeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport function insertNode(board: PlaitBoard, node: PlaitNode, path: Path) {\n const operation: InsertNodeOperation = { type: 'insert_node', node, path };\n board.apply(operation);\n}\n\nexport function setNode(board: PlaitBoard, props: Partial<PlaitNode>, path: Path) {\n const properties: Partial<PlaitNode> = {};\n const newProperties: Partial<PlaitNode> = {};\n const node = PlaitNode.get(board, path);\n for (const k in props) {\n if (node[k] !== props[k]) {\n if (node.hasOwnProperty(k)) {\n properties[k] = node[k];\n }\n if (props[k] != null) newProperties[k] = props[k];\n }\n }\n const operation: SetNodeOperation = { type: 'set_node', properties, newProperties, path };\n board.apply(operation);\n}\n\nexport function removeNode(board: PlaitBoard, path: Path) {\n const node = PlaitNode.get(board, path);\n const operation: RemoveNodeOperation = { type: 'remove_node', path, node };\n board.apply(operation);\n}\n\nexport function moveNode(board: PlaitBoard, path: Path, newPath: Path) {\n const operation: MoveNodeOperation = { type: 'move_node', path, newPath };\n board.apply(operation);\n}\n\nexport interface NodeTransforms {\n insertNode: (board: PlaitBoard, node: PlaitNode, path: Path) => void;\n setNode: (board: PlaitBoard, node: Partial<PlaitNode>, path: Path) => void;\n removeNode: (board: PlaitBoard, path: Path) => void;\n moveNode: (board: PlaitBoard, path: Path, newPath: Path) => void;\n}\n\nexport const NodeTransforms: NodeTransforms = {\n insertNode,\n setNode,\n removeNode,\n moveNode\n};\n","import { SetSelectionOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Selection } from '../interfaces/selection';\n\nexport function setSelection(board: PlaitBoard, selection: Selection | null) {\n const operation: SetSelectionOperation = { type: 'set_selection', properties: board.selection, newProperties: selection };\n board.apply(operation);\n}\n\nexport interface SelectionTransforms {\n setSelection: (board: PlaitBoard, selection: Selection | null) => void;\n}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection\n};\n","import { SetViewportOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Viewport } from '../interfaces/viewport';\n\nexport function setViewport(board: PlaitBoard, viewport: Viewport) {\n const operation: SetViewportOperation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };\n board.apply(operation);\n}\n\nexport interface ViewportTransforms {\n setViewport: (board: PlaitBoard, viewport: Viewport) => void;\n}\n\nexport const ViewportTransforms: ViewportTransforms = {\n setViewport\n};\n","import { GeneralTransforms } from './general';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\n\nexport const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms\n};\n","import { PlaitElement } from '../interfaces/element';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitElementContext } from '../interfaces/element-context';\nimport { SimpleChanges } from '@angular/core';\nimport { FLUSHING } from '../utils/weak-maps';\nimport { Transforms } from '../transfroms';\nimport { BaseCursorStatus } from '../interfaces/cursor';\n\nexport function createBoard(host: SVGElement, children: PlaitElement[], options: PlaitBoardOptions): PlaitBoard {\n const board: PlaitBoard = {\n host,\n viewport: {\n offsetX: 0,\n offsetY: 0,\n zoom: 1,\n viewBackgroundColor: '#000'\n },\n children,\n operations: [],\n history: {\n redos: [],\n undos: []\n },\n selection: null,\n cursor: BaseCursorStatus.select,\n readonly: options.readonly,\n allowClearBoard: options.allowClearBoard,\n undo: () => {},\n redo: () => {},\n apply: (operation: PlaitOperation) => {\n board.operations.push(operation);\n\n Transforms.transform(board, operation);\n\n if (!FLUSHING.get(board)) {\n FLUSHING.set(board, true);\n\n Promise.resolve().then(() => {\n FLUSHING.set(board, false);\n board.onChange();\n board.operations = [];\n });\n }\n },\n onChange: () => {},\n mousedown: (event: MouseEvent) => {},\n globalMouseup: (event: MouseEvent) => {},\n mousemove: (event: MouseEvent) => {},\n keydown: (event: KeyboardEvent) => {},\n keyup: (event: KeyboardEvent) => {},\n dblclick: (event: MouseEvent) => {},\n setFragment: (data: DataTransfer | null) => {},\n insertFragment: (data: DataTransfer | null) => {},\n deleteFragment: (data: DataTransfer | null) => {},\n drawElement: (context: PlaitElementContext) => [],\n redrawElement: (context: PlaitElementContext, changes: SimpleChanges) => [],\n destroyElement: () => {}\n };\n return board;\n}\n","import { BOARD_TO_ON_CHANGE } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\n\nexport function withBoard(board: PlaitBoard) {\n const { onChange } = board;\n\n board.onChange = () => {\n const onContextChange = BOARD_TO_ON_CHANGE.get(board);\n\n if (onContextChange) {\n onContextChange();\n }\n\n onChange();\n };\n\n return board;\n}\n","import { Point } from 'roughjs/bin/geometry';\n\nexport const NS = 'http://www.w3.org/2000/svg';\n\nexport function toPoint(x: number, y: number, container: SVGElement): Point {\n const rect = container.getBoundingClientRect();\n return [x - rect.x, y - rect.y];\n}\n\nexport function createG() {\n const newG = document.createElementNS(NS, 'g');\n return newG;\n}\n\nexport function createSVG() {\n const svg = document.createElementNS(NS, 'svg');\n return svg;\n}\n\nexport function createText(x: number, y: number,fill: string, textContent: string) {\n var text = document.createElementNS(NS, 'text');\n text.setAttribute('x', `${x}`);\n text.setAttribute('y', `${y}`);\n text.setAttribute('fill', fill);\n text.textContent = textContent;\n return text;\n}","export const IS_IOS =\n typeof navigator !== 'undefined' &&\n typeof window !== 'undefined' &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !(window as any).MSStream;\n\nexport const IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent);\n\nexport const IS_FIREFOX = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);\n\nexport const IS_SAFARI = typeof navigator !== 'undefined' && /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent);\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent);\n\nexport const IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent);\n\n// Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput\nexport const IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent);\n","import { RectangleClient } from '../interfaces/graph';\nimport { Point } from '../interfaces/point';\n\nexport function toRectangleClient(points: [Point, Point]): RectangleClient {\n const xArray = points.map(ele => ele[0]);\n const yArray = points.map(ele => ele[1]);\n const xMin = Math.min(...xArray);\n const xMax = Math.max(...xArray);\n const yMin = Math.min(...yArray);\n const yMax = Math.max(...yArray);\n const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n return rect;\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { IS_APPLE } from './environment';\n\n/**\n * Hotkey mappings for each platform.\n */\n\nconst HOTKEYS: any = {\n bold: 'mod+b',\n compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],\n moveBackward: 'left',\n moveForward: 'right',\n moveUp: 'up',\n moveDown: 'down',\n moveWordBackward: 'ctrl+left',\n moveWordForward: 'ctrl+right',\n deleteBackward: 'shift?+backspace',\n deleteForward: 'shift?+delete',\n extendBackward: 'shift+left',\n extendForward: 'shift+right',\n italic: 'mod+i',\n splitBlock: 'shift?+enter',\n undo: 'mod+z'\n};\n\nconst APPLE_HOTKEYS: any = {\n moveLineBackward: 'opt+up',\n moveLineForward: 'opt+down',\n moveWordBackward: 'opt+left',\n moveWordForward: 'opt+right',\n deleteBackward: ['ctrl+backspace', 'ctrl+h'],\n deleteForward: ['ctrl+delete', 'ctrl+d'],\n deleteLineBackward: 'cmd+shift?+backspace',\n deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],\n deleteWordBackward: 'opt+shift?+backspace',\n deleteWordForward: 'opt+shift?+delete',\n extendLineBackward: 'opt+shift+up',\n extendLineForward: 'opt+shift+down',\n redo: 'cmd+shift+z',\n transposeCharacter: 'ctrl+t'\n};\n\nconst WINDOWS_HOTKEYS: any = {\n deleteWordBackward: 'ctrl+shift?+backspace',\n deleteWordForward: 'ctrl+shift?+delete',\n redo: ['ctrl+y', 'ctrl+shift+z']\n};\n\n/**\n * Create a platform-aware hotkey checker.\n */\n\nconst create = (key: string) => {\n const generic = HOTKEYS[key];\n const apple = APPLE_HOTKEYS[key];\n const windows = WINDOWS_HOTKEYS[key];\n const isGeneric = generic && isKeyHotkey(generic);\n const isApple = apple && isKeyHotkey(apple);\n const isWindows = windows && isKeyHotkey(windows);\n\n return (event: KeyboardEvent) => {\n if (isGeneric && isGeneric(event)) {\n return true;\n }\n if (IS_APPLE && isApple && isApple(event)) {\n return true;\n }\n if (!IS_APPLE && isWindows && isWindows(event)) {\n return true;\n }\n return false;\n };\n};\n\n/**\n * Hotkeys.\n */\n\nconst hotkeys = {\n isBold: create('bold'),\n isCompose: create('compose'),\n isMoveBackward: create('moveBackward'),\n isMoveForward: create('moveForward'),\n isMoveUp: create('moveUp'),\n isMoveDown: create('moveDown'),\n isDeleteBackward: create('deleteBackward'),\n isDeleteForward: create('deleteForward'),\n isDeleteLineBackward: create('deleteLineBackward'),\n isDeleteLineForward: create('deleteLineForward'),\n isDeleteWordBackward: create('deleteWordBackward'),\n isDeleteWordForward: create('deleteWordForward'),\n isExtendBackward: create('extendBackward'),\n isExtendForward: create('extendForward'),\n isExtendLineBackward: create('extendLineBackward'),\n isExtendLineForward: create('extendLineForward'),\n isItalic: create('italic'),\n isMoveLineBackward: create('moveLineBackward'),\n isMoveLineForward: create('moveLineForward'),\n isMoveWordBackward: create('moveWordBackward'),\n isMoveWordForward: create('moveWordForward'),\n isRedo: create('redo'),\n isSplitBlock: create('splitBlock'),\n isTransposeCharacter: create('transposeCharacter'),\n isUndo: create('undo')\n};\nexport default hotkeys;\nexport { hotkeys };\n","export function idCreator(length = 5) {\n // remove numeral\n const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/\n const maxPosition = $chars.length;\n let key = '';\n for (let i = 0; i < length; i++) {\n key += $chars.charAt(Math.floor(Math.random() * maxPosition));\n }\n return key;\n}\n","// https://stackoverflow.com/a/6853926/232122\nexport function distanceBetweenPointAndSegment(x: number, y: number, x1: number, y1: number, x2: number, y2: number) {\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSquare = C * C + D * D;\n let param = -1;\n if (lenSquare !== 0) {\n // in case of 0 length line\n param = dot / lenSquare;\n }\n\n let xx, yy;\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n const dx = x - xx;\n const dy = y - yy;\n return Math.hypot(dx, dy);\n}\n\nexport function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) {\n // 𝑎′𝑥=(𝑎𝑥−𝑐𝑥)cos𝜃−(𝑎𝑦−𝑐𝑦)sin𝜃+𝑐𝑥\n // 𝑎′𝑦=(𝑎𝑥−𝑐𝑥)sin𝜃+(𝑎𝑦−𝑐𝑦)cos𝜃+𝑐𝑦.\n // https://math.stackexchange.com/questions/2204520/how-do-i-rotate-a-line-segment-in-a-specific-point-on-the-line\n return [(x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2];\n}\n\nexport function distanceBetweenPointAndPoint(x1: number, y1: number, x2: number, y2: number) {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.hypot(dx, dy);\n}","import { BaseCursorStatus, PlaitBoard, Point } from '../interfaces';\n\nexport function transformPoints(board: PlaitBoard, points: Point[]) {\n const newPoints = points.map(point => {\n return transformPoint(board, point);\n });\n return newPoints;\n}\n\nexport function transformPoint(board: PlaitBoard, point: Point) {\n const { width, height } = board.host.getBoundingClientRect();\n const viewBox = getViewBox(board);\n let x = (point[0] / width) * viewBox.width + viewBox.minX;\n let y = (point[1] / height) * viewBox.height + viewBox.minY;\n const newPoint = [x - board.viewport.offsetX, y - board.viewport.offsetY] as Point;\n return newPoint;\n}\n\nexport function getViewBox(board: PlaitBoard): ViewBox {\n const { width, height } = board.host.getBoundingClientRect() as DOMRect;\n const scaleWidth = (board.viewport.zoom - 1) * width;\n const scaleHeight = (board.viewport.zoom - 1) * height;\n const viewBoxWidth = width - scaleWidth;\n const viewBoxHeight = height - scaleHeight;\n const minX = scaleWidth / 2;\n const minY = scaleHeight / 2;\n return { minX, minY: minY, width: viewBoxWidth, height: viewBoxHeight };\n}\n\nexport function isNoSelectionElement(e: Event) {\n return (e.target as HTMLElement)?.closest('.plait-board-attached');\n}\n\n/**\n * viewZoom 转 zoom\n * @param viewZoom 视图上显示的 zoom 缩放级别 %\n * @returns zoom 真实的 zoom\n */\nexport const transformViewZoom = (viewZoom: number): number => (2 * viewZoom - 100) / viewZoom;\n\n/**\n * zoom 转 viewZoom\n * @param zoom this.board.viewport.zoom\n * @returns 视图上显示的 zoom 缩放级别 %\n */\nexport const transformZoom = (zoom: number): number => Number((100 / (2 - zoom)).toFixed(0));\n\nexport const updateCursorStatus = (board: PlaitBoard, cursor: BaseCursorStatus) => {\n if (cursor) {\n board.cursor = cursor;\n }\n};\n\nexport type ViewBox = {\n minX: number;\n minY: number;\n width: number;\n height: number;\n};\n","import { MERGING, PlaitBoard, PlaitOperation, SAVING } from '../interfaces';\n\n/**\n * Check whether to merge an operation into the previous operation.\n */\n\nexport const shouldMerge = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_viewport' && op.type === prev?.type) {\n return true;\n }\n return false;\n};\n\n/**\n * Check whether an operation needs to be saved to the history.\n */\n\nexport const shouldSave = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_selection' || op.type === 'set_viewport') {\n return false;\n }\n\n return true;\n};\n\n/**\n * Check whether an operation should clear the redos stack.\n */\n\nexport const shouldClear = (op: PlaitOperation): boolean => {\n if (op.type === 'set_selection') {\n return false;\n }\n\n return true;\n};\n\nexport const PlaitHistoryBoard = {\n /**\n * Get the saving flag's current value.\n */\n isSaving(board: PlaitBoard): boolean | undefined {\n return SAVING.get(board);\n },\n\n /**\n * Get the merge flag's current value.\n */\n\n isMerging(board: PlaitBoard): boolean | undefined {\n return MERGING.get(board);\n },\n\n /**\n * Apply a series of changes inside a synchronous `fn`, without merging any of\n * the new operations into previous save point in the history.\n */\n\n withoutMerging(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isMerging(board);\n MERGING.set(board, false);\n fn();\n MERGING.set(board, prev);\n },\n /**\n * Apply a series of changes inside a synchronous `fn`, without saving any of\n * their operations into the history.\n */\n\n withoutSaving(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isSaving(board);\n SAVING.set(board, false);\n fn();\n SAVING.set(board, prev);\n }\n};\n","import { PlaitBoard, PlaitOperation } from '../interfaces';\nimport { isHotkey } from 'is-hotkey';\nimport { PlaitHistoryBoard, shouldClear, shouldMerge, shouldSave } from '../utils';\n\nexport function withHistroy<T extends PlaitBoard>(board: T) {\n const { apply, keydown } = board;\n board.history = { undos: [], redos: [] };\n\n board.redo = () => {\n const { history } = board;\n const { redos } = history;\n\n if (redos.length > 0) {\n const batch = redos[redos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n for (const op of batch) {\n board.apply(op);\n }\n });\n\n history.redos.pop();\n history.undos.push(batch);\n }\n };\n\n board.undo = () => {\n const { history } = board;\n const { undos } = history;\n\n if (undos.length > 0) {\n const batch = undos[undos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n const inverseOps = batch.map(PlaitOperation.inverse).reverse();\n for (const op of inverseOps) {\n board.apply(op);\n }\n });\n\n history.redos.push(batch);\n history.undos.pop();\n }\n };\n\n board.apply = (op: PlaitOperation) => {\n const { operations, history } = board;\n const { undos } = history;\n const lastBatch = undos[undos.length - 1];\n const lastOp = lastBatch && lastBatch[lastBatch.length - 1];\n let save = PlaitHistoryBoard.isSaving(board);\n let merge = PlaitHistoryBoard.isMerging(board);\n\n if (save == null) {\n save = shouldSave(op, lastOp);\n }\n\n if (save) {\n if (!merge) {\n if (lastBatch == null) {\n merge = false;\n } else if (operations.length !== 0) {\n merge = true;\n } else {\n merge = shouldMerge(op, lastOp);\n }\n }\n\n if (lastBatch && merge) {\n lastBatch.push(op);\n } else {\n const batch = [op];\n undos.push(batch);\n }\n\n while (undos.length > 100) {\n undos.shift();\n }\n\n if (shouldClear(op)) {\n history.redos = [];\n }\n }\n apply(op);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (isHotkey('mod+z', event)) {\n board.undo();\n return;\n }\n if (isHotkey('mod+shift+z', event)) {\n board.redo();\n return;\n }\n keydown(event);\n };\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transfroms';\nimport { toPoint } from '../utils/dom';\nimport { toRectangleClient } from '../utils/graph';\nimport { isNoSelectionElement } from '../utils/board';\n\nexport function withSelection<T extends PlaitBoard>(board: T) {\n const { mousedown, mousemove, globalMouseup } = board;\n\n let start: Point | null = null;\n let end: Point | null = null;\n\n board.mousedown = (event: MouseEvent) => {\n if (isNoSelectionElement(event)) {\n mousedown(event);\n return;\n }\n if (event.target instanceof Node && board.host.contains(event.target)) {\n start = toPoint(event.x, event.y, board.host);\n }\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n const movedTarget = toPoint(event.x, event.y, board.host);\n if (start) {\n const rectangleClient = toRectangleClient([start, movedTarget]);\n if (start && Math.hypot(rectangleClient.width, rectangleClient.height) > 5) {\n end = movedTarget;\n }\n }\n mousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (isNoSelectionElement(event)) {\n return globalMouseup(event);\n }\n if (start) {\n Transforms.setSelection(board, { anchor: start, focus: start });\n } else {\n Transforms.setSelection(board, null);\n }\n start = null;\n end = null;\n\n globalMouseup(event);\n };\n\n return board;\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { BaseCursorStatus, CursorStatus } from '../../interfaces';\n\n@Component({\n selector: 'plait-toolbar',\n templateUrl: './toolbar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitToolbarComponent {\n @HostBinding('class') hostClass = `plait-board-toolbar`;\n\n @Input() cursorStatus!: CursorStatus;\n\n @Input() viewZoom!: number;\n\n @Output() moveHandle: EventEmitter<BaseCursorStatus> = new EventEmitter();\n\n @Output() adaptHandle = new EventEmitter();\n\n @Output() zoomInHandle = new EventEmitter();\n\n @Output() zoomOutHandle = new EventEmitter();\n\n @Output() resetZoomHandel = new EventEmitter();\n\n dragMove() {\n if (this.cursorStatus !== BaseCursorStatus.move) {\n this.moveHandle.emit(BaseCursorStatus.move);\n } else {\n this.moveHandle.emit(BaseCursorStatus.select);\n }\n }\n\n // 适应画布\n adapt() {\n this.adaptHandle.emit();\n }\n\n // 放大\n zoomIn() {\n this.zoomInHandle.emit();\n }\n\n // 缩小\n zoomOut() {\n this.zoomOutHandle.emit();\n }\n\n resetZoom() {\n this.resetZoomHandel.emit();\n }\n}\n","<div class=\"zoom-toolbar island plait-board-attached\">\n <a class=\"toolbar-item plait-action-icon\" [ngClass]=\"{ 'icon-active': cursorStatus === 'move' }\" (click)=\"dragMove()\">\n <ng-template [ngTemplateOutlet]=\"dragMoveTemplate\"></ng-template>\n </a>\n <div class=\"divider\"></div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"adapt()\">\n <ng-template [ngTemplateOutlet]=\"adaptTemplate\"></ng-template>\n </a>\n <div class=\"divider\"></div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"zoomOut()\">\n <ng-template [ngTemplateOutlet]=\"zoomOutTemplate\"></ng-template>\n </a>\n <div class=\"toolbar-item zoom-value\" (mousedown)=\"resetZoom()\">{{ viewZoom }}%</div>\n <a class=\"toolbar-item plait-action-icon\" (mousedown)=\"zoomIn()\">\n <ng-template [ngTemplateOutlet]=\"zoomInTemplate\"></ng-template>\n </a>\n</div>\n\n<ng-template #dragMoveTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>1.Base基础/1.icon图标/2.normal/hand</title>\n <g id=\"1.Base基础/1.icon图标/2.normal/hand\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M8.44583468,0.500225887 C9.07406934,0.510185679 9.54739531,0.839591366 9.86192311,1.34305279 C9.89696656,1.39914649 9.92878401,1.45492964 9.9576026,1.50991157 L9.9576026,1.50991157 L10.0210033,1.64201027 L10.061978,1.62350755 C10.1972891,1.56834247 10.3444107,1.53218464 10.5027907,1.51755353 L10.5027907,1.51755353 L10.6649031,1.51019133 C11.4883708,1.51019133 12.0208782,1.99343346 12.3023042,2.66393278 C12.3903714,2.87392911 12.4344191,3.10047818 12.4339446,3.3257952 L12.4339446,3.3257952 L12.4360033,3.80501027 L12.5160535,3.78341501 C12.6124478,3.76124046 12.7138812,3.74739854 12.820201,3.74250274 L12.820201,3.74250274 L12.9833264,3.74194533 C13.6121166,3.7657478 14.0645887,4.0801724 14.3087062,4.56112689 C14.4521117,4.8436609 14.4987984,5.11349437 14.4999262,5.33449618 L14.4999262,5.33449618 L14.3922653,12.049414 C14.3784752,12.909177 14.0717787,13.7360948 13.5212406,14.3825228 C13.4055676,14.5183496 13.2843697,14.643961 13.1582361,14.7596335 C12.4634771,15.3967716 11.755103,15.6538706 11.1897396,15.7000055 L11.1897396,15.7000055 L7.4723083,15.6798158 C7.14276373,15.634268 6.81580098,15.5154267 6.49455235,15.3472501 C6.25643701,15.2225944 6.06881706,15.0975452 5.88705731,14.9494308 L5.88705731,14.9494308 L2.55198782,11.500873 C2.39559475,11.3769079 2.17626793,11.1748532 1.9548636,10.9139403 C1.57867502,10.4706225 1.33501976,10.0139923 1.30330257,9.52833025 C1.28093191,9.18578476 1.37200912,8.85641102 1.5826788,8.56872564 C1.82538833,8.23725279 2.12881965,8.02107162 2.47470569,7.92957033 C2.95807982,7.80169771 3.42705723,7.92468989 3.86509644,8.18731167 C4.04431391,8.29475961 4.1816109,8.40304483 4.26225571,8.47866867 L4.26225571,8.47866867 L4.61400328,8.79701027 L4.57247249,3.59275349 L4.57628524,3.46204923 C4.5897691,3.23444442 4.64087578,2.95701848 4.75937106,2.66961597 C5.01017272,2.06131302 5.49670227,1.64692543 6.21363856,1.60818786 C6.44223508,1.59583681 6.65042099,1.62176802 6.83696985,1.68057551 L6.83696985,1.68057551 L6.86400328,1.69001027 C6.88501862,1.63593052 6.90764242,1.58175442 6.9331867,1.52672633 L6.9331867,1.52672633 L7.01883595,1.35955614 C7.31549194,0.832047939 7.79476072,0.48993549 8.44583468,0.500225887 Z M8.42684173,1.70001476 C8.26825412,1.69756905 8.16339456,1.77242008 8.06478367,1.94776814 C8.03967773,1.99241107 8.01831703,2.03811495 8.00083464,2.07855067 L8.00083464,2.07855067 L7.94879157,2.2035905 L7.94354455,2.20731401 L7.943,3.161 L7.97170661,3.16123746 L7.97170661,7.60991883 L6.77170661,7.60991883 L6.771,3.338 L6.74362358,3.33880359 C6.74284189,3.29064626 6.73014163,3.20282206 6.7002616,3.11094408 L6.66446012,3.01903385 C6.58982025,2.85766739 6.49843292,2.79455071 6.27838133,2.80644008 C6.07001018,2.81769881 5.95642108,2.91444507 5.86877664,3.12702089 C5.79792279,3.29887224 5.77228127,3.48655908 5.77246879,3.58977183 L5.77246879,3.58977183 L5.83613619,11.5252021 L3.41863956,9.33477657 L3.31637296,9.25979571 L3.24805011,9.21651224 C3.06096922,9.10434987 2.89279975,9.06024641 2.78159879,9.0896637 C2.71007735,9.10858411 2.63607367,9.1613084 2.55086305,9.27768211 C2.51020424,9.33320478 2.49638061,9.38319687 2.50075171,9.4501283 C2.51206889,9.62341997 2.64503022,9.87260054 2.86983366,10.1375191 C3.03268834,10.3294345 3.19762053,10.4813781 3.35554956,10.6131022 L3.35554956,10.6131022 L6.68454317,14.0569073 C6.71106575,14.0773808 6.74806086,14.1037158 6.79369091,14.1335929 L6.79369091,14.1335929 L6.95464838,14.2315311 L7.05111031,14.2841211 C7.25978123,14.3933622 7.46253523,14.4670573 7.55685495,14.4854708 L7.55685495,14.4854708 L11.1407985,14.5022108 C11.1503576,14.5013899 11.1627905,14.4997539 11.1779002,14.4971772 L11.1779002,14.4971772 L11.2991076,14.4694224 C11.3491682,14.4557375 11.4083624,14.437284 11.4751158,14.4130563 C11.769383,14.3062543 12.066676,14.1324596 12.3471758,13.8752234 C12.4371203,13.7927386 12.5240597,13.7026333 12.607654,13.6044743 C12.9760464,13.1719172 13.183059,12.6137678 13.1924195,12.030173 L13.1924195,12.030173 L13.3000132,5.32832551 C13.2997939,5.29016685 13.2826117,5.19085946 13.2386527,5.10425262 C13.1843838,4.99733326 13.1129774,4.94771265 12.9379578,4.94108739 C12.6814739,4.93138871 12.534132,5.11189595 12.4756792,5.39480062 L12.4768718,7.52734922 L11.2768718,7.52734922 L11.276,5.688 L11.2462883,5.6883208 L11.2339541,3.32771285 C11.2341,3.2560396 11.2209054,3.18817621 11.1957482,3.12818892 C11.0820579,2.85732094 10.9199288,2.71019133 10.6649031,2.71019133 C10.456829,2.71019133 10.3197487,2.87378067 10.2524297,3.11264939 L10.2530225,7.512783 L9.05302254,7.512783 L9.053,3.288 L9.01554331,3.28724203 L8.98800328,2.29901027 L8.9629175,2.22263368 C8.94515567,2.17417174 8.92167756,2.11937748 8.8924232,2.06330056 L8.8924232,2.06330056 L8.84420197,1.9788544 C8.72758855,1.79219249 8.59915015,1.70280728 8.42684173,1.70001476 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n\n<ng-template #adaptTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>1.Base基础/1.icon图标/2.normal/Fit canvas</title>\n <g id=\"1.Base基础/1.icon图标/2.normal/Fit-canvas\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M14.9971494,10.4 L14.9971494,13.4020516 C14.9971494,14.2366152 14.3581879,14.9219414 13.542782,14.9955129 L13.3971494,15.0020516 L10.4,15.0020516 L10.4,13.8020516 L13.3971494,13.8020516 C13.590449,13.8020516 13.7517243,13.6649388 13.7890228,13.4826656 L13.7971494,13.4020516 L13.7971494,10.4 L14.9971494,10.4 Z M2.2,10.4 L2.2,13.3971494 C2.2,13.590449 2.3371128,13.7517243 2.51938605,13.7890228 L2.6,13.7971494 L5.60205161,13.7971494 L5.60205161,14.9971494 L2.6,14.9971494 C1.76543638,14.9971494 1.08011021,14.3581879 1.00653868,13.542782 L1,13.3971494 L1,10.4 L2.2,10.4 Z M10.5024511,4.9 C11.3861067,4.9 12.1024511,5.6163444 12.1024511,6.5 L12.1024511,6.5 L12.1024511,9.5 C12.1024511,10.3836556 11.3861067,11.1 10.5024511,11.1 L10.5024511,11.1 L5.50245112,11.1 C4.61879552,11.1 3.90245112,10.3836556 3.90245112,9.5 L3.90245112,9.5 L3.90245112,6.5 C3.90245112,5.6163444 4.61879552,4.9 5.50245112,4.9 L5.50245112,4.9 Z M10.5024511,6.1 L5.50245112,6.1 C5.28153722,6.1 5.10245112,6.2790861 5.10245112,6.5 L5.10245112,6.5 L5.10245112,9.5 C5.10245112,9.7209139 5.28153722,9.9 5.50245112,9.9 L5.50245112,9.9 L10.5024511,9.9 C10.723365,9.9 10.9024511,9.7209139 10.9024511,9.5 L10.9024511,9.5 L10.9024511,6.5 C10.9024511,6.2790861 10.723365,6.1 10.5024511,6.1 L10.5024511,6.1 Z M5.59714938,1 L5.59714938,2.2 L2.6,2.2 C2.40670034,2.2 2.24542508,2.3371128 2.20812658,2.51938605 L2.2,2.6 L2.2,5.60205161 L1,5.60205161 L1,2.6 C1,1.76543638 1.63896152,1.08011021 2.45436739,1.00653868 L2.6,1 L5.59714938,1 Z M13.3971494,1 L13.542782,1.00653868 C14.3581879,1.08011021 14.9971494,1.76543638 14.9971494,2.6 L14.9971494,2.6 L14.9971494,5.60205161 L13.7971494,5.60205161 L13.7971494,2.6 L13.7890228,2.51938605 C13.7517243,2.3371128 13.590449,2.2 13.3971494,2.2 L13.3971494,2.2 L10.4,2.2 L10.4,1 L13.3971494,1 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n<ng-template #zoomOutTemplate>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>action/zoom-out</title>\n <desc>Created with Sketch.</desc>\n <g id=\"action/zoom-out\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M6.85,2.73225886e-13 C10.6331505,2.73225886e-13 13.7,3.06684946 13.7,6.85 C13.7,8.54194045 13.0865836,10.0906098 12.0700142,11.2857448 L15.4201976,14.5717081 C15.6567367,14.8037768 15.6603607,15.1836585 15.4282919,15.4201976 C15.1962232,15.6567367 14.8163415,15.6603607 14.5798024,15.4282919 L14.5798024,15.4282919 L11.2163456,12.128262 C10.0309427,13.1099691 8.50937591,13.7 6.85,13.7 C3.06684946,13.7 4.58522109e-14,10.6331505 4.58522109e-14,6.85 C4.58522109e-14,3.06684946 3.06684946,2.73225886e-13 6.85,2.73225886e-13 Z M6.85,1.2 C3.72959116,1.2 1.2,3.72959116 1.2,6.85 C1.2,9.97040884 3.72959116,12.5 6.85,12.5 C8.31753357,12.5 9.65438791,11.9404957 10.6588859,11.0231643 C10.6855412,10.9625408 10.7245275,10.9050898 10.7743982,10.8542584 C10.8288931,10.7987137 10.8915387,10.7560124 10.9585649,10.7261903 C11.9144009,9.71595758 12.5,8.35136579 12.5,6.85 C12.5,3.72959116 9.97040884,1.2 6.85,1.2 Z M4.6,6.2 L9.12944565,6.2 C9.4608165,6.2 9.72944565,6.46862915 9.72944565,6.8 C9.72944565,7.09823376 9.51185604,7.34564675 9.22676876,7.39214701 L9.12944565,7.4 L4.6,7.4 C4.26862915,7.4 4,7.13137085 4,6.8 C4,6.50176624 4.21758961,6.25435325 4.50267688,6.20785299 L4.6,6.2 L9.12944565,6.2 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n\n<ng-template #zoomInTemplate\n ><svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <title>action/zoom-in</title>\n <desc>Created with Sketch.</desc>\n <g id=\"action/zoom-in\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\">\n <path\n d=\"M6.85,-1.81188398e-13 C10.6331505,-1.81188398e-13 13.7,3.06684946 13.7,6.85 C13.7,8.54194045 13.0865836,10.0906098 12.0700142,11.2857448 L15.4201976,14.5717081 C15.6567367,14.8037768 15.6603607,15.1836585 15.4282919,15.4201976 C15.1962232,15.6567367 14.8163415,15.6603607 14.5798024,15.4282919 L14.5798024,15.4282919 L11.2163456,12.128262 C10.0309427,13.1099691 8.50937591,13.7 6.85,13.7 C3.06684946,13.7 4.61852778e-14,10.6331505 4.61852778e-14,6.85 C4.61852778e-14,3.06684946 3.06684946,-1.81188398e-13 6.85,-1.81188398e-13 Z M6.85,1.2 C3.72959116,1.2 1.2,3.72959116 1.2,6.85 C1.2,9.97040884 3.72959116,12.5 6.85,12.5 C8.31753357,12.5 9.65438791,11.9404957 10.6588859,11.0231643 C10.6855412,10.9625408 10.7245275,10.9050898 10.7743982,10.8542584 C10.8288931,10.7987137 10.8915387,10.7560124 10.9585649,10.7261903 C11.9144009,9.71595758 12.5,8.35136579 12.5,6.85 C12.5,3.72959116 9.97040884,1.2 6.85,1.2 Z M6.86472282,3.93527718 C7.16295659,3.93527718 7.41036958,4.15286679 7.45686984,4.43795406 L7.46472282,4.53527718 L7.464,6.19927718 L9.12944565,6.2 C9.42767941,6.2 9.6750924,6.41758961 9.72159266,6.70267688 L9.72944565,6.8 C9.72944565,7.09823376 9.51185604,7.34564675 9.22676876,7.39214701 L9.12944565,7.4 L7.464,7.39927718 L7.46472282,9.06472282 C7.46472282,9.36295659 7.24713321,9.61036958 6.96204594,9.65686984 L6.86472282,9.66472282 C6.56648906,9.66472282 6.31907607,9.44713321 6.27257581,9.16204594 L6.26472282,9.06472282 L6.264,7.39927718 L4.6,7.4 C4.30176624,7.4 4.05435325,7.18241039 4.00785299,6.89732312 L4,6.8 C4,6.50176624 4.21758961,6.25435325 4.50267688,6.20785299 L4.6,6.2 L6.264,6.19927718 L6.26472282,4.53527718 C6.26472282,4.2701805 6.43664548,4.0452385 6.67507642,3.96586557 L6.76739971,3.94313016 L6.86472282,3.93527718 Z\"\n id=\"形状结合\"\n fill-rule=\"nonzero\"\n ></path>\n </g>\n </svg>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { Selection } from '../../interfaces/selection';\nimport { createG } from '../../utils/dom';\nimport { Viewport } from '../../interfaces/viewport';\n\n@Component({\n selector: 'plait-element',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitElementComponent implements OnInit, OnChanges, OnDestroy {\n initialized = false;\n\n groupG!: SVGGElement;\n\n @Input() index!: number;\n\n @Input() element!: PlaitElement;\n\n @Input() board!: PlaitBoard;\n\n @Input() viewport!: Viewport;\n\n @Input() selection: Selection | null = null;\n\n @Input() host!: SVGElement;\n\n constructor(public renderer2: Renderer2, public viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.initialize();\n this.transform(true);\n this.drawElement();\n }\n\n initialize() {\n this.initialized = true;\n this.groupG = createG();\n this.renderer2.setAttribute(this.groupG, 'plait-element-group', this.index.toString());\n this.host.append(this.groupG);\n }\n\n transform(first = false) {\n if (first && this.viewport.offsetX === 0 && this.viewport.offsetY === 0) {\n return;\n }\n this.renderer2.setAttribute(this.groupG, 'transform', `translate(${this.viewport.offsetX} ${this.viewport.offsetY})`);\n }\n\n drawElement() {\n const gArray = this.board.drawElement({ elementInstance: this });\n gArray.forEach(g => {\n this.groupG.appendChild(g);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const viewport = changes['viewport'];\n if (this.initialized && viewport) {\n this.transform();\n }\n if (this.initialized) {\n this.board.redrawElement({ elementInstance: this }, changes);\n }\n }\n\n ngOnDestroy(): void {\n this.board.destroyElement();\n this.groupG.remove();\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { BaseCursorStatus } from '../interfaces';\nimport { PlaitBoardMove, PlaitBoard, PlaitBoardChangeEvent, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { PlaitPlugin } from '../interfaces/plugin';\nimport { Viewport } from '../interfaces/viewport';\nimport { createBoard } from '../plugins/create-board';\nimport { withBoard } from '../plugins/with-board';\nimport { withHistroy } from '../plugins/with-history';\nimport { withSelection } from '../plugins/with-selection';\nimport { Transforms } from '../transfroms';\nimport { getViewBox, transformViewZoom, transformZoom, updateCursorStatus } from '../utils/board';\nimport { BOARD_TO_ON_CHANGE, HOST_TO_ROUGH_SVG, IS_TEXT_EDITABLE } from '../utils/weak-maps';\n\n@Component({\n selector: 'plait-board',\n template: `\n <svg\n #svg\n width=\"100%\"\n height=\"100%\"\n style=\"position: relative\"\n [style.cursor]=\"isMoveMode ? (plaitBoardMove.isMoving ? 'grabbing' : 'grab') : 'auto'\"\n ></svg>\n <plait-toolbar\n *ngIf=\"isFocused && !toolbarTemplateRef\"\n [cursorStatus]=\"board.cursor\"\n [viewZoom]=\"viewZoom\"\n (moveHandle)=\"changeMoveMode($event)\"\n (adaptHandle)=\"adaptHandle()\"\n (zoomInHandle)=\"zoomInHandle()\"\n (zoomOutHandle)=\"zoomOutHandle()\"\n (resetZoomHandel)=\"resetZoomHandel()\"\n ></plait-toolbar>\n <plait-element\n *ngFor=\"let item of board.children; let index = index; trackBy: trackBy\"\n [index]=\"index\"\n [element]=\"item\"\n [board]=\"board\"\n [viewport]=\"board.viewport\"\n [selection]=\"board.selection\"\n [host]=\"host\"\n ></plait-element>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitBoardComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n hasInitialized = false;\n\n @HostBinding('class')\n get hostClass() {\n return `plait-board-container ${this.board.cursor}`;\n }\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$: Subject<any> = new Subject();\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n @ContentChild('plaitToolbar')\n public toolbarTemplateRef!: TemplateRef<any>;\n\n private _viewZoom: number = 100;\n\n public get viewZoom(): number {\n const vZoom = transformZoom(this.board.viewport.zoom);\n if (this._viewZoom !== vZoom) {\n this._viewZoom = vZoom;\n }\n return vZoom;\n }\n\n public plaitBoardMove: PlaitBoardMove = {\n isMoving: false,\n x: 0,\n y: 0\n };\n\n public get isMoveMode(): boolean {\n return this.board.cursor === BaseCursorStatus.move;\n }\n\n get host(): SVGElement {\n return this.svg.nativeElement;\n }\n\n get isFocused() {\n return this.board?.selection;\n }\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitReadonly = false;\n\n @Input() plaitAllowClearBoard = false;\n\n @Output() plaitChange: EventEmitter<PlaitBoardChangeEvent> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.plaitReadonly;\n }\n\n @HostBinding('class.focused')\n get focused() {\n return this.isFocused;\n }\n\n constructor(private cdr: ChangeDetectorRef, private elementRef: ElementRef, private renderer2: Renderer2) {}\n\n ngOnInit(): void {\n const roughSVG = rough.svg(this.host as SVGSVGElement, { options: { roughness: 0, strokeWidth: 1 } });\n HOST_TO_ROUGH_SVG.set(this.host, roughSVG);\n this.initializePlugins();\n this.initializeEvents();\n this.updateViewport();\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.cdr.detectChanges();\n const changeEvent: PlaitBoardChangeEvent = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection\n };\n // update viewBox\n if (this.board.operations.some(op => PlaitOperation.isSetViewportOperation(op))) {\n this.updateViewport();\n }\n this.plaitChange.emit(changeEvent);\n });\n this.hasInitialized = true;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const valueChange = changes['plaitValue'];\n if (valueChange && this.hasInitialized) {\n this.board.children = valueChange.currentValue;\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n }\n\n initializePlugins() {\n const options: PlaitBoardOptions = { readonly: this.plaitReadonly, allowClearBoard: this.plaitAllowClearBoard };\n let board = withHistroy(withSelection(withBoard(createBoard(this.host, this.plaitValue, options))));\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n }\n\n initializeEvents() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n this.setCursorStatus();\n this.isFocused && this.isMoveMode && this.initMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousemove(event);\n this.isFocused && this.isMoveMode && this.plaitBoardMove.isMoving && this.moving(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n this.isFocused && this.moveEnd();\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.dblclick(event);\n });\n\n fromEvent<WheelEvent>(this.host, 'wheel')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: WheelEvent) => {\n if (this.isFocused) {\n event.preventDefault();\n const viewport = this.board.viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n offsetX: viewport?.offsetX - event.deltaX,\n offsetY: viewport?.offsetY - event.deltaY\n });\n }\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keydown(event);\n if (this.isFocused && event.code === 'Space') {\n this.changeMoveMode(BaseCursorStatus.move);\n event.preventDefault();\n }\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyup(event);\n this.isFocused && !this.plaitReadonly && event.code === 'Space' && this.changeMoveMode(BaseCursorStatus.select);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: ClipboardEvent) => {\n this.board?.insertFragment(event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;\n })\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n this.board?.setFragment(event.clipboardData);\n this.board?.deleteFragment(event.clipboardData);\n });\n\n window.onresize = () => {\n this.refreshViewport();\n };\n }\n\n refreshViewport() {\n const viewBoxModel = getViewBox(this.board);\n const viewBoxValues = this.host.getAttribute('viewBox')?.split(',') as string[];\n this.renderer2.setAttribute(\n this.host,\n 'viewBox',\n `${viewBoxValues[0].trim()}, ${viewBoxValues[1].trim()}, ${viewBoxModel.width}, ${viewBoxModel.height}`\n );\n }\n\n updateViewport() {\n const viewBox = getViewBox(this.board);\n this.renderer2.setAttribute(this.host, 'viewBox', `${viewBox.minX}, ${viewBox.minY}, ${viewBox.width}, ${viewBox.height}`);\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return index;\n };\n\n setCursorStatus() {\n if (this.plaitReadonly) {\n this.changeMoveMode(BaseCursorStatus.move);\n } else if (!this.isFocused) {\n this.changeMoveMode(BaseCursorStatus.select);\n }\n }\n\n initMove(e: MouseEvent) {\n this.plaitBoardMove.isMoving = true;\n this.plaitBoardMove.x = e.x;\n this.plaitBoardMove.y = e.y;\n this.cdr.detectChanges();\n }\n\n moving(e: MouseEvent) {\n const viewport = this.board?.viewport as Viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n offsetX: viewport.offsetX + ((e.x - this.plaitBoardMove.x) * 100) / this._viewZoom,\n offsetY: viewport.offsetY + ((e.y - this.plaitBoardMove.y) * 100) / this._viewZoom\n });\n this.plaitBoardMove.x = e.x;\n this.plaitBoardMove.y = e.y;\n }\n\n moveEnd() {\n this.plaitBoardMove.isMoving = false;\n this.plaitBoardMove.x = 0;\n this.plaitBoardMove.y = 0;\n }\n\n // 拖拽模式\n changeMoveMode(cursorStatus: BaseCursorStatus) {\n updateCursorStatus(this.board, cursorStatus);\n this.cdr.markForCheck();\n }\n\n // 适应画布\n adaptHandle() {\n const viewport = this.board?.viewport as Viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n offsetX: 0,\n offsetY: 0\n });\n this.resetZoomHandel();\n }\n\n // 放大\n zoomInHandle() {\n if (this._viewZoom >= 400) {\n return;\n }\n this._viewZoom += 10;\n this.zoomChange();\n }\n\n // 缩小\n zoomOutHandle() {\n if (this._viewZoom <= 20) {\n return;\n }\n this._viewZoom -= 10;\n this.zoomChange();\n }\n\n resetZoomHandel() {\n this._viewZoom = 100;\n this.zoomChange();\n }\n\n zoomChange() {\n const viewport = this.board?.viewport as Viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n zoom: transformViewZoom(this._viewZoom)\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n HOST_TO_ROUGH_SVG.delete(this.host);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { PlaitBoardComponent } from './board/board.component';\nimport { PlaitElementComponent } from './core/element/element.component';\nimport { PlaitToolbarComponent } from './core/toolbar/toolbar.component';\n\nconst COMPONENTS = [PlaitBoardComponent, PlaitElementComponent, PlaitToolbarComponent];\n\n@NgModule({\n declarations: [...COMPONENTS],\n imports: [BrowserModule],\n exports: [...COMPONENTS]\n})\nexport class PlaitModule {}\n","export const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './plait.module';\nexport * from './utils';\nexport * from './transfroms';\nexport * from './interfaces';\nexport * from './core/base/detector';\nexport * from './core/element/element.component';\nexport * from './core/toolbar/toolbar.component';\nexport * from './constants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PlaitToolbarComponent","i2.PlaitElementComponent","i3"],"mappings":"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"}