@plait/mind 0.2.0-next.4 → 0.2.0-next.7

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-mind.mjs","sources":["../../../packages/mind/src/utils/weak-maps.ts","../../../packages/mind/src/constants/default.ts","../../../packages/mind/src/constants/node.ts","../../../packages/mind/src/utils/graph.ts","../../../packages/mind/src/queries/get-correct-layout-by-element.ts","../../../packages/mind/src/queries/get-branch-layouts.ts","../../../packages/mind/src/queries/get-available-sublayouts-by-element.ts","../../../packages/mind/src/queries/get-layout-parent-by-element.ts","../../../packages/mind/src/queries/get-layout-by-element.ts","../../../packages/mind/src/queries/index.ts","../../../packages/mind/src/interfaces/element.ts","../../../packages/mind/src/interfaces/node.ts","../../../packages/mind/src/interfaces/layout.ts","../../../packages/mind/src/interfaces/abstract.ts","../../../packages/mind/src/utils/layout.ts","../../../packages/mind/src/utils/node.ts","../../../packages/mind/src/utils/abstract/common.ts","../../../packages/mind/src/utils/mind.ts","../../../packages/mind/src/utils/shape.ts","../../../packages/mind/src/utils/node-style/branch.ts","../../../packages/mind/src/utils/node-style/node.ts","../../../packages/mind/src/utils/is-virtual-key.ts","../../../packages/mind/src/draw/link.ts","../../../packages/mind/src/utils/draw-placeholder.ts","../../../packages/mind/src/utils/direction-detector.ts","../../../packages/mind/src/utils/direction-corrector.ts","../../../packages/mind/src/utils/drop-target-corrector.ts","../../../packages/mind/src/utils/abstract/resize.ts","../../../packages/mind/src/draw/indented-link.ts","../../../packages/mind/src/interfaces/types.ts","../../../packages/mind/src/utils/point-placement.ts","../../../packages/mind/src/draw/link/logic-link.ts","../../../packages/mind/src/plugins/emoji/emoji.ts","../../../packages/mind/src/utils/node-space.ts","../../../packages/mind/src/draw/richtext.ts","../../../packages/mind/src/draw/shape.ts","../../../packages/mind/src/draw/link/abstract-link.ts","../../../packages/mind/src/plugins/emoji/emoji.drawer.ts","../../../packages/mind/src/transforms/layout.ts","../../../packages/mind/src/transforms/node.ts","../../../packages/mind/src/transforms/index.ts","../../../packages/mind/src/draw/abstract.ts","../../../packages/mind/src/drawer/base/base.ts","../../../packages/mind/src/utils/path.ts","../../../packages/mind/src/drawer/quick-insert.drawer.ts","../../../packages/mind/src/node.component.ts","../../../packages/mind/src/layout-option.ts","../../../packages/mind/src/mind.component.ts","../../../packages/mind/src/mind.module.ts","../../../packages/mind/src/plugins/with-dnd.ts","../../../packages/mind/src/utils/clipboard.ts","../../../packages/mind/src/plugins/emoji/with-mind-emoji.ts","../../../packages/mind/src/plugins/with-abstract.ts","../../../packages/mind/src/plugins/with-mind.ts","../../../packages/mind/src/plugins/emoji/emoji-base.component.ts","../../../packages/mind/src/public-api.ts","../../../packages/mind/src/plait-mind.ts"],"sourcesContent":["import { MindElement } from '../interfaces/element';\nimport { MindNode } from '../interfaces/node';\n\nexport const ELEMENT_TO_NODE = new WeakMap<MindElement, MindNode>();\n","export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const MINDMAP_KEY = 'plait-mindmap';\nexport const MAX_RADIUS = BASE * 4;\n\nexport const TRANSPARENT = 'transparent';\nexport const GRAY_COLOR = '#AAAAAA';\nexport const STROKE_WIDTH = 3;\n\nexport const EXTEND_OFFSET = 8;\nexport const EXTEND_RADIUS = 16;\n\nexport const QUICK_INSERT_CIRCLE_OFFSET = 9;\nexport const QUICK_INSERT_CIRCLE_COLOR = '#6698FF';\nexport const QUICK_INSERT_INNER_CROSS_COLOR = 'white';\n","export const TOPIC_COLOR = '#333';\nexport const TOPIC_FONT_SIZE = 14;\nexport const NODE_FILL = '#FFFFFF';\nexport const ROOT_NODE_FILL = '#F5F5F5';\nexport const ROOT_NODE_STROKE = '#F5F5F5';\nexport const ROOT_TOPIC_FONT_SIZE = 18;\nexport const NODE_MIN_WIDTH = 18;\n\nexport const COLORS = ['#A287E1', '#6F81DB', '#6EC4C4', '#DFB85D', '#B1C774', '#77C386', '#C28976', '#E48484', '#E482D4', '#69B1E4'];\n\nexport enum MindNodeShape {\n roundRectangle = 'round-rectangle',\n underline = 'underline'\n}\n\nexport const ABSTRACT_HANDLE_COLOR = '#6698FF80'; //PRIMARY_COLOR 50% 透明度\nexport const ABSTRACT_INCLUDED_OUTLINE_OFFSET = 3.5;\nexport const ABSTRACT_HANDLE_LENGTH = 10;\n\nexport const TOPIC_DEFAULT_MAX_WORD_COUNT = 34;\nexport const ABSTRACT_HANDLE_MASK_WIDTH = 8;\n","import { MindNode } from '../interfaces/node';\nimport { PlaitBoard, Point, RectangleClient, distanceBetweenPointAndRectangle } from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { ELEMENT_TO_NODE } from './weak-maps';\n\nexport function getRectangleByNode(node: MindNode): RectangleClient {\n const x = node.x + node.hGap;\n let y = node.y + node.vGap;\n const width = node.width - node.hGap * 2;\n const height = node.height - node.vGap * 2;\n return {\n x,\n y,\n width,\n height\n };\n}\n\nexport function hitMindElement(board: PlaitBoard, point: Point, element: MindElement) {\n const node = ELEMENT_TO_NODE.get(element);\n if (node && distanceBetweenPointAndRectangle(point[0], point[1], getRectangleByNode(node)) === 0) {\n return true;\n } else {\n return false;\n }\n}\n","import { PlaitElement } from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { MindNodeComponent } from '../node.component';\nimport { correctLayoutByDirection, findUpElement, getDefaultLayout, getInCorrectLayoutDirection } from '../utils';\nimport { AbstractNode, MindLayoutType, getAbstractLayout, isIndentedLayout, LayoutNode, isChildOfAbstract } from '@plait/layouts';\n\n/**\n * get correctly layout:\n * 1. root is standard -> left or right\n * 2. correct layout by incorrect layout direction\n * @param element\n */\nexport const getCorrectLayoutByElement = (element: MindElement) => {\n const { root } = findUpElement(element);\n const rootLayout = root.layout || getDefaultLayout();\n let correctRootLayout = rootLayout;\n\n if (element.isRoot) {\n return correctRootLayout;\n }\n\n const component = PlaitElement.getComponent(element) as MindNodeComponent;\n let layout = element.layout;\n\n let parentComponent: MindNodeComponent | null = null;\n let parent: MindElement | undefined = component.parent.origin;\n\n while (!layout && parent) {\n parentComponent = PlaitElement.getComponent(parent) as MindNodeComponent;\n layout = parentComponent.node.origin.layout;\n parent = parentComponent.parent?.origin;\n }\n if (\n (AbstractNode.isAbstract(element) || isChildOfAbstract((MindElement.getNode(element) as unknown) as LayoutNode)) &&\n isIndentedLayout(layout!)\n ) {\n return getAbstractLayout(layout!);\n }\n\n // handle root standard\n if (rootLayout === MindLayoutType.standard) {\n correctRootLayout = component?.node.left ? MindLayoutType.left : MindLayoutType.right;\n }\n\n if (parentComponent && parentComponent.node.origin.isRoot) {\n return correctRootLayout;\n }\n\n if (layout) {\n const incorrectDirection = getInCorrectLayoutDirection(correctRootLayout, layout);\n if (incorrectDirection) {\n return correctLayoutByDirection(layout, incorrectDirection);\n } else {\n return layout;\n }\n } else {\n return correctRootLayout;\n }\n};\n","import { MindElement } from '../interfaces';\nimport { findParentElement } from '../utils';\nimport { MindLayoutType } from '@plait/layouts';\nimport { getCorrectLayoutByElement } from './get-correct-layout-by-element';\n\nexport const getBranchLayouts = (element: MindElement) => {\n const layouts: MindLayoutType[] = [];\n if (element.layout) {\n //getCorrectLayoutByElement含有递归操作,getBranchMindmapLayouts本身也有递归操作,有待优化\n layouts.unshift(getCorrectLayoutByElement(element));\n }\n let parent = findParentElement(element);\n while (parent) {\n if (parent.layout) {\n layouts.unshift(parent.layout);\n }\n parent = findParentElement(parent);\n }\n return layouts;\n};\n","import { MindElement } from '../interfaces';\nimport {\n findParentElement,\n getAvailableSubLayoutsByLayoutDirections,\n getBranchDirectionsByLayouts,\n} from '../utils';\nimport { MindLayoutType } from '@plait/layouts';\nimport { getBranchLayouts } from './get-branch-layouts';\n\n/**\n * get available sub layouts by element\n * @param element\n * @returns MindLayoutType[]\n */\nexport const getAvailableSubLayoutsByElement = (element: MindElement) => {\n const parentElement = findParentElement(element);\n if (parentElement) {\n const branchLayouts = getBranchLayouts(parentElement);\n if (branchLayouts[0] === MindLayoutType.standard) {\n const node = MindElement.getNode(element);\n branchLayouts[0] = node.left ? MindLayoutType.left : MindLayoutType.right;\n }\n const currentLayoutDirections = getBranchDirectionsByLayouts(branchLayouts);\n let availableSubLayouts = getAvailableSubLayoutsByLayoutDirections(currentLayoutDirections);\n const parentLayout = [branchLayouts[branchLayouts.length - 1]];\n const parentDirections = getBranchDirectionsByLayouts(parentLayout);\n const parentAvailableSubLayouts = getAvailableSubLayoutsByLayoutDirections(parentDirections);\n\n availableSubLayouts = availableSubLayouts.filter(layout =>\n parentAvailableSubLayouts.some(parentAvailableSubLayout => parentAvailableSubLayout === layout)\n );\n return availableSubLayouts;\n }\n return undefined;\n};\n","import { MindElement } from '../interfaces';\nimport { findParentElement, getDefaultLayout } from '../utils';\nimport { MindLayoutType } from '@plait/layouts';\n\n/**\n * 获取父节点布局类型\n * @param element\n * @returns MindLayoutType\n */\nexport const getLayoutParentByElement = (element: MindElement): MindLayoutType => {\n let parent = findParentElement(element);\n while (parent) {\n if (parent.layout) {\n return parent.layout;\n }\n parent = findParentElement(parent);\n }\n return getDefaultLayout();\n};\n","import { MindElement } from '../interfaces';\nimport { AbstractNode, MindLayoutType, getAbstractLayout, isIndentedLayout, isChildOfAbstract, LayoutNode } from '@plait/layouts';\nimport { getLayoutParentByElement } from './get-layout-parent-by-element';\n\nexport const getLayoutByElement = (element: MindElement): MindLayoutType => {\n const layout = element.layout;\n if (layout) {\n return layout;\n }\n\n if (\n AbstractNode.isAbstract(element) ||\n (isChildOfAbstract((MindElement.getNode(element) as unknown) as LayoutNode) && isIndentedLayout(layout!))\n ) {\n const parentLayout = getLayoutParentByElement(element);\n return getAbstractLayout(parentLayout);\n }\n return getLayoutParentByElement(element);\n};\n","import { getAvailableSubLayoutsByElement } from './get-available-sublayouts-by-element';\nimport { getBranchLayouts } from './get-branch-layouts';\nimport { getCorrectLayoutByElement } from './get-correct-layout-by-element';\nimport { getLayoutByElement } from './get-layout-by-element';\nimport { getLayoutParentByElement } from './get-layout-parent-by-element';\n\nexport const MindQueries = {\n getAvailableSubLayoutsByElement,\n getLayoutParentByElement,\n getBranchLayouts,\n getLayoutByElement,\n getCorrectLayoutByElement\n};\n","import { MindNodeShape } from '../constants/node';\nimport { isIndentedLayout, MindLayoutType } from '@plait/layouts';\nimport { NODE_TO_PARENT, Path, PlaitBoard, PlaitElement, PlaitNode, Point } from '@plait/core';\nimport { MindQueries } from '../queries';\nimport { ELEMENT_TO_NODE } from '../utils';\nimport { BaseData, EmojiData } from './element-data';\n\nexport interface MindElement<T = BaseData> extends PlaitElement {\n data: T;\n children: MindElement[];\n rightNodeCount?: number;\n width: number;\n height: number;\n isRoot?: boolean;\n\n // node style attributes\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n shape?: MindNodeShape;\n\n // link style attributes\n branchColor?: string;\n branchWidth?: number;\n\n // layout\n layout?: MindLayoutType;\n isCollapsed?: boolean;\n\n start?: number;\n end?: number;\n}\n\nexport interface PlaitMind extends MindElement {\n type: 'mindmap';\n points: Point[];\n}\n\nexport const PlaitMind = {\n isMind: (value: any): value is PlaitMind => {\n return value.type === 'mindmap';\n }\n};\n\nexport const MindElement = {\n hasLayout(value: MindElement, layout: MindLayoutType) {\n const _layout = MindQueries.getLayoutByElement(value);\n return _layout === layout;\n },\n isIndentedLayout(value: MindElement) {\n const _layout = MindQueries.getLayoutByElement(value) as MindLayoutType;\n return isIndentedLayout(_layout);\n },\n isMindElement(board: PlaitBoard, element: PlaitElement): element is MindElement {\n const path = PlaitBoard.findPath(board, element);\n const rootElement = PlaitNode.get(board, path.slice(0, 1));\n if (PlaitMind.isMind(rootElement)) {\n return true;\n } else {\n return false;\n }\n },\n getParent(node: MindElement) {\n if (PlaitMind.isMind(node)) {\n throw new Error('mind root node can not get parent');\n }\n const parent = NODE_TO_PARENT.get(node) as MindElement;\n return parent;\n },\n getRoot(board: PlaitBoard, element: MindElement) {\n const path = PlaitBoard.findPath(board, element);\n return PlaitNode.get(board, path.slice(0, 1)) as PlaitMind;\n },\n getAncestors(board: PlaitBoard, element: MindElement) {\n const path = PlaitBoard.findPath(board, element);\n const parents: PlaitElement[] = [];\n for (const p of Path.ancestors(path, { reverse: true })) {\n const n = PlaitNode.get(board, p);\n if (n && !PlaitBoard.isBoard(n)) {\n parents.push(n);\n }\n }\n return parents;\n },\n getNode(element: MindElement) {\n const node = ELEMENT_TO_NODE.get(element);\n if (!node) {\n throw new Error(`can not get node from ${JSON.stringify(element)}`);\n }\n return node;\n },\n hasEmojis(element: MindElement): element is MindElement<EmojiData> {\n if (element.data.emojis) {\n return true;\n } else {\n return false;\n }\n },\n getEmojis(element: MindElement<EmojiData>) {\n return element.data.emojis;\n }\n};\n","import { MindLayoutType } from '@plait/layouts';\nimport { Path, PlaitElement, Point } from '@plait/core';\nimport { MindElement } from './element';\n\nexport interface MindNode {\n depth: number;\n x: number;\n y: number;\n width: number;\n height: number;\n hGap: number;\n vGap: number;\n children: MindNode[];\n origin: MindElement;\n parent: MindNode;\n left: boolean;\n up: boolean;\n}\n\nexport const MindNode = {\n get(root: MindNode, path: Path) {\n let node = root;\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n node = node.children[p];\n }\n return node;\n },\n isEquals(node: MindNode, otherNode: MindNode) {\n const hasSameSize =\n node.x === otherNode.x && node.y === otherNode.y && node.width === otherNode.width && node.height === otherNode.height;\n const hasSameOrigin = node.origin === otherNode.origin;\n let hasSameParentOriginChildren = false;\n if (node.parent && otherNode.parent) {\n hasSameParentOriginChildren = node.parent.origin.children == otherNode.parent.origin.children;\n }\n return hasSameSize && hasSameOrigin && hasSameParentOriginChildren;\n }\n};\n\n// mindmap node extend 支持的布局类型\nexport type ExtendLayoutType = Exclude<MindLayoutType, MindLayoutType.standard>;\n\nexport type CoordinateType = {\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n};\n\nexport type ExtendUnderlineCoordinateType = {\n [key in ExtendLayoutType]: CoordinateType;\n};\n\nexport type DetectResult = 'top' | 'bottom' | 'right' | 'left' | null;\n\nexport type RootBaseDirection = 'right' | 'left' | null;\n","import { MindLayoutType } from '@plait/layouts';\n\nexport enum LayoutDirection {\n 'top' = 'top',\n 'right' = 'right',\n 'bottom' = 'bottom',\n 'left' = 'left'\n}\n\nexport const LayoutDirectionsMap: LayoutDirectionMapType = {\n [MindLayoutType.right]: [LayoutDirection.right],\n [MindLayoutType.left]: [LayoutDirection.left],\n [MindLayoutType.upward]: [LayoutDirection.top],\n [MindLayoutType.downward]: [LayoutDirection.bottom],\n [MindLayoutType.rightBottomIndented]: [LayoutDirection.right, LayoutDirection.bottom],\n [MindLayoutType.rightTopIndented]: [LayoutDirection.right, LayoutDirection.top],\n [MindLayoutType.leftBottomIndented]: [LayoutDirection.left, LayoutDirection.bottom],\n [MindLayoutType.leftTopIndented]: [LayoutDirection.left, LayoutDirection.top]\n};\n\nexport type LayoutDirectionMapType = { [key: string]: LayoutDirection[] };\n","import { PlaitBoard } from '@plait/core';\n\nexport enum AbstractHandlePosition {\n start = 'start',\n end = 'end'\n}\n\nexport enum AbstractResizeState {\n start = 'start',\n resizing = 'resizing',\n end = 'end'\n}\n\nexport interface PlaitAbstractBoard extends PlaitBoard {\n abstractResize?: (state: AbstractResizeState) => void;\n}\n","import { LayoutDirection, LayoutDirectionsMap, MindElement } from '../interfaces';\nimport { isIndentedLayout, MindLayoutType } from '@plait/layouts';\n\nexport const getBranchDirectionsByLayouts = (branchLayouts: MindLayoutType[]) => {\n const branchDirections: LayoutDirection[] = [];\n branchLayouts.forEach(l => {\n const directions = LayoutDirectionsMap[l];\n directions.forEach(d => {\n if (!branchDirections.includes(d) && !branchDirections.includes(getLayoutReverseDirection(d))) {\n branchDirections.push(d);\n }\n });\n });\n return branchDirections;\n};\n\nexport const isCorrectLayout = (root: MindElement, layout: MindLayoutType) => {\n const rootLayout = root.layout || getDefaultLayout();\n return !getInCorrectLayoutDirection(rootLayout, layout);\n};\n\nexport const isMixedLayout = (parentLayout: MindLayoutType, layout: MindLayoutType) => {\n return (!isIndentedLayout(parentLayout) && isIndentedLayout(layout)) || (isIndentedLayout(parentLayout) && !isIndentedLayout(layout));\n};\n\nexport const getInCorrectLayoutDirection = (rootLayout: MindLayoutType, layout: MindLayoutType) => {\n const directions = LayoutDirectionsMap[rootLayout];\n const subLayoutDirections = LayoutDirectionsMap[layout];\n if (!subLayoutDirections) {\n throw new Error(`unexpected layout: ${layout} on correct layout`);\n }\n return subLayoutDirections.find(d => directions.includes(getLayoutReverseDirection(d)));\n};\n\nexport const correctLayoutByDirection = (layout: MindLayoutType, direction: LayoutDirection) => {\n const isHorizontal = direction === LayoutDirection.left || direction === LayoutDirection.right ? true : false;\n let inverseDirectionLayout = MindLayoutType.standard;\n switch (layout) {\n case MindLayoutType.left:\n inverseDirectionLayout = MindLayoutType.right;\n break;\n case MindLayoutType.right:\n inverseDirectionLayout = MindLayoutType.left;\n break;\n case MindLayoutType.downward:\n inverseDirectionLayout = MindLayoutType.upward;\n break;\n case MindLayoutType.upward:\n inverseDirectionLayout = MindLayoutType.downward;\n break;\n case MindLayoutType.rightBottomIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.leftBottomIndented : MindLayoutType.rightTopIndented;\n break;\n case MindLayoutType.leftBottomIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.rightBottomIndented : MindLayoutType.leftTopIndented;\n break;\n case MindLayoutType.rightTopIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.leftTopIndented : MindLayoutType.rightBottomIndented;\n break;\n case MindLayoutType.leftTopIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.rightTopIndented : MindLayoutType.leftBottomIndented;\n break;\n }\n return inverseDirectionLayout;\n};\n\nexport const getLayoutDirection = (root: MindElement) => {\n const layout = root.layout || getDefaultLayout();\n return LayoutDirectionsMap[layout];\n};\n\nexport const getDefaultLayout = () => {\n return MindLayoutType.standard;\n};\n\nexport const getAvailableSubLayoutsByLayoutDirections = (directions: LayoutDirection[]): MindLayoutType[] => {\n const result: MindLayoutType[] = [];\n const reverseDirections = directions.map(getLayoutReverseDirection);\n for (const key in MindLayoutType) {\n const layout = MindLayoutType[key as keyof typeof MindLayoutType];\n const layoutDirections = LayoutDirectionsMap[layout];\n if (layoutDirections) {\n const hasSameDirection = layoutDirections.some(d => directions.includes(d));\n const hasReverseDirection = layoutDirections.some(r => reverseDirections.includes(r));\n if (hasSameDirection && !hasReverseDirection) {\n result.push(layout);\n }\n }\n }\n return result;\n};\n\nexport const getLayoutReverseDirection = (layoutDirection: LayoutDirection) => {\n let reverseDirection = LayoutDirection.right;\n switch (layoutDirection) {\n case LayoutDirection.top:\n reverseDirection = LayoutDirection.bottom;\n break;\n case LayoutDirection.bottom:\n reverseDirection = LayoutDirection.top;\n break;\n case LayoutDirection.right:\n reverseDirection = LayoutDirection.left;\n break;\n case LayoutDirection.left:\n reverseDirection = LayoutDirection.right;\n break;\n }\n return reverseDirection;\n};\n\nexport const getRootLayout = (root: MindElement) => {\n return root.layout || getDefaultLayout();\n};\n","import { ELEMENT_TO_COMPONENT } from '@plait/core';\nimport { MindElement } from '../interfaces/element';\nimport { MindNodeComponent } from '../node.component';\n\nexport function enterNodeEditing(element: MindElement) {\n const component = ELEMENT_TO_COMPONENT.get(element) as MindNodeComponent;\n component.startEditText(false, false);\n}\n","import { AbstractNode, isStandardLayout } from '@plait/layouts';\nimport { MindElement } from '../../interfaces/element';\nimport { Path, PlaitBoard, PlaitElement, Transforms } from '@plait/core';\nimport { createMindElement, divideElementByParent, filterChildElement } from '../mind';\nimport { GRAY_COLOR } from '../../constants';\nimport { MindQueries } from '../../queries';\n\nexport const separateChildren = (parentElement: MindElement) => {\n const rightNodeCount = parentElement.rightNodeCount!;\n const children = parentElement.children;\n let rightChildren = [],\n leftChildren = [];\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (AbstractNode.isAbstract(child) && child.end < rightNodeCount) {\n rightChildren.push(child);\n continue;\n }\n if (AbstractNode.isAbstract(child) && child.start >= rightNodeCount) {\n leftChildren.push(child);\n continue;\n }\n\n if (i < rightNodeCount) {\n rightChildren.push(child);\n } else {\n leftChildren.push(child);\n }\n }\n\n return { leftChildren, rightChildren };\n};\n\nexport const isSetAbstract = (element: PlaitElement) => {\n return !!getCorrespondingAbstract(element as MindElement);\n};\n\nexport const canSetAbstract = (element: PlaitElement) => {\n return !PlaitElement.isRootElement(element) && !AbstractNode.isAbstract(element) && !isSetAbstract(element);\n};\n\nexport const setAbstract = (board: PlaitBoard, elements: PlaitElement[]) => {\n let elementGroup = filterChildElement(elements as MindElement[]);\n const { parentElements, abstractIncludedGroups } = divideElementByParent(elementGroup);\n\n abstractIncludedGroups.forEach((group, index) => {\n const groupParent = parentElements[index];\n setAbstractByElements(board, groupParent, group);\n });\n};\n\nexport const setAbstractByElements = (board: PlaitBoard, groupParent: MindElement, group: MindElement[]) => {\n const indexArray = group.map(child => groupParent!.children.indexOf(child)).sort((a, b) => a - b);\n const rightNodeCount = groupParent?.rightNodeCount;\n const start = indexArray[0],\n end = indexArray[indexArray.length - 1];\n\n if (\n isStandardLayout(MindQueries.getLayoutByElement(groupParent)) &&\n rightNodeCount &&\n start < rightNodeCount &&\n end >= rightNodeCount\n ) {\n const childrenLength = groupParent.children.length;\n const path = [...PlaitBoard.findPath(board, groupParent), childrenLength];\n const leftChildren = indexArray.filter(index => index >= rightNodeCount);\n const rightChildren = indexArray.filter(index => index < rightNodeCount);\n\n insertAbstractNode(board, path, rightChildren[0], rightChildren[rightChildren.length - 1]);\n insertAbstractNode(board, Path.next(path), leftChildren[0], leftChildren[leftChildren.length - 1]);\n } else {\n const path = [...PlaitBoard.findPath(board, groupParent), groupParent.children.length];\n\n insertAbstractNode(board, path, start, end);\n }\n};\n\nexport const insertAbstractNode = (board: PlaitBoard, path: Path, start: number, end: number) => {\n const mindElement = createMindElement('概要', 28, 20, {\n strokeColor: GRAY_COLOR,\n branchColor: GRAY_COLOR\n });\n\n mindElement.start = start;\n mindElement.end = end;\n\n Transforms.insertNode(board, mindElement, path);\n};\n\nexport const handleAbstractIncluded = (board: PlaitBoard, element: MindElement) => {\n const rightNodeCount = element.rightNodeCount!;\n const abstract = element.children.find(child => {\n return AbstractNode.isAbstract(child) && child.end >= rightNodeCount && child.start < rightNodeCount;\n });\n\n if (abstract) {\n const path = PlaitBoard.findPath(board, abstract);\n Transforms.setNode(board, { end: rightNodeCount - 1 }, path);\n }\n};\n\nexport const getCorrespondingAbstract = (element: MindElement) => {\n const parent = MindElement.getParent(element);\n if (!parent) return undefined;\n\n const elementIndex = parent.children.indexOf(element);\n return parent.children.find(child => {\n return AbstractNode.isAbstract(child) && elementIndex >= child.start! && elementIndex <= child.end!;\n });\n};\n\nexport const getBehindAbstracts = (element: MindElement) => {\n const parent = MindElement.getParent(element);\n const index = parent.children.indexOf(element);\n return parent.children.filter(child => AbstractNode.isAbstract(child) && child.start! > index);\n};\n\nexport const insertSiblingElementHandleAbstract = (board: PlaitBoard, selectedElement: MindElement) => {\n const abstract = getCorrespondingAbstract(selectedElement);\n if (abstract) {\n PlaitBoard.findPath(board, abstract);\n Transforms.setNode(board, { end: abstract.end! + 1 }, PlaitBoard.findPath(board, abstract));\n }\n\n const abstracts = getBehindAbstracts(selectedElement);\n if (abstracts.length) {\n moveAbstractPosition(board, abstracts, 1);\n }\n};\n\nexport const moveAbstractPosition = (board: PlaitBoard, abstracts: MindElement[], step: number) => {\n abstracts.forEach(abstract => {\n Transforms.setNode(board, { start: abstract.start! + step, end: abstract.end! + step }, PlaitBoard.findPath(board, abstract));\n });\n};\n","import { AbstractNode, MindLayoutType } from '@plait/layouts';\nimport {\n addSelectedElement,\n clearSelectedElement,\n idCreator,\n isNullOrUndefined,\n Path,\n PlaitBoard,\n PlaitElement,\n Point,\n Transforms\n} from '@plait/core';\nimport { Node } from 'slate';\nimport { MindNodeShape, NODE_MIN_WIDTH, ROOT_TOPIC_FONT_SIZE, TOPIC_DEFAULT_MAX_WORD_COUNT } from '../constants/node';\nimport { MindNode, PlaitMind } from '../interfaces';\nimport { MindElement } from '../interfaces/element';\nimport { getRootLayout } from './layout';\nimport { TEXT_DEFAULT_HEIGHT, getSizeByText, ROOT_DEFAULT_HEIGHT } from '@plait/richtext';\nimport { enterNodeEditing } from './node';\nimport { MindNodeComponent } from '../node.component';\nimport { getBehindAbstracts, getCorrespondingAbstract } from './abstract/common';\n\nexport function findParentElement(element: MindElement): MindElement | undefined {\n const component = PlaitElement.getComponent(element) as MindNodeComponent;\n if (component && component.parent) {\n return component.parent.origin;\n }\n return undefined;\n}\n\nexport function findUpElement(element: MindElement): { root: MindElement; branch?: MindElement } {\n let branch;\n let root = element;\n let parent = findParentElement(element);\n while (parent) {\n branch = root;\n root = parent;\n parent = findParentElement(parent);\n }\n return { root, branch };\n}\n\nexport const getChildrenCount = (element: MindElement) => {\n const count: number = element.children.reduce((p: number, c: MindElement) => {\n return p + getChildrenCount(c);\n }, 0);\n return count + element.children.length;\n};\n\nexport const isChildElement = (origin: MindElement, child: MindElement) => {\n let parent = findParentElement(child);\n while (parent) {\n if (parent === origin) {\n return true;\n }\n parent = findParentElement(parent);\n }\n return false;\n};\n\nexport const filterChildElement = (elements: MindElement[]) => {\n let result: MindElement[] = [];\n elements.forEach(element => {\n const isChild = elements.some(node => {\n return isChildElement(node, element);\n });\n\n if (!isChild) {\n result.push(element);\n }\n });\n return result;\n};\n\nexport const isChildRight = (node: MindNode, child: MindNode) => {\n return node.x < child.x;\n};\n\nexport const isChildUp = (node: MindNode, child: MindNode) => {\n return node.y > child.y;\n};\n\nexport const copyNewNode = (node: MindElement) => {\n const newNode: MindElement = { ...node };\n newNode.id = idCreator();\n newNode.children = [];\n\n for (const childNode of node.children) {\n newNode.children.push(copyNewNode(childNode));\n }\n return newNode;\n};\n\nexport const transformRootToNode = (board: PlaitBoard, node: MindElement) => {\n const newNode: MindElement = { ...node };\n delete newNode.isRoot;\n delete newNode.rightNodeCount;\n delete newNode.type;\n\n const text = Node.string(node.data.topic.children[0]) || ' ';\n const { width, height } = getSizeByText(text, PlaitBoard.getViewportContainer(board), TOPIC_DEFAULT_MAX_WORD_COUNT);\n\n newNode.width = Math.max(width, NODE_MIN_WIDTH);\n newNode.height = height;\n\n if (newNode.layout === MindLayoutType.standard) {\n delete newNode.layout;\n }\n\n return newNode;\n};\n\nexport const transformAbstractToNode = (node: MindElement) => {\n const newNode: MindElement = { ...node };\n delete newNode.start;\n delete newNode.end;\n\n return newNode;\n};\n\nexport const transformNodeToRoot = (board: PlaitBoard, node: MindElement): MindElement => {\n const newElement = { ...node };\n let text = Node.string(newElement.data.topic);\n\n if (!text) {\n text = '思维导图';\n newElement.data.topic = { children: [{ text }] };\n }\n\n delete newElement?.strokeColor;\n delete newElement?.fill;\n delete newElement?.shape;\n delete newElement?.strokeWidth;\n\n const { width, height } = getSizeByText(\n text,\n PlaitBoard.getViewportContainer(board),\n TOPIC_DEFAULT_MAX_WORD_COUNT,\n ROOT_TOPIC_FONT_SIZE\n );\n newElement.width = Math.max(width, NODE_MIN_WIDTH);\n newElement.height = height;\n\n return {\n ...newElement,\n layout: newElement.layout ?? MindLayoutType.right,\n isCollapsed: false,\n isRoot: true,\n type: 'mindmap'\n };\n};\n\nexport const extractNodesText = (node: MindElement) => {\n let str = '';\n if (node) {\n str += Node.string(node.data.topic.children[0]) + ' ';\n for (const childNode of node.children) {\n str += extractNodesText(childNode);\n }\n }\n return str;\n};\n\nexport const changeRightNodeCount = (board: PlaitBoard, parentPath: Path, changeNumber: number) => {\n const _rightNodeCount = board.children[parentPath[0]].rightNodeCount;\n Transforms.setNode(\n board,\n {\n rightNodeCount:\n changeNumber >= 0\n ? _rightNodeCount! + changeNumber\n : _rightNodeCount! + changeNumber < 0\n ? 0\n : _rightNodeCount! + changeNumber\n },\n parentPath\n );\n};\n\nexport const shouldChangeRightNodeCount = (selectedElement: MindElement) => {\n const parentElement = findParentElement(selectedElement);\n if (parentElement) {\n const nodeIndex: number = parentElement.children.findIndex(item => item.id === selectedElement.id);\n if (\n parentElement.isRoot &&\n getRootLayout(parentElement) === MindLayoutType.standard &&\n parentElement.rightNodeCount &&\n nodeIndex <= parentElement.rightNodeCount - 1\n ) {\n return true;\n }\n }\n return false;\n};\n\nexport const createDefaultMindMapElement = (point: Point, rightNodeCount: number, layout: MindLayoutType) => {\n const root = createMindElement('思维导图', 72, ROOT_DEFAULT_HEIGHT, { shape: MindNodeShape.roundRectangle, layout });\n root.rightNodeCount = rightNodeCount;\n root.isRoot = true;\n root.type = 'mindmap';\n root.points = [point];\n const children = [1, 1, 1].map(() => {\n return createMindElement('新建节点', 56, TEXT_DEFAULT_HEIGHT, { shape: MindNodeShape.roundRectangle });\n });\n root.children = children;\n return root;\n};\n\nexport const createMindElement = (\n text: string,\n width: number,\n height: number,\n options: {\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n shape?: MindNodeShape;\n layout?: MindLayoutType;\n branchColor?: string;\n }\n) => {\n const newElement: MindElement = {\n id: idCreator(),\n data: {\n topic: { children: [{ text }] }\n },\n children: [],\n width,\n height,\n fill: options.fill,\n strokeColor: options.strokeColor,\n strokeWidth: options.strokeWidth,\n shape: options.shape\n };\n if (options.fill) {\n newElement.fill = options.fill;\n }\n if (options.strokeColor) {\n newElement.strokeColor = options.strokeColor;\n }\n if (!isNullOrUndefined(options.strokeWidth)) {\n newElement.strokeWidth = options.strokeWidth;\n }\n if (options.shape) {\n newElement.shape = options.shape;\n }\n if (options.layout) {\n newElement.layout = options.layout;\n }\n if (options.branchColor) {\n newElement.branchColor = options.branchColor;\n }\n return newElement;\n};\n\n// layoutLevel 用来表示插入兄弟节点还是子节点\nexport const insertMindElement = (board: PlaitBoard, inheritNode: MindElement, path: Path) => {\n let fill,\n strokeColor,\n strokeWidth,\n shape = MindNodeShape.roundRectangle;\n if (!inheritNode.isRoot) {\n fill = inheritNode.fill;\n strokeColor = inheritNode.strokeColor;\n strokeWidth = inheritNode.strokeWidth;\n }\n\n shape = inheritNode.shape as MindNodeShape;\n\n const newElement = createMindElement('', NODE_MIN_WIDTH, TEXT_DEFAULT_HEIGHT, { fill, strokeColor, strokeWidth, shape });\n\n Transforms.insertNode(board, newElement, path);\n clearSelectedElement(board);\n addSelectedElement(board, newElement);\n setTimeout(() => {\n enterNodeEditing(newElement);\n });\n};\n\nexport const findLastChild = (child: MindNode) => {\n let result = child;\n while (result.children.length !== 0) {\n result = result.children[result.children.length - 1];\n }\n return result;\n};\n\nexport const deleteSelectedELements = (board: PlaitBoard, selectedElements: MindElement[]) => {\n //翻转,从下到上修改,防止找不到 path\n const deletableElements = filterChildElement(selectedElements).reverse();\n const relativeAbstracts: MindElement[] = [];\n const accumulativeProperties = new WeakMap<MindElement, { start: number; end: number }>();\n\n deletableElements.forEach(node => {\n if (!PlaitMind.isMind(node)) {\n const behindAbstracts = getBehindAbstracts(node).filter(abstract => !deletableElements.includes(abstract));\n if (behindAbstracts.length) {\n behindAbstracts.forEach(abstract => {\n let newProperties = accumulativeProperties.get(abstract);\n if (!newProperties) {\n newProperties = { start: abstract.start!, end: abstract.end! };\n accumulativeProperties.set(abstract, newProperties);\n relativeAbstracts.push(abstract);\n }\n newProperties.start = newProperties.start - 1;\n newProperties.end = newProperties.end - 1;\n });\n }\n\n const correspondingAbstract = getCorrespondingAbstract(node);\n if (correspondingAbstract && !deletableElements.includes(correspondingAbstract)) {\n let newProperties = accumulativeProperties.get(correspondingAbstract);\n if (!newProperties) {\n newProperties = { start: correspondingAbstract.start!, end: correspondingAbstract.end! };\n accumulativeProperties.set(correspondingAbstract, newProperties);\n relativeAbstracts.push(correspondingAbstract);\n }\n newProperties.end = newProperties.end - 1;\n }\n }\n });\n\n const abstractHandles = relativeAbstracts.map(value => {\n const newProperties = accumulativeProperties.get(value);\n if (newProperties) {\n const path = PlaitBoard.findPath(board, value as MindElement);\n return () => {\n if (newProperties.start > newProperties.end) {\n Transforms.removeNode(board, path);\n } else {\n Transforms.setNode(board, newProperties, path);\n }\n };\n }\n return () => {};\n });\n\n const deletableHandles = deletableElements.map(node => {\n const path = PlaitBoard.findPath(board, node);\n return () => {\n if (shouldChangeRightNodeCount(node)) {\n changeRightNodeCount(board, path.slice(0, path.length - 1), -1);\n }\n Transforms.removeNode(board, path);\n };\n });\n\n abstractHandles.forEach(action => action());\n deletableHandles.forEach(action => action());\n};\n\nexport const divideElementByParent = (elements: MindElement[]) => {\n const abstractIncludedGroups = [];\n const parentElements: MindElement[] = [];\n\n for (let i = 0; i < elements.length; i++) {\n const parent = MindElement.getParent(elements[i]);\n const parentIndex = parentElements.indexOf(parent);\n if (parentIndex === -1) {\n parentElements.push(parent);\n abstractIncludedGroups.push([elements[i]]);\n } else {\n abstractIncludedGroups[parentIndex].push(elements[i]);\n }\n }\n return { parentElements, abstractIncludedGroups };\n};\n","import { MindNodeShape } from '../constants';\nimport { MindElement } from '../interfaces';\nimport { findParentElement } from './mind';\n\nexport const getNodeShapeByElement = (element: MindElement): MindNodeShape => {\n let nodeShape = element.shape;\n if (nodeShape) {\n return nodeShape;\n }\n let parent = findParentElement(element);\n\n while (parent) {\n if (parent.shape) {\n return parent.shape;\n }\n parent = findParentElement(parent);\n }\n return MindNodeShape.roundRectangle;\n};\n","/**\n * Processing of branch color, width, style, etc. of the mind node\n */\nimport { PlaitBoard, PlaitNode } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { COLORS } from '../../constants/node';\n\nexport const getBranchColorByMindElement = (board: PlaitBoard, element: MindElement) => {\n const ancestors = MindElement.getAncestors(board, element) as MindElement[];\n ancestors.unshift(element);\n const ancestor = ancestors.find(value => value.branchColor);\n if (ancestor && ancestor.branchColor) {\n return ancestor.branchColor;\n }\n\n const root = ancestors[ancestors.length - 1];\n const branch = ancestors[ancestors.length - 2];\n if (branch) {\n const index = root.children.indexOf(branch);\n const length = COLORS.length;\n const remainder = index % length;\n return COLORS[remainder];\n } else {\n throw new Error('root element should not have branch color');\n }\n};\n\nexport const getNextBranchColor = (root: MindElement) => {\n const index = root.children.length;\n const length = COLORS.length;\n const remainder = index % length;\n return COLORS[remainder];\n};\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { COLORS, ROOT_NODE_STROKE } from '../../constants/node';\n\nexport const getStrokeByMindElement = (board: PlaitBoard, element: MindElement) => {\n const ancestors = MindElement.getAncestors(board, element) as MindElement[];\n ancestors.unshift(element);\n const ancestor = ancestors.find(value => value.strokeColor);\n if (ancestor && ancestor.strokeColor) {\n return ancestor.branchColor;\n }\n\n const root = ancestors[ancestors.length - 1];\n const branch = ancestors[ancestors.length - 2];\n if (branch) {\n const index = root.children.indexOf(branch);\n const length = COLORS.length;\n const remainder = index % length;\n return COLORS[remainder];\n } else {\n return ROOT_NODE_STROKE;\n }\n};\n","import { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n","import { pointsOnBezierCurves } from 'points-on-curve';\nimport { MindNodeShape, STROKE_WIDTH } from '../constants';\nimport { MindNode } from '../interfaces/node';\nimport { PlaitBoard, Point } from '@plait/core';\nimport { getNodeShapeByElement, isChildRight } from '../utils';\nimport { MindLayoutType, isTopLayout, isIndentedLayout, isStandardLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { getBranchColorByMindElement } from '../utils/node-style/branch';\n\nexport function drawLink(\n board: PlaitBoard,\n node: MindNode,\n child: MindNode,\n defaultStroke: string | null = null,\n isHorizontal = true,\n needDrawUnderline = true\n) {\n let beginX,\n beginY,\n endX,\n endY,\n beginNode = node,\n endNode = child;\n const layout = MindQueries.getCorrectLayoutByElement(node.origin) as MindLayoutType;\n if (isHorizontal) {\n if (!isChildRight(node, child)) {\n beginNode = child;\n endNode = node;\n }\n beginX = beginNode.x + beginNode.width - beginNode.hGap;\n beginY = beginNode.y + beginNode.height / 2;\n endX = endNode.x + endNode.hGap;\n endY = endNode.y + endNode.height / 2;\n\n if (\n node.parent &&\n isIndentedLayout(MindQueries.getLayoutByElement(node.parent?.origin)) &&\n (getNodeShapeByElement(node.origin) as MindNodeShape) === MindNodeShape.underline\n ) {\n if (isChildRight(node, child)) {\n beginY = node.y + node.height - node.vGap;\n } else {\n endY = node.y + node.height - node.vGap;\n }\n }\n } else {\n if (node.y > child.y) {\n beginNode = child;\n endNode = node;\n }\n beginX = beginNode.x + beginNode.width / 2;\n beginY = beginNode.y + beginNode.height - beginNode.vGap;\n endX = endNode.x + endNode.width / 2;\n endY = endNode.y + endNode.vGap;\n }\n\n const stroke = defaultStroke || getBranchColorByMindElement(board, child.origin);\n const strokeWidth = child.origin.branchWidth ? child.origin.branchWidth : STROKE_WIDTH;\n if (endNode.origin.isRoot) {\n if (layout === MindLayoutType.left || isStandardLayout(layout)) {\n endX -= strokeWidth;\n }\n if (layout === MindLayoutType.upward) {\n endY -= strokeWidth;\n }\n }\n if (beginNode.origin.isRoot) {\n if (layout === MindLayoutType.right || isStandardLayout(layout)) {\n beginX += strokeWidth;\n }\n if (layout === MindLayoutType.downward) {\n beginY += strokeWidth;\n }\n }\n if (isHorizontal) {\n let curve: Point[] = [\n [beginX, beginY],\n [beginX + (beginNode.hGap + endNode.hGap) / 3, beginY],\n [endX - (beginNode.hGap + endNode.hGap) / 2, endY],\n [endX, endY]\n ];\n const shape = getNodeShapeByElement(child.origin) as MindNodeShape;\n\n if (!node.origin.isRoot) {\n if (node.x > child.x) {\n curve = [\n [beginX, beginY],\n [beginX + (beginNode.hGap + endNode.hGap) / 3, beginY],\n [endX - (beginNode.hGap + endNode.hGap) / 2, endY],\n [endX - 12, endY]\n ];\n const line = [\n [endX - 12, endY],\n [endX - 12, endY],\n [endX, endY]\n ] as Point[];\n curve = [...curve, ...line];\n } else {\n curve = [\n [beginX + 12, beginY],\n [beginX + (beginNode.hGap + endNode.hGap) / 2, beginY],\n [endX - (beginNode.hGap + endNode.hGap) / 3, endY],\n [endX, endY]\n ];\n const line = [\n [beginX, beginY],\n [beginX + 12, beginY],\n [beginX + 12, beginY]\n ] as Point[];\n curve = [...line, ...curve];\n }\n }\n\n if (needDrawUnderline && shape === MindNodeShape.underline) {\n if (child.left) {\n const underline = [\n [beginX - (beginNode.width - beginNode.hGap * 2), beginY],\n [beginX - (beginNode.width - beginNode.hGap * 2), beginY],\n [beginX - (beginNode.width - beginNode.hGap * 2), beginY]\n ] as Point[];\n curve = [...underline, ...curve];\n } else {\n const underline = [\n [endX + (endNode.width - endNode.hGap * 2), endY],\n [endX + (endNode.width - endNode.hGap * 2), endY],\n [endX + (endNode.width - endNode.hGap * 2), endY]\n ] as Point[];\n curve = [...curve, ...underline];\n }\n }\n\n const points = pointsOnBezierCurves(curve);\n return PlaitBoard.getRoughSVG(board).curve(points as any, { stroke, strokeWidth });\n } else {\n let curve: Point[] = [\n [beginX, beginY],\n [beginX, beginY + (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY - (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY]\n ];\n\n if (!node.origin.isRoot) {\n if (isTopLayout(layout)) {\n curve = [\n [beginX, beginY],\n [beginX, beginY + (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY - (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY - 12]\n ];\n\n const line = [\n [endX, endY - 12],\n [endX, endY - 12],\n [endX, endY]\n ] as Point[];\n curve = [...curve, ...line];\n } else {\n curve = [\n [beginX, beginY + 12],\n [beginX, beginY + (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY - (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY]\n ];\n const line = [\n [beginX, beginY],\n [beginX, beginY + 12],\n [beginX, beginY + 12]\n ] as Point[];\n\n curve = [...line, ...curve];\n }\n }\n const points = pointsOnBezierCurves(curve);\n return PlaitBoard.getRoughSVG(board).curve(points as any, { stroke, strokeWidth });\n }\n}\n","import { BASE, PRIMARY_COLOR, STROKE_WIDTH } from '../constants';\nimport { drawLink } from '../draw/link';\nimport { DetectResult, MindElement, MindNode } from '../interfaces';\nimport { MindNodeComponent } from '../node.component';\nimport { getRectangleByNode } from './graph';\nimport { PlaitBoard, PlaitElement, Point, drawRoundRectangle } from '@plait/core';\nimport { MindQueries } from '../queries';\nimport {\n isBottomLayout,\n isHorizontalLayout,\n isHorizontalLogicLayout,\n isIndentedLayout,\n isRightLayout,\n isVerticalLogicLayout,\n MindLayoutType\n} from '@plait/layouts';\nimport { drawIndentedLink } from '../draw/indented-link';\nimport { isLeftLayout, isTopLayout } from '@plait/layouts';\nimport { isStandardLayout } from '@plait/layouts';\nimport { isMixedLayout } from './layout';\n\nexport const drawPlaceholderDropNodeG = (\n board: PlaitBoard,\n dropTarget: { target: MindElement; detectResult: DetectResult },\n fakeDropNodeG: SVGGElement | undefined\n) => {\n const targetComponent = PlaitElement.getComponent(dropTarget.target) as MindNodeComponent;\n const targetRect = getRectangleByNode(targetComponent.node);\n if (dropTarget.detectResult && ['right', 'left'].includes(dropTarget.detectResult)) {\n drawStraightDropNodeG(board, targetRect, dropTarget.detectResult, targetComponent, fakeDropNodeG);\n }\n\n if (targetComponent.parent && dropTarget.detectResult && ['top', 'bottom'].includes(dropTarget.detectResult)) {\n const parentComponent = PlaitElement.getComponent(targetComponent.parent.origin) as MindNodeComponent;\n const targetIndex = parentComponent.node.origin.children.indexOf(targetComponent.node.origin);\n drawCurvePlaceholderDropNodeG(\n board,\n targetRect,\n dropTarget.detectResult,\n targetIndex,\n targetComponent,\n parentComponent,\n fakeDropNodeG\n );\n }\n};\n\nexport const drawCurvePlaceholderDropNodeG = (\n board: PlaitBoard,\n targetRect: {\n x: number;\n y: number;\n width: number;\n height: number;\n },\n detectResult: DetectResult,\n targetIndex: number,\n targetComponent: MindNodeComponent,\n parentComponent: MindNodeComponent,\n fakeDropNodeG: SVGGElement | undefined\n) => {\n const parentNodeLayout = MindQueries.getCorrectLayoutByElement(parentComponent.node.origin);\n const layout = MindQueries.getCorrectLayoutByElement(targetComponent.node.parent.origin);\n const strokeWidth = targetComponent.node.origin.branchWidth ? targetComponent.node.origin.branchWidth : STROKE_WIDTH;\n let fakeX = targetComponent.node.x,\n fakeY = targetRect.y - 30,\n fakeRectangleStartX = targetRect.x,\n fakeRectangleEndX = targetRect.x + 30,\n fakeRectangleStartY = fakeY,\n fakeRectangleEndY = fakeRectangleStartY + 12,\n width = 30;\n\n if (isLeftLayout(layout)) {\n fakeX = targetComponent.node.x + targetComponent.node.width - 30;\n fakeRectangleStartX = targetRect.x + targetRect.width - 30;\n fakeRectangleEndX = targetRect.x + targetRect.width;\n }\n if (isHorizontalLogicLayout(parentNodeLayout)) {\n fakeY = getHorizontalFakeY(detectResult as 'top' | 'bottom', targetIndex, parentComponent.node, targetRect, layout, fakeY);\n if (isStandardLayout(parentNodeLayout)) {\n const rightNodeCount = parentComponent.node.origin.rightNodeCount || 0;\n const idx = parentComponent.node.children.findIndex(x => x === targetComponent.node);\n const isLeft = idx >= rightNodeCount;\n // 标准布局的左,需要调整 x\n if (isLeft) {\n fakeX = targetComponent.node.x + targetComponent.node.width - 30;\n fakeRectangleStartX = targetRect.x + targetRect.width - 30;\n fakeRectangleEndX = targetRect.x + targetRect.width;\n }\n const isLeftFirst = idx === rightNodeCount;\n const isRightLast = idx === rightNodeCount - 1;\n // 拖拽至左第一个节点的情况\n if (detectResult === 'top' && isLeftFirst) {\n fakeY = targetRect.y - targetRect.height;\n }\n if (detectResult === 'bottom' && isRightLast) {\n fakeY = targetRect.y + targetRect.height + 30;\n }\n }\n fakeRectangleStartY = fakeY;\n fakeRectangleEndY = fakeRectangleStartY + 12;\n }\n\n if (isVerticalLogicLayout(layout)) {\n parentComponent = targetComponent;\n targetComponent = PlaitElement.getComponent(targetComponent.parent.origin) as MindNodeComponent;\n fakeX = parentComponent.node.x;\n width = parentComponent.node.width;\n const vGap = BASE * 6 + strokeWidth;\n if (isTopLayout(layout) && detectResult === 'top') {\n fakeY = targetRect.y - vGap;\n fakeRectangleStartY = fakeY - vGap + strokeWidth;\n }\n if (isBottomLayout(layout) && detectResult === 'bottom') {\n fakeY = targetRect.y + targetRect.height + vGap;\n fakeRectangleStartY = fakeY + vGap - strokeWidth;\n }\n fakeRectangleStartX = fakeX + Math.ceil(parentComponent.node.width / 2) - parentComponent.node.hGap - Math.ceil(strokeWidth / 2);\n fakeRectangleEndX = fakeRectangleStartX + 30;\n fakeRectangleEndY = fakeRectangleStartY + 12;\n }\n if (isIndentedLayout(layout)) {\n // 偏移一个 Gap\n if (isLeftLayout(layout)) {\n fakeX -= BASE * 4;\n }\n if (isRightLayout(layout)) {\n fakeX += BASE * 4;\n }\n if (isTopLayout(layout)) {\n if (detectResult === 'top') {\n const isLastNode = targetIndex === parentComponent.node.origin.children.length - 1;\n if (isLastNode) {\n fakeY = targetRect.y - targetRect.height - BASE;\n } else {\n const nextComponent = PlaitElement.getComponent(\n parentComponent.node.origin.children[targetIndex + 1]\n ) as MindNodeComponent;\n const nextRect = getRectangleByNode(nextComponent.node);\n fakeY = targetRect.y - Math.abs((nextRect.y + nextRect.height - targetRect.y) / 2);\n }\n }\n if (detectResult === 'bottom') {\n const isFirstNode = targetIndex === 0;\n if (isFirstNode) {\n const parentRect = getRectangleByNode(parentComponent.node);\n fakeY = parentRect.y - parentRect.height / 2 - BASE;\n } else {\n const previousComponent = PlaitElement.getComponent(\n parentComponent.node.origin.children[targetIndex + 1]\n ) as MindNodeComponent;\n const previousRect = getRectangleByNode(previousComponent.node);\n fakeY = previousRect.y - Math.abs((targetRect.y + targetRect.height - previousRect.y) / 2);\n }\n }\n }\n fakeRectangleStartX = fakeX;\n fakeRectangleEndX = fakeRectangleStartX + 30;\n fakeRectangleStartY = fakeY;\n fakeRectangleEndY = fakeRectangleStartY + 12;\n }\n\n // 构造一条曲线\n const fakeNode: MindNode = { ...targetComponent.node, x: fakeX, y: fakeY, width, height: 12 };\n const linkSVGG = isIndentedLayout(layout)\n ? drawIndentedLink(board, parentComponent.node, fakeNode, PRIMARY_COLOR, false)\n : drawLink(board, parentComponent.node, fakeNode, PRIMARY_COLOR, isHorizontalLayout(layout), false);\n // 构造一个矩形框坐标\n const fakeRectangleG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n fakeRectangleStartX,\n fakeRectangleStartY,\n fakeRectangleEndX,\n fakeRectangleEndY,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 2,\n fill: PRIMARY_COLOR,\n fillStyle: 'solid'\n }\n );\n fakeDropNodeG?.appendChild(linkSVGG);\n fakeDropNodeG?.appendChild(fakeRectangleG);\n};\nexport const drawStraightDropNodeG = (\n board: PlaitBoard,\n targetRect: {\n x: number;\n y: number;\n width: number;\n height: number;\n },\n detectResult: DetectResult,\n targetComponent: MindNodeComponent,\n fakeDropNodeG: SVGGElement | undefined\n) => {\n const { x, y, width, height } = targetRect;\n const lineLength = 40;\n let startLinePoint = x + width;\n let endLinePoint = x + width + lineLength;\n let startRectanglePointX = x + width + lineLength;\n let endRectanglePointX = x + lineLength + width + 30;\n let startRectanglePointY = y + height / 2 - 6;\n let endRectanglePointY = y + height / 2 - 6 + 12;\n\n if (detectResult === 'left') {\n startLinePoint = x - lineLength;\n endLinePoint = x;\n startRectanglePointX = x - lineLength - 30;\n endRectanglePointX = x - lineLength;\n }\n let fakeY = targetComponent.node.y;\n let fakeX = targetRect.x;\n const strokeWidth = targetComponent.node.origin.branchWidth ? targetComponent.node.origin.branchWidth : STROKE_WIDTH;\n const pointOptions = {\n fakeX,\n fakeY,\n x,\n y,\n width,\n height,\n strokeWidth\n };\n const parentLayout = MindQueries.getCorrectLayoutByElement(\n targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin\n );\n const layout = MindQueries.getCorrectLayoutByElement(targetComponent.node.origin);\n if (!isMixedLayout(parentLayout, layout)) {\n // 构造一条直线\n let linePoints = [\n [startLinePoint, y + height / 2],\n [endLinePoint, y + height / 2]\n ] as Point[];\n if (isIndentedLayout(parentLayout)) {\n const fakePoint = getIndentedFakePoint(parentLayout, pointOptions);\n drawIndentNodeG(board, fakeDropNodeG as SVGGElement, fakePoint, targetComponent.node);\n return;\n } else if (isVerticalLogicLayout(parentLayout)) {\n if (!targetComponent.node.origin.isRoot) {\n /**\n * 计算逻辑:\n * 1. 移动到左侧:当前节点 startX - 偏移值,偏移值计算如下:\n * a. 第一个节点: 固定值(来源于 getMainAxle,第二级节点:BASE * 8,其他 BASE * 3 + strokeWidth / 2);\n * b. 第二个节点到最后一个节点之间:上一个节点到当前节点间距的一半((当前节点 startX - 上一个节点的 endX) / 2),endX = 当前节点的 startX + width;\n * 2. 移动到右侧:当前节点 x + width + 偏移值,偏移值计算如下:\n * a. 第二个节点到最后一个节点之间的右侧:当前节点到下一个节点间距的一半((下一个节点 startX - 当前节点的 endX) / 2),endX = 当前节点的 startX + width;\n * b. 最后一个节点的右侧:固定值(来源于 getMainAxle,第二级节点:BASE * 8,其他 BASE * 3 + strokeWidth / 2);\n */\n fakeY = targetComponent.node.y;\n const parentComponent = PlaitElement.getComponent(targetComponent.parent.origin) as MindNodeComponent;\n const targetIndex = parentComponent.node.origin.children.indexOf(targetComponent.node.origin);\n\n if (detectResult === 'left') {\n let offsetX = 0;\n const isFirstNode = targetIndex === 0;\n if (isFirstNode) {\n offsetX = parentComponent.node.origin.isRoot ? BASE * 8 : BASE * 3 + strokeWidth / 2;\n } else {\n const previousComponent = PlaitElement.getComponent(\n parentComponent.node.origin.children[targetIndex - 1]\n ) as MindNodeComponent;\n const previousRect = getRectangleByNode(previousComponent.node);\n const space = targetRect.x - (previousRect.x + previousRect.width);\n offsetX = space / 2;\n }\n fakeX = targetRect.x - offsetX - width / 2 - Math.ceil(strokeWidth / 2);\n }\n if (detectResult === 'right') {\n let offsetX = 0;\n const isLastNode = targetIndex === parentComponent.node.origin.children.length - 1;\n if (isLastNode) {\n offsetX = parentComponent.node.origin.isRoot ? BASE * 8 : BASE * 3 + strokeWidth / 2;\n } else {\n const nextComponent = PlaitElement.getComponent(\n parentComponent.node.origin.children[targetIndex + 1]\n ) as MindNodeComponent;\n const nextRect = getRectangleByNode(nextComponent.node);\n const space = nextRect.x - (targetRect.x + targetRect.width);\n offsetX = space / 2;\n }\n fakeX = targetRect.x + width + offsetX - width / 2 - Math.ceil(strokeWidth / 2);\n }\n startRectanglePointX = fakeX;\n if (isTopLayout(parentLayout)) {\n // 因为矩形是从左上角为起点向下画的,所以需要向上偏移一个矩形的高度(-12)\n startRectanglePointY = fakeY + height + targetComponent.node.vGap - 12;\n }\n if (isBottomLayout(parentLayout)) {\n startRectanglePointY = fakeY + targetComponent.node.vGap;\n }\n endRectanglePointX = startRectanglePointX + 30;\n endRectanglePointY = startRectanglePointY + 12;\n const fakeNode: MindNode = { ...targetComponent.node, x: fakeX, y: fakeY, width: 30 };\n const linkSVGG = drawLink(board, parentComponent.node, fakeNode, PRIMARY_COLOR, false, false);\n fakeDropNodeG?.appendChild(linkSVGG);\n }\n } else {\n let linkSVGG = PlaitBoard.getRoughSVG(board).linearPath(linePoints, { stroke: PRIMARY_COLOR, strokeWidth });\n fakeDropNodeG?.appendChild(linkSVGG);\n }\n // 构造一个矩形框坐标\n let fakeRectangleG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n startRectanglePointX,\n startRectanglePointY,\n endRectanglePointX,\n endRectanglePointY,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 2,\n fill: PRIMARY_COLOR,\n fillStyle: 'solid'\n }\n );\n\n fakeDropNodeG?.appendChild(fakeRectangleG);\n } else {\n // 混合布局画线逻辑\n if (isHorizontalLogicLayout(parentLayout)) {\n if (isIndentedLayout(layout)) {\n const fakePoint = getIndentedFakePoint(layout, pointOptions);\n drawIndentNodeG(board, fakeDropNodeG as SVGGElement, fakePoint, targetComponent.node);\n return;\n }\n }\n }\n};\n\nexport const getHorizontalFakeY = (\n detectResult: 'top' | 'bottom',\n targetIndex: number,\n parentNode: MindNode,\n targetRect: {\n x: number;\n y: number;\n width: number;\n height: number;\n },\n layout: MindLayoutType,\n fakeY: number\n) => {\n if (detectResult === 'top') {\n if (targetIndex === 0 && isTopLayout(layout)) {\n fakeY = targetRect.y + targetRect.height;\n }\n if (targetIndex > 0) {\n const previousComponent = PlaitElement.getComponent(parentNode.origin.children[targetIndex - 1]) as MindNodeComponent;\n const previousRect = getRectangleByNode(previousComponent.node);\n const topY = previousRect.y + previousRect.height;\n fakeY = topY + (targetRect.y - topY) / 5;\n }\n }\n if (detectResult === 'bottom') {\n fakeY = targetRect.y + targetRect.height + 30;\n if (targetIndex < parentNode.origin.children.length - 1) {\n const nextComponent = PlaitElement.getComponent(parentNode.origin.children[targetIndex + 1]) as MindNodeComponent;\n const nextRect = getRectangleByNode(nextComponent.node);\n const topY = targetRect.y + targetRect.height;\n fakeY = topY + (nextRect.y - topY) / 5;\n }\n if (targetIndex === parentNode.origin.children.length - 1) {\n fakeY = targetRect.y + targetRect.height + 30;\n }\n }\n return fakeY;\n};\n\nexport const getIndentedFakePoint = (\n layout: MindLayoutType,\n pointOptions: {\n fakeX: number;\n fakeY: number;\n x: number;\n y: number;\n width: number;\n height: number;\n strokeWidth: number;\n }\n) => {\n let { fakeX, fakeY, x, y, width, height, strokeWidth } = pointOptions;\n const hGap = BASE * 4;\n const vGap = BASE * 6;\n const offsetX = hGap + width / 2 + strokeWidth;\n const offsetY = vGap + height / 2 + strokeWidth;\n if (isLeftLayout(layout)) {\n fakeX = x - offsetX;\n }\n if (isRightLayout(layout)) {\n fakeX = x + offsetX;\n }\n if (isTopLayout(layout)) {\n fakeY = y - offsetY;\n }\n if (isBottomLayout(layout)) {\n fakeY = y + height + offsetY;\n }\n return { fakeX, fakeY };\n};\n\nexport const drawIndentNodeG = (\n board: PlaitBoard,\n fakeDropNodeG: SVGGElement,\n fakePoint: { fakeX: number; fakeY: number },\n node: MindNode\n) => {\n const { fakeX, fakeY } = fakePoint;\n const fakeNode: MindNode = { ...node, x: fakeX, y: fakeY, width: 30, height: 12 };\n const linkSVGG = drawIndentedLink(board, node, fakeNode, PRIMARY_COLOR, false);\n\n const startRectanglePointX = fakeX,\n startRectanglePointY = fakeY,\n endRectanglePointX = fakeX + 30,\n endRectanglePointY = fakeY + 12;\n const fakeRectangleG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n startRectanglePointX,\n startRectanglePointY,\n endRectanglePointX,\n endRectanglePointY,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 2,\n fill: PRIMARY_COLOR,\n fillStyle: 'solid'\n }\n );\n fakeDropNodeG?.appendChild(linkSVGG);\n fakeDropNodeG?.appendChild(fakeRectangleG);\n};\n","import { Point } from '@plait/core';\nimport { DetectResult, MindNode } from '../interfaces';\nimport { getRectangleByNode } from './graph';\n\n/**\n *\n * @param targetNode\n * @param centerPoint\n * @returns DetectResult[] | null\n */\n\nexport const directionDetector = (targetNode: MindNode, centerPoint: Point): DetectResult[] | null => {\n const { x, y, width, height } = getRectangleByNode(targetNode);\n const yCenter = y + height / 2;\n const xCenter = x + width / 2;\n\n const top = targetNode.y;\n const bottom = targetNode.y + targetNode.height;\n const left = targetNode.x;\n const right = targetNode.x + targetNode.width;\n const direction: DetectResult[] = [];\n\n // x 轴\n if (centerPoint[1] > y && centerPoint[1] < y + height) {\n if (centerPoint[0] > left && centerPoint[0] < xCenter) {\n direction.push('left');\n }\n if (centerPoint[0] > xCenter && centerPoint[0] < right) {\n direction.push('right');\n }\n // 重合区域,返回两个方向\n if ((centerPoint[0] > x && centerPoint[0] < xCenter) || (centerPoint[0] > xCenter && centerPoint[0] < x + width)) {\n if (centerPoint[1] < yCenter) {\n direction.push('top');\n } else {\n direction.push('bottom');\n }\n }\n return direction.length ? direction : null;\n }\n\n // y 轴\n if (centerPoint[0] > x && centerPoint[0] < x + width) {\n if (centerPoint[1] > top && centerPoint[1] < yCenter) {\n direction.push('top');\n }\n if (centerPoint[1] > yCenter && centerPoint[1] < bottom) {\n direction.push('bottom');\n }\n if ((centerPoint[1] > y && centerPoint[1] < y + height) || (centerPoint[1] > yCenter && centerPoint[1] < y + height)) {\n if (centerPoint[0] < xCenter) {\n direction.push('left');\n } else {\n direction.push('right');\n }\n }\n return direction.length ? direction : null;\n }\n\n return null;\n};\n","import { DetectResult, MindElement, MindNode } from '../interfaces';\nimport { isBottomLayout, isRightLayout, isLeftLayout, MindLayoutType, isStandardLayout, isTopLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\n\nexport const directionCorrector = (node: MindNode, detectResults: DetectResult[]): DetectResult[] | null => {\n if (!node.origin.isRoot) {\n const parentlayout = MindQueries.getCorrectLayoutByElement(node?.parent.origin as MindElement);\n if (isStandardLayout(parentlayout)) {\n const idx = node.parent.children.findIndex(x => x === node);\n const isLeft = idx >= (node.parent.origin.rightNodeCount || 0);\n return getAllowedDirection(detectResults, [isLeft ? 'right' : 'left']);\n }\n\n if (isLeftLayout(parentlayout)) {\n return getAllowedDirection(detectResults, ['right']);\n }\n\n if (isRightLayout(parentlayout)) {\n return getAllowedDirection(detectResults, ['left']);\n }\n\n if (parentlayout === MindLayoutType.upward) {\n return getAllowedDirection(detectResults, ['bottom']);\n }\n\n if (parentlayout === MindLayoutType.downward) {\n return getAllowedDirection(detectResults, ['top']);\n }\n } else {\n const layout = MindQueries.getCorrectLayoutByElement(node?.origin as MindElement);\n if (isStandardLayout(layout)) {\n return getAllowedDirection(detectResults, ['top', 'bottom']);\n }\n\n if (isTopLayout(layout)) {\n return getAllowedDirection(detectResults, ['left', 'right', 'bottom']);\n }\n\n if (isBottomLayout(layout)) {\n return getAllowedDirection(detectResults, ['left', 'right', 'top']);\n }\n\n if (layout === MindLayoutType.left) {\n return getAllowedDirection(detectResults, ['right', 'top', 'bottom']);\n }\n\n if (layout === MindLayoutType.right) {\n return getAllowedDirection(detectResults, ['left', 'top', 'bottom']);\n }\n }\n\n return null;\n};\n\nexport const getAllowedDirection = (detectResults: DetectResult[], illegalDirections: DetectResult[]): DetectResult[] | null => {\n const directions = detectResults;\n illegalDirections.forEach(item => {\n const bottomDirectionIndex = directions.findIndex(direction => direction === item);\n if (bottomDirectionIndex !== -1) {\n directions.splice(bottomDirectionIndex, 1);\n }\n });\n return directions.length ? directions : null;\n};\n","import { isStandardLayout, isIndentedLayout, isVerticalLogicLayout, isTopLayout, MindLayoutType } from '@plait/layouts';\nimport { DetectResult, MindElement } from '../interfaces';\nimport { MindNodeComponent } from '../node.component';\nimport { MindQueries } from '../queries';\nimport { isMixedLayout } from './layout';\nimport { PlaitElement } from '@plait/core';\n\n/* 根据布局调整 target 以及 direction */\nexport const readjustmentDropTarget = (dropTarget: {\n target: MindElement;\n detectResult: DetectResult;\n}): { target: MindElement; detectResult: DetectResult } => {\n const { target, detectResult } = dropTarget;\n const newDropTarget = { target, detectResult };\n const targetComponent = PlaitElement.getComponent(target) as MindNodeComponent;\n if (targetComponent.node.children.length > 0 && dropTarget.detectResult) {\n const layout = MindQueries.getCorrectLayoutByElement(targetComponent.node.origin);\n const parentLayout = MindQueries.getCorrectLayoutByElement(\n targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin\n );\n if (['right', 'left'].includes(dropTarget.detectResult)) {\n if (!isMixedLayout(parentLayout, layout)) {\n if (targetComponent.node.origin.isRoot) {\n const layout = MindQueries.getCorrectLayoutByElement(targetComponent.node.origin);\n // 标准布局,根节点\n if (isStandardLayout(layout)) {\n const rightNodeCount = targetComponent.node.origin.rightNodeCount as number;\n if (detectResult === 'left') {\n // 作为左的第一个节点\n if (targetComponent.node.children.length === rightNodeCount) {\n return newDropTarget;\n }\n } else {\n // 作为右的第一个节点或最后一个节点\n if (rightNodeCount === 0) {\n newDropTarget.target = target;\n } else {\n newDropTarget.target = targetComponent.node.children[rightNodeCount - 1].origin;\n newDropTarget.detectResult = 'bottom';\n }\n return newDropTarget;\n }\n }\n }\n\n // 缩进布局探测到第一个子节点\n if (isIndentedLayout(parentLayout)) {\n newDropTarget.target = targetComponent.node.children[0].origin;\n newDropTarget.detectResult = isTopLayout(parentLayout) ? 'bottom' : 'top';\n return newDropTarget;\n }\n // 上下布局的根节点只可以探测到上或者下,子节点的左右探测不处理,跳过。\n if (isVerticalLogicLayout(parentLayout)) {\n return newDropTarget;\n }\n // 剩下是水平布局的默认情况:插入最后一个子节点的下方\n const lastChildNodeIndex = targetComponent.node.children.length - 1;\n newDropTarget.target = targetComponent.node.children[lastChildNodeIndex].origin;\n newDropTarget.detectResult = 'bottom';\n } else {\n // 处理左右布局下的混合布局\n if ([MindLayoutType.left, MindLayoutType.right].includes(parentLayout)) {\n const layout = MindQueries.getCorrectLayoutByElement(targetComponent.node.origin);\n if (isIndentedLayout(layout)) {\n newDropTarget.target = targetComponent.node.children[0].origin;\n newDropTarget.detectResult = isTopLayout(layout) ? 'bottom' : 'top';\n return newDropTarget;\n }\n }\n }\n }\n if (['top', 'bottom'].includes(dropTarget.detectResult)) {\n // 缩进布局移动至第一个节点\n if (targetComponent.node.origin.isRoot && isIndentedLayout(layout)) {\n newDropTarget.target = targetComponent.node.children[0].origin;\n newDropTarget.detectResult = isTopLayout(layout) ? 'bottom' : 'top';\n return newDropTarget;\n }\n // 上下布局,插到右边\n const parentLayout = MindQueries.getCorrectLayoutByElement(\n targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin\n );\n if (isVerticalLogicLayout(parentLayout)) {\n const lastChildNodeIndex = targetComponent.node.children.length - 1;\n newDropTarget.target = targetComponent.node.children[lastChildNodeIndex].origin;\n newDropTarget.detectResult = 'right';\n return newDropTarget;\n }\n }\n return newDropTarget;\n }\n return dropTarget;\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, getRectangleByElements, getSelectedElements } from '@plait/core';\nimport { AbstractHandlePosition, MindElement } from '../../interfaces';\nimport { AbstractNode, LayoutNode, MindLayoutType, isHorizontalLayout } from '@plait/layouts';\nimport { ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants';\nimport { MindQueries } from '../../queries';\nimport { getCorrectStartEnd } from '@plait/layouts';\nimport { MindNodeComponent } from '../../node.component';\n\nexport const getRectangleByResizingLocation = (\n abstractRectangle: RectangleClient,\n location: number,\n activeHandlePosition: AbstractHandlePosition,\n isHorizontal: boolean\n) => {\n if (isHorizontal) {\n if (activeHandlePosition === AbstractHandlePosition.start) {\n return {\n ...abstractRectangle,\n y: location,\n height: abstractRectangle.height + abstractRectangle.y - location\n };\n } else {\n return {\n ...abstractRectangle,\n height: location - abstractRectangle.y\n };\n }\n } else {\n if (activeHandlePosition === AbstractHandlePosition.start) {\n return {\n ...abstractRectangle,\n x: location,\n width: abstractRectangle.width + abstractRectangle.x - location\n };\n } else {\n return {\n ...abstractRectangle,\n width: location - abstractRectangle.x\n };\n }\n }\n};\n\nexport const getLocationScope = (\n board: PlaitBoard,\n handlePosition: AbstractHandlePosition,\n parentChildren: MindElement[],\n element: MindElement,\n parent: LayoutNode,\n isHorizontal: boolean\n) => {\n const node = (MindElement.getNode(element) as unknown) as LayoutNode;\n const { start, end } = getCorrectStartEnd(node.origin as AbstractNode, parent);\n\n const startNode = parentChildren[start];\n const endNode = parentChildren[end];\n\n if (handlePosition === AbstractHandlePosition.start) {\n const abstractNode = parentChildren.filter(child => AbstractNode.isAbstract(child) && child.end < element.start!);\n let minNode;\n\n if (abstractNode.length) {\n const index = abstractNode\n .map(node => {\n const { end } = getCorrectStartEnd(node as AbstractNode, parent);\n return end;\n })\n .sort((a, b) => b - a)[0];\n minNode = parentChildren[index + 1];\n } else {\n minNode = parentChildren[0];\n }\n\n const minNodeRectangle = getRectangleByElements(board, [minNode], true);\n const endNodeRectangle = getRectangleByElements(board, [endNode], false);\n\n if (isHorizontal) {\n return {\n max: endNodeRectangle.y - ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: minNodeRectangle.y - ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n } else {\n return {\n max: endNodeRectangle.x - ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: minNodeRectangle.x - ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n }\n } else {\n const abstractNode = parentChildren.filter(child => AbstractNode.isAbstract(child) && child.start > element.end!);\n let maxNode;\n\n if (abstractNode.length) {\n const index = abstractNode\n .map(node => {\n const { start } = getCorrectStartEnd(node as AbstractNode, parent);\n return start;\n })\n .sort((a, b) => a - b)[0];\n maxNode = parentChildren[index - 1];\n } else {\n const children = parentChildren.filter(child => !AbstractNode.isAbstract(child));\n maxNode = parentChildren[children.length - 1];\n }\n\n const maxNodeRectangle = getRectangleByElements(board, [maxNode], true);\n const startNodeRectangle = getRectangleByElements(board, [startNode], false);\n\n if (isHorizontal) {\n return {\n max: maxNodeRectangle.y + maxNodeRectangle.height + ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: startNodeRectangle.y + startNodeRectangle.height + ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n } else {\n return {\n max: maxNodeRectangle.x + maxNodeRectangle.width + ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: startNodeRectangle.x + startNodeRectangle.width + ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n }\n }\n};\n\nexport const getHitAbstractHandle = (board: PlaitBoard, element: MindElement, point: Point) => {\n const nodeLayout = MindQueries.getCorrectLayoutByElement(element) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n\n const parentElement = MindElement.getParent(element);\n const includedElements = parentElement.children.slice(element.start!, element.end! + 1);\n let abstractRectangle = getRectangleByElements(board, includedElements, true);\n abstractRectangle = RectangleClient.getOutlineRectangle(abstractRectangle, -ABSTRACT_INCLUDED_OUTLINE_OFFSET);\n\n const startHandleRec = getAbstractHandleRectangle(abstractRectangle, isHorizontal, AbstractHandlePosition.start);\n const endHandleRec = getAbstractHandleRectangle(abstractRectangle, isHorizontal, AbstractHandlePosition.end);\n\n const pointRec = RectangleClient.toRectangleClient([point, point]);\n if (RectangleClient.isHit(pointRec, startHandleRec)) return AbstractHandlePosition.start;\n if (RectangleClient.isHit(pointRec, endHandleRec)) return AbstractHandlePosition.end;\n return undefined;\n};\n\nexport const getAbstractHandleRectangle = (rectangle: RectangleClient, isHorizontal: boolean, position: AbstractHandlePosition) => {\n let result;\n if (position === AbstractHandlePosition.start) {\n const location = isHorizontal ? rectangle.y : rectangle.x;\n\n result = getRectangleByResizingLocation(\n rectangle,\n location + ABSTRACT_HANDLE_MASK_WIDTH / 2,\n AbstractHandlePosition.end,\n isHorizontal\n );\n result = getRectangleByResizingLocation(result, location - ABSTRACT_HANDLE_MASK_WIDTH / 2, position, isHorizontal);\n } else {\n const location = isHorizontal ? rectangle.y + rectangle.height : rectangle.x + rectangle.width;\n\n result = getRectangleByResizingLocation(\n rectangle,\n location - ABSTRACT_HANDLE_MASK_WIDTH / 2,\n AbstractHandlePosition.start,\n isHorizontal\n );\n result = getRectangleByResizingLocation(result, location + ABSTRACT_HANDLE_MASK_WIDTH / 2, position, isHorizontal);\n }\n return result;\n};\n\nexport function findLocationLeftIndex(board: PlaitBoard, parentChildren: MindElement[], location: number, isHorizontal: boolean) {\n const children = parentChildren.filter(child => {\n return !AbstractNode.isAbstract(child);\n });\n const recArray = children.map(child => {\n return getRectangleByElements(board, [child], false);\n });\n\n const firstRec = getRectangleByElements(board, [children[0]], true);\n const fakeLeftRec = {\n x: firstRec.x - firstRec.width,\n y: firstRec.y - firstRec.height,\n width: firstRec.width,\n height: firstRec.height\n };\n const lastRec = getRectangleByElements(board, [children[children.length - 1]], true);\n const fakeRightRec = {\n x: lastRec.x + lastRec.width,\n y: lastRec.y + lastRec.height,\n width: lastRec.width,\n height: lastRec.height\n };\n\n recArray.push(fakeRightRec);\n recArray.unshift(fakeLeftRec);\n\n for (let i = 0; i < recArray.length - 1; i++) {\n const recXOrY = isHorizontal ? recArray[i].y : recArray[i].x;\n const recWidthOrHeight = isHorizontal ? recArray[i].height : recArray[i].width;\n\n if (\n location >= recXOrY + recWidthOrHeight / 2 &&\n location <= recArray[i + 1][isHorizontal ? 'y' : 'x'] + recArray[i + 1][isHorizontal ? 'height' : 'width'] / 2\n ) {\n return i - 1;\n }\n }\n return 0;\n}\n\nexport function handleTouchedAbstract(board: PlaitBoard, touchedAbstract: PlaitElement | undefined, endPoint: Point) {\n let touchedHandle;\n const abstract = getSelectedElements(board)\n .filter(element => AbstractNode.isAbstract(element))\n .find(element => {\n touchedHandle = getHitAbstractHandle(board, element as MindElement, endPoint);\n return touchedHandle;\n });\n\n if (touchedAbstract === abstract) {\n return touchedAbstract;\n }\n\n if (touchedAbstract) {\n const component = PlaitElement.getComponent(touchedAbstract!) as MindNodeComponent;\n component.updateAbstractIncludedOutline();\n touchedAbstract = undefined;\n }\n\n if (abstract) {\n touchedAbstract = abstract;\n const component = PlaitElement.getComponent(touchedAbstract!) as MindNodeComponent;\n component.updateAbstractIncludedOutline(touchedHandle);\n }\n\n return touchedAbstract;\n}\n","import { pointsOnBezierCurves } from 'points-on-curve';\nimport { MindNodeShape, STROKE_WIDTH } from '../constants';\nimport { MindNode } from '../interfaces/node';\nimport { PlaitBoard, Point } from '@plait/core';\nimport { getNodeShapeByElement, getRectangleByNode, isChildUp } from '../utils';\nimport { MindLayoutType } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { getBranchColorByMindElement } from '../utils/node-style/branch';\n\nexport function drawIndentedLink(\n board: PlaitBoard,\n node: MindNode,\n child: MindNode,\n defaultStroke: string | null = null,\n needDrawUnderline = true\n) {\n const isUnderlineShap = (getNodeShapeByElement(child.origin) as MindNodeShape) === MindNodeShape.underline;\n let beginX,\n beginY,\n endX,\n endY,\n beginNode = node,\n endNode = child;\n const beginRectangle = getRectangleByNode(beginNode);\n const endRectangle = getRectangleByNode(endNode);\n\n beginX = beginNode.x + beginNode.width / 2;\n beginY = isChildUp(node, child) ? beginRectangle.y : beginRectangle.y + beginRectangle.height;\n endX = node.left ? endNode.x + endNode.hGap + endRectangle.width : endNode.x + endNode.hGap;\n endY = isUnderlineShap ? endNode.y + endNode.height - endNode.vGap : endNode.y + endNode.height / 2;\n //根据位置,设置正负参数\n let plusMinus = isChildUp(node, child) ? (node.left ? [-1, -1] : [1, -1]) : node.left ? [-1, 1] : [1, 1];\n const layout = MindQueries.getCorrectLayoutByElement(node.origin);\n const strokeWidth = child.origin.branchWidth ? child.origin.branchWidth : STROKE_WIDTH;\n if (beginNode.origin.isRoot) {\n if (layout === MindLayoutType.leftBottomIndented || layout === MindLayoutType.rightBottomIndented) {\n beginY += strokeWidth;\n }\n if (layout === MindLayoutType.leftTopIndented || layout === MindLayoutType.rightTopIndented) {\n beginY -= strokeWidth;\n }\n }\n let curve: Point[] = [\n [beginX, beginY],\n [beginX, beginY],\n [beginX, beginY],\n [beginX, endY - (endNode.hGap * 3 * plusMinus[1]) / 5],\n [beginX, endY - (endNode.hGap * plusMinus[1]) / 5],\n [beginX + (endNode.hGap * plusMinus[0]) / 4, endY],\n [beginX + (endNode.hGap * plusMinus[0] * 3) / 5, endY],\n isUnderlineShap && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY],\n isUnderlineShap && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY],\n isUnderlineShap && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY]\n ];\n\n const stroke = defaultStroke || getBranchColorByMindElement(board, child.origin);\n\n const points = pointsOnBezierCurves(curve);\n return PlaitBoard.getRoughSVG(board).curve(points as any, { stroke, strokeWidth });\n}\n","export enum HorizontalPlacement {\n left = 'left',\n center = 'center',\n right = 'right'\n}\n\nexport enum VerticalPlacement {\n top = 'top',\n middle = 'middle',\n bottom = 'bottom'\n}\n\nexport type PointPlacement = [HorizontalPlacement, VerticalPlacement];\n","import { Point, RectangleClient } from '@plait/core';\nimport { MindNode } from '../interfaces/node';\nimport { LayoutDirection } from '../interfaces/layout';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../interfaces/types';\n\nexport const getPointByPlacement = (client: RectangleClient, placement: PointPlacement): Point => {\n let x = client.x;\n let y = client.y;\n if (placement[0] === HorizontalPlacement.center) {\n x = client.x + client.width / 2;\n }\n if (placement[0] === HorizontalPlacement.right) {\n x = client.x + client.width;\n }\n if (placement[1] === VerticalPlacement.middle) {\n y = client.y + client.height / 2;\n }\n if (placement[1] === VerticalPlacement.bottom) {\n y = client.y + client.height;\n }\n return [x, y];\n};\n\nexport const getLayoutDirection = (node: MindNode, isHorizontal: boolean) => {\n if (isHorizontal) {\n if (node.left) {\n return LayoutDirection.left;\n } else {\n return LayoutDirection.right;\n }\n } else {\n if (node.up) {\n return LayoutDirection.top;\n } else {\n return LayoutDirection.bottom;\n }\n }\n};\n\n// 以右为基准\n// 右 -> 左:\n// 1. 终点 -> 起点/起点 -> 终点\n// 2. 加 -> 减\n\n// 水平 -> 垂直:\n// 1. 起点/终点 -> 纵轴\n// 2. 加减 -> 纵轴\n\n// 下 -> 上:\n// 1. 终点 -> 起点/终点 -> 起点\n// 2. 加 -> 减\nexport const movePoint = (point: Point, distance: number, direction: LayoutDirection = LayoutDirection.right): Point => {\n if (direction === LayoutDirection.left) {\n return [point[0] - distance, point[1]];\n }\n if (direction === LayoutDirection.bottom) {\n return [point[0], point[1] + distance];\n }\n if (direction === LayoutDirection.top) {\n return [point[0], point[1] - distance];\n }\n return [point[0] + distance, point[1]];\n};\n\nexport const transformPlacement = (placement: PointPlacement, direction: LayoutDirection) => {\n // to left\n if (direction === LayoutDirection.left) {\n if (placement[0] === HorizontalPlacement.right) {\n placement[0] = HorizontalPlacement.left;\n } else if (placement[0] === HorizontalPlacement.left) {\n placement[0] = HorizontalPlacement.right;\n }\n }\n // to bottom\n if (direction === LayoutDirection.bottom || direction === LayoutDirection.top) {\n let horizontal = HorizontalPlacement.center;\n let vertical = VerticalPlacement.middle;\n if (placement[1] === VerticalPlacement.top) {\n horizontal = HorizontalPlacement.left;\n }\n if (placement[1] === VerticalPlacement.bottom) {\n horizontal = HorizontalPlacement.right;\n }\n if (placement[0] === HorizontalPlacement.left) {\n vertical = VerticalPlacement.top;\n }\n if (placement[0] === HorizontalPlacement.right) {\n vertical = VerticalPlacement.bottom;\n }\n placement[0] = horizontal;\n placement[1] = vertical;\n }\n // to up\n if (direction === LayoutDirection.top) {\n if (placement[1] === VerticalPlacement.bottom) {\n placement[1] = VerticalPlacement.top;\n } else if (placement[1] === VerticalPlacement.top) {\n placement[1] = VerticalPlacement.bottom;\n }\n }\n};\n","import { pointsOnBezierCurves } from 'points-on-curve';\nimport { MindNodeShape, STROKE_WIDTH } from '../../constants';\nimport { MindNode } from '../../interfaces/node';\nimport { PlaitBoard, Point } from '@plait/core';\nimport { getRectangleByNode } from '../../utils';\nimport { getLayoutDirection, getPointByPlacement, movePoint, transformPlacement } from '../../utils/point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../interfaces/types';\nimport { getBranchColorByMindElement } from '../../utils/node-style/branch';\n\nexport function drawLogicLink(board: PlaitBoard, node: MindNode, parent: MindNode, isHorizontal: boolean) {\n const branchColor = getBranchColorByMindElement(board, node.origin);\n const strokeWidth = node.origin.branchWidth ? node.origin.branchWidth : STROKE_WIDTH;\n const hasStraightLine = !parent.origin.isRoot;\n const hasUnderlineShape = node.origin.shape === MindNodeShape.underline;\n const hasUnderlineShapeOfParent = parent.origin.shape === MindNodeShape.underline;\n const nodeClient = getRectangleByNode(node);\n const parentClient = getRectangleByNode(parent);\n const linkDirection = getLayoutDirection(node, isHorizontal);\n\n // ① ensure begin placement and end placement\n // begin placement represent parent connector position and end placement represent child connector\n const beginPlacement: PointPlacement = [HorizontalPlacement.right, VerticalPlacement.middle];\n const endPlacement: PointPlacement = [HorizontalPlacement.left, VerticalPlacement.middle];\n\n transformPlacement(beginPlacement, linkDirection);\n transformPlacement(endPlacement, linkDirection);\n\n // underline shape and horizontal\n if (isHorizontal && hasUnderlineShapeOfParent && !parent.origin.isRoot) {\n beginPlacement[1] = VerticalPlacement.bottom;\n }\n if (isHorizontal && hasUnderlineShape) {\n endPlacement[1] = VerticalPlacement.bottom;\n }\n\n let beginPoint = getPointByPlacement(parentClient, beginPlacement);\n let endPoint = getPointByPlacement(nodeClient, endPlacement);\n\n // ② 确定凸出直线,从起始点开始画一条直线,从直线的结束位置绘制曲线,保证收起图标可以完美覆盖起始连线,根节点不需要这条直线\n // 绘制贝塞尔曲线要求,需要增加三个点,正常两个点就可以确定这条直线\n const straightLineDistance = 8;\n const beginPoint2 = hasStraightLine ? movePoint(beginPoint, straightLineDistance, linkDirection) : beginPoint;\n let straightLine: Point[] = hasStraightLine ? [beginPoint, beginPoint2, beginPoint2] : [];\n\n // ③ 确定曲线\n const beginBufferDistance = (parent.hGap + node.hGap) / 3;\n const endBufferDistance = -(parent.hGap + node.hGap) / 2.4;\n let curve: Point[] = [\n beginPoint2,\n movePoint(beginPoint2, beginBufferDistance, linkDirection),\n movePoint(endPoint, endBufferDistance, linkDirection),\n endPoint\n ];\n\n // ④ 下划线绘制,underline shape and horizontal\n const underlineEnd = movePoint(endPoint, nodeClient.width, linkDirection);\n const underline: Point[] = hasUnderlineShape && isHorizontal ? [underlineEnd, underlineEnd, underlineEnd] : [];\n\n const points = pointsOnBezierCurves([...straightLine, ...curve, ...underline]);\n return PlaitBoard.getRoughSVG(board).curve(points as any, { stroke: branchColor, strokeWidth });\n}\n","import { EmojiData, MindElement, PlaitMind } from '../../interfaces';\n\nexport function getEmojisRectangle(element: MindElement<EmojiData>) {\n const count = element.data.emojis.length;\n const fontSize = getEmojiFontSize(element);\n return { width: fontSize * count, height: fontSize * 1.5 };\n}\n\nexport function getEmojiFontSize(element: MindElement<EmojiData>) {\n if (PlaitMind.isMind(element)) {\n return 18;\n } else {\n return 14;\n }\n}\n","import { BASE } from '../constants/default';\nimport { PlaitMind } from '../interfaces/element';\nimport { MindElement } from '../interfaces/element';\nimport { getEmojisRectangle } from '../plugins/emoji/emoji';\n\nconst NodeDefaultSpace = {\n horizontal: {\n nodeAndText: BASE * 3,\n emojiAndText: BASE * 1.5\n },\n vertical: {\n nodeAndText: BASE * 1.5\n }\n};\n\nconst RootDefaultSpace = {\n horizontal: {\n nodeAndText: BASE * 4,\n emojiAndText: BASE * 2\n },\n vertical: {\n nodeAndText: BASE * 2\n }\n};\n\nconst getHorizontalSpaceBetweenNodeAndText = (element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const nodeAndText = isMind ? RootDefaultSpace.horizontal.nodeAndText : NodeDefaultSpace.horizontal.nodeAndText;\n return nodeAndText;\n};\n\nconst getHorizontalSpaceEmojiAndText = (element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const emojiAndText = isMind ? RootDefaultSpace.horizontal.emojiAndText : NodeDefaultSpace.horizontal.emojiAndText;\n return emojiAndText;\n};\n\nconst getVerticalSpaceBetweenNodeAndText = (element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const nodeAndText = isMind ? RootDefaultSpace.vertical.nodeAndText : NodeDefaultSpace.vertical.nodeAndText;\n return nodeAndText;\n};\n\nexport const NodeSpace = {\n getNodeWidth(element: MindElement) {\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(element);\n if (MindElement.hasEmojis(element)) {\n return nodeAndText + getEmojisRectangle(element).width + getHorizontalSpaceEmojiAndText(element) + element.width + nodeAndText;\n }\n return nodeAndText + element.width + nodeAndText;\n },\n getNodeHeight(element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);\n return nodeAndText + element.height + nodeAndText;\n },\n getTextHorizontalSpace(element: MindElement) {\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(element);\n if (MindElement.hasEmojis(element)) {\n return nodeAndText + getEmojisRectangle(element).width + getHorizontalSpaceEmojiAndText(element);\n } else {\n return nodeAndText;\n }\n },\n getTextVerticalSpace(element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);\n return nodeAndText;\n },\n getEmojiHorizontalSpace(element: MindElement) {\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(element);\n return nodeAndText;\n },\n getEmojiVerticalSpace(element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);\n return nodeAndText;\n }\n};\n","import { ViewContainerRef } from '@angular/core';\nimport { drawRichtext, updateForeignObject } from '@plait/richtext';\nimport { BASE } from '../constants/default';\nimport { MindNode } from '../interfaces/node';\nimport { getRectangleByNode } from '../utils/graph';\nimport { NodeSpace } from '../utils/node-space';\n\nexport function drawMindNodeRichtext(node: MindNode, viewContainerRef: ViewContainerRef) {\n const { x, y } = getRichtextRectangleByNode(node);\n const classList = [];\n if (node.origin.isRoot) {\n classList.push('root-node');\n classList.push('font-size-18');\n } else if (node.parent?.origin?.isRoot) {\n classList.push('root-child-node');\n } else {\n classList.push('child-node');\n }\n // COMPAT: last character can not show in safari browser\n return drawRichtext(\n x,\n y,\n Math.ceil(node.origin.width),\n Math.ceil(node.origin.height),\n node.origin.data.topic,\n viewContainerRef,\n classList\n );\n}\n\nexport function updateMindNodeTopicSize(node: MindNode, g: SVGGElement, isEditable: boolean) {\n const { x, y, width, height } = getRichtextRectangleByNode(node);\n if (isEditable) {\n // add 999, avoid changing lines when paste more text\n updateForeignObject(g, width + 999, height + 999, x, y);\n } else {\n // COMPAT: last character can not show in safari browser\n updateForeignObject(g, Math.ceil(node.origin.width), Math.ceil(node.origin.height), x, y);\n }\n}\n\nexport function getRichtextRectangleByNode(node: MindNode) {\n let { x, y, width, height } = getRectangleByNode(node);\n x = x + NodeSpace.getTextHorizontalSpace(node.origin);\n y = y + NodeSpace.getTextVerticalSpace(node.origin);\n return { width, height, x, y };\n}\n","import { NODE_FILL, ROOT_NODE_FILL, STROKE_WIDTH } from '../constants';\nimport { MindNode } from '../interfaces/node';\nimport { getRectangleByNode } from '../utils/graph';\nimport { PlaitBoard, drawRoundRectangle } from '@plait/core';\nimport { getStrokeByMindElement } from '../utils/node-style/node';\n\nexport function drawRectangleNode(board: PlaitBoard, node: MindNode) {\n const { x, y, width, height } = getRectangleByNode(node);\n\n const fill = node.origin.fill ? node.origin.fill : node.origin.isRoot ? ROOT_NODE_FILL : NODE_FILL;\n const stroke = getStrokeByMindElement(board, node.origin);\n const strokeWidth = node.origin.strokeWidth ? node.origin.strokeWidth : STROKE_WIDTH;\n\n const nodeG = drawRoundRectangle(PlaitBoard.getRoughSVG(board), x, y, x + width, y + height, {\n stroke,\n strokeWidth,\n fill,\n fillStyle: 'solid'\n });\n\n return nodeG;\n}\n","import { PlaitBoard, getRectangleByElements } from '@plait/core';\nimport { MindNode } from '../../interfaces/node';\nimport { getRectangleByNode } from '../../utils/graph';\nimport { GRAY_COLOR } from '../../constants/default';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../interfaces/types';\nimport { getLayoutDirection, getPointByPlacement, movePoint, transformPlacement } from '../../utils/point-placement';\n\nexport function drawAbstractLink(board: PlaitBoard, node: MindNode, isHorizontal: boolean) {\n const linkPadding = 15;\n const parent = node.parent;\n const abstractRectangle = getRectangleByNode(node);\n let includedElements = parent.children.slice(node.origin.start, node.origin.end! + 1).map(node => {\n return node.origin;\n });\n const includedElementsRectangle = getRectangleByElements(board, includedElements, true);\n\n const linkDirection = getLayoutDirection(node, isHorizontal);\n const bezierBeginPlacement = [HorizontalPlacement.right, VerticalPlacement.top] as PointPlacement;\n const bezierEndPlacement = [HorizontalPlacement.right, VerticalPlacement.bottom] as PointPlacement;\n const abstractConnectorPlacement = [HorizontalPlacement.left, VerticalPlacement.middle] as PointPlacement;\n\n transformPlacement(bezierBeginPlacement, linkDirection);\n transformPlacement(bezierEndPlacement, linkDirection);\n transformPlacement(abstractConnectorPlacement, linkDirection);\n\n let bezierBeginPoint = getPointByPlacement(includedElementsRectangle, bezierBeginPlacement);\n let bezierEndPoint = getPointByPlacement(includedElementsRectangle, bezierEndPlacement);\n let abstractConnectorPoint = getPointByPlacement(abstractRectangle, abstractConnectorPlacement);\n\n let curveDistance = 0;\n if (isHorizontal) {\n curveDistance = Math.abs(abstractConnectorPoint[0] - bezierBeginPoint[0]) - linkPadding * 2;\n } else {\n curveDistance = Math.abs(abstractConnectorPoint[1] - bezierBeginPoint[1]) - linkPadding * 2;\n }\n\n bezierBeginPoint = movePoint(bezierBeginPoint, linkPadding, linkDirection);\n let c1 = movePoint(bezierBeginPoint, curveDistance, linkDirection);\n bezierEndPoint = movePoint(bezierEndPoint, linkPadding, linkDirection);\n let c2 = movePoint(bezierEndPoint, curveDistance, linkDirection);\n let bezierConnectorPoint = movePoint(abstractConnectorPoint, -linkPadding, linkDirection);\n\n const link = PlaitBoard.getRoughSVG(board).path(\n `M${bezierBeginPoint[0]},${bezierBeginPoint[1]} Q${c1[0]},${c1[1]} ${bezierConnectorPoint[0]},${bezierConnectorPoint[1]} Q${c2[0]},${c2[1]} ${bezierEndPoint[0]},${bezierEndPoint[1]} M${abstractConnectorPoint[0]},${abstractConnectorPoint[1]} L${bezierConnectorPoint[0]},${bezierConnectorPoint[1]}`,\n {\n stroke: GRAY_COLOR,\n strokeWidth: 2\n }\n );\n return link;\n}\n","import { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { EmojiItem, MindElement, PlaitMind } from '../../interfaces';\nimport { MindEmojiBaseComponent } from './emoji-base.component';\nimport { PlaitMindEmojiBoard } from './with-mind-emoji';\nimport { createForeignObject } from '@plait/richtext';\nimport { createG } from '@plait/core';\nimport { getRectangleByNode } from '../../utils/graph';\nimport { getEmojiFontSize, getEmojisRectangle } from './emoji';\nimport { NodeSpace } from '../../utils/node-space';\n\nexport class EmojiDrawer {\n componentRef: ComponentRef<MindEmojiBaseComponent> | null = null;\n\n constructor(private board: PlaitMindEmojiBoard, private viewContainerRef: ViewContainerRef) {}\n\n draw(emoji: EmojiItem, element: MindElement) {\n this.destroy();\n const componentType = this.board.drawEmoji(emoji, element);\n this.componentRef = this.viewContainerRef.createComponent(componentType);\n this.componentRef.instance.emojiItem = emoji;\n this.componentRef.instance.board = this.board;\n const fontSize = PlaitMind.isMind(element) ? 18 : 14;\n this.componentRef.instance.fontSize = fontSize;\n }\n\n get nativeElement() {\n if (this.componentRef) {\n return this.componentRef.instance.nativeElement;\n } else {\n return null;\n }\n }\n\n destroy() {\n if (this.componentRef) {\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n}\n\nexport class EmojisDrawer {\n emojiDrawers: EmojiDrawer[] = [];\n\n g?: SVGGElement;\n\n constructor(private board: PlaitMindEmojiBoard, private viewContainerRef: ViewContainerRef) {}\n\n drawEmojis(element: MindElement) {\n this.destroy();\n if (MindElement.hasEmojis(element)) {\n const node = MindElement.getNode(element);\n this.g = createG();\n this.g.classList.add('emojis');\n let { x, y } = getRectangleByNode(MindElement.getNode(element));\n x = x + NodeSpace.getEmojiHorizontalSpace(element);\n y = y + NodeSpace.getEmojiVerticalSpace(element);\n const { width, height } = getEmojisRectangle(element);\n const fontSize = getEmojiFontSize(element);\n const foreignObject = createForeignObject(x, y, width, height);\n this.g.append(foreignObject);\n const container = document.createElement('div');\n container.classList.add('node-emojis-container');\n container.classList.add(`emoji-font-size-${fontSize}`);\n foreignObject.append(container);\n this.emojiDrawers = element.data.emojis.map(emojiItem => {\n const drawer = new EmojiDrawer(this.board, this.viewContainerRef);\n drawer.draw(emojiItem, element);\n return drawer;\n });\n this.emojiDrawers.forEach(drawer => {\n container.append(drawer.nativeElement!);\n });\n return this.g;\n }\n return undefined;\n }\n\n destroy() {\n if (this.g) {\n this.g.remove();\n }\n this.emojiDrawers.forEach(drawer => drawer.destroy());\n this.emojiDrawers = [];\n }\n}\n","import { PlaitBoard, Path, PlaitNode, Transforms } from '@plait/core';\nimport { isHorizontalLogicLayout, isStandardLayout, isVerticalLogicLayout, MindLayoutType } from '@plait/layouts';\nimport { MindElement, PlaitMind } from '../interfaces/element';\nimport { handleAbstractIncluded } from '../utils/abstract/common';\n\nexport const setLayout = (board: PlaitBoard, layout: MindLayoutType, path: Path) => {\n correctLogicLayoutNode(board, layout, path);\n const element = PlaitNode.get(board, path) as MindElement;\n\n if (PlaitMind.isMind(element) && isStandardLayout(layout)) {\n handleAbstractIncluded(board, element);\n }\n\n Transforms.setNode(board, { layout }, path);\n};\n\nconst correctLogicLayoutNode = (board: PlaitBoard, layout: MindLayoutType, path: Path) => {\n const node = PlaitNode.get(board, path);\n if (node && layout) {\n node.children?.forEach((value: PlaitNode, index) => {\n if (value.layout) {\n if (\n (isHorizontalLogicLayout(layout) && isVerticalLogicLayout(value.layout)) ||\n (isVerticalLogicLayout(layout) && isHorizontalLogicLayout(value.layout))\n ) {\n Transforms.setNode(board, { layout: null }, [...path, index]);\n }\n if (value.children?.length) {\n correctLogicLayoutNode(board, layout, [...path, index]);\n }\n }\n });\n }\n};\n","import { Element } from 'slate';\nimport { MindElement } from '../interfaces/element';\nimport { NODE_MIN_WIDTH } from '../constants/node';\nimport { PlaitBoard, Transforms } from '@plait/core';\nimport { EmojiData, EmojiItem } from '../interfaces/element-data';\n\nexport const setTopic = (board: PlaitBoard, element: MindElement, topic: Element, width: number, height: number) => {\n const newElement = {\n data: { topic },\n width: width < NODE_MIN_WIDTH * board.viewport.zoom ? NODE_MIN_WIDTH : width / board.viewport.zoom,\n height: height / board.viewport.zoom\n } as MindElement;\n if (MindElement.hasEmojis(element)) {\n newElement.data.emojis = element.data.emojis;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const setTopicSize = (board: PlaitBoard, element: MindElement, width: number, height: number) => {\n const newElement = {\n width: width < NODE_MIN_WIDTH * board.viewport.zoom ? NODE_MIN_WIDTH : width / board.viewport.zoom,\n height: height / board.viewport.zoom\n };\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const addEmoji = (board: PlaitBoard, element: MindElement, emojiItem: EmojiItem) => {\n const emojis = element.data.emojis || [];\n const newEmojis = [...emojis];\n newEmojis.push(emojiItem);\n const newElement = {\n data: { topic: element.data.topic, emojis: newEmojis }\n } as MindElement;\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const removeEmoji = (board: PlaitBoard, element: MindElement<EmojiData>, emojiItem: EmojiItem) => {\n const emojis = element.data.emojis.filter(value => value !== emojiItem);\n const newElement = {\n data: { topic: element.data.topic }\n } as MindElement;\n if (emojis.length > 0) {\n newElement.data.emojis = emojis;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const replaceEmoji = (board: PlaitBoard, element: MindElement<EmojiData>, oldEmoji: EmojiItem, newEmoji: EmojiItem) => {\n const newElement = {\n data: { topic: element.data.topic }\n } as MindElement;\n const newEmojis = element.data.emojis.map(value => {\n if (value === oldEmoji) {\n return newEmoji;\n }\n return value;\n });\n newElement.data.emojis = newEmojis;\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n","import { setLayout } from './layout';\nimport { addEmoji, removeEmoji, setTopic, setTopicSize, replaceEmoji } from './node';\n\nexport const MindTransforms = {\n setLayout,\n setTopic,\n setTopicSize,\n addEmoji,\n removeEmoji,\n replaceEmoji\n};\n","import { drawAbstractRoundRectangle, createG, getRectangleByElements, PlaitBoard, RectangleClient } from '@plait/core';\nimport { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET, PRIMARY_COLOR } from '../constants';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { AbstractHandlePosition, MindElement } from '../interfaces';\nimport { MindLayoutType, isHorizontalLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { getLayoutDirection, getPointByPlacement, movePoint, transformPlacement } from '../utils/point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../interfaces/types';\nimport { getRectangleByResizingLocation } from '../utils/abstract/resize';\n\nexport function drawAbstractIncludedOutline(\n board: PlaitBoard,\n roughSVG: RoughSVG,\n element: MindElement,\n activeHandlePosition?: AbstractHandlePosition,\n resizingLocation?: number\n) {\n const abstractIncludedG = createG();\n\n const parentElement = MindElement.getParent(element);\n const nodeLayout = MindQueries.getCorrectLayoutByElement(element) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n\n const includedElements = parentElement.children.slice(element.start!, element.end! + 1);\n let abstractRectangle = getRectangleByElements(board, includedElements, true);\n abstractRectangle = RectangleClient.getOutlineRectangle(abstractRectangle, -ABSTRACT_INCLUDED_OUTLINE_OFFSET);\n\n if (resizingLocation) {\n abstractRectangle = getRectangleByResizingLocation(abstractRectangle, resizingLocation, activeHandlePosition!, isHorizontal);\n }\n\n const rectangle = drawAbstractRoundRectangle(\n roughSVG,\n abstractRectangle.x,\n abstractRectangle.y,\n abstractRectangle.x + abstractRectangle.width,\n abstractRectangle.y + abstractRectangle.height,\n isHorizontal,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 1,\n fillStyle: 'solid'\n }\n );\n\n const startPlacement = [HorizontalPlacement.center, VerticalPlacement.top] as PointPlacement;\n const endPlacement = [HorizontalPlacement.center, VerticalPlacement.bottom] as PointPlacement;\n\n const linkDirection = getLayoutDirection(MindElement.getNode(element), isHorizontal);\n\n transformPlacement(startPlacement, linkDirection);\n transformPlacement(endPlacement, linkDirection);\n\n let startCenterPoint = getPointByPlacement(abstractRectangle, startPlacement);\n let endCenterPoint = getPointByPlacement(abstractRectangle, endPlacement);\n\n const startPoint1 = movePoint(startCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n const startPoint2 = movePoint(startCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n\n const endPoint1 = movePoint(endCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n const endPoint2 = movePoint(endCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n\n const startHandle = roughSVG.line(\n startPoint1[0],\n startPoint1[1],\n startPoint2[0],\n startPoint2[1],\n getHandleOption(activeHandlePosition === AbstractHandlePosition.start)\n );\n\n const endHandle = roughSVG.line(\n endPoint1[0],\n endPoint1[1],\n endPoint2[0],\n endPoint2[1],\n getHandleOption(activeHandlePosition === AbstractHandlePosition.end)\n );\n\n changeBoardClass(board, activeHandlePosition, isHorizontal);\n\n startHandle.setAttribute('stroke-linecap', 'round');\n endHandle.setAttribute('stroke-linecap', 'round');\n\n abstractIncludedG.append(startHandle);\n abstractIncludedG.append(endHandle);\n abstractIncludedG.append(rectangle);\n\n return abstractIncludedG;\n}\n\nexport function getHandleOption(isHover: boolean) {\n return isHover\n ? {\n stroke: PRIMARY_COLOR,\n strokeWidth: 4,\n fillStyle: 'solid'\n }\n : {\n stroke: ABSTRACT_HANDLE_COLOR,\n strokeWidth: 3,\n fillStyle: 'solid'\n };\n}\n\nexport function changeBoardClass(board: PlaitBoard, activeHandlePosition: AbstractHandlePosition | undefined, isHorizontal: boolean) {\n if (activeHandlePosition) {\n if (isHorizontal) {\n PlaitBoard.getBoardNativeElement(board).classList.add('abstract-resizing-horizontal');\n } else {\n PlaitBoard.getBoardNativeElement(board).classList.add('abstract-resizing-vertical');\n }\n } else {\n PlaitBoard.getBoardNativeElement(board).classList.remove('abstract-resizing-horizontal');\n PlaitBoard.getBoardNativeElement(board).classList.remove('abstract-resizing-vertical');\n }\n}\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../../interfaces';\n\nexport abstract class BaseDrawer {\n g?: SVGGElement;\n\n constructor(protected board: PlaitBoard) {}\n\n abstract canDraw(element: MindElement): boolean;\n\n abstract draw(element: MindElement): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n }\n }\n}\n\nexport interface AfterDraw {\n afterDraw(element: MindElement): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { AbstractNode } from '@plait/layouts';\nimport { Path } from 'slate';\n\nexport function findNewChildNodePath(board: PlaitBoard, element: PlaitElement) {\n return PlaitBoard.findPath(board, element).concat((element.children || []).filter(child => !AbstractNode.isAbstract(child)).length);\n}\n\nexport function findNewSiblingNodePath(board: PlaitBoard, element: PlaitElement) {\n const path = PlaitBoard.findPath(board, element);\n return Path.next(path);\n}\n","import { PlaitBoard, createG } from '@plait/core';\nimport { MindElement, BaseData, ExtendUnderlineCoordinateType, ExtendLayoutType, PlaitMind } from '../interfaces';\nimport { AfterDraw, BaseDrawer } from './base/base';\nimport { getRectangleByNode } from '../utils/graph';\nimport { getNodeShapeByElement } from '../utils/shape';\nimport {\n EXTEND_RADIUS,\n QUICK_INSERT_CIRCLE_COLOR,\n QUICK_INSERT_CIRCLE_OFFSET,\n QUICK_INSERT_INNER_CROSS_COLOR,\n STROKE_WIDTH\n} from '../constants/default';\nimport { MindNodeShape } from '../constants/node';\nimport { MindLayoutType, OriginNode, isStandardLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { fromEvent } from 'rxjs';\nimport { insertMindElement } from '../utils/mind';\nimport { take } from 'rxjs/operators';\nimport { findNewChildNodePath } from '../utils/path';\nimport { getBranchColorByMindElement, getNextBranchColor } from '../utils/node-style/branch';\n\nexport class QuickInsertDrawer extends BaseDrawer implements AfterDraw {\n canDraw(element: MindElement<BaseData>): boolean {\n if (PlaitBoard.isReadonly(this.board) || element?.isCollapsed) {\n return false;\n }\n return true;\n }\n draw(element: MindElement<BaseData>): SVGGElement {\n let offset = element.children.length > 0 && !element.isRoot ? EXTEND_RADIUS : 0;\n const quickInsertG = createG();\n this.g = quickInsertG;\n quickInsertG.classList.add('quick-insert');\n const node = MindElement.getNode(element);\n const { x, y, width, height } = getRectangleByNode(node);\n\n /**\n * 方位:\n * 1. 左、左上、左下\n * 2. 右、右上、右下\n * 3. 上、上左、上右\n * 4. 下、下左、下右\n */\n const shape = getNodeShapeByElement(element);\n // 形状是矩形要偏移边框的线宽\n const strokeWidth = element.branchWidth ? element.branchWidth : STROKE_WIDTH;\n let offsetBorderLineWidth = 0;\n if (shape === MindNodeShape.roundRectangle && offset === 0) {\n offsetBorderLineWidth = strokeWidth;\n }\n let offsetRootBorderLineWidth = 0;\n if (element.isRoot) {\n offsetRootBorderLineWidth = strokeWidth;\n }\n // 当没有子节点时,需要缩小的偏移量\n const extraOffset = 3;\n const underlineCoordinates: ExtendUnderlineCoordinateType = {\n // 画线方向:右向左 <--\n [MindLayoutType.left]: {\n // EXTEND_RADIUS * 0.5 是 左方向,折叠/收起的偏移量\n startX: x - (offset > 0 ? offset + EXTEND_RADIUS * 0.5 : 0) - offsetRootBorderLineWidth,\n startY: y + height,\n endX:\n x -\n offsetBorderLineWidth -\n offsetRootBorderLineWidth -\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) -\n EXTEND_RADIUS,\n endY: y + height\n },\n // 画线方向:左向右 -->\n [MindLayoutType.right]: {\n startX: x + width + (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) + offsetRootBorderLineWidth,\n startY: y + height,\n endX:\n x +\n width +\n offsetBorderLineWidth +\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) +\n EXTEND_RADIUS +\n offsetRootBorderLineWidth,\n endY: y + height\n },\n // 画线方向:下向上 -->\n [MindLayoutType.upward]: {\n startX: x + width * 0.5,\n startY: y - offsetBorderLineWidth - (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) - offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y -\n offsetBorderLineWidth -\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) -\n EXTEND_RADIUS -\n offsetRootBorderLineWidth\n },\n // 画线方向:上向下 -->\n [MindLayoutType.downward]: {\n startX: x + width * 0.5,\n startY:\n y + height + offsetBorderLineWidth + (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) + offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y +\n height +\n offsetBorderLineWidth +\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) +\n EXTEND_RADIUS +\n offsetRootBorderLineWidth\n },\n [MindLayoutType.leftBottomIndented]: {\n startX: x + width * 0.5,\n startY:\n y + height + offsetBorderLineWidth + (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) + offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y +\n height +\n offsetBorderLineWidth +\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) +\n EXTEND_RADIUS +\n offsetRootBorderLineWidth\n },\n [MindLayoutType.leftTopIndented]: {\n startX: x + width * 0.5,\n startY: y - offsetBorderLineWidth - (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) - offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y -\n offsetBorderLineWidth -\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) -\n EXTEND_RADIUS -\n offsetRootBorderLineWidth\n },\n [MindLayoutType.rightBottomIndented]: {\n startX: x + width * 0.5,\n startY:\n y + height + offsetBorderLineWidth + (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) + offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y +\n height +\n offsetBorderLineWidth +\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) +\n EXTEND_RADIUS +\n offsetRootBorderLineWidth\n },\n [MindLayoutType.rightTopIndented]: {\n startX: x + width * 0.5,\n startY: y - offsetBorderLineWidth - (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) - offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y -\n offsetBorderLineWidth -\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) -\n EXTEND_RADIUS -\n offsetRootBorderLineWidth\n }\n };\n if (shape === MindNodeShape.roundRectangle || element.isRoot) {\n underlineCoordinates[MindLayoutType.left].startY -= height * 0.5;\n underlineCoordinates[MindLayoutType.left].endY -= height * 0.5;\n underlineCoordinates[MindLayoutType.right].startY -= height * 0.5;\n underlineCoordinates[MindLayoutType.right].endY -= height * 0.5;\n }\n const branchColor = PlaitMind.isMind(element) ? getNextBranchColor(element) : getBranchColorByMindElement(this.board, element);\n let nodeLayout = MindQueries.getCorrectLayoutByElement(element) as ExtendLayoutType;\n if (element.isRoot && isStandardLayout(nodeLayout)) {\n const root = element as OriginNode;\n nodeLayout = root.children.length >= root.rightNodeCount ? MindLayoutType.left : MindLayoutType.right;\n }\n const underlineCoordinate = underlineCoordinates[nodeLayout];\n if (underlineCoordinate) {\n const underline = PlaitBoard.getRoughSVG(this.board).line(\n underlineCoordinate.startX,\n underlineCoordinate.startY,\n underlineCoordinate.endX,\n underlineCoordinate.endY,\n { stroke: branchColor, strokeWidth }\n );\n const circleCoordinates = {\n startX: underlineCoordinate.endX,\n startY: underlineCoordinate.endY\n };\n const circle = PlaitBoard.getRoughSVG(this.board).circle(circleCoordinates.startX, circleCoordinates.startY, EXTEND_RADIUS, {\n fill: QUICK_INSERT_CIRCLE_COLOR,\n stroke: QUICK_INSERT_CIRCLE_COLOR,\n fillStyle: 'solid'\n });\n const innerCrossCoordinates = {\n horizontal: {\n startX: circleCoordinates.startX - EXTEND_RADIUS * 0.5 + 3,\n startY: circleCoordinates.startY,\n endX: circleCoordinates.startX + EXTEND_RADIUS * 0.5 - 3,\n endY: circleCoordinates.startY\n },\n vertical: {\n startX: circleCoordinates.startX,\n startY: circleCoordinates.startY - EXTEND_RADIUS * 0.5 + 3,\n endX: circleCoordinates.startX,\n endY: circleCoordinates.startY + EXTEND_RADIUS * 0.5 - 3\n }\n };\n const innerCrossHLine = PlaitBoard.getRoughSVG(this.board).line(\n innerCrossCoordinates.horizontal.startX,\n innerCrossCoordinates.horizontal.startY,\n innerCrossCoordinates.horizontal.endX,\n innerCrossCoordinates.horizontal.endY,\n {\n stroke: QUICK_INSERT_INNER_CROSS_COLOR,\n strokeWidth: 2\n }\n );\n const innerRingVLine = PlaitBoard.getRoughSVG(this.board).line(\n innerCrossCoordinates.vertical.startX,\n innerCrossCoordinates.vertical.startY,\n innerCrossCoordinates.vertical.endX,\n innerCrossCoordinates.vertical.endY,\n {\n stroke: QUICK_INSERT_INNER_CROSS_COLOR,\n strokeWidth: 2\n }\n );\n quickInsertG.appendChild(underline);\n quickInsertG.appendChild(circle);\n quickInsertG.appendChild(innerCrossHLine);\n quickInsertG.appendChild(innerRingVLine);\n }\n return quickInsertG;\n }\n afterDraw(element: MindElement): void {\n if (!this.g) {\n throw new Error(`can not find quick insert g`);\n }\n fromEvent<MouseEvent>(this.g, 'mousedown')\n .pipe(take(1))\n .subscribe(e => {\n e.stopPropagation();\n });\n fromEvent(this.g, 'mouseup')\n .pipe(take(1))\n .subscribe(() => {\n const path = findNewChildNodePath(this.board, element);\n insertMindElement(this.board, element, path);\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewContainerRef\n} from '@angular/core';\nimport {\n PlaitPointerType,\n createG,\n createText,\n IS_TEXT_EDITABLE,\n MERGING,\n PlaitBoard,\n toPoint,\n transformPoint,\n Transforms,\n drawRoundRectangle,\n PlaitPluginElementComponent,\n PlaitElement,\n NODE_TO_INDEX,\n PlaitPluginElementContext,\n OnContextChanged\n} from '@plait/core';\nimport {\n isBottomLayout,\n isHorizontalLayout,\n isIndentedLayout,\n isLeftLayout,\n AbstractNode,\n isRightLayout,\n isTopLayout,\n MindLayoutType\n} from '@plait/layouts';\nimport { hasEditableTarget, PlaitRichtextComponent, setFullSelectionAndFocus, updateRichText } from '@plait/richtext';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject, timer } from 'rxjs';\nimport { debounceTime, filter, take, takeUntil } from 'rxjs/operators';\nimport { Editor, Operation } from 'slate';\nimport { EXTEND_OFFSET, EXTEND_RADIUS, MindNodeShape, NODE_MIN_WIDTH, PRIMARY_COLOR, STROKE_WIDTH } from './constants';\nimport { drawIndentedLink } from './draw/indented-link';\nimport { drawLogicLink } from './draw/link/logic-link';\nimport { drawMindNodeRichtext, updateMindNodeTopicSize } from './draw/richtext';\nimport { drawRectangleNode } from './draw/shape';\nimport { MindElement, PlaitMind } from './interfaces/element';\nimport { MindNode } from './interfaces/node';\nimport { MindQueries } from './queries';\nimport { getRectangleByNode, hitMindElement } from './utils/graph';\nimport { getChildrenCount } from './utils/mind';\nimport { getNodeShapeByElement } from './utils/shape';\nimport { ELEMENT_TO_NODE } from './utils/weak-maps';\nimport { getRichtextContentSize } from '@plait/richtext';\nimport { drawAbstractLink } from './draw/link/abstract-link';\nimport { EmojisDrawer } from './plugins/emoji/emoji.drawer';\nimport { PlaitMindEmojiBoard } from './plugins/emoji/with-mind-emoji';\nimport { MindTransforms } from './transforms';\nimport { drawAbstractIncludedOutline } from './draw/abstract';\nimport { AbstractHandlePosition } from './interfaces';\nimport { QuickInsertDrawer } from './drawer/quick-insert.drawer';\nimport { hasAfterDraw } from './drawer/base/base';\nimport { getBranchColorByMindElement } from './utils/node-style/branch';\n\n@Component({\n selector: 'plait-mind-node',\n template: `\n <plait-children\n *ngIf=\"!element.isCollapsed\"\n [board]=\"board\"\n [parent]=\"element\"\n [effect]=\"effect\"\n [parentG]=\"parentG\"\n ></plait-children>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MindNodeComponent<T extends MindElement = MindElement> extends PlaitPluginElementComponent<T>\n implements OnInit, OnDestroy, OnContextChanged<T> {\n isEditable = false;\n\n roughSVG!: RoughSVG;\n\n node!: MindNode;\n\n parent!: MindNode;\n\n index!: number;\n\n abstractIncludedOutlineG?: SVGGElement;\n\n parentG!: SVGGElement;\n\n activeG: SVGGElement[] = [];\n\n shapeG: SVGGElement | null = null;\n\n linkG?: SVGGElement;\n\n richtextG?: SVGGElement;\n\n foreignObject?: SVGForeignObjectElement;\n\n extendG?: SVGGElement;\n\n maskG!: SVGGElement;\n\n richtextComponentRef?: ComponentRef<PlaitRichtextComponent>;\n\n destroy$ = new Subject<void>();\n\n emojisDrawer!: EmojisDrawer;\n\n quickInsertDrawer!: QuickInsertDrawer;\n\n public get handActive(): boolean {\n return this.board.pointer === PlaitPointerType.hand;\n }\n\n constructor(private viewContainerRef: ViewContainerRef, protected cdr: ChangeDetectorRef, private render2: Renderer2) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.emojisDrawer = new EmojisDrawer(this.board as PlaitMindEmojiBoard, this.viewContainerRef);\n this.quickInsertDrawer = new QuickInsertDrawer(this.board);\n super.ngOnInit();\n this.node = ELEMENT_TO_NODE.get(this.element) as MindNode;\n if (!PlaitMind.isMind(this.element)) {\n this.parent = MindElement.getNode(MindElement.getParent(this.element));\n }\n this.index = NODE_TO_INDEX.get(this.element) || 0;\n this.roughSVG = PlaitBoard.getRoughSVG(this.board);\n this.parentG = PlaitElement.getComponent(MindElement.getRoot(this.board, this.element)).rootG as SVGGElement;\n this.drawShape();\n this.drawLink();\n this.drawRichtext();\n this.drawEmojis();\n this.drawActiveG();\n this.updateActiveClass();\n this.drawMaskG();\n this.drawExtend();\n this.drawQuickInsert();\n }\n\n onContextChanged(value: PlaitPluginElementContext<T>, previous: PlaitPluginElementContext<T>) {\n const newNode = ELEMENT_TO_NODE.get(this.element) as MindNode;\n if (!PlaitMind.isMind(this.element)) {\n this.parent = MindElement.getNode(MindElement.getParent(this.element));\n }\n\n // resolve move node richtext lose issue\n if (this.node !== newNode) {\n if (this.foreignObject && this.foreignObject.children.length <= 0) {\n this.foreignObject?.appendChild(this.richtextComponentRef?.instance.editable as HTMLElement);\n }\n }\n\n const isEquals = MindNode.isEquals(this.node, newNode);\n this.node = newNode;\n this.drawActiveG();\n this.updateActiveClass();\n if (!isEquals) {\n this.drawShape();\n this.drawLink();\n this.updateRichtext();\n this.drawMaskG();\n this.drawExtend();\n this.drawQuickInsert();\n this.drawEmojis();\n }\n }\n\n drawEmojis() {\n const g = this.emojisDrawer.drawEmojis(this.element);\n if (g) {\n this.g.append(g);\n }\n }\n\n drawQuickInsert() {\n this.quickInsertDrawer.destroy();\n if (this.quickInsertDrawer.canDraw(this.element)) {\n const g = this.quickInsertDrawer.draw(this.element);\n if (hasAfterDraw(this.quickInsertDrawer)) {\n this.quickInsertDrawer.afterDraw(this.element);\n }\n this.extendG?.appendChild(g);\n }\n }\n\n drawShape() {\n this.destroyShape();\n const shape = getNodeShapeByElement(this.node.origin) as MindNodeShape;\n switch (shape) {\n case MindNodeShape.roundRectangle:\n this.shapeG = drawRectangleNode(this.board, this.node as MindNode);\n this.g.prepend(this.shapeG);\n break;\n default:\n break;\n }\n }\n\n destroyShape() {\n if (this.shapeG) {\n this.shapeG.remove();\n this.shapeG = null;\n }\n }\n\n drawLink() {\n if (!this.parent) {\n return;\n }\n\n if (this.linkG) {\n this.linkG.remove();\n }\n\n const layout = MindQueries.getLayoutByElement(this.parent.origin) as MindLayoutType;\n if (AbstractNode.isAbstract(this.node.origin)) {\n this.linkG = drawAbstractLink(this.board, this.node, isHorizontalLayout(layout));\n } else if (MindElement.isIndentedLayout(this.parent.origin)) {\n this.linkG = drawIndentedLink(this.board, this.parent, this.node);\n } else {\n this.linkG = drawLogicLink(this.board, this.node, this.parent, isHorizontalLayout(layout));\n }\n this.g.append(this.linkG);\n }\n\n destroyLine() {\n if (this.parent) {\n if (this.linkG) {\n this.linkG.remove();\n }\n }\n }\n\n drawMaskG() {\n this.destroyMaskG();\n const lineWidthOffset = 2;\n const extendOffset = 15;\n const nodeLayout = MindQueries.getLayoutByElement(this.node.origin) as MindLayoutType;\n const isTop = isTopLayout(nodeLayout);\n const isRight = isRightLayout(nodeLayout);\n const isBottom = isBottomLayout(nodeLayout);\n const isLeft = isLeftLayout(nodeLayout);\n const { x, y, width, height } = getRectangleByNode(this.node as MindNode);\n\n let drawX = x;\n let drawY = y;\n let drawWidth = x + width;\n let drawHeight = y + height;\n\n switch (true) {\n case isTop:\n drawX = x - lineWidthOffset;\n drawY = y - extendOffset;\n drawWidth = x + width + lineWidthOffset;\n drawHeight = y + height + lineWidthOffset;\n break;\n case isBottom:\n drawX = x - lineWidthOffset;\n drawY = y - lineWidthOffset;\n drawWidth = x + width + lineWidthOffset;\n drawHeight = y + height + extendOffset;\n break;\n case isLeft:\n drawX = x - extendOffset;\n drawY = y - lineWidthOffset;\n drawWidth = x + width + lineWidthOffset;\n drawHeight = y + height + lineWidthOffset;\n break;\n case isRight:\n drawX = x - lineWidthOffset;\n drawY = y - lineWidthOffset;\n drawWidth = x + width + extendOffset;\n drawHeight = y + height + lineWidthOffset;\n break;\n }\n this.maskG = drawRoundRectangle(\n this.roughSVG as RoughSVG,\n drawX,\n drawY,\n drawWidth,\n drawHeight,\n { stroke: 'none', fill: 'rgba(255,255,255,0)', fillStyle: 'solid' },\n true\n );\n this.maskG.classList.add('mask');\n this.maskG.setAttribute('visibility', 'visible');\n this.g.append(this.maskG);\n\n if (this.isEditable) {\n this.disabledMaskG();\n }\n\n fromEvent<MouseEvent>(this.maskG, 'mouseenter')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return PlaitBoard.isFocus(this.board) && !this.element.isCollapsed && !this.handActive;\n })\n )\n .subscribe(() => {\n this.g.classList.add('hovered');\n });\n fromEvent<MouseEvent>(this.maskG, 'mouseleave')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return PlaitBoard.isFocus(this.board) && !this.element.isCollapsed;\n })\n )\n .subscribe(() => {\n this.g.classList.remove('hovered');\n });\n }\n\n destroyMaskG() {\n if (this.maskG) {\n this.maskG.remove();\n this.g.classList.remove('hovered');\n }\n }\n\n enableMaskG() {\n if (this.maskG) {\n this.maskG.setAttribute('visibility', 'visible');\n }\n }\n\n disabledMaskG() {\n if (this.maskG) {\n this.maskG.setAttribute('visibility', 'hidden');\n }\n }\n\n drawActiveG() {\n this.destroyActiveG();\n this.abstractIncludedOutlineG?.remove();\n if (this.selected) {\n if (AbstractNode.isAbstract(this.element)) {\n this.updateAbstractIncludedOutline();\n }\n let { x, y, width, height } = getRectangleByNode(this.node as MindNode);\n const selectedStrokeG = drawRoundRectangle(\n this.roughSVG as RoughSVG,\n x - 2,\n y - 2,\n x + width + 2,\n y + height + 2,\n { stroke: PRIMARY_COLOR, strokeWidth: 2, fill: '' },\n true\n );\n // 影响 mask 移入移出事件\n selectedStrokeG.style.pointerEvents = 'none';\n this.g.appendChild(selectedStrokeG);\n this.activeG.push(selectedStrokeG);\n if (this.richtextComponentRef?.instance.plaitReadonly === true) {\n const selectedBackgroundG = drawRoundRectangle(\n this.roughSVG as RoughSVG,\n x - 2,\n y - 2,\n x + width + 2,\n y + height + 2,\n { stroke: PRIMARY_COLOR, fill: PRIMARY_COLOR, fillStyle: 'solid' },\n true\n );\n selectedBackgroundG.style.opacity = '0.15';\n // 影响双击事件\n selectedBackgroundG.style.pointerEvents = 'none';\n this.g.appendChild(selectedBackgroundG);\n this.activeG.push(selectedBackgroundG, selectedStrokeG);\n }\n }\n }\n\n destroyActiveG() {\n this.activeG.forEach(g => g.remove());\n this.activeG = [];\n }\n\n updateActiveClass() {\n if (!this.g) {\n return;\n }\n if (this.selected) {\n this.render2.addClass(this.g, 'active');\n } else {\n this.render2.removeClass(this.g, 'active');\n }\n }\n\n drawRichtext() {\n const { richtextG, richtextComponentRef, foreignObject } = drawMindNodeRichtext(this.node as MindNode, this.viewContainerRef);\n this.richtextComponentRef = richtextComponentRef;\n this.richtextG = richtextG;\n this.foreignObject = foreignObject;\n this.render2.addClass(richtextG, 'richtext');\n this.g.append(richtextG);\n }\n\n drawExtend() {\n this.destroyExtend();\n // create extend\n this.extendG = createG();\n const collapseG = createG();\n this.extendG.classList.add('extend');\n collapseG.classList.add('collapse-container');\n this.g.append(this.extendG);\n this.extendG.append(collapseG);\n if (this.node.origin.isRoot) {\n return;\n }\n // interactive\n fromEvent(collapseG, 'mouseup')\n .pipe(\n filter(() => !this.handActive || this.board.options.readonly),\n take(1)\n )\n .subscribe(() => {\n const isCollapsed = !this.node.origin.isCollapsed;\n const newElement: Partial<MindElement> = { isCollapsed };\n const path = PlaitBoard.findPath(this.board, this.element);\n Transforms.setNode(this.board, newElement, path);\n });\n\n const { x, y, width, height } = getRectangleByNode(this.node);\n const stroke = getBranchColorByMindElement(this.board, this.element);\n const strokeWidth = this.node.origin.branchWidth ? this.node.origin.branchWidth : STROKE_WIDTH;\n const extendY = y + height / 2;\n const nodeLayout = MindQueries.getCorrectLayoutByElement(this.element) as MindLayoutType;\n\n let extendLineXY = [\n [x + width, extendY],\n [x + width + EXTEND_OFFSET, extendY]\n ];\n\n let arrowYOffset = [-4, 1, -0.6, 4];\n let arrowXOffset = [10, 5.5, 5.5, 10];\n\n let extendLineXOffset = [0, 0];\n let extendLineYOffset = [0, 0];\n\n let circleOffset = [EXTEND_RADIUS / 2, 0];\n\n if (isHorizontalLayout(nodeLayout) && !isIndentedLayout(nodeLayout)) {\n extendLineYOffset =\n (getNodeShapeByElement(this.node.origin) as MindNodeShape) === MindNodeShape.roundRectangle\n ? [0, 0]\n : [height / 2, height / 2];\n if (isLeftLayout(nodeLayout)) {\n //左\n extendLineXOffset = [-width, -width - EXTEND_OFFSET * 2];\n circleOffset = [-EXTEND_RADIUS / 2, 0];\n arrowXOffset = [-10, -5.5, -5.5, -10];\n }\n } else {\n arrowXOffset = [-4, 0.6, -1, 4];\n if (isTopLayout(nodeLayout)) {\n //上\n extendLineXOffset = [-width / 2, -width / 2 - EXTEND_OFFSET];\n extendLineYOffset = [-height / 2, -height / 2 - EXTEND_OFFSET];\n arrowYOffset = [-10, -5.5, -5.5, -10];\n circleOffset = [0, -EXTEND_RADIUS / 2];\n } else {\n //下\n extendLineXOffset = [-width / 2, -width / 2 - EXTEND_OFFSET];\n extendLineYOffset = [height / 2, height / 2 + EXTEND_OFFSET];\n arrowYOffset = [10, 5.5, 5.5, 10];\n circleOffset = [0, EXTEND_RADIUS / 2];\n }\n }\n\n extendLineXY = [\n [extendLineXY[0][0] + extendLineXOffset[0], extendLineXY[0][1] + extendLineYOffset[0]],\n [extendLineXY[1][0] + extendLineXOffset[1], extendLineXY[1][1] + extendLineYOffset[1]]\n ];\n\n const extendLine = this.roughSVG.line(extendLineXY[0][0], extendLineXY[0][1], extendLineXY[1][0], extendLineXY[1][1], {\n strokeWidth,\n stroke\n });\n\n //绘制箭头\n const hideArrowTopLine = this.roughSVG.line(\n extendLineXY[1][0] + arrowXOffset[0],\n extendLineXY[1][1] + arrowYOffset[0],\n extendLineXY[1][0] + arrowXOffset[1],\n extendLineXY[1][1] + arrowYOffset[1],\n {\n stroke,\n strokeWidth: 2\n }\n );\n const hideArrowBottomLine = this.roughSVG.line(\n extendLineXY[1][0] + arrowXOffset[2],\n extendLineXY[1][1] + arrowYOffset[2],\n extendLineXY[1][0] + arrowXOffset[3],\n extendLineXY[1][1] + arrowYOffset[3],\n {\n stroke,\n strokeWidth: 2\n }\n );\n\n if (this.node.origin.isCollapsed) {\n const badge = this.roughSVG.circle(extendLineXY[1][0] + circleOffset[0], extendLineXY[1][1] + circleOffset[1], EXTEND_RADIUS, {\n fill: stroke,\n stroke,\n fillStyle: 'solid'\n });\n\n let numberOffset = 0;\n if (getChildrenCount(this.node.origin) >= 10) numberOffset = -2;\n if (getChildrenCount(this.node.origin) === 1) numberOffset = 1;\n\n const badgeText = createText(\n extendLineXY[1][0] + circleOffset[0] - 4 + numberOffset,\n extendLineXY[1][1] + circleOffset[1] + 4,\n stroke,\n `${getChildrenCount(this.node.origin)}`\n );\n\n this.g.classList.add('collapsed');\n badge.setAttribute('style', 'opacity: 0.15');\n badgeText.setAttribute('style', 'font-size: 12px');\n collapseG.appendChild(badge);\n collapseG.appendChild(badgeText);\n collapseG.appendChild(extendLine);\n } else {\n this.g.classList.remove('collapsed');\n if (this.node.origin.children.length > 0) {\n const hideCircleG = this.roughSVG.circle(\n extendLineXY[1][0] + circleOffset[0],\n extendLineXY[1][1] + circleOffset[1],\n EXTEND_RADIUS - 1,\n {\n fill: '#fff',\n stroke,\n strokeWidth,\n fillStyle: 'solid'\n }\n );\n collapseG.appendChild(hideCircleG);\n collapseG.appendChild(hideArrowTopLine);\n collapseG.appendChild(hideArrowBottomLine);\n }\n }\n }\n\n destroyExtend() {\n if (this.extendG) {\n this.extendG.remove();\n }\n }\n\n destroyRichtext() {\n if (this.richtextG) {\n this.richtextG.remove();\n }\n if (this.richtextComponentRef) {\n this.richtextComponentRef.destroy();\n }\n }\n\n updateAbstractIncludedOutline(activeHandlePosition?: AbstractHandlePosition, resizingLocation?: number) {\n this.abstractIncludedOutlineG?.remove();\n this.abstractIncludedOutlineG = drawAbstractIncludedOutline(\n this.board,\n this.roughSVG,\n this.element,\n activeHandlePosition,\n resizingLocation\n );\n PlaitBoard.getHost(this.board).append(this.abstractIncludedOutlineG);\n }\n\n updateRichtext() {\n updateRichText(this.node.origin.data.topic, this.richtextComponentRef!);\n updateMindNodeTopicSize(this.node, this.richtextG as SVGGElement, this.isEditable);\n }\n\n startEditText(isEnd: boolean, isClear: boolean) {\n if (!this.richtextComponentRef) {\n throw new Error('undefined richtextComponentRef');\n }\n const richtextInstance = this.richtextComponentRef.instance;\n\n this.isEditable = true;\n IS_TEXT_EDITABLE.set(this.board, true);\n this.disabledMaskG();\n updateMindNodeTopicSize(this.node, this.richtextG as SVGGElement, this.isEditable);\n if (richtextInstance.plaitReadonly) {\n richtextInstance.plaitReadonly = false;\n this.richtextComponentRef.changeDetectorRef.detectChanges();\n this.drawActiveG();\n const location = isEnd ? Editor.end(richtextInstance.editor, [0]) : [0];\n setFullSelectionAndFocus(richtextInstance.editor, location);\n if (isClear) {\n Editor.deleteBackward(richtextInstance.editor);\n }\n // handle invalid width and height (old data)\n let { width, height } = getRichtextContentSize(richtextInstance.editable);\n if (width !== this.element.width || height !== this.element.height) {\n MindTransforms.setTopicSize(this.board, this.element, width, height);\n }\n }\n let richtext = richtextInstance.plaitValue;\n // use debounceTime to wait DOM render complete\n const valueChange$ = richtextInstance.plaitChange\n .pipe(\n debounceTime(0),\n filter(event => {\n // 过滤掉 operations 中全是 set_selection 的操作\n return !event.operations.every(op => Operation.isSelectionOperation(op));\n })\n )\n .subscribe(event => {\n if (richtext === event.value) {\n return;\n }\n this.updateRichtext();\n // 更新富文本、更新宽高\n let { width, height } = getRichtextContentSize(richtextInstance.editable);\n MindTransforms.setTopic(this.board, this.element, event.value, width, height);\n MERGING.set(this.board, true);\n });\n const composition$ = richtextInstance.plaitComposition.pipe(debounceTime(0)).subscribe(event => {\n let { width, height } = getRichtextContentSize(richtextInstance.editable);\n if (width < NODE_MIN_WIDTH) {\n width = NODE_MIN_WIDTH;\n }\n if (event.isComposing && (width !== this.node.origin.width || height !== this.node.origin.height)) {\n const newElement: Partial<MindElement> = {\n width: width / this.board.viewport.zoom,\n height: height / this.board.viewport.zoom\n };\n const path = PlaitBoard.findPath(this.board, this.element);\n Transforms.setNode(this.board, newElement, path);\n MERGING.set(this.board, true);\n }\n });\n const mousedown$ = fromEvent<MouseEvent>(document, 'mousedown').subscribe((event: MouseEvent) => {\n const point = transformPoint(this.board, toPoint(event.x, event.y, PlaitBoard.getHost(this.board)));\n const clickInNode = hitMindElement(this.board, point, this.element);\n if (clickInNode && !hasEditableTarget(richtextInstance.editor, event.target)) {\n event.preventDefault();\n } else if (!clickInNode) {\n // handle composition input state, like: Chinese IME Composition Input\n timer(0).subscribe(() => {\n exitHandle();\n this.enableMaskG();\n });\n }\n });\n const editor = richtextInstance.editor;\n const { keydown } = editor;\n editor.keydown = (event: KeyboardEvent) => {\n if (event.isComposing) {\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n exitHandle();\n this.drawActiveG();\n this.enableMaskG();\n return;\n }\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n event.stopPropagation();\n exitHandle();\n this.drawActiveG();\n this.enableMaskG();\n return;\n }\n if (event.key === 'Tab') {\n event.preventDefault();\n event.stopPropagation();\n exitHandle();\n this.drawActiveG();\n this.drawMaskG();\n }\n };\n const exitHandle = () => {\n // unsubscribe\n valueChange$.unsubscribe();\n composition$.unsubscribe();\n mousedown$.unsubscribe();\n editor.keydown = keydown; // reset keydown\n // editable status\n MERGING.set(this.board, false);\n richtextInstance.plaitReadonly = true;\n this.richtextComponentRef?.changeDetectorRef.markForCheck();\n this.isEditable = false;\n updateMindNodeTopicSize(this.node, this.richtextG as SVGGElement, this.isEditable);\n IS_TEXT_EDITABLE.set(this.board, false);\n };\n }\n\n trackBy = (index: number, node: MindNode) => {\n return node.origin.id;\n };\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.abstractIncludedOutlineG?.remove();\n this.destroyRichtext();\n this.destroy$.next();\n this.destroy$.complete();\n if (ELEMENT_TO_NODE.get(this.element) === this.node) {\n ELEMENT_TO_NODE.delete(this.element);\n }\n }\n}\n","import { ConnectingPosition, LayoutNode, LayoutOptions, OriginNode, isHorizontalLayout, isHorizontalLogicLayout, isIndentedLayout } from \"@plait/layouts\";\nimport { MindElement } from \"./interfaces/element\";\nimport { BASE, STROKE_WIDTH } from \"./constants/default\";\nimport { getRootLayout } from \"./utils/layout\";\nimport { MindNodeShape } from \"./constants/node\";\nimport { NodeSpace } from \"./utils/node-space\";\n\nexport const getLayoutOptions = () => {\n function getMainAxle(element: MindElement, parent?: LayoutNode) {\n const strokeWidth = element.strokeWidth || STROKE_WIDTH;\n if (element.isRoot) {\n return BASE * 12;\n }\n if (parent && parent.isRoot()) {\n return BASE * 3 + strokeWidth / 2;\n }\n return BASE * 3 + strokeWidth / 2;\n }\n\n function getSecondAxle(element: MindElement, parent?: LayoutNode) {\n const strokeWidth = element.strokeWidth || STROKE_WIDTH;\n if (element.isRoot) {\n return BASE * 10 + strokeWidth / 2;\n }\n return BASE * 6 + strokeWidth / 2;\n }\n\n return {\n getHeight(element: MindElement) {\n return NodeSpace.getNodeHeight(element);\n },\n getWidth(element: MindElement) {\n return NodeSpace.getNodeWidth(element);\n },\n getHorizontalGap(element: MindElement, parent?: LayoutNode) {\n const _layout = (parent && parent.layout) || getRootLayout(element);\n const isHorizontal = isHorizontalLayout(_layout);\n const strokeWidth = element.strokeWidth || STROKE_WIDTH;\n if (isIndentedLayout(_layout)) {\n return BASE * 4 + strokeWidth;\n }\n if (!isHorizontal) {\n return getMainAxle(element, parent);\n } else {\n return getSecondAxle(element, parent);\n }\n },\n getVerticalGap(element: MindElement, parent?: LayoutNode) {\n const _layout = (parent && parent.layout) || getRootLayout(element);\n if (isIndentedLayout(_layout)) {\n return BASE;\n }\n const isHorizontal = isHorizontalLayout(_layout);\n if (isHorizontal) {\n return getMainAxle(element, parent);\n } else {\n return getSecondAxle(element, parent);\n }\n },\n getVerticalConnectingPosition(element: MindElement, parent?: LayoutNode) {\n if (element.shape === MindNodeShape.underline && parent && isHorizontalLogicLayout(parent.layout)) {\n return ConnectingPosition.bottom;\n }\n return undefined;\n },\n getExtendHeight(node: OriginNode) {\n return BASE * 6;\n },\n getIndentedCrossLevelGap() {\n return BASE * 2;\n }\n } as LayoutOptions;\n}","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { PlaitMind } from './interfaces/element';\nimport { MindNode } from './interfaces/node';\nimport { BeforeContextChange, PlaitPluginElementContext, depthFirstRecursion } from '@plait/core';\nimport { GlobalLayout, OriginNode } from '@plait/layouts';\nimport { ELEMENT_TO_NODE } from './utils/weak-maps';\nimport { MindNodeComponent } from './node.component';\nimport { getLayoutOptions } from './layout-option';\nimport { getDefaultLayout } from './utils/layout';\n\n@Component({\n selector: 'plait-mind',\n template: `\n <plait-children [board]=\"board\" [parent]=\"element\" [effect]=\"effect\" [parentG]=\"rootG\"></plait-children>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitMindComponent extends MindNodeComponent<PlaitMind> implements OnInit, BeforeContextChange<PlaitMind> {\n root!: MindNode;\n\n rootG!: SVGGElement;\n\n ngOnInit(): void {\n this.updateMindLayout();\n super.ngOnInit();\n }\n\n beforeContextChange(value: PlaitPluginElementContext<PlaitMind>) {\n if (value.element !== this.element && this.initialized) {\n this.updateMindLayout(value.element);\n }\n }\n\n updateMindLayout(element = this.element) {\n const mindLayoutType = element.layout || getDefaultLayout();\n this.root = (GlobalLayout.layout((element as unknown) as OriginNode, getLayoutOptions(), mindLayoutType) as unknown) as MindNode;\n this.updateMindNodeLocation(element);\n }\n\n updateMindNodeLocation(element: PlaitMind) {\n const { x, y, hGap, vGap } = this.root;\n const offsetX = x + hGap;\n const offsetY = y + vGap;\n depthFirstRecursion<MindNode>(this.root, node => {\n node.x = node.x - offsetX + element.points[0][0];\n node.y = node.y - offsetY + element.points[0][1];\n ELEMENT_TO_NODE.set(node.origin, node);\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { PlaitModule } from '@plait/core';\nimport { RichtextModule } from '@plait/richtext';\nimport { MindNodeComponent } from './node.component';\nimport { PlaitMindComponent } from './mind.component';\n\n@NgModule({\n declarations: [PlaitMindComponent, MindNodeComponent],\n imports: [BrowserModule, RichtextModule, PlaitModule],\n exports: [PlaitMindComponent, MindNodeComponent]\n})\nexport class MindModule {}\n","import {\n createG,\n distanceBetweenPointAndPoint,\n IS_TEXT_EDITABLE,\n Path,\n PlaitBoard,\n PlaitElement,\n PlaitPlugin,\n Point,\n toPoint,\n transformPoint,\n Transforms,\n ELEMENT_TO_COMPONENT,\n getSelectedElements\n} from '@plait/core';\nimport {\n AbstractNode,\n isBottomLayout,\n isHorizontalLogicLayout,\n isIndentedLayout,\n isLeftLayout,\n isRightLayout,\n isStandardLayout,\n isTopLayout,\n isVerticalLogicLayout,\n MindLayoutType\n} from '@plait/layouts';\nimport { updateForeignObject } from '@plait/richtext';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { BASE } from '../constants';\nimport { getRichtextRectangleByNode } from '../draw/richtext';\nimport { drawRectangleNode } from '../draw/shape';\nimport { MindElement, PlaitMind } from '../interfaces/element';\nimport { DetectResult, MindNode } from '../interfaces/node';\nimport { MindNodeComponent } from '../node.component';\nimport {\n directionCorrector,\n directionDetector,\n drawPlaceholderDropNodeG,\n findUpElement,\n isChildElement,\n readjustmentDropTarget\n} from '../utils';\nimport { getRectangleByNode, hitMindElement } from '../utils/graph';\nimport { MindQueries } from '../queries';\nimport { PlaitMindComponent } from '../mind.component';\n\nconst DRAG_MOVE_BUFFER = 5;\n\nexport const withDnd = (board: PlaitBoard) => {\n const { mousedown, mousemove, globalMouseup, keydown } = board;\n\n let activeElement: MindElement | null;\n let startPoint: Point;\n let fakeDragNodeG: SVGGElement | undefined;\n let fakeDropNodeG: SVGGElement | undefined;\n let dropTarget: { target: MindElement; detectResult: DetectResult } | null = null;\n\n board.mousedown = (event: MouseEvent) => {\n if (board.options.readonly || IS_TEXT_EDITABLE.get(board) || event.button === 2) {\n mousedown(event);\n return;\n }\n\n // 确认是否 hit 节点\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const selectedElements = getSelectedElements(board);\n board.children.forEach((value: PlaitElement) => {\n if (activeElement) {\n return;\n }\n if (PlaitMind.isMind(value)) {\n const mindmapComponent = ELEMENT_TO_COMPONENT.get(value) as PlaitMindComponent;\n const root = mindmapComponent?.root;\n (root as any).eachNode((node: MindNode) => {\n if (activeElement) {\n return;\n }\n\n const canDrag =\n hitMindElement(board, point, node.origin) &&\n !node.origin.isRoot &&\n !AbstractNode.isAbstract(node.origin) &&\n selectedElements.length <= 1;\n\n if (canDrag) {\n activeElement = node.origin;\n startPoint = point;\n }\n });\n }\n });\n\n if (activeElement) {\n event.preventDefault();\n }\n\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n if (!board.options.readonly && activeElement && startPoint) {\n const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance < DRAG_MOVE_BUFFER) {\n return;\n }\n\n if (!isDragging(board)) {\n setIsDragging(board, true);\n fakeDragNodeG = createG();\n fakeDragNodeG.classList.add('dragging', 'fake-node', 'plait-board-attached');\n fakeDropNodeG = createG();\n addActiveOnDragOrigin(activeElement);\n PlaitBoard.getHost(board).appendChild(fakeDropNodeG);\n PlaitBoard.getHost(board).appendChild(fakeDragNodeG);\n } else {\n fakeDragNodeG?.childNodes.forEach(node => {\n node.remove();\n });\n fakeDropNodeG?.childNodes.forEach(node => {\n node.remove();\n });\n }\n\n // fake dragging origin node\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n const activeComponent = PlaitElement.getComponent(activeElement) as MindNodeComponent;\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const fakeDraggingNode: MindNode = {\n ...activeComponent.node,\n children: [],\n x: activeComponent.node.x + offsetX,\n y: activeComponent.node.y + offsetY\n };\n const textRectangle = getRichtextRectangleByNode(activeComponent.node);\n const fakeNodeG = drawRectangleNode(board, fakeDraggingNode);\n const richtextG = activeComponent.richtextG?.cloneNode(true) as SVGGElement;\n updateForeignObject(\n richtextG,\n textRectangle.width + BASE * 10,\n textRectangle.height,\n textRectangle.x + offsetX,\n textRectangle.y + offsetY\n );\n fakeDragNodeG?.append(fakeNodeG);\n fakeDragNodeG?.append(richtextG);\n\n // drop position detect\n const { x, y } = getRectangleByNode(fakeDraggingNode);\n const detectCenterPoint = [x + textRectangle.width / 2, y + textRectangle.height / 2] as Point;\n\n let detectResult: DetectResult[] | null = null;\n board.children.forEach((value: PlaitElement) => {\n if (detectResult) {\n return;\n }\n if (PlaitMind.isMind(value)) {\n const mindmapComponent = ELEMENT_TO_COMPONENT.get(value) as PlaitMindComponent;\n const root = mindmapComponent?.root;\n\n (root as any).eachNode((node: MindNode) => {\n if (detectResult) {\n return;\n }\n const directions = directionDetector(node, detectCenterPoint);\n if (directions) {\n detectResult = directionCorrector(node, directions);\n }\n dropTarget = null;\n if (detectResult && isValidTarget(activeComponent.node.origin, node.origin)) {\n dropTarget = { target: node.origin, detectResult: detectResult[0] };\n }\n });\n }\n });\n\n if (dropTarget?.target) {\n dropTarget = readjustmentDropTarget(dropTarget);\n drawPlaceholderDropNodeG(board, dropTarget, fakeDropNodeG);\n }\n }\n\n mousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (!board.options.readonly && activeElement) {\n if (dropTarget?.target) {\n const activeComponent = PlaitElement.getComponent(activeElement) as MindNodeComponent;\n const targetComponent = PlaitElement.getComponent(dropTarget.target) as MindNodeComponent;\n let targetPath = PlaitBoard.findPath(board, targetComponent.element);\n const mindmapElement = findUpElement(dropTarget.target).root;\n const mindmapComponent = ELEMENT_TO_COMPONENT.get(mindmapElement as PlaitMind) as PlaitMindComponent;\n const layout = MindQueries.getCorrectLayoutByElement(mindmapComponent?.root.origin as MindElement);\n targetPath = updatePathByLayoutAndDropTarget(targetPath, layout, dropTarget);\n const originPath = PlaitBoard.findPath(board, activeComponent.element);\n let newElement: Partial<MindElement> = { isCollapsed: false },\n rightTargetPath = PlaitBoard.findPath(board, targetComponent.element);\n\n if (isStandardLayout(layout)) {\n updateRightNodeCount(board, activeComponent, targetComponent, dropTarget.detectResult);\n }\n\n if (dropTarget.detectResult === 'right') {\n if (targetComponent.node.origin.isRoot) {\n targetPath = PlaitBoard.findPath(board, targetComponent.element);\n targetPath.push(0);\n const rightNodeCount = (targetComponent.node.origin.rightNodeCount as number) + 1;\n newElement = { isCollapsed: false, rightNodeCount };\n }\n Transforms.setNode(board, newElement, rightTargetPath as Path);\n }\n\n Transforms.moveNode(board, originPath, targetPath);\n }\n\n if (isDragging(board)) {\n removeActiveOnDragOrigin(activeElement);\n }\n setIsDragging(board, false);\n activeElement = null;\n fakeDragNodeG?.remove();\n fakeDragNodeG = undefined;\n fakeDropNodeG?.remove();\n fakeDropNodeG = undefined;\n dropTarget = null;\n }\n globalMouseup(event);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n keydown(event);\n };\n\n return board;\n};\n\nexport const isValidTarget = (origin: MindElement, target: MindElement) => {\n return origin !== target && !isChildElement(origin, target);\n};\n\nexport const addActiveOnDragOrigin = (activeElement: MindElement, isOrigin = true) => {\n const activeComponent = PlaitElement.getComponent(activeElement) as MindNodeComponent;\n if (isOrigin) {\n activeComponent.g.classList.add('dragging-origin');\n } else {\n activeComponent.g.classList.add('dragging-child');\n }\n !activeElement.isCollapsed &&\n activeElement.children.forEach(child => {\n addActiveOnDragOrigin(child, false);\n });\n};\n\nexport const removeActiveOnDragOrigin = (activeElement: MindElement, isOrigin = true) => {\n const activeComponent = PlaitElement.getComponent(activeElement) as MindNodeComponent;\n if (isOrigin) {\n activeComponent.g.classList.remove('dragging-origin');\n } else {\n activeComponent.g.classList.remove('dragging-child');\n }\n !activeElement.isCollapsed &&\n activeElement.children.forEach(child => {\n removeActiveOnDragOrigin(child, false);\n });\n};\n\nconst updatePathByLayoutAndDropTarget = (\n targetPath: Path,\n layout: MindLayoutType,\n dropTarget: { target: MindElement; detectResult: DetectResult }\n) => {\n // 上下布局:左右是兄弟节点,上下是子节点\n if (isVerticalLogicLayout(layout)) {\n if (isTopLayout(layout) && dropTarget.detectResult === 'top') {\n targetPath.push(dropTarget.target.children.length);\n }\n if (isBottomLayout(layout) && dropTarget.detectResult === 'bottom') {\n targetPath.push(dropTarget.target.children.length);\n }\n // 如果是左,位置不变,右则插入到下一个兄弟节点\n if (dropTarget.detectResult === 'right') {\n targetPath = Path.next(targetPath);\n }\n }\n // 水平布局/标准布局:上下是兄弟节点,左右是子节点\n if (isHorizontalLogicLayout(layout)) {\n if (dropTarget.detectResult === 'right') {\n targetPath.push(dropTarget.target.children.length);\n }\n if (dropTarget.detectResult === 'left') {\n targetPath.push(dropTarget.target.children.length);\n }\n // 如果是上,位置不变,下插入到下一个兄弟节点\n if (dropTarget.detectResult === 'bottom') {\n targetPath = Path.next(targetPath);\n }\n }\n // 缩进布局:上下是兄弟节点,左右是子节点,但上(左上/右上),探测到上是子节点,下则位置不变,反之同理。\n if (isIndentedLayout(layout)) {\n if (isTopLayout(layout) && dropTarget.detectResult === 'top') {\n targetPath = Path.next(targetPath);\n }\n if (isBottomLayout(layout) && dropTarget.detectResult === 'bottom') {\n targetPath = Path.next(targetPath);\n }\n if (isLeftLayout(layout) && dropTarget.detectResult === 'left') {\n targetPath.push(dropTarget.target.children.length);\n }\n if (isRightLayout(layout) && dropTarget.detectResult === 'right') {\n targetPath.push(dropTarget.target.children.length);\n }\n }\n return targetPath;\n};\n\nexport const updateRightNodeCount = (\n board: PlaitBoard,\n activeComponent: MindNodeComponent,\n targetComponent: MindNodeComponent,\n detectResult: DetectResult\n) => {\n let rightNodeCount;\n const mindmapElement = findUpElement(targetComponent.node.origin).root;\n const mindmapComponent = ELEMENT_TO_COMPONENT.get(mindmapElement as PlaitMind) as PlaitMindComponent;\n const activeIndex = mindmapComponent?.root.children.indexOf(activeComponent.node) as number;\n const targetIndex = mindmapComponent?.root.children.indexOf(targetComponent.node) as number;\n const isActiveOnRight = activeIndex !== -1 && activeIndex <= (activeComponent.parent.origin.rightNodeCount as number) - 1;\n const isTargetOnRight =\n targetComponent.parent && targetIndex !== -1 && targetIndex <= (targetComponent.parent.origin.rightNodeCount as number) - 1;\n const isBothOnRight = isActiveOnRight && isTargetOnRight;\n const rootChildCount = mindmapComponent.root.children?.length as number;\n const rootRightNodeCount = mindmapComponent?.root.origin.rightNodeCount as number;\n\n if (!isBothOnRight) {\n if (isActiveOnRight) {\n rightNodeCount = rootChildCount < rootRightNodeCount ? rootChildCount - 1 : rootRightNodeCount - 1;\n Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, activeComponent.parent.origin));\n }\n\n if (isTargetOnRight && detectResult !== 'right') {\n rightNodeCount = rootChildCount < rootRightNodeCount ? rootRightNodeCount : rootRightNodeCount + 1;\n Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, targetComponent.parent.origin));\n }\n\n //二级子节点拖动到根节点左侧\n if (targetComponent.node.origin.isRoot && detectResult === 'left' && activeIndex === -1) {\n rightNodeCount = rootChildCount;\n Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, targetComponent.element));\n }\n }\n};\n\nconst IS_DRAGGING = new WeakMap<PlaitBoard, boolean>();\n\nexport const isDragging = (board: PlaitBoard) => {\n return !!IS_DRAGGING.get(board);\n};\n\nexport const setIsDragging = (board: PlaitBoard, state: boolean) => {\n IS_DRAGGING.set(board, state);\n};\n","import {\n CLIP_BOARD_FORMAT_KEY,\n getRectangleByElements,\n getSelectedElements,\n Path,\n PlaitBoard,\n PlaitElement,\n Point,\n Transforms\n} from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { copyNewNode, extractNodesText, transformNodeToRoot, transformRootToNode, createMindElement, transformAbstractToNode } from '.';\nimport { getRectangleByNode } from './graph';\nimport { AbstractNode } from '@plait/layouts';\n\nexport const buildClipboardData = (board: PlaitBoard, selectedElements: MindElement[]) => {\n let result: MindElement[] = [];\n const selectedMindNodes = selectedElements.map(value => MindElement.getNode(value));\n const nodesRectangle = getRectangleByElements(board, selectedElements, true);\n selectedElements.forEach((node, index) => {\n const nodeRectangle = getRectangleByNode(selectedMindNodes[index]);\n result.push({\n ...node,\n points: [[nodeRectangle.x - nodesRectangle.x, nodeRectangle.y - nodesRectangle.y]]\n });\n });\n\n return result;\n};\n\nexport const setClipboardData = (data: DataTransfer | null, elements: MindElement[]) => {\n const stringObj = JSON.stringify(elements);\n const encoded = window.btoa(encodeURIComponent(stringObj));\n const text = elements.reduce((string, currentNode) => {\n return string + extractNodesText(currentNode);\n }, '');\n data?.setData(`application/${CLIP_BOARD_FORMAT_KEY}`, encoded);\n data?.setData(`text/plain`, text);\n};\n\nexport const getDataFromClipboard = (data: DataTransfer | null) => {\n const encoded = data?.getData(`application/${CLIP_BOARD_FORMAT_KEY}`);\n let nodesData: PlaitElement[] = [];\n if (encoded) {\n const decoded = decodeURIComponent(window.atob(encoded));\n nodesData = JSON.parse(decoded);\n }\n return nodesData;\n};\n\nexport const insertClipboardData = (board: PlaitBoard, elements: PlaitElement[], targetPoint: Point) => {\n let newElement: MindElement, path: Path;\n const selectedElements = getSelectedElements(board);\n let newELements: PlaitElement[] = [];\n\n elements.forEach((item: PlaitElement, index: number) => {\n newElement = copyNewNode(item as MindElement);\n\n if (selectedElements.length === 1) {\n if (item.isRoot) {\n newElement = transformRootToNode(board, newElement);\n }\n if (AbstractNode.isAbstract(item)) {\n newElement = transformAbstractToNode(newElement);\n }\n const selectedElementPath = PlaitBoard.findPath(board, selectedElements[0]);\n path = selectedElementPath.concat((selectedElements[0].children || []).length + index);\n } else {\n const point: Point = [targetPoint[0] + item.points![0][0], targetPoint[1] + item.points![0][1]];\n newElement.points = [point];\n\n if (AbstractNode.isAbstract(item)) {\n newElement = transformAbstractToNode(newElement);\n }\n\n if (!item.isRoot) {\n newElement = transformNodeToRoot(board, newElement);\n }\n\n path = [board.children.length];\n }\n newELements.push(newElement);\n Transforms.insertNode(board, newElement, path);\n return;\n });\n Transforms.setSelectionWithTemporaryElements(board, newELements);\n};\n\nexport const insertClipboardText = (board: PlaitBoard, parentElement: PlaitElement, text: string, width: number, height: number) => {\n const newElement = createMindElement(text, width, height, {});\n const path = PlaitBoard.findPath(board, parentElement).concat((parentElement.children || []).length);\n Transforms.insertNode(board, newElement, path);\n return;\n};\n","import { ComponentType, PlaitBoard, PlaitPlugin } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { EmojiItem } from '../../interfaces/element-data';\nimport { MindEmojiBaseComponent } from './emoji-base.component';\n\nexport interface PlaitMindEmojiBoard extends PlaitBoard {\n drawEmoji: (emoji: EmojiItem, element: MindElement) => ComponentType<MindEmojiBaseComponent>;\n}\n\nexport const withEmoji = (board: PlaitBoard) => {\n const newBoard = board as PlaitBoard & PlaitMindEmojiBoard;\n\n newBoard.drawEmoji = (emoji: EmojiItem, element: MindElement) => {\n throw new Error('Not implement drawEmoji method error.');\n };\n\n return newBoard;\n};\n","import {\n BOARD_TO_HOST,\n PlaitBoard,\n PlaitElement,\n PlaitPlugin,\n Point,\n Transforms,\n getSelectedElements,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { AbstractNode, LayoutNode, MindLayoutType, isHorizontalLayout, isStandardLayout } from '@plait/layouts';\nimport { AbstractHandlePosition, AbstractResizeState, MindElement, PlaitAbstractBoard } from '../interfaces';\nimport { MindNodeComponent, MindQueries } from '../public-api';\nimport { findLocationLeftIndex, getHitAbstractHandle, getLocationScope, handleTouchedAbstract } from '../utils/abstract/resize';\nimport { separateChildren } from '../utils/abstract/common';\n\nexport const withAbstract: PlaitPlugin = (board: PlaitBoard) => {\n const newBoard = board as PlaitBoard & PlaitAbstractBoard;\n\n const { mousedown, mousemove, mouseup } = board;\n let activeAbstractElement: PlaitElement | undefined;\n let abstractHandlePosition: AbstractHandlePosition | undefined;\n let touchedAbstract: PlaitElement | undefined;\n let startPoint: Point | undefined;\n let newProperty: { end: number } | { start: number } | undefined;\n\n board.mousedown = (event: MouseEvent) => {\n const activeAbstractElements = getSelectedElements(board).filter(element => AbstractNode.isAbstract(element));\n const host = BOARD_TO_HOST.get(board);\n const point = transformPoint(board, toPoint(event.x, event.y, host!));\n\n activeAbstractElement = activeAbstractElements.find(element => {\n abstractHandlePosition = getHitAbstractHandle(board, element as MindElement, point);\n if (newBoard?.abstractResize) {\n newBoard.abstractResize(AbstractResizeState.start);\n }\n return abstractHandlePosition;\n });\n\n if (activeAbstractElement) {\n startPoint = point;\n return;\n }\n\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n getSelectedElements(board);\n const host = BOARD_TO_HOST.get(board);\n const endPoint = transformPoint(board, toPoint(event.x, event.y, host!));\n\n touchedAbstract = handleTouchedAbstract(board, touchedAbstract, endPoint);\n\n if (abstractHandlePosition && activeAbstractElement) {\n const abstractComponent = PlaitElement.getComponent(activeAbstractElement) as MindNodeComponent;\n const element = abstractComponent.element;\n const nodeLayout = MindQueries.getCorrectLayoutByElement(activeAbstractElement as MindElement) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n const parentElement = MindElement.getParent(element);\n\n let children = parentElement.children;\n\n const parentLayout = MindQueries.getLayoutByElement(parentElement);\n if (isStandardLayout(parentLayout)) {\n const rightNodeCount = parentElement.rightNodeCount!;\n const { leftChildren, rightChildren } = separateChildren(parentElement);\n if ((activeAbstractElement as MindElement).end! < rightNodeCount) {\n children = rightChildren;\n }\n if ((activeAbstractElement as MindElement).start! >= rightNodeCount) {\n children = leftChildren;\n }\n }\n\n if (newBoard?.abstractResize) {\n newBoard.abstractResize(AbstractResizeState.resizing);\n }\n\n const resizingLocation = isHorizontal ? endPoint[1] : endPoint[0];\n const parent = (MindElement.getNode(parentElement) as unknown) as LayoutNode;\n const scope = getLocationScope(board, abstractHandlePosition, children, element, parent, isHorizontal);\n const location = Math.min(scope.max, Math.max(scope.min, resizingLocation));\n\n let locationIndex = findLocationLeftIndex(board, children, location, isHorizontal);\n\n const isPropertyUnchanged =\n (abstractHandlePosition === AbstractHandlePosition.start &&\n locationIndex + 1 === (activeAbstractElement as MindElement).start!) ||\n (abstractHandlePosition === AbstractHandlePosition.end && locationIndex === (activeAbstractElement as MindElement).end!);\n\n if (isPropertyUnchanged) {\n newProperty = undefined;\n } else {\n if (isStandardLayout(parent.layout)) {\n const rightNodeCount = parent.origin.rightNodeCount;\n let start = element.start!;\n if (start >= rightNodeCount) {\n locationIndex += rightNodeCount;\n }\n }\n\n newProperty =\n abstractHandlePosition === AbstractHandlePosition.start ? { start: locationIndex + 1 } : { end: locationIndex };\n }\n\n abstractComponent!.updateAbstractIncludedOutline(abstractHandlePosition, location);\n }\n mousemove(event);\n };\n\n board.mouseup = (event: MouseEvent) => {\n startPoint = undefined;\n abstractHandlePosition = undefined;\n if (activeAbstractElement) {\n if (newBoard?.abstractResize) {\n newBoard.abstractResize(AbstractResizeState.end);\n }\n\n if (newProperty) {\n const path = PlaitBoard.findPath(board, activeAbstractElement);\n Transforms.setNode(board, newProperty, path);\n } else {\n const abstractComponent = PlaitElement.getComponent(activeAbstractElement) as MindNodeComponent;\n abstractComponent!.updateAbstractIncludedOutline();\n }\n activeAbstractElement = undefined;\n }\n mouseup(event);\n };\n return board;\n};\n","import {\n addSelectedElement,\n getSelectedElements,\n hotkeys,\n IS_TEXT_EDITABLE,\n PlaitBoard,\n PlaitHistoryBoard,\n PlaitPlugin,\n PlaitPluginElementContext,\n Point,\n RectangleClient,\n removeSelectedElement,\n toPoint,\n transformPoint,\n Transforms,\n Range,\n depthFirstRecursion,\n PlaitElement\n} from '@plait/core';\nimport { getSizeByText } from '@plait/richtext';\nimport { MindElement, PlaitMind } from '../interfaces';\nimport { MindNode } from '../interfaces/node';\nimport { PlaitMindComponent } from '../mind.component';\nimport { MindNodeComponent } from '../node.component';\nimport {\n changeRightNodeCount,\n insertMindElement,\n deleteSelectedELements,\n filterChildElement,\n findParentElement,\n shouldChangeRightNodeCount,\n insertSiblingElementHandleAbstract\n} from '../utils';\nimport { getRectangleByNode, hitMindElement } from '../utils/graph';\nimport { isVirtualKey } from '../utils/is-virtual-key';\nimport { withDnd } from './with-dnd';\nimport { buildClipboardData, getDataFromClipboard, insertClipboardData, insertClipboardText, setClipboardData } from '../utils/clipboard';\nimport { AbstractNode } from '@plait/layouts';\nimport { findNewChildNodePath, findNewSiblingNodePath } from '../utils/path';\nimport { enterNodeEditing } from '../utils/node';\nimport { withEmoji } from './emoji/with-mind-emoji';\nimport { TOPIC_DEFAULT_MAX_WORD_COUNT } from '../constants';\nimport { withAbstract } from './with-abstract';\n\nexport const withMind = (board: PlaitBoard) => {\n const {\n drawElement,\n dblclick,\n keydown,\n insertFragment,\n setFragment,\n deleteFragment,\n isHitSelection,\n getRectangle,\n isMovable,\n isRecursion\n } = board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitMind.isMind(context.element)) {\n return PlaitMindComponent;\n } else if (MindElement.isMindElement(board, context.element)) {\n return MindNodeComponent;\n }\n return drawElement(context);\n };\n\n board.getRectangle = element => {\n if (MindElement.isMindElement(board, element)) {\n return getRectangleByNode(MindElement.getNode(element));\n }\n return getRectangle(element);\n };\n\n board.isRecursion = element => {\n if (MindElement.isMindElement(board, element) && element.isCollapsed) {\n return false;\n }\n return isRecursion(element);\n };\n\n board.isHitSelection = (element, range: Range) => {\n if (MindElement.isMindElement(board, element) && board.selection) {\n const client = getRectangleByNode(MindElement.getNode(element));\n return RectangleClient.isHit(RectangleClient.toRectangleClient([range.anchor, range.focus]), client);\n }\n return isHitSelection(element, range);\n };\n\n board.isMovable = element => {\n if (PlaitMind.isMind(element) && element.isRoot) {\n return true;\n }\n return isMovable(element);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (board.options.readonly || IS_TEXT_EDITABLE.get(board)) {\n keydown(event);\n return;\n }\n const selectedElements = getSelectedElements(board) as MindElement[];\n if (selectedElements.length) {\n if (\n selectedElements.length === 1 &&\n (event.key === 'Tab' ||\n (event.key === 'Enter' && !selectedElements[0].isRoot && !AbstractNode.isAbstract(selectedElements[0])))\n ) {\n event.preventDefault();\n const selectedElement = selectedElements[0];\n removeSelectedElement(board, selectedElement);\n const selectedElementPath = PlaitBoard.findPath(board, selectedElement);\n if (event.key === 'Tab') {\n if (selectedElement.isCollapsed) {\n const newElement: Partial<MindElement> = { isCollapsed: false };\n PlaitHistoryBoard.withoutSaving(board, () => {\n Transforms.setNode(board, newElement, selectedElementPath);\n });\n }\n insertMindElement(board, selectedElement, findNewChildNodePath(board, selectedElement));\n } else {\n if (shouldChangeRightNodeCount(selectedElement)) {\n changeRightNodeCount(board, selectedElementPath.slice(0, 1), 1);\n }\n\n insertSiblingElementHandleAbstract(board, selectedElement);\n\n insertMindElement(board, selectedElement, findNewSiblingNodePath(board, selectedElement));\n }\n return;\n }\n if (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event)) {\n event.preventDefault();\n deleteSelectedELements(board, selectedElements);\n let lastNode: MindNode | any = null;\n const firstLevelElements = filterChildElement(selectedElements);\n const firstElement = firstLevelElements[0];\n const firstComponent = PlaitElement.getComponent(firstElement) as MindNodeComponent;\n const nodeIndex = firstComponent?.parent?.children.findIndex(item => item.origin.id === firstElement.id);\n const isSameParent = firstLevelElements.every(element => {\n return findParentElement(element) && findParentElement(firstLevelElements[0]) === findParentElement(element);\n });\n if (isSameParent) {\n const childCount = firstComponent!.parent?.children.length - firstLevelElements.length;\n if (childCount === 0) {\n lastNode = firstComponent?.parent;\n } else if (nodeIndex === 0) {\n lastNode = firstComponent?.parent.children[firstLevelElements.length];\n } else if (nodeIndex! > 0) {\n lastNode = firstComponent?.parent.children[nodeIndex! - 1];\n }\n }\n\n if (firstLevelElements.length === 1 && AbstractNode.isAbstract(firstElement)) {\n lastNode = firstComponent.parent.children[firstElement.start];\n }\n\n if (lastNode) {\n addSelectedElement(board, lastNode.origin);\n }\n return;\n }\n // auto enter edit status\n if (!isVirtualKey(event)) {\n event.preventDefault();\n const selectedElement = selectedElements[0];\n enterNodeEditing(selectedElement);\n return;\n }\n }\n\n if (board.selection && event.code === 'Space') {\n if (selectedElements?.length) {\n return;\n }\n }\n\n keydown(event);\n };\n\n board.dblclick = (event: MouseEvent) => {\n if (board.options.readonly || IS_TEXT_EDITABLE.get(board)) {\n dblclick(event);\n return;\n }\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n board.children\n .filter(value => PlaitMind.isMind(value))\n .forEach(mindmap => {\n depthFirstRecursion<MindElement>(mindmap as MindElement, node => {\n if (!PlaitBoard.hasBeenTextEditing(board) && hitMindElement(board, point, node)) {\n enterNodeEditing(node);\n }\n });\n });\n if (PlaitBoard.hasBeenTextEditing(board)) {\n return;\n }\n dblclick(event);\n };\n\n board.setFragment = (data: DataTransfer | null) => {\n const selectedElements = filterChildElement(getSelectedElements(board) as MindElement[]);\n\n if (selectedElements.length) {\n const elements = buildClipboardData(board, selectedElements);\n setClipboardData(data, elements);\n return;\n }\n setFragment(data);\n };\n\n board.insertFragment = (data: DataTransfer | null, targetPoint?: Point) => {\n if (board.options.readonly) {\n insertFragment(data, targetPoint);\n return;\n }\n\n const elements = getDataFromClipboard(data);\n if (elements.length) {\n insertClipboardData(board, elements, targetPoint || [0, 0]);\n } else {\n const text = data?.getData(`text/plain`) as string;\n const { width, height } = getSizeByText(\n text,\n PlaitBoard.getHost(board).parentElement as HTMLElement,\n TOPIC_DEFAULT_MAX_WORD_COUNT\n );\n const selectedElements = getSelectedElements(board);\n if (text && selectedElements.length === 1) {\n insertClipboardText(board, selectedElements[0], text, width, height);\n }\n }\n insertFragment(data, targetPoint);\n };\n\n board.deleteFragment = (data: DataTransfer | null) => {\n const selectedElements = getSelectedElements(board) as MindElement[];\n deleteSelectedELements(board, selectedElements);\n deleteFragment(data);\n };\n\n return withEmoji(withAbstract(withDnd(board)));\n};\n","import { Directive, ElementRef, Input } from '@angular/core';\nimport { EmojiItem } from '../../interfaces/element-data';\nimport { PlaitBoard } from '@plait/core';\n\n@Directive()\nexport class MindEmojiBaseComponent {\n @Input()\n fontSize: number = 14;\n\n @Input()\n emojiItem!: EmojiItem;\n\n @Input()\n board!: PlaitBoard;\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n constructor(protected elementRef: ElementRef<HTMLElement>) {}\n}\n","/*\n * Public API Surface of mind\n */\n\nexport * from './mind.component';\nexport * from './node.component';\nexport * from './mind.module';\nexport * from './utils';\nexport * from './interfaces';\nexport * from './plugins/with-mind';\nexport * from './constants';\nexport * from './queries/index';\nexport * from './transforms/index';\nexport * from './plugins/emoji';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getLayoutDirection","Path","i1"],"mappings":";;;;;;;;;;;;;;AAGa,MAAA,eAAe,GAAG,IAAI,OAAO;;ACHnC,MAAM,IAAI,GAAG,EAAE;AACf,MAAM,aAAa,GAAG,UAAU;AAChC,MAAM,WAAW,GAAG,gBAAgB;AAC9B,MAAA,UAAU,GAAG,IAAI,GAAG,EAAE;AAE5B,MAAM,WAAW,GAAG,cAAc;AAClC,MAAM,UAAU,GAAG,UAAU;AAC7B,MAAM,YAAY,GAAG,EAAE;AAEvB,MAAM,aAAa,GAAG,EAAE;AACxB,MAAM,aAAa,GAAG,GAAG;AAEzB,MAAM,0BAA0B,GAAG,EAAE;AACrC,MAAM,yBAAyB,GAAG,UAAU;AAC5C,MAAM,8BAA8B,GAAG;;ACdvC,MAAM,WAAW,GAAG,OAAO;AAC3B,MAAM,eAAe,GAAG,GAAG;AAC3B,MAAM,SAAS,GAAG,UAAU;AAC5B,MAAM,cAAc,GAAG,UAAU;AACjC,MAAM,gBAAgB,GAAG,UAAU;AACnC,MAAM,oBAAoB,GAAG,GAAG;AAChC,MAAM,cAAc,GAAG,GAAG;AAEpB,MAAA,MAAM,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAEzH,cAGX;AAHD,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,iBAAkC,CAAA;AAClC,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AAC3B,CAAC,EAHW,aAAa,KAAb,aAAa,GAGxB,EAAA,CAAA,CAAA,CAAA;AAEY,MAAA,qBAAqB,GAAG,YAAY;AAC1C,MAAM,gCAAgC,GAAG,IAAI;AAC7C,MAAM,sBAAsB,GAAG,GAAG;AAElC,MAAM,4BAA4B,GAAG,GAAG;AACxC,MAAM,0BAA0B,GAAG;;ACfpC,SAAU,kBAAkB,CAAC,IAAc,EAAA;IAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAC3C,OAAO;QACH,CAAC;QACD,CAAC;QACD,KAAK;QACL,MAAM;KACT,CAAC;AACN,CAAC;SAEe,cAAc,CAAC,KAAiB,EAAE,KAAY,EAAE,OAAoB,EAAA;IAChF,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,IAAI,IAAI,gCAAgC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE;AAC9F,QAAA,OAAO,IAAI,CAAC;AACf,KAAA;AAAM,SAAA;AACH,QAAA,OAAO,KAAK,CAAC;AAChB,KAAA;AACL;;ACnBA;;;;;AAKG;AACI,MAAM,yBAAyB,GAAG,CAAC,OAAoB,KAAI;IAC9D,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;IACrD,IAAI,iBAAiB,GAAG,UAAU,CAAC;IAEnC,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,QAAA,OAAO,iBAAiB,CAAC;AAC5B,KAAA;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAsB,CAAC;AAC1E,IAAA,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE5B,IAAI,eAAe,GAA6B,IAAI,CAAC;AACrD,IAAA,IAAI,MAAM,GAA4B,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AAE9D,IAAA,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE;AACtB,QAAA,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,CAAsB,CAAC;QACzE,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5C,QAAA,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;AAC3C,KAAA;AACD,IAAA,IACI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,iBAAiB,CAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAA2B,CAAC;QAC/G,gBAAgB,CAAC,MAAO,CAAC,EAC3B;AACE,QAAA,OAAO,iBAAiB,CAAC,MAAO,CAAC,CAAC;AACrC,KAAA;;AAGD,IAAA,IAAI,UAAU,KAAK,cAAc,CAAC,QAAQ,EAAE;AACxC,QAAA,iBAAiB,GAAG,SAAS,EAAE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC;AACzF,KAAA;IAED,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACvD,QAAA,OAAO,iBAAiB,CAAC;AAC5B,KAAA;AAED,IAAA,IAAI,MAAM,EAAE;QACR,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAClF,QAAA,IAAI,kBAAkB,EAAE;AACpB,YAAA,OAAO,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAC/D,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,MAAM,CAAC;AACjB,SAAA;AACJ,KAAA;AAAM,SAAA;AACH,QAAA,OAAO,iBAAiB,CAAC;AAC5B,KAAA;AACL,CAAC;;ACrDM,MAAM,gBAAgB,GAAG,CAAC,OAAoB,KAAI;IACrD,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,EAAE;;QAEhB,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD,KAAA;AACD,IAAA,IAAI,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACxC,IAAA,OAAO,MAAM,EAAE;QACX,IAAI,MAAM,CAAC,MAAM,EAAE;AACf,YAAA,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACtC,KAAA;AACD,IAAA,OAAO,OAAO,CAAC;AACnB,CAAC;;ACVD;;;;AAIG;AACI,MAAM,+BAA+B,GAAG,CAAC,OAAoB,KAAI;AACpE,IAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACjD,IAAA,IAAI,aAAa,EAAE;AACf,QAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACtD,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,QAAQ,EAAE;YAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC;AAC7E,SAAA;AACD,QAAA,MAAM,uBAAuB,GAAG,4BAA4B,CAAC,aAAa,CAAC,CAAC;AAC5E,QAAA,IAAI,mBAAmB,GAAG,wCAAwC,CAAC,uBAAuB,CAAC,CAAC;AAC5F,QAAA,MAAM,YAAY,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/D,QAAA,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,YAAY,CAAC,CAAC;AACpE,QAAA,MAAM,yBAAyB,GAAG,wCAAwC,CAAC,gBAAgB,CAAC,CAAC;QAE7F,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,IACnD,yBAAyB,CAAC,IAAI,CAAC,wBAAwB,IAAI,wBAAwB,KAAK,MAAM,CAAC,CAClG,CAAC;AACF,QAAA,OAAO,mBAAmB,CAAC;AAC9B,KAAA;AACD,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC;;AC9BD;;;;AAIG;AACI,MAAM,wBAAwB,GAAG,CAAC,OAAoB,KAAoB;AAC7E,IAAA,IAAI,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACxC,IAAA,OAAO,MAAM,EAAE;QACX,IAAI,MAAM,CAAC,MAAM,EAAE;YACf,OAAO,MAAM,CAAC,MAAM,CAAC;AACxB,SAAA;AACD,QAAA,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACtC,KAAA;IACD,OAAO,gBAAgB,EAAE,CAAC;AAC9B,CAAC;;ACdM,MAAM,kBAAkB,GAAG,CAAC,OAAoB,KAAoB;AACvE,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAC9B,IAAA,IAAI,MAAM,EAAE;AACR,QAAA,OAAO,MAAM,CAAC;AACjB,KAAA;AAED,IAAA,IACI,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AAChC,SAAC,iBAAiB,CAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAA2B,CAAC,IAAI,gBAAgB,CAAC,MAAO,CAAC,CAAC,EAC3G;AACE,QAAA,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;AACvD,QAAA,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;AAC1C,KAAA;AACD,IAAA,OAAO,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;;ACZY,MAAA,WAAW,GAAG;IACvB,+BAA+B;IAC/B,wBAAwB;IACxB,gBAAgB;IAChB,kBAAkB;IAClB,yBAAyB;;;AC2BhB,MAAA,SAAS,GAAG;AACrB,IAAA,MAAM,EAAE,CAAC,KAAU,KAAwB;AACvC,QAAA,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;KACnC;EACH;AAEW,MAAA,WAAW,GAAG;IACvB,SAAS,CAAC,KAAkB,EAAE,MAAsB,EAAA;QAChD,MAAM,OAAO,GAAG,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACtD,OAAO,OAAO,KAAK,MAAM,CAAC;KAC7B;AACD,IAAA,gBAAgB,CAAC,KAAkB,EAAA;QAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAmB,CAAC;AACxE,QAAA,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;KACpC;IACD,aAAa,CAAC,KAAiB,EAAE,OAAqB,EAAA;QAClD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjD,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,QAAA,IAAI,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;KACJ;AACD,IAAA,SAAS,CAAC,IAAiB,EAAA;AACvB,QAAA,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACxB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACxD,SAAA;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAgB,CAAC;AACvD,QAAA,OAAO,MAAM,CAAC;KACjB;IACD,OAAO,CAAC,KAAiB,EAAE,OAAoB,EAAA;QAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjD,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAc,CAAC;KAC9D;IACD,YAAY,CAAC,KAAiB,EAAE,OAAoB,EAAA;QAChD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,GAAmB,EAAE,CAAC;AACnC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;YACrD,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAClB;AACD,IAAA,OAAO,CAAC,OAAoB,EAAA;QACxB,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAE,CAAA,CAAC,CAAC;AACvE,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,SAAS,CAAC,OAAoB,EAAA;AAC1B,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;KACJ;AACD,IAAA,SAAS,CAAC,OAA+B,EAAA;AACrC,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;KAC9B;;;ACjFQ,MAAA,QAAQ,GAAG;IACpB,GAAG,CAAC,IAAc,EAAE,IAAU,EAAA;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC;AAChB,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;AAClB,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;AACD,YAAA,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;IACD,QAAQ,CAAC,IAAc,EAAE,SAAmB,EAAA;AACxC,QAAA,MAAM,WAAW,GACb,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC;QAC3H,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC;QACvD,IAAI,2BAA2B,GAAG,KAAK,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE;AACjC,YAAA,2BAA2B,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AACjG,SAAA;AACD,QAAA,OAAO,WAAW,IAAI,aAAa,IAAI,2BAA2B,CAAC;KACtE;;;ICtCO,gBAKX;AALD,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAa,CAAA;AACb,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAiB,CAAA;AACjB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAmB,CAAA;AACnB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAe,CAAA;AACnB,CAAC,EALW,eAAe,KAAf,eAAe,GAK1B,EAAA,CAAA,CAAA,CAAA;AAEY,MAAA,mBAAmB,GAA2B;IACvD,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC;IAC/C,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IAC7C,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;IAC9C,CAAC,cAAc,CAAC,QAAQ,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC;AACnD,IAAA,CAAC,cAAc,CAAC,mBAAmB,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC;AACrF,IAAA,CAAC,cAAc,CAAC,gBAAgB,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC;AAC/E,IAAA,CAAC,cAAc,CAAC,kBAAkB,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC;AACnF,IAAA,CAAC,cAAc,CAAC,eAAe,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC;;;ICfrE,uBAGX;AAHD,CAAA,UAAY,sBAAsB,EAAA;AAC9B,IAAA,sBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,sBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACf,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,GAGjC,EAAA,CAAA,CAAA,CAAA;IAEW,oBAIX;AAJD,CAAA,UAAY,mBAAmB,EAAA;AAC3B,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACf,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,GAI9B,EAAA,CAAA,CAAA;;ACRY,MAAA,4BAA4B,GAAG,CAAC,aAA+B,KAAI;IAC5E,MAAM,gBAAgB,GAAsB,EAAE,CAAC;AAC/C,IAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAG;AACtB,QAAA,MAAM,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,IAAG;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3F,gBAAA,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,aAAA;AACL,SAAC,CAAC,CAAC;AACP,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,gBAAgB,CAAC;AAC5B,EAAE;MAEW,eAAe,GAAG,CAAC,IAAiB,EAAE,MAAsB,KAAI;IACzE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;AACrD,IAAA,OAAO,CAAC,2BAA2B,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC5D,EAAE;MAEW,aAAa,GAAG,CAAC,YAA4B,EAAE,MAAsB,KAAI;IAClF,OAAO,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1I,EAAE;MAEW,2BAA2B,GAAG,CAAC,UAA0B,EAAE,MAAsB,KAAI;AAC9F,IAAA,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACnD,IAAA,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC,mBAAmB,EAAE;AACtB,QAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAA,kBAAA,CAAoB,CAAC,CAAC;AACrE,KAAA;AACD,IAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,EAAE;MAEW,wBAAwB,GAAG,CAAC,MAAsB,EAAE,SAA0B,KAAI;IAC3F,MAAM,YAAY,GAAG,SAAS,KAAK,eAAe,CAAC,IAAI,IAAI,SAAS,KAAK,eAAe,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AAC9G,IAAA,IAAI,sBAAsB,GAAG,cAAc,CAAC,QAAQ,CAAC;AACrD,IAAA,QAAQ,MAAM;QACV,KAAK,cAAc,CAAC,IAAI;AACpB,YAAA,sBAAsB,GAAG,cAAc,CAAC,KAAK,CAAC;YAC9C,MAAM;QACV,KAAK,cAAc,CAAC,KAAK;AACrB,YAAA,sBAAsB,GAAG,cAAc,CAAC,IAAI,CAAC;YAC7C,MAAM;QACV,KAAK,cAAc,CAAC,QAAQ;AACxB,YAAA,sBAAsB,GAAG,cAAc,CAAC,MAAM,CAAC;YAC/C,MAAM;QACV,KAAK,cAAc,CAAC,MAAM;AACtB,YAAA,sBAAsB,GAAG,cAAc,CAAC,QAAQ,CAAC;YACjD,MAAM;QACV,KAAK,cAAc,CAAC,mBAAmB;AACnC,YAAA,sBAAsB,GAAG,YAAY,GAAG,cAAc,CAAC,kBAAkB,GAAG,cAAc,CAAC,gBAAgB,CAAC;YAC5G,MAAM;QACV,KAAK,cAAc,CAAC,kBAAkB;AAClC,YAAA,sBAAsB,GAAG,YAAY,GAAG,cAAc,CAAC,mBAAmB,GAAG,cAAc,CAAC,eAAe,CAAC;YAC5G,MAAM;QACV,KAAK,cAAc,CAAC,gBAAgB;AAChC,YAAA,sBAAsB,GAAG,YAAY,GAAG,cAAc,CAAC,eAAe,GAAG,cAAc,CAAC,mBAAmB,CAAC;YAC5G,MAAM;QACV,KAAK,cAAc,CAAC,eAAe;AAC/B,YAAA,sBAAsB,GAAG,YAAY,GAAG,cAAc,CAAC,gBAAgB,GAAG,cAAc,CAAC,kBAAkB,CAAC;YAC5G,MAAM;AACb,KAAA;AACD,IAAA,OAAO,sBAAsB,CAAC;AAClC,EAAE;AAEW,MAAAA,oBAAkB,GAAG,CAAC,IAAiB,KAAI;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;AACjD,IAAA,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACvC,EAAE;AAEK,MAAM,gBAAgB,GAAG,MAAK;IACjC,OAAO,cAAc,CAAC,QAAQ,CAAC;AACnC,EAAE;AAEW,MAAA,wCAAwC,GAAG,CAAC,UAA6B,KAAsB;IACxG,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,iBAAiB,GAAG,UAAU,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACpE,IAAA,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE;AAC9B,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,GAAkC,CAAC,CAAC;AAClE,QAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACrD,QAAA,IAAI,gBAAgB,EAAE;AAClB,YAAA,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,YAAA,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,YAAA,IAAI,gBAAgB,IAAI,CAAC,mBAAmB,EAAE;AAC1C,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,aAAA;AACJ,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,EAAE;AAEW,MAAA,yBAAyB,GAAG,CAAC,eAAgC,KAAI;AAC1E,IAAA,IAAI,gBAAgB,GAAG,eAAe,CAAC,KAAK,CAAC;AAC7C,IAAA,QAAQ,eAAe;QACnB,KAAK,eAAe,CAAC,GAAG;AACpB,YAAA,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC;YAC1C,MAAM;QACV,KAAK,eAAe,CAAC,MAAM;AACvB,YAAA,gBAAgB,GAAG,eAAe,CAAC,GAAG,CAAC;YACvC,MAAM;QACV,KAAK,eAAe,CAAC,KAAK;AACtB,YAAA,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC;YACxC,MAAM;QACV,KAAK,eAAe,CAAC,IAAI;AACrB,YAAA,gBAAgB,GAAG,eAAe,CAAC,KAAK,CAAC;YACzC,MAAM;AACb,KAAA;AACD,IAAA,OAAO,gBAAgB,CAAC;AAC5B,EAAE;AAEW,MAAA,aAAa,GAAG,CAAC,IAAiB,KAAI;AAC/C,IAAA,OAAO,IAAI,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;AAC7C;;AC7GM,SAAU,gBAAgB,CAAC,OAAoB,EAAA;IACjD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAsB,CAAC;AACzE,IAAA,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1C;;ACAa,MAAA,gBAAgB,GAAG,CAAC,aAA0B,KAAI;AAC3D,IAAA,MAAM,cAAc,GAAG,aAAa,CAAC,cAAe,CAAC;AACrD,IAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AACxC,IAAA,IAAI,aAAa,GAAG,EAAE,EAClB,YAAY,GAAG,EAAE,CAAC;AAEtB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,cAAc,EAAE;AAC9D,YAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,SAAS;AACZ,SAAA;AACD,QAAA,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,cAAc,EAAE;AACjE,YAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,SAAS;AACZ,SAAA;QAED,IAAI,CAAC,GAAG,cAAc,EAAE;AACpB,YAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAA;AAAM,aAAA;AACH,YAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,SAAA;AACJ,KAAA;AAED,IAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AAC3C,EAAE;AAEW,MAAA,aAAa,GAAG,CAAC,OAAqB,KAAI;AACnD,IAAA,OAAO,CAAC,CAAC,wBAAwB,CAAC,OAAsB,CAAC,CAAC;AAC9D,EAAE;AAEW,MAAA,cAAc,GAAG,CAAC,OAAqB,KAAI;IACpD,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAChH,EAAE;MAEW,WAAW,GAAG,CAAC,KAAiB,EAAE,QAAwB,KAAI;AACvE,IAAA,IAAI,YAAY,GAAG,kBAAkB,CAAC,QAAyB,CAAC,CAAC;IACjE,MAAM,EAAE,cAAc,EAAE,sBAAsB,EAAE,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAEvF,sBAAsB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC5C,QAAA,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAC1C,QAAA,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AACrD,KAAC,CAAC,CAAC;AACP,EAAE;AAEW,MAAA,qBAAqB,GAAG,CAAC,KAAiB,EAAE,WAAwB,EAAE,KAAoB,KAAI;AACvG,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,WAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAClG,IAAA,MAAM,cAAc,GAAG,WAAW,EAAE,cAAc,CAAC;AACnD,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,EACvB,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE5C,IACI,gBAAgB,CAAC,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC7D,cAAc;AACd,QAAA,KAAK,GAAG,cAAc;QACtB,GAAG,IAAI,cAAc,EACvB;AACE,QAAA,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;AACnD,QAAA,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,cAAc,CAAC,CAAC;AAC1E,QAAA,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,IAAI,cAAc,CAAC,CAAC;AACzE,QAAA,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,GAAG,cAAc,CAAC,CAAC;AAEzE,QAAA,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3F,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACtG,KAAA;AAAM,SAAA;AACH,QAAA,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEvF,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/C,KAAA;AACL,EAAE;AAEK,MAAM,kBAAkB,GAAG,CAAC,KAAiB,EAAE,IAAU,EAAE,KAAa,EAAE,GAAW,KAAI;IAC5F,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AAChD,QAAA,WAAW,EAAE,UAAU;AACvB,QAAA,WAAW,EAAE,UAAU;AAC1B,KAAA,CAAC,CAAC;AAEH,IAAA,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;AAC1B,IAAA,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC;IAEtB,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AACpD,EAAE;MAEW,sBAAsB,GAAG,CAAC,KAAiB,EAAE,OAAoB,KAAI;AAC9E,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,cAAe,CAAC;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAG;AAC3C,QAAA,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,cAAc,IAAI,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC;AACzG,KAAC,CAAC,CAAC;AAEH,IAAA,IAAI,QAAQ,EAAE;QACV,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAClD,QAAA,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,cAAc,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAChE,KAAA;AACL,EAAE;AAEW,MAAA,wBAAwB,GAAG,CAAC,OAAoB,KAAI;IAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC9C,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,SAAS,CAAC;IAE9B,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAG;AAChC,QAAA,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,YAAY,IAAI,KAAK,CAAC,KAAM,IAAI,YAAY,IAAI,KAAK,CAAC,GAAI,CAAC;AACxG,KAAC,CAAC,CAAC;AACP,EAAE;AAEW,MAAA,kBAAkB,GAAG,CAAC,OAAoB,KAAI;IACvD,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAM,GAAG,KAAK,CAAC,CAAC;AACnG,EAAE;MAEW,kCAAkC,GAAG,CAAC,KAAiB,EAAE,eAA4B,KAAI;AAClG,IAAA,MAAM,QAAQ,GAAG,wBAAwB,CAAC,eAAe,CAAC,CAAC;AAC3D,IAAA,IAAI,QAAQ,EAAE;AACV,QAAA,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAI,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/F,KAAA;AAED,IAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACtD,IAAI,SAAS,CAAC,MAAM,EAAE;AAClB,QAAA,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAC7C,KAAA;AACL,EAAE;AAEW,MAAA,oBAAoB,GAAG,CAAC,KAAiB,EAAE,SAAwB,EAAE,IAAY,KAAI;AAC9F,IAAA,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AACzB,QAAA,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAM,GAAG,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAI,GAAG,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAClI,KAAC,CAAC,CAAC;AACP;;ACjHM,SAAU,iBAAiB,CAAC,OAAoB,EAAA;IAClD,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAsB,CAAC;AAC1E,IAAA,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;AAC/B,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,KAAA;AACD,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC;AAEK,SAAU,aAAa,CAAC,OAAoB,EAAA;AAC9C,IAAA,IAAI,MAAM,CAAC;IACX,IAAI,IAAI,GAAG,OAAO,CAAC;AACnB,IAAA,IAAI,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACxC,IAAA,OAAO,MAAM,EAAE;QACX,MAAM,GAAG,IAAI,CAAC;QACd,IAAI,GAAG,MAAM,CAAC;AACd,QAAA,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACtC,KAAA;AACD,IAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAEY,MAAA,gBAAgB,GAAG,CAAC,OAAoB,KAAI;AACrD,IAAA,MAAM,KAAK,GAAW,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,CAAc,KAAI;AACxE,QAAA,OAAO,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;KAClC,EAAE,CAAC,CAAC,CAAC;AACN,IAAA,OAAO,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3C,EAAE;MAEW,cAAc,GAAG,CAAC,MAAmB,EAAE,KAAkB,KAAI;AACtE,IAAA,IAAI,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACtC,IAAA,OAAO,MAAM,EAAE;QACX,IAAI,MAAM,KAAK,MAAM,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACtC,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;AAEW,MAAA,kBAAkB,GAAG,CAAC,QAAuB,KAAI;IAC1D,IAAI,MAAM,GAAkB,EAAE,CAAC;AAC/B,IAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;QACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAG;AACjC,YAAA,OAAO,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzC,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxB,SAAA;AACL,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,MAAM,CAAC;AAClB,EAAE;MAEW,YAAY,GAAG,CAAC,IAAc,EAAE,KAAe,KAAI;AAC5D,IAAA,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC5B,EAAE;MAEW,SAAS,GAAG,CAAC,IAAc,EAAE,KAAe,KAAI;AACzD,IAAA,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC5B,EAAE;AAEW,MAAA,WAAW,GAAG,CAAC,IAAiB,KAAI;AAC7C,IAAA,MAAM,OAAO,GAAgB,EAAE,GAAG,IAAI,EAAE,CAAC;AACzC,IAAA,OAAO,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC;AACzB,IAAA,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;AAEtB,IAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;QACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;AACjD,KAAA;AACD,IAAA,OAAO,OAAO,CAAC;AACnB,EAAE;MAEW,mBAAmB,GAAG,CAAC,KAAiB,EAAE,IAAiB,KAAI;AACxE,IAAA,MAAM,OAAO,GAAgB,EAAE,GAAG,IAAI,EAAE,CAAC;IACzC,OAAO,OAAO,CAAC,MAAM,CAAC;IACtB,OAAO,OAAO,CAAC,cAAc,CAAC;IAC9B,OAAO,OAAO,CAAC,IAAI,CAAC;AAEpB,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AAC7D,IAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,4BAA4B,CAAC,CAAC;IAEpH,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AAChD,IAAA,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAExB,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,CAAC,QAAQ,EAAE;QAC5C,OAAO,OAAO,CAAC,MAAM,CAAC;AACzB,KAAA;AAED,IAAA,OAAO,OAAO,CAAC;AACnB,EAAE;AAEW,MAAA,uBAAuB,GAAG,CAAC,IAAiB,KAAI;AACzD,IAAA,MAAM,OAAO,GAAgB,EAAE,GAAG,IAAI,EAAE,CAAC;IACzC,OAAO,OAAO,CAAC,KAAK,CAAC;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC;AAEnB,IAAA,OAAO,OAAO,CAAC;AACnB,EAAE;MAEW,mBAAmB,GAAG,CAAC,KAAiB,EAAE,IAAiB,KAAiB;AACrF,IAAA,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;AAC/B,IAAA,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE9C,IAAI,CAAC,IAAI,EAAE;QACP,IAAI,GAAG,MAAM,CAAC;AACd,QAAA,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACpD,KAAA;IAED,OAAO,UAAU,EAAE,WAAW,CAAC;IAC/B,OAAO,UAAU,EAAE,IAAI,CAAC;IACxB,OAAO,UAAU,EAAE,KAAK,CAAC;IACzB,OAAO,UAAU,EAAE,WAAW,CAAC;IAE/B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,CACnC,IAAI,EACJ,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,EACtC,4BAA4B,EAC5B,oBAAoB,CACvB,CAAC;IACF,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACnD,IAAA,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;IAE3B,OAAO;AACH,QAAA,GAAG,UAAU;AACb,QAAA,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,cAAc,CAAC,KAAK;AACjD,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,IAAI,EAAE,SAAS;KAClB,CAAC;AACN,EAAE;AAEW,MAAA,gBAAgB,GAAG,CAAC,IAAiB,KAAI;IAClD,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,IAAA,IAAI,IAAI,EAAE;AACN,QAAA,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtD,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,YAAA,GAAG,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACtC,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,GAAG,CAAC;AACf,EAAE;AAEW,MAAA,oBAAoB,GAAG,CAAC,KAAiB,EAAE,UAAgB,EAAE,YAAoB,KAAI;AAC9F,IAAA,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;AACrE,IAAA,UAAU,CAAC,OAAO,CACd,KAAK,EACL;QACI,cAAc,EACV,YAAY,IAAI,CAAC;cACX,eAAgB,GAAG,YAAY;AACjC,cAAE,eAAgB,GAAG,YAAY,GAAG,CAAC;AACrC,kBAAE,CAAC;kBACD,eAAgB,GAAG,YAAY;KAC5C,EACD,UAAU,CACb,CAAC;AACN,EAAE;AAEW,MAAA,0BAA0B,GAAG,CAAC,eAA4B,KAAI;AACvE,IAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;AACzD,IAAA,IAAI,aAAa,EAAE;QACf,MAAM,SAAS,GAAW,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,eAAe,CAAC,EAAE,CAAC,CAAC;QACnG,IACI,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,aAAa,CAAC,KAAK,cAAc,CAAC,QAAQ;AACxD,YAAA,aAAa,CAAC,cAAc;AAC5B,YAAA,SAAS,IAAI,aAAa,CAAC,cAAc,GAAG,CAAC,EAC/C;AACE,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;AAEW,MAAA,2BAA2B,GAAG,CAAC,KAAY,EAAE,cAAsB,EAAE,MAAsB,KAAI;IACxG,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;AACjH,IAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AACrC,IAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,IAAA,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AACtB,IAAA,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;AACtB,IAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAK;AAChC,QAAA,OAAO,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;AACvG,KAAC,CAAC,CAAC;AACH,IAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,IAAA,OAAO,IAAI,CAAC;AAChB,EAAE;AAEK,MAAM,iBAAiB,GAAG,CAC7B,IAAY,EACZ,KAAa,EACb,MAAc,EACd,OAOC,KACD;AACA,IAAA,MAAM,UAAU,GAAgB;QAC5B,EAAE,EAAE,SAAS,EAAE;AACf,QAAA,IAAI,EAAE;YACF,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AAClC,SAAA;AACD,QAAA,QAAQ,EAAE,EAAE;QACZ,KAAK;QACL,MAAM;QACN,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;KACvB,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,EAAE;AACd,QAAA,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAClC,KAAA;IACD,IAAI,OAAO,CAAC,WAAW,EAAE;AACrB,QAAA,UAAU,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;AAChD,KAAA;AACD,IAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACzC,QAAA,UAAU,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;AAChD,KAAA;IACD,IAAI,OAAO,CAAC,KAAK,EAAE;AACf,QAAA,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AACpC,KAAA;IACD,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,QAAA,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AACtC,KAAA;IACD,IAAI,OAAO,CAAC,WAAW,EAAE;AACrB,QAAA,UAAU,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;AAChD,KAAA;AACD,IAAA,OAAO,UAAU,CAAC;AACtB,EAAE;AAEF;AACa,MAAA,iBAAiB,GAAG,CAAC,KAAiB,EAAE,WAAwB,EAAE,IAAU,KAAI;IACzF,IAAI,IAAI,EACJ,WAAW,EACX,WAAW,EACX,KAAK,GAAG,aAAa,CAAC,cAAc,CAAC;AACzC,IAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACrB,QAAA,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;AACxB,QAAA,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;AACtC,QAAA,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;AACzC,KAAA;AAED,IAAA,KAAK,GAAG,WAAW,CAAC,KAAsB,CAAC;IAE3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAEzH,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/C,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC5B,IAAA,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACtC,UAAU,CAAC,MAAK;QACZ,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACjC,KAAC,CAAC,CAAC;AACP,EAAE;AAEW,MAAA,aAAa,GAAG,CAAC,KAAe,KAAI;IAC7C,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,QAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxD,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,EAAE;MAEW,sBAAsB,GAAG,CAAC,KAAiB,EAAE,gBAA+B,KAAI;;IAEzF,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC;IACzE,MAAM,iBAAiB,GAAkB,EAAE,CAAC;AAC5C,IAAA,MAAM,sBAAsB,GAAG,IAAI,OAAO,EAA+C,CAAC;AAE1F,IAAA,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAG;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACzB,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3G,IAAI,eAAe,CAAC,MAAM,EAAE;AACxB,gBAAA,eAAe,CAAC,OAAO,CAAC,QAAQ,IAAG;oBAC/B,IAAI,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACzD,IAAI,CAAC,aAAa,EAAE;AAChB,wBAAA,aAAa,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAI,EAAE,CAAC;AAC/D,wBAAA,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACpD,wBAAA,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpC,qBAAA;oBACD,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;oBAC9C,aAAa,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9C,iBAAC,CAAC,CAAC;AACN,aAAA;AAED,YAAA,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAC7D,IAAI,qBAAqB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;gBAC7E,IAAI,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBACtE,IAAI,CAAC,aAAa,EAAE;AAChB,oBAAA,aAAa,GAAG,EAAE,KAAK,EAAE,qBAAqB,CAAC,KAAM,EAAE,GAAG,EAAE,qBAAqB,CAAC,GAAI,EAAE,CAAC;AACzF,oBAAA,sBAAsB,CAAC,GAAG,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC;AACjE,oBAAA,iBAAiB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACjD,iBAAA;gBACD,aAAa,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;AAC7C,aAAA;AACJ,SAAA;AACL,KAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,IAAG;QAClD,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxD,QAAA,IAAI,aAAa,EAAE;YACf,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAoB,CAAC,CAAC;AAC9D,YAAA,OAAO,MAAK;AACR,gBAAA,IAAI,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,EAAE;AACzC,oBAAA,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACtC,iBAAA;AAAM,qBAAA;oBACH,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AAClD,iBAAA;AACL,aAAC,CAAC;AACL,SAAA;AACD,QAAA,OAAO,MAAO,GAAC,CAAC;AACpB,KAAC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,IAAG;QAClD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9C,QAAA,OAAO,MAAK;AACR,YAAA,IAAI,0BAA0B,CAAC,IAAI,CAAC,EAAE;AAClC,gBAAA,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnE,aAAA;AACD,YAAA,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvC,SAAC,CAAC;AACN,KAAC,CAAC,CAAC;IAEH,eAAe,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;IAC5C,gBAAgB,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;AACjD,EAAE;AAEW,MAAA,qBAAqB,GAAG,CAAC,QAAuB,KAAI;IAC7D,MAAM,sBAAsB,GAAG,EAAE,CAAC;IAClC,MAAM,cAAc,GAAkB,EAAE,CAAC;AAEzC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnD,QAAA,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE;AACpB,YAAA,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,sBAAsB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,SAAA;AAAM,aAAA;YACH,sBAAsB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,CAAC;AACtD;;AC1Wa,MAAA,qBAAqB,GAAG,CAAC,OAAoB,KAAmB;AACzE,IAAA,IAAI,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;AAC9B,IAAA,IAAI,SAAS,EAAE;AACX,QAAA,OAAO,SAAS,CAAC;AACpB,KAAA;AACD,IAAA,IAAI,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAExC,IAAA,OAAO,MAAM,EAAE;QACX,IAAI,MAAM,CAAC,KAAK,EAAE;YACd,OAAO,MAAM,CAAC,KAAK,CAAC;AACvB,SAAA;AACD,QAAA,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACtC,KAAA;IACD,OAAO,aAAa,CAAC,cAAc,CAAC;AACxC;;MCXa,2BAA2B,GAAG,CAAC,KAAiB,EAAE,OAAoB,KAAI;IACnF,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAkB,CAAC;AAC5E,IAAA,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;AAC5D,IAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE;QAClC,OAAO,QAAQ,CAAC,WAAW,CAAC;AAC/B,KAAA;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/C,IAAA,IAAI,MAAM,EAAE;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC5C,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,QAAA,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AACjC,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;AAC5B,KAAA;AAAM,SAAA;AACH,QAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAChE,KAAA;AACL,EAAE;AAEW,MAAA,kBAAkB,GAAG,CAAC,IAAiB,KAAI;AACpD,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACnC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AACjC,IAAA,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7B;;MC5Ba,sBAAsB,GAAG,CAAC,KAAiB,EAAE,OAAoB,KAAI;IAC9E,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAkB,CAAC;AAC5E,IAAA,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;AAC5D,IAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE;QAClC,OAAO,QAAQ,CAAC,WAAW,CAAC;AAC/B,KAAA;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/C,IAAA,IAAI,MAAM,EAAE;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC5C,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,QAAA,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AACjC,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;AAC5B,KAAA;AAAM,SAAA;AACH,QAAA,OAAO,gBAAgB,CAAC;AAC3B,KAAA;AACL;;ACpBM,SAAU,YAAY,CAAC,CAAgB,EAAA;IACzC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;IACrC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAClC,IAAA,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AACvD,IAAA,OAAO,UAAU,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACvF;;SCHgB,QAAQ,CACpB,KAAiB,EACjB,IAAc,EACd,KAAe,EACf,aAA+B,GAAA,IAAI,EACnC,YAAY,GAAG,IAAI,EACnB,iBAAiB,GAAG,IAAI,EAAA;AAExB,IAAA,IAAI,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,SAAS,GAAG,IAAI,EAChB,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAmB,CAAC;AACpF,IAAA,IAAI,YAAY,EAAE;AACd,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;YAC5B,SAAS,GAAG,KAAK,CAAC;YAClB,OAAO,GAAG,IAAI,CAAC;AAClB,SAAA;AACD,QAAA,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC;QACxD,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QAChC,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtC,IACI,IAAI,CAAC,MAAM;YACX,gBAAgB,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACpE,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAmB,KAAK,aAAa,CAAC,SAAS,EACnF;AACE,YAAA,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AAC3B,gBAAA,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7C,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;AAC3C,aAAA;AACJ,SAAA;AACJ,KAAA;AAAM,SAAA;AACH,QAAA,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE;YAClB,SAAS,GAAG,KAAK,CAAC;YAClB,OAAO,GAAG,IAAI,CAAC;AAClB,SAAA;QACD,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;AAC3C,QAAA,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;QACzD,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QACrC,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AACnC,KAAA;AAED,IAAA,MAAM,MAAM,GAAG,aAAa,IAAI,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AACjF,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC;AACvF,IAAA,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QACvB,IAAI,MAAM,KAAK,cAAc,CAAC,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;YAC5D,IAAI,IAAI,WAAW,CAAC;AACvB,SAAA;AACD,QAAA,IAAI,MAAM,KAAK,cAAc,CAAC,MAAM,EAAE;YAClC,IAAI,IAAI,WAAW,CAAC;AACvB,SAAA;AACJ,KAAA;AACD,IAAA,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE;QACzB,IAAI,MAAM,KAAK,cAAc,CAAC,KAAK,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;YAC7D,MAAM,IAAI,WAAW,CAAC;AACzB,SAAA;AACD,QAAA,IAAI,MAAM,KAAK,cAAc,CAAC,QAAQ,EAAE;YACpC,MAAM,IAAI,WAAW,CAAC;AACzB,SAAA;AACJ,KAAA;AACD,IAAA,IAAI,YAAY,EAAE;AACd,QAAA,IAAI,KAAK,GAAY;YACjB,CAAC,MAAM,EAAE,MAAM,CAAC;AAChB,YAAA,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC;AACtD,YAAA,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;YAClD,CAAC,IAAI,EAAE,IAAI,CAAC;SACf,CAAC;QACF,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAkB,CAAC;AAEnE,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE;AAClB,gBAAA,KAAK,GAAG;oBACJ,CAAC,MAAM,EAAE,MAAM,CAAC;AAChB,oBAAA,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC;AACtD,oBAAA,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;AAClD,oBAAA,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC;iBACpB,CAAC;AACF,gBAAA,MAAM,IAAI,GAAG;AACT,oBAAA,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC;AACjB,oBAAA,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC;oBACjB,CAAC,IAAI,EAAE,IAAI,CAAC;iBACJ,CAAC;gBACb,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACH,gBAAA,KAAK,GAAG;AACJ,oBAAA,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,CAAC;AACrB,oBAAA,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC;AACtD,oBAAA,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;oBAClD,CAAC,IAAI,EAAE,IAAI,CAAC;iBACf,CAAC;AACF,gBAAA,MAAM,IAAI,GAAG;oBACT,CAAC,MAAM,EAAE,MAAM,CAAC;AAChB,oBAAA,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,CAAC;AACrB,oBAAA,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,CAAC;iBACb,CAAC;gBACb,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;AAC/B,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,iBAAiB,IAAI,KAAK,KAAK,aAAa,CAAC,SAAS,EAAE;YACxD,IAAI,KAAK,CAAC,IAAI,EAAE;AACZ,gBAAA,MAAM,SAAS,GAAG;AACd,oBAAA,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;AACzD,oBAAA,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;AACzD,oBAAA,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;iBACjD,CAAC;gBACb,KAAK,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC;AACpC,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,SAAS,GAAG;AACd,oBAAA,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;AACjD,oBAAA,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;AACjD,oBAAA,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;iBACzC,CAAC;gBACb,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,SAAS,CAAC,CAAC;AACpC,aAAA;AACJ,SAAA;AAED,QAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,OAAO,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAa,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AACtF,KAAA;AAAM,SAAA;AACH,QAAA,IAAI,KAAK,GAAY;YACjB,CAAC,MAAM,EAAE,MAAM,CAAC;AAChB,YAAA,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AACtD,YAAA,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;YAClD,CAAC,IAAI,EAAE,IAAI,CAAC;SACf,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;AACrB,gBAAA,KAAK,GAAG;oBACJ,CAAC,MAAM,EAAE,MAAM,CAAC;AAChB,oBAAA,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AACtD,oBAAA,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AAClD,oBAAA,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;iBACpB,CAAC;AAEF,gBAAA,MAAM,IAAI,GAAG;AACT,oBAAA,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;AACjB,oBAAA,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;oBACjB,CAAC,IAAI,EAAE,IAAI,CAAC;iBACJ,CAAC;gBACb,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACH,gBAAA,KAAK,GAAG;AACJ,oBAAA,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;AACrB,oBAAA,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AACtD,oBAAA,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;oBAClD,CAAC,IAAI,EAAE,IAAI,CAAC;iBACf,CAAC;AACF,gBAAA,MAAM,IAAI,GAAG;oBACT,CAAC,MAAM,EAAE,MAAM,CAAC;AAChB,oBAAA,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;AACrB,oBAAA,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;iBACb,CAAC;gBAEb,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;AAC/B,aAAA;AACJ,SAAA;AACD,QAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,OAAO,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAa,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AACtF,KAAA;AACL;;AC1Ja,MAAA,wBAAwB,GAAG,CACpC,KAAiB,EACjB,UAA+D,EAC/D,aAAsC,KACtC;IACA,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAsB,CAAC;IAC1F,MAAM,UAAU,GAAG,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC5D,IAAA,IAAI,UAAU,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;AAChF,QAAA,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;AACrG,KAAA;IAED,IAAI,eAAe,CAAC,MAAM,IAAI,UAAU,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;AAC1G,QAAA,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAsB,CAAC;AACtG,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9F,QAAA,6BAA6B,CACzB,KAAK,EACL,UAAU,EACV,UAAU,CAAC,YAAY,EACvB,WAAW,EACX,eAAe,EACf,eAAe,EACf,aAAa,CAChB,CAAC;AACL,KAAA;AACL,EAAE;AAEW,MAAA,6BAA6B,GAAG,CACzC,KAAiB,EACjB,UAKC,EACD,YAA0B,EAC1B,WAAmB,EACnB,eAAkC,EAClC,eAAkC,EAClC,aAAsC,KACtC;AACA,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5F,IAAA,MAAM,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzF,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC;AACrH,IAAA,IAAI,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,EAC9B,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,EAAE,EACzB,mBAAmB,GAAG,UAAU,CAAC,CAAC,EAClC,iBAAiB,GAAG,UAAU,CAAC,CAAC,GAAG,EAAE,EACrC,mBAAmB,GAAG,KAAK,EAC3B,iBAAiB,GAAG,mBAAmB,GAAG,EAAE,EAC5C,KAAK,GAAG,EAAE,CAAC;AAEf,IAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,QAAA,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QACjE,mBAAmB,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;QAC3D,iBAAiB,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;AACvD,KAAA;AACD,IAAA,IAAI,uBAAuB,CAAC,gBAAgB,CAAC,EAAE;AAC3C,QAAA,KAAK,GAAG,kBAAkB,CAAC,YAAgC,EAAE,WAAW,EAAE,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3H,QAAA,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,EAAE;YACpC,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;YACvE,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,eAAe,CAAC,IAAI,CAAC,CAAC;AACrF,YAAA,MAAM,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC;;AAErC,YAAA,IAAI,MAAM,EAAE;AACR,gBAAA,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjE,mBAAmB,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC3D,iBAAiB,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;AACvD,aAAA;AACD,YAAA,MAAM,WAAW,GAAG,GAAG,KAAK,cAAc,CAAC;AAC3C,YAAA,MAAM,WAAW,GAAG,GAAG,KAAK,cAAc,GAAG,CAAC,CAAC;;AAE/C,YAAA,IAAI,YAAY,KAAK,KAAK,IAAI,WAAW,EAAE;gBACvC,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;AAC5C,aAAA;AACD,YAAA,IAAI,YAAY,KAAK,QAAQ,IAAI,WAAW,EAAE;gBAC1C,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;AACjD,aAAA;AACJ,SAAA;QACD,mBAAmB,GAAG,KAAK,CAAC;AAC5B,QAAA,iBAAiB,GAAG,mBAAmB,GAAG,EAAE,CAAC;AAChD,KAAA;AAED,IAAA,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE;QAC/B,eAAe,GAAG,eAAe,CAAC;QAClC,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAsB,CAAC;AAChG,QAAA,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,QAAA,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC;QACpC,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,YAAY,KAAK,KAAK,EAAE;AAC/C,YAAA,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC;AAC5B,YAAA,mBAAmB,GAAG,KAAK,GAAG,IAAI,GAAG,WAAW,CAAC;AACpD,SAAA;QACD,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,YAAY,KAAK,QAAQ,EAAE;YACrD,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;AAChD,YAAA,mBAAmB,GAAG,KAAK,GAAG,IAAI,GAAG,WAAW,CAAC;AACpD,SAAA;AACD,QAAA,mBAAmB,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACjI,QAAA,iBAAiB,GAAG,mBAAmB,GAAG,EAAE,CAAC;AAC7C,QAAA,iBAAiB,GAAG,mBAAmB,GAAG,EAAE,CAAC;AAChD,KAAA;AACD,IAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;;AAE1B,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;AACvB,YAAA,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;YACrB,IAAI,YAAY,KAAK,KAAK,EAAE;AACxB,gBAAA,MAAM,UAAU,GAAG,WAAW,KAAK,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACnF,gBAAA,IAAI,UAAU,EAAE;oBACZ,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;AACnD,iBAAA;AAAM,qBAAA;AACH,oBAAA,MAAM,aAAa,GAAG,YAAY,CAAC,YAAY,CAC3C,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CACnC,CAAC;oBACvB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBACxD,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtF,iBAAA;AACJ,aAAA;YACD,IAAI,YAAY,KAAK,QAAQ,EAAE;AAC3B,gBAAA,MAAM,WAAW,GAAG,WAAW,KAAK,CAAC,CAAC;AACtC,gBAAA,IAAI,WAAW,EAAE;oBACb,MAAM,UAAU,GAAG,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC5D,oBAAA,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;AACvD,iBAAA;AAAM,qBAAA;AACH,oBAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,YAAY,CAC/C,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CACnC,CAAC;oBACvB,MAAM,YAAY,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;oBAChE,KAAK,GAAG,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9F,iBAAA;AACJ,aAAA;AACJ,SAAA;QACD,mBAAmB,GAAG,KAAK,CAAC;AAC5B,QAAA,iBAAiB,GAAG,mBAAmB,GAAG,EAAE,CAAC;QAC7C,mBAAmB,GAAG,KAAK,CAAC;AAC5B,QAAA,iBAAiB,GAAG,mBAAmB,GAAG,EAAE,CAAC;AAChD,KAAA;;IAGD,MAAM,QAAQ,GAAa,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC9F,IAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC;AACrC,UAAE,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC;UAC7E,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;;AAExG,IAAA,MAAM,cAAc,GAAG,kBAAkB,CACrC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAC7B,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB;AACI,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,SAAS,EAAE,OAAO;AACrB,KAAA,CACJ,CAAC;AACF,IAAA,aAAa,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AACrC,IAAA,aAAa,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;AAC/C,EAAE;AACK,MAAM,qBAAqB,GAAG,CACjC,KAAiB,EACjB,UAKC,EACD,YAA0B,EAC1B,eAAkC,EAClC,aAAsC,KACtC;IACA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC3C,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,IAAA,IAAI,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC;AAC/B,IAAA,IAAI,YAAY,GAAG,CAAC,GAAG,KAAK,GAAG,UAAU,CAAC;AAC1C,IAAA,IAAI,oBAAoB,GAAG,CAAC,GAAG,KAAK,GAAG,UAAU,CAAC;IAClD,IAAI,kBAAkB,GAAG,CAAC,GAAG,UAAU,GAAG,KAAK,GAAG,EAAE,CAAC;IACrD,IAAI,oBAAoB,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,kBAAkB,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAEjD,IAAI,YAAY,KAAK,MAAM,EAAE;AACzB,QAAA,cAAc,GAAG,CAAC,GAAG,UAAU,CAAC;QAChC,YAAY,GAAG,CAAC,CAAC;AACjB,QAAA,oBAAoB,GAAG,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC;AAC3C,QAAA,kBAAkB,GAAG,CAAC,GAAG,UAAU,CAAC;AACvC,KAAA;AACD,IAAA,IAAI,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,IAAA,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC;IACzB,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC;AACrH,IAAA,MAAM,YAAY,GAAG;QACjB,KAAK;QACL,KAAK;QACL,CAAC;QACD,CAAC;QACD,KAAK;QACL,MAAM;QACN,WAAW;KACd,CAAC;AACF,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,yBAAyB,CACtD,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CACxG,CAAC;AACF,IAAA,MAAM,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClF,IAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE;;AAEtC,QAAA,IAAI,UAAU,GAAG;AACb,YAAA,CAAC,cAAc,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;AAChC,YAAA,CAAC,YAAY,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;SACtB,CAAC;AACb,QAAA,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAE;YAChC,MAAM,SAAS,GAAG,oBAAoB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YACnE,eAAe,CAAC,KAAK,EAAE,aAA4B,EAAE,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;YACtF,OAAO;AACV,SAAA;AAAM,aAAA,IAAI,qBAAqB,CAAC,YAAY,CAAC,EAAE;YAC5C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACrC;;;;;;;;AAQG;AACH,gBAAA,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,gBAAA,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAsB,CAAC;AACtG,gBAAA,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE9F,IAAI,YAAY,KAAK,MAAM,EAAE;oBACzB,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,oBAAA,MAAM,WAAW,GAAG,WAAW,KAAK,CAAC,CAAC;AACtC,oBAAA,IAAI,WAAW,EAAE;wBACb,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;AACxF,qBAAA;AAAM,yBAAA;AACH,wBAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,YAAY,CAC/C,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CACnC,CAAC;wBACvB,MAAM,YAAY,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAChE,wBAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AACnE,wBAAA,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;AACvB,qBAAA;AACD,oBAAA,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,OAAO,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AAC3E,iBAAA;gBACD,IAAI,YAAY,KAAK,OAAO,EAAE;oBAC1B,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,oBAAA,MAAM,UAAU,GAAG,WAAW,KAAK,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACnF,oBAAA,IAAI,UAAU,EAAE;wBACZ,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;AACxF,qBAAA;AAAM,yBAAA;AACH,wBAAA,MAAM,aAAa,GAAG,YAAY,CAAC,YAAY,CAC3C,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CACnC,CAAC;wBACvB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACxD,wBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAC7D,wBAAA,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;AACvB,qBAAA;oBACD,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACnF,iBAAA;gBACD,oBAAoB,GAAG,KAAK,CAAC;AAC7B,gBAAA,IAAI,WAAW,CAAC,YAAY,CAAC,EAAE;;AAE3B,oBAAA,oBAAoB,GAAG,KAAK,GAAG,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1E,iBAAA;AACD,gBAAA,IAAI,cAAc,CAAC,YAAY,CAAC,EAAE;oBAC9B,oBAAoB,GAAG,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5D,iBAAA;AACD,gBAAA,kBAAkB,GAAG,oBAAoB,GAAG,EAAE,CAAC;AAC/C,gBAAA,kBAAkB,GAAG,oBAAoB,GAAG,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAa,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtF,gBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9F,gBAAA,aAAa,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AACxC,aAAA;AACJ,SAAA;AAAM,aAAA;YACH,IAAI,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;AAC5G,YAAA,aAAa,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AACxC,SAAA;;AAED,QAAA,IAAI,cAAc,GAAG,kBAAkB,CACnC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAC7B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB;AACI,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,SAAS,EAAE,OAAO;AACrB,SAAA,CACJ,CAAC;AAEF,QAAA,aAAa,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;AAC9C,KAAA;AAAM,SAAA;;AAEH,QAAA,IAAI,uBAAuB,CAAC,YAAY,CAAC,EAAE;AACvC,YAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;gBAC1B,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBAC7D,eAAe,CAAC,KAAK,EAAE,aAA4B,EAAE,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;gBACtF,OAAO;AACV,aAAA;AACJ,SAAA;AACJ,KAAA;AACL,EAAE;AAEW,MAAA,kBAAkB,GAAG,CAC9B,YAA8B,EAC9B,WAAmB,EACnB,UAAoB,EACpB,UAKC,EACD,MAAsB,EACtB,KAAa,KACb;IACA,IAAI,YAAY,KAAK,KAAK,EAAE;QACxB,IAAI,WAAW,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;YAC1C,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;AAC5C,SAAA;QACD,IAAI,WAAW,GAAG,CAAC,EAAE;AACjB,YAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAsB,CAAC;YACtH,MAAM,YAAY,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;AAClD,YAAA,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC5C,SAAA;AACJ,KAAA;IACD,IAAI,YAAY,KAAK,QAAQ,EAAE;QAC3B,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;QAC9C,IAAI,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,YAAA,MAAM,aAAa,GAAG,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAsB,CAAC;YAClH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;AAC9C,YAAA,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC1C,SAAA;QACD,IAAI,WAAW,KAAK,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACvD,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;AACjD,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;MAEW,oBAAoB,GAAG,CAChC,MAAsB,EACtB,YAQC,KACD;AACA,IAAA,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;AACtE,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;AACtB,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC;AAChD,IAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,QAAA,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC;AACvB,KAAA;AACD,IAAA,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;AACvB,QAAA,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC;AACvB,KAAA;AACD,IAAA,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;AACrB,QAAA,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC;AACvB,KAAA;AACD,IAAA,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE;AACxB,QAAA,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC;AAChC,KAAA;AACD,IAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC5B,EAAE;AAEK,MAAM,eAAe,GAAG,CAC3B,KAAiB,EACjB,aAA0B,EAC1B,SAA2C,EAC3C,IAAc,KACd;AACA,IAAA,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IACnC,MAAM,QAAQ,GAAa,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAClF,IAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AAE/E,IAAA,MAAM,oBAAoB,GAAG,KAAK,EAC9B,oBAAoB,GAAG,KAAK,EAC5B,kBAAkB,GAAG,KAAK,GAAG,EAAE,EAC/B,kBAAkB,GAAG,KAAK,GAAG,EAAE,CAAC;AACpC,IAAA,MAAM,cAAc,GAAG,kBAAkB,CACrC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAC7B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB;AACI,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,SAAS,EAAE,OAAO;AACrB,KAAA,CACJ,CAAC;AACF,IAAA,aAAa,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AACrC,IAAA,aAAa,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;AAC/C;;ACxaA;;;;;AAKG;MAEU,iBAAiB,GAAG,CAAC,UAAoB,EAAE,WAAkB,KAA2B;AACjG,IAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAC/D,IAAA,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;AAC/B,IAAA,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AAE9B,IAAA,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;AAChD,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;IAC9C,MAAM,SAAS,GAAmB,EAAE,CAAC;;AAGrC,IAAA,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;AACnD,QAAA,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE;AACnD,YAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE;AACpD,YAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3B,SAAA;;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE;AAC9G,YAAA,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE;AAC1B,gBAAA,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,aAAA;AAAM,iBAAA;AACH,gBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5B,aAAA;AACJ,SAAA;QACD,OAAO,SAAS,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;AAC9C,KAAA;;AAGD,IAAA,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE;AAClD,QAAA,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE;AAClD,YAAA,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,SAAA;AACD,QAAA,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE;AACrD,YAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE;AAClH,YAAA,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE;AAC1B,gBAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,aAAA;AAAM,iBAAA;AACH,gBAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3B,aAAA;AACJ,SAAA;QACD,OAAO,SAAS,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;AAC9C,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AAChB;;MCxDa,kBAAkB,GAAG,CAAC,IAAc,EAAE,aAA6B,KAA2B;AACvG,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACrB,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAqB,CAAC,CAAC;AAC/F,QAAA,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAE;AAChC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AAC5D,YAAA,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;AAC/D,YAAA,OAAO,mBAAmB,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;AAC1E,SAAA;AAED,QAAA,IAAI,YAAY,CAAC,YAAY,CAAC,EAAE;YAC5B,OAAO,mBAAmB,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AACxD,SAAA;AAED,QAAA,IAAI,aAAa,CAAC,YAAY,CAAC,EAAE;YAC7B,OAAO,mBAAmB,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,SAAA;AAED,QAAA,IAAI,YAAY,KAAK,cAAc,CAAC,MAAM,EAAE;YACxC,OAAO,mBAAmB,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzD,SAAA;AAED,QAAA,IAAI,YAAY,KAAK,cAAc,CAAC,QAAQ,EAAE;YAC1C,OAAO,mBAAmB,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD,SAAA;AACJ,KAAA;AAAM,SAAA;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,IAAI,EAAE,MAAqB,CAAC,CAAC;AAClF,QAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;YAC1B,OAAO,mBAAmB,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAChE,SAAA;AAED,QAAA,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;AACrB,YAAA,OAAO,mBAAmB,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1E,SAAA;AAED,QAAA,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE;AACxB,YAAA,OAAO,mBAAmB,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACvE,SAAA;AAED,QAAA,IAAI,MAAM,KAAK,cAAc,CAAC,IAAI,EAAE;AAChC,YAAA,OAAO,mBAAmB,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AACzE,SAAA;AAED,QAAA,IAAI,MAAM,KAAK,cAAc,CAAC,KAAK,EAAE;AACjC,YAAA,OAAO,mBAAmB,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxE,SAAA;AACJ,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AAChB,EAAE;MAEW,mBAAmB,GAAG,CAAC,aAA6B,EAAE,iBAAiC,KAA2B;IAC3H,MAAM,UAAU,GAAG,aAAa,CAAC;AACjC,IAAA,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAG;AAC7B,QAAA,MAAM,oBAAoB,GAAG,UAAU,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC;AACnF,QAAA,IAAI,oBAAoB,KAAK,CAAC,CAAC,EAAE;AAC7B,YAAA,UAAU,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;AAC9C,SAAA;AACL,KAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;AACjD;;ACxDA;AACa,MAAA,sBAAsB,GAAG,CAAC,UAGtC,KAAyD;AACtD,IAAA,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC;AAC5C,IAAA,MAAM,aAAa,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC/C,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,CAAsB,CAAC;AAC/E,IAAA,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,YAAY,EAAE;AACrE,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClF,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,yBAAyB,CACtD,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CACxG,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;AACrD,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE;AACtC,gBAAA,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACpC,oBAAA,MAAM,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAElF,oBAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;wBAC1B,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,cAAwB,CAAC;wBAC5E,IAAI,YAAY,KAAK,MAAM,EAAE;;4BAEzB,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,cAAc,EAAE;AACzD,gCAAA,OAAO,aAAa,CAAC;AACxB,6BAAA;AACJ,yBAAA;AAAM,6BAAA;;4BAEH,IAAI,cAAc,KAAK,CAAC,EAAE;AACtB,gCAAA,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;AACjC,6BAAA;AAAM,iCAAA;AACH,gCAAA,aAAa,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AAChF,gCAAA,aAAa,CAAC,YAAY,GAAG,QAAQ,CAAC;AACzC,6BAAA;AACD,4BAAA,OAAO,aAAa,CAAC;AACxB,yBAAA;AACJ,qBAAA;AACJ,iBAAA;;AAGD,gBAAA,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAE;AAChC,oBAAA,aAAa,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/D,oBAAA,aAAa,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAC;AAC1E,oBAAA,OAAO,aAAa,CAAC;AACxB,iBAAA;;AAED,gBAAA,IAAI,qBAAqB,CAAC,YAAY,CAAC,EAAE;AACrC,oBAAA,OAAO,aAAa,CAAC;AACxB,iBAAA;;gBAED,MAAM,kBAAkB,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACpE,gBAAA,aAAa,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC;AAChF,gBAAA,aAAa,CAAC,YAAY,GAAG,QAAQ,CAAC;AACzC,aAAA;AAAM,iBAAA;;AAEH,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACpE,oBAAA,MAAM,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClF,oBAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;AAC1B,wBAAA,aAAa,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/D,wBAAA,aAAa,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAC;AACpE,wBAAA,OAAO,aAAa,CAAC;AACxB,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;;AAErD,YAAA,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;AAChE,gBAAA,aAAa,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/D,gBAAA,aAAa,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAC;AACpE,gBAAA,OAAO,aAAa,CAAC;AACxB,aAAA;;AAED,YAAA,MAAM,YAAY,GAAG,WAAW,CAAC,yBAAyB,CACtD,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CACxG,CAAC;AACF,YAAA,IAAI,qBAAqB,CAAC,YAAY,CAAC,EAAE;gBACrC,MAAM,kBAAkB,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACpE,gBAAA,aAAa,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC;AAChF,gBAAA,aAAa,CAAC,YAAY,GAAG,OAAO,CAAC;AACrC,gBAAA,OAAO,aAAa,CAAC;AACxB,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,aAAa,CAAC;AACxB,KAAA;AACD,IAAA,OAAO,UAAU,CAAC;AACtB;;ACpFO,MAAM,8BAA8B,GAAG,CAC1C,iBAAkC,EAClC,QAAgB,EAChB,oBAA4C,EAC5C,YAAqB,KACrB;AACA,IAAA,IAAI,YAAY,EAAE;AACd,QAAA,IAAI,oBAAoB,KAAK,sBAAsB,CAAC,KAAK,EAAE;YACvD,OAAO;AACH,gBAAA,GAAG,iBAAiB;AACpB,gBAAA,CAAC,EAAE,QAAQ;gBACX,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAC,GAAG,QAAQ;aACpE,CAAC;AACL,SAAA;AAAM,aAAA;YACH,OAAO;AACH,gBAAA,GAAG,iBAAiB;AACpB,gBAAA,MAAM,EAAE,QAAQ,GAAG,iBAAiB,CAAC,CAAC;aACzC,CAAC;AACL,SAAA;AACJ,KAAA;AAAM,SAAA;AACH,QAAA,IAAI,oBAAoB,KAAK,sBAAsB,CAAC,KAAK,EAAE;YACvD,OAAO;AACH,gBAAA,GAAG,iBAAiB;AACpB,gBAAA,CAAC,EAAE,QAAQ;gBACX,KAAK,EAAE,iBAAiB,CAAC,KAAK,GAAG,iBAAiB,CAAC,CAAC,GAAG,QAAQ;aAClE,CAAC;AACL,SAAA;AAAM,aAAA;YACH,OAAO;AACH,gBAAA,GAAG,iBAAiB;AACpB,gBAAA,KAAK,EAAE,QAAQ,GAAG,iBAAiB,CAAC,CAAC;aACxC,CAAC;AACL,SAAA;AACJ,KAAA;AACL,EAAE;AAEW,MAAA,gBAAgB,GAAG,CAC5B,KAAiB,EACjB,cAAsC,EACtC,cAA6B,EAC7B,OAAoB,EACpB,MAAkB,EAClB,YAAqB,KACrB;IACA,MAAM,IAAI,GAAI,WAAW,CAAC,OAAO,CAAC,OAAO,CAA2B,CAAC;AACrE,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAsB,EAAE,MAAM,CAAC,CAAC;AAE/E,IAAA,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AACxC,IAAA,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AAEpC,IAAA,IAAI,cAAc,KAAK,sBAAsB,CAAC,KAAK,EAAE;QACjD,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,KAAM,CAAC,CAAC;AAClH,QAAA,IAAI,OAAO,CAAC;QAEZ,IAAI,YAAY,CAAC,MAAM,EAAE;YACrB,MAAM,KAAK,GAAG,YAAY;iBACrB,GAAG,CAAC,IAAI,IAAG;gBACR,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,IAAoB,EAAE,MAAM,CAAC,CAAC;AACjE,gBAAA,OAAO,GAAG,CAAC;AACf,aAAC,CAAC;AACD,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,OAAO,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACvC,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAC/B,SAAA;AAED,QAAA,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AACxE,QAAA,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAEzE,QAAA,IAAI,YAAY,EAAE;YACd,OAAO;AACH,gBAAA,GAAG,EAAE,gBAAgB,CAAC,CAAC,GAAG,gCAAgC;AAC1D,gBAAA,GAAG,EAAE,gBAAgB,CAAC,CAAC,GAAG,gCAAgC;aAC7D,CAAC;AACL,SAAA;AAAM,aAAA;YACH,OAAO;AACH,gBAAA,GAAG,EAAE,gBAAgB,CAAC,CAAC,GAAG,gCAAgC;AAC1D,gBAAA,GAAG,EAAE,gBAAgB,CAAC,CAAC,GAAG,gCAAgC;aAC7D,CAAC;AACL,SAAA;AACJ,KAAA;AAAM,SAAA;QACH,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,GAAI,CAAC,CAAC;AAClH,QAAA,IAAI,OAAO,CAAC;QAEZ,IAAI,YAAY,CAAC,MAAM,EAAE;YACrB,MAAM,KAAK,GAAG,YAAY;iBACrB,GAAG,CAAC,IAAI,IAAG;gBACR,MAAM,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,IAAoB,EAAE,MAAM,CAAC,CAAC;AACnE,gBAAA,OAAO,KAAK,CAAC;AACjB,aAAC,CAAC;AACD,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,OAAO,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACvC,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YACjF,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjD,SAAA;AAED,QAAA,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AACxE,QAAA,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;AAE7E,QAAA,IAAI,YAAY,EAAE;YACd,OAAO;gBACH,GAAG,EAAE,gBAAgB,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,GAAG,gCAAgC;gBACpF,GAAG,EAAE,kBAAkB,CAAC,CAAC,GAAG,kBAAkB,CAAC,MAAM,GAAG,gCAAgC;aAC3F,CAAC;AACL,SAAA;AAAM,aAAA;YACH,OAAO;gBACH,GAAG,EAAE,gBAAgB,CAAC,CAAC,GAAG,gBAAgB,CAAC,KAAK,GAAG,gCAAgC;gBACnF,GAAG,EAAE,kBAAkB,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,GAAG,gCAAgC;aAC1F,CAAC;AACL,SAAA;AACJ,KAAA;AACL,EAAE;AAEW,MAAA,oBAAoB,GAAG,CAAC,KAAiB,EAAE,OAAoB,EAAE,KAAY,KAAI;IAC1F,MAAM,UAAU,GAAG,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAmB,CAAC;AACpF,IAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAEpD,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACrD,IAAA,MAAM,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAM,EAAE,OAAO,CAAC,GAAI,GAAG,CAAC,CAAC,CAAC;IACxF,IAAI,iBAAiB,GAAG,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAC9E,iBAAiB,GAAG,eAAe,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,gCAAgC,CAAC,CAAC;AAE9G,IAAA,MAAM,cAAc,GAAG,0BAA0B,CAAC,iBAAiB,EAAE,YAAY,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACjH,IAAA,MAAM,YAAY,GAAG,0BAA0B,CAAC,iBAAiB,EAAE,YAAY,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC;AAE7G,IAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACnE,IAAA,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC;QAAE,OAAO,sBAAsB,CAAC,KAAK,CAAC;AACzF,IAAA,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC;QAAE,OAAO,sBAAsB,CAAC,GAAG,CAAC;AACrF,IAAA,OAAO,SAAS,CAAC;AACrB,EAAE;AAEW,MAAA,0BAA0B,GAAG,CAAC,SAA0B,EAAE,YAAqB,EAAE,QAAgC,KAAI;AAC9H,IAAA,IAAI,MAAM,CAAC;AACX,IAAA,IAAI,QAAQ,KAAK,sBAAsB,CAAC,KAAK,EAAE;AAC3C,QAAA,MAAM,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAE1D,QAAA,MAAM,GAAG,8BAA8B,CACnC,SAAS,EACT,QAAQ,GAAG,0BAA0B,GAAG,CAAC,EACzC,sBAAsB,CAAC,GAAG,EAC1B,YAAY,CACf,CAAC;AACF,QAAA,MAAM,GAAG,8BAA8B,CAAC,MAAM,EAAE,QAAQ,GAAG,0BAA0B,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AACtH,KAAA;AAAM,SAAA;QACH,MAAM,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;AAE/F,QAAA,MAAM,GAAG,8BAA8B,CACnC,SAAS,EACT,QAAQ,GAAG,0BAA0B,GAAG,CAAC,EACzC,sBAAsB,CAAC,KAAK,EAC5B,YAAY,CACf,CAAC;AACF,QAAA,MAAM,GAAG,8BAA8B,CAAC,MAAM,EAAE,QAAQ,GAAG,0BAA0B,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AACtH,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,EAAE;AAEI,SAAU,qBAAqB,CAAC,KAAiB,EAAE,cAA6B,EAAE,QAAgB,EAAE,YAAqB,EAAA;IAC3H,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,IAAG;AAC3C,QAAA,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3C,KAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAG;QAClC,OAAO,sBAAsB,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AACzD,KAAC,CAAC,CAAC;AAEH,IAAA,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACpE,IAAA,MAAM,WAAW,GAAG;AAChB,QAAA,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK;AAC9B,QAAA,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;KAC1B,CAAC;AACF,IAAA,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACrF,IAAA,MAAM,YAAY,GAAG;AACjB,QAAA,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK;AAC5B,QAAA,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM;QAC7B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACzB,CAAC;AAEF,IAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5B,IAAA,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAE9B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,gBAAgB,GAAG,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAE/E,QAAA,IACI,QAAQ,IAAI,OAAO,GAAG,gBAAgB,GAAG,CAAC;AAC1C,YAAA,QAAQ,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,EAChH;YACE,OAAO,CAAC,GAAG,CAAC,CAAC;AAChB,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,CAAC,CAAC;AACb,CAAC;SAEe,qBAAqB,CAAC,KAAiB,EAAE,eAAyC,EAAE,QAAe,EAAA;AAC/G,IAAA,IAAI,aAAa,CAAC;AAClB,IAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC;SACtC,MAAM,CAAC,OAAO,IAAI,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SACnD,IAAI,CAAC,OAAO,IAAG;QACZ,aAAa,GAAG,oBAAoB,CAAC,KAAK,EAAE,OAAsB,EAAE,QAAQ,CAAC,CAAC;AAC9E,QAAA,OAAO,aAAa,CAAC;AACzB,KAAC,CAAC,CAAC;IAEP,IAAI,eAAe,KAAK,QAAQ,EAAE;AAC9B,QAAA,OAAO,eAAe,CAAC;AAC1B,KAAA;AAED,IAAA,IAAI,eAAe,EAAE;QACjB,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,eAAgB,CAAsB,CAAC;QACnF,SAAS,CAAC,6BAA6B,EAAE,CAAC;QAC1C,eAAe,GAAG,SAAS,CAAC;AAC/B,KAAA;AAED,IAAA,IAAI,QAAQ,EAAE;QACV,eAAe,GAAG,QAAQ,CAAC;QAC3B,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,eAAgB,CAAsB,CAAC;AACnF,QAAA,SAAS,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC;AAC1D,KAAA;AAED,IAAA,OAAO,eAAe,CAAC;AAC3B;;AC9NgB,SAAA,gBAAgB,CAC5B,KAAiB,EACjB,IAAc,EACd,KAAe,EACf,aAA+B,GAAA,IAAI,EACnC,iBAAiB,GAAG,IAAI,EAAA;AAExB,IAAA,MAAM,eAAe,GAAI,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAmB,KAAK,aAAa,CAAC,SAAS,CAAC;AAC3G,IAAA,IAAI,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,SAAS,GAAG,IAAI,EAChB,OAAO,GAAG,KAAK,CAAC;AACpB,IAAA,MAAM,cAAc,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACrD,IAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;AAC9F,IAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAC5F,IAAA,IAAI,GAAG,eAAe,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;;IAEpG,IAAI,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzG,MAAM,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClE,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC;AACvF,IAAA,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE;QACzB,IAAI,MAAM,KAAK,cAAc,CAAC,kBAAkB,IAAI,MAAM,KAAK,cAAc,CAAC,mBAAmB,EAAE;YAC/F,MAAM,IAAI,WAAW,CAAC;AACzB,SAAA;QACD,IAAI,MAAM,KAAK,cAAc,CAAC,eAAe,IAAI,MAAM,KAAK,cAAc,CAAC,gBAAgB,EAAE;YACzF,MAAM,IAAI,WAAW,CAAC;AACzB,SAAA;AACJ,KAAA;AACD,IAAA,IAAI,KAAK,GAAY;QACjB,CAAC,MAAM,EAAE,MAAM,CAAC;QAChB,CAAC,MAAM,EAAE,MAAM,CAAC;QAChB,CAAC,MAAM,EAAE,MAAM,CAAC;AAChB,QAAA,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtD,QAAA,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClD,QAAA,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;AAClD,QAAA,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;AACtD,QAAA,eAAe,IAAI,iBAAiB,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AACtH,QAAA,eAAe,IAAI,iBAAiB,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AACtH,QAAA,eAAe,IAAI,iBAAiB,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;KACzH,CAAC;AAEF,IAAA,MAAM,MAAM,GAAG,aAAa,IAAI,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAEjF,IAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC3C,IAAA,OAAO,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAa,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AACvF;;AC3DA,IAAY,mBAIX,CAAA;AAJD,CAAA,UAAY,mBAAmB,EAAA;AAC3B,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACnB,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,GAI9B,EAAA,CAAA,CAAA,CAAA;AAED,IAAY,iBAIX,CAAA;AAJD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACrB,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAI5B,EAAA,CAAA,CAAA;;ACLM,MAAM,mBAAmB,GAAG,CAAC,MAAuB,EAAE,SAAyB,KAAW;AAC7F,IAAA,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACjB,IAAA,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACjB,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,MAAM,EAAE;QAC7C,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACnC,KAAA;IACD,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,KAAK,EAAE;QAC5C,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAC/B,KAAA;IACD,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,MAAM,EAAE;QAC3C,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,KAAA;IACD,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,MAAM,EAAE;QAC3C,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AAChC,KAAA;AACD,IAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAAC,IAAc,EAAE,YAAqB,KAAI;AACxE,IAAA,IAAI,YAAY,EAAE;QACd,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,OAAO,eAAe,CAAC,IAAI,CAAC;AAC/B,SAAA;AAAM,aAAA;YACH,OAAO,eAAe,CAAC,KAAK,CAAC;AAChC,SAAA;AACJ,KAAA;AAAM,SAAA;QACH,IAAI,IAAI,CAAC,EAAE,EAAE;YACT,OAAO,eAAe,CAAC,GAAG,CAAC;AAC9B,SAAA;AAAM,aAAA;YACH,OAAO,eAAe,CAAC,MAAM,CAAC;AACjC,SAAA;AACJ,KAAA;AACL,CAAC,CAAC;AAEF;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACO,MAAM,SAAS,GAAG,CAAC,KAAY,EAAE,QAAgB,EAAE,SAA6B,GAAA,eAAe,CAAC,KAAK,KAAW;AACnH,IAAA,IAAI,SAAS,KAAK,eAAe,CAAC,IAAI,EAAE;AACpC,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,KAAA;AACD,IAAA,IAAI,SAAS,KAAK,eAAe,CAAC,MAAM,EAAE;AACtC,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC1C,KAAA;AACD,IAAA,IAAI,SAAS,KAAK,eAAe,CAAC,GAAG,EAAE;AACnC,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC1C,KAAA;AACD,IAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAAC,SAAyB,EAAE,SAA0B,KAAI;;AAExF,IAAA,IAAI,SAAS,KAAK,eAAe,CAAC,IAAI,EAAE;QACpC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,KAAK,EAAE;AAC5C,YAAA,SAAS,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC;AAC3C,SAAA;aAAM,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,IAAI,EAAE;AAClD,YAAA,SAAS,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC;AAC5C,SAAA;AACJ,KAAA;;IAED,IAAI,SAAS,KAAK,eAAe,CAAC,MAAM,IAAI,SAAS,KAAK,eAAe,CAAC,GAAG,EAAE;AAC3E,QAAA,IAAI,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC;QACxC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,GAAG,EAAE;AACxC,YAAA,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC;AACzC,SAAA;QACD,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,MAAM,EAAE;AAC3C,YAAA,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC;AAC1C,SAAA;QACD,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,IAAI,EAAE;AAC3C,YAAA,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC;AACpC,SAAA;QACD,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,KAAK,EAAE;AAC5C,YAAA,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC;AACvC,SAAA;AACD,QAAA,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;AAC1B,QAAA,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;AAC3B,KAAA;;AAED,IAAA,IAAI,SAAS,KAAK,eAAe,CAAC,GAAG,EAAE;QACnC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,MAAM,EAAE;AAC3C,YAAA,SAAS,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC;AACxC,SAAA;aAAM,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,GAAG,EAAE;AAC/C,YAAA,SAAS,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC;AAC3C,SAAA;AACJ,KAAA;AACL,CAAC;;AC3FK,SAAU,aAAa,CAAC,KAAiB,EAAE,IAAc,EAAE,MAAgB,EAAE,YAAqB,EAAA;IACpG,MAAM,WAAW,GAAG,2BAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACpE,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC;IACrF,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC,SAAS,CAAC;IACxE,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC,SAAS,CAAC;AAClF,IAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC5C,IAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;;;IAI7D,MAAM,cAAc,GAAmB,CAAC,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC7F,MAAM,YAAY,GAAmB,CAAC,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE1F,IAAA,kBAAkB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAClD,IAAA,kBAAkB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;;IAGhD,IAAI,YAAY,IAAI,yBAAyB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AACpE,QAAA,cAAc,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC;AAChD,KAAA;IACD,IAAI,YAAY,IAAI,iBAAiB,EAAE;AACnC,QAAA,YAAY,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC;AAC9C,KAAA;IAED,IAAI,UAAU,GAAG,mBAAmB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACnE,IAAI,QAAQ,GAAG,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;;;IAI7D,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAC/B,IAAA,MAAM,WAAW,GAAG,eAAe,GAAG,SAAS,CAAC,UAAU,EAAE,oBAAoB,EAAE,aAAa,CAAC,GAAG,UAAU,CAAC;AAC9G,IAAA,IAAI,YAAY,GAAY,eAAe,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC;;AAG1F,IAAA,MAAM,mBAAmB,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAC1D,IAAA,MAAM,iBAAiB,GAAG,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAC3D,IAAA,IAAI,KAAK,GAAY;QACjB,WAAW;AACX,QAAA,SAAS,CAAC,WAAW,EAAE,mBAAmB,EAAE,aAAa,CAAC;AAC1D,QAAA,SAAS,CAAC,QAAQ,EAAE,iBAAiB,EAAE,aAAa,CAAC;QACrD,QAAQ;KACX,CAAC;;AAGF,IAAA,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAC1E,IAAA,MAAM,SAAS,GAAY,iBAAiB,IAAI,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC;AAE/G,IAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AAC/E,IAAA,OAAO,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAa,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;AACpG;;AC1DM,SAAU,kBAAkB,CAAC,OAA+B,EAAA;IAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACzC,IAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC3C,IAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAG,GAAG,EAAE,CAAC;AAC/D,CAAC;AAEK,SAAU,gBAAgB,CAAC,OAA+B,EAAA;AAC5D,IAAA,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AAC3B,QAAA,OAAO,EAAE,CAAC;AACb,KAAA;AAAM,SAAA;AACH,QAAA,OAAO,EAAE,CAAC;AACb,KAAA;AACL;;ACTA,MAAM,gBAAgB,GAAG;AACrB,IAAA,UAAU,EAAE;QACR,WAAW,EAAE,IAAI,GAAG,CAAC;QACrB,YAAY,EAAE,IAAI,GAAG,GAAG;AAC3B,KAAA;AACD,IAAA,QAAQ,EAAE;QACN,WAAW,EAAE,IAAI,GAAG,GAAG;AAC1B,KAAA;CACJ,CAAC;AAEF,MAAM,gBAAgB,GAAG;AACrB,IAAA,UAAU,EAAE;QACR,WAAW,EAAE,IAAI,GAAG,CAAC;QACrB,YAAY,EAAE,IAAI,GAAG,CAAC;AACzB,KAAA;AACD,IAAA,QAAQ,EAAE;QACN,WAAW,EAAE,IAAI,GAAG,CAAC;AACxB,KAAA;CACJ,CAAC;AAEF,MAAM,oCAAoC,GAAG,CAAC,OAAoB,KAAI;IAClE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzC,IAAA,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,WAAW,GAAG,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC;AAC/G,IAAA,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CAAC,OAAoB,KAAI;IAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzC,IAAA,MAAM,YAAY,GAAG,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,YAAY,GAAG,gBAAgB,CAAC,UAAU,CAAC,YAAY,CAAC;AAClH,IAAA,OAAO,YAAY,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,kCAAkC,GAAG,CAAC,OAAoB,KAAI;IAChE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzC,IAAA,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC3G,IAAA,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AAEK,MAAM,SAAS,GAAG;AACrB,IAAA,YAAY,CAAC,OAAoB,EAAA;AAC7B,QAAA,MAAM,WAAW,GAAG,oCAAoC,CAAC,OAAO,CAAC,CAAC;AAClE,QAAA,IAAI,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAChC,YAAA,OAAO,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,8BAA8B,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;AAClI,SAAA;AACD,QAAA,OAAO,WAAW,GAAG,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;KACpD;AACD,IAAA,aAAa,CAAC,OAAoB,EAAA;AAC9B,QAAA,MAAM,WAAW,GAAG,kCAAkC,CAAC,OAAO,CAAC,CAAC;AAChE,QAAA,OAAO,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;KACrD;AACD,IAAA,sBAAsB,CAAC,OAAoB,EAAA;AACvC,QAAA,MAAM,WAAW,GAAG,oCAAoC,CAAC,OAAO,CAAC,CAAC;AAClE,QAAA,IAAI,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAChC,YAAA,OAAO,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;AACpG,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,WAAW,CAAC;AACtB,SAAA;KACJ;AACD,IAAA,oBAAoB,CAAC,OAAoB,EAAA;AACrC,QAAA,MAAM,WAAW,GAAG,kCAAkC,CAAC,OAAO,CAAC,CAAC;AAChE,QAAA,OAAO,WAAW,CAAC;KACtB;AACD,IAAA,uBAAuB,CAAC,OAAoB,EAAA;AACxC,QAAA,MAAM,WAAW,GAAG,oCAAoC,CAAC,OAAO,CAAC,CAAC;AAClE,QAAA,OAAO,WAAW,CAAC;KACtB;AACD,IAAA,qBAAqB,CAAC,OAAoB,EAAA;AACtC,QAAA,MAAM,WAAW,GAAG,kCAAkC,CAAC,OAAO,CAAC,CAAC;AAChE,QAAA,OAAO,WAAW,CAAC;KACtB;CACJ;;ACpEe,SAAA,oBAAoB,CAAC,IAAc,EAAE,gBAAkC,EAAA;IACnF,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,IAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACpB,QAAA,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC5B,QAAA,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAClC,KAAA;AAAM,SAAA,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACpC,QAAA,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACrC,KAAA;AAAM,SAAA;AACH,QAAA,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAChC,KAAA;;AAED,IAAA,OAAO,YAAY,CACf,CAAC,EACD,CAAC,EACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EACtB,gBAAgB,EAChB,SAAS,CACZ,CAAC;AACN,CAAC;SAEe,uBAAuB,CAAC,IAAc,EAAE,CAAc,EAAE,UAAmB,EAAA;AACvF,IAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;AACjE,IAAA,IAAI,UAAU,EAAE;;AAEZ,QAAA,mBAAmB,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,KAAA;AAAM,SAAA;;AAEH,QAAA,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7F,KAAA;AACL,CAAC;AAEK,SAAU,0BAA0B,CAAC,IAAc,EAAA;AACrD,IAAA,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACnC;;ACxCgB,SAAA,iBAAiB,CAAC,KAAiB,EAAE,IAAc,EAAA;AAC/D,IAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAEzD,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACnG,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1D,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC;IAErF,MAAM,KAAK,GAAG,kBAAkB,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE;QACzF,MAAM;QACN,WAAW;QACX,IAAI;AACJ,QAAA,SAAS,EAAE,OAAO;AACrB,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,KAAK,CAAC;AACjB;;SCdgB,gBAAgB,CAAC,KAAiB,EAAE,IAAc,EAAE,YAAqB,EAAA;IACrF,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3B,IAAA,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAG;QAC7F,OAAO,IAAI,CAAC,MAAM,CAAC;AACvB,KAAC,CAAC,CAAC;IACH,MAAM,yBAAyB,GAAG,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAExF,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7D,MAAM,oBAAoB,GAAG,CAAC,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAmB,CAAC;IAClG,MAAM,kBAAkB,GAAG,CAAC,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAmB,CAAC;IACnG,MAAM,0BAA0B,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAmB,CAAC;AAE1G,IAAA,kBAAkB,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;AACxD,IAAA,kBAAkB,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;AACtD,IAAA,kBAAkB,CAAC,0BAA0B,EAAE,aAAa,CAAC,CAAC;IAE9D,IAAI,gBAAgB,GAAG,mBAAmB,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAAC;IAC5F,IAAI,cAAc,GAAG,mBAAmB,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,CAAC;IACxF,IAAI,sBAAsB,GAAG,mBAAmB,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;IAEhG,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAA,IAAI,YAAY,EAAE;AACd,QAAA,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;AAC/F,KAAA;AAAM,SAAA;AACH,QAAA,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;AAC/F,KAAA;IAED,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC3E,IAAI,EAAE,GAAG,SAAS,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACnE,cAAc,GAAG,SAAS,CAAC,cAAc,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IACvE,IAAI,EAAE,GAAG,SAAS,CAAC,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACjE,IAAI,oBAAoB,GAAG,SAAS,CAAC,sBAAsB,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAE1F,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAC3C,CAAI,CAAA,EAAA,gBAAgB,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,EAAE,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,oBAAoB,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,oBAAoB,CAAC,CAAC,CAAC,CAAK,EAAA,EAAA,EAAE,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,EAAE,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,sBAAsB,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,sBAAsB,CAAC,CAAC,CAAC,CAAK,EAAA,EAAA,oBAAoB,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,oBAAoB,CAAC,CAAC,CAAC,EAAE,EACxS;AACI,QAAA,MAAM,EAAE,UAAU;AAClB,QAAA,WAAW,EAAE,CAAC;AACjB,KAAA,CACJ,CAAC;AACF,IAAA,OAAO,IAAI,CAAC;AAChB;;MCxCa,WAAW,CAAA;IAGpB,WAAoB,CAAA,KAA0B,EAAU,gBAAkC,EAAA;QAAtE,IAAK,CAAA,KAAA,GAAL,KAAK,CAAqB;QAAU,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAF1F,IAAY,CAAA,YAAA,GAAgD,IAAI,CAAC;KAE6B;IAE9F,IAAI,CAAC,KAAgB,EAAE,OAAoB,EAAA;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QACzE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9C,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QACrD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAClD;AAED,IAAA,IAAI,aAAa,GAAA;QACb,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC;AACnD,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;KACJ;IAED,OAAO,GAAA;QACH,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC5B,SAAA;KACJ;AACJ,CAAA;MAEY,YAAY,CAAA;IAKrB,WAAoB,CAAA,KAA0B,EAAU,gBAAkC,EAAA;QAAtE,IAAK,CAAA,KAAA,GAAL,KAAK,CAAqB;QAAU,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAJ1F,IAAY,CAAA,YAAA,GAAkB,EAAE,CAAC;KAI6D;AAE9F,IAAA,UAAU,CAAC,OAAoB,EAAA;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,QAAA,IAAI,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;YAChC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/B,YAAA,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAChE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACnD,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACtD,YAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC3C,YAAA,MAAM,aAAa,GAAG,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAChD,YAAA,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACjD,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAmB,gBAAA,EAAA,QAAQ,CAAE,CAAA,CAAC,CAAC;AACvD,YAAA,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,IAAG;AACpD,gBAAA,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAClE,gBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAChC,gBAAA,OAAO,MAAM,CAAC;AAClB,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,IAAG;AAC/B,gBAAA,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,aAAc,CAAC,CAAC;AAC5C,aAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,CAAC,CAAC;AACjB,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KACpB;IAED,OAAO,GAAA;QACH,IAAI,IAAI,CAAC,CAAC,EAAE;AACR,YAAA,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACnB,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;KAC1B;AACJ;;AChFM,MAAM,SAAS,GAAG,CAAC,KAAiB,EAAE,MAAsB,EAAE,IAAU,KAAI;AAC/E,IAAA,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAgB,CAAC;IAE1D,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;AACvD,QAAA,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1C,KAAA;IAED,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,KAAiB,EAAE,MAAsB,EAAE,IAAU,KAAI;IACrF,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,IAAI,IAAI,MAAM,EAAE;QAChB,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAgB,EAAE,KAAK,KAAI;YAC/C,IAAI,KAAK,CAAC,MAAM,EAAE;AACd,gBAAA,IACI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC;AACvE,qBAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAC1E;AACE,oBAAA,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACjE,iBAAA;AACD,gBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;AACxB,oBAAA,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3D,iBAAA;AACJ,aAAA;AACL,SAAC,CAAC,CAAC;AACN,KAAA;AACL,CAAC;;AC3BM,MAAM,QAAQ,GAAG,CAAC,KAAiB,EAAE,OAAoB,EAAE,KAAc,EAAE,KAAa,EAAE,MAAc,KAAI;AAC/G,IAAA,MAAM,UAAU,GAAG;QACf,IAAI,EAAE,EAAE,KAAK,EAAE;QACf,KAAK,EAAE,KAAK,GAAG,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI;AAClG,QAAA,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI;KACxB,CAAC;AACjB,IAAA,IAAI,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;QAChC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AAChD,KAAA;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,OAAoB,EAAE,KAAa,EAAE,MAAc,KAAI;AACnG,IAAA,MAAM,UAAU,GAAG;QACf,KAAK,EAAE,KAAK,GAAG,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI;AAClG,QAAA,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI;KACvC,CAAC;IACF,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC,CAAC;AAEK,MAAM,QAAQ,GAAG,CAAC,KAAiB,EAAE,OAAoB,EAAE,SAAoB,KAAI;IACtF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;AACzC,IAAA,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AAC9B,IAAA,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1B,IAAA,MAAM,UAAU,GAAG;AACf,QAAA,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE;KAC1C,CAAC;IACjB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC,CAAC;AAEK,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,OAA+B,EAAE,SAAoB,KAAI;AACpG,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;AACxE,IAAA,MAAM,UAAU,GAAG;QACf,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE;KACvB,CAAC;AACjB,IAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,QAAA,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACnC,KAAA;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,OAA+B,EAAE,QAAmB,EAAE,QAAmB,KAAI;AACzH,IAAA,MAAM,UAAU,GAAG;QACf,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE;KACvB,CAAC;AACjB,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAG;QAC9C,IAAI,KAAK,KAAK,QAAQ,EAAE;AACpB,YAAA,OAAO,QAAQ,CAAC;AACnB,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;AACjB,KAAC,CAAC,CAAC;AACH,IAAA,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;;AC7DY,MAAA,cAAc,GAAG;IAC1B,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,WAAW;IACX,YAAY;;;ACCV,SAAU,2BAA2B,CACvC,KAAiB,EACjB,QAAkB,EAClB,OAAoB,EACpB,oBAA6C,EAC7C,gBAAyB,EAAA;AAEzB,IAAA,MAAM,iBAAiB,GAAG,OAAO,EAAE,CAAC;IAEpC,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAmB,CAAC;AACpF,IAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAEpD,IAAA,MAAM,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAM,EAAE,OAAO,CAAC,GAAI,GAAG,CAAC,CAAC,CAAC;IACxF,IAAI,iBAAiB,GAAG,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAC9E,iBAAiB,GAAG,eAAe,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,gCAAgC,CAAC,CAAC;AAE9G,IAAA,IAAI,gBAAgB,EAAE;QAClB,iBAAiB,GAAG,8BAA8B,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,oBAAqB,EAAE,YAAY,CAAC,CAAC;AAChI,KAAA;AAED,IAAA,MAAM,SAAS,GAAG,0BAA0B,CACxC,QAAQ,EACR,iBAAiB,CAAC,CAAC,EACnB,iBAAiB,CAAC,CAAC,EACnB,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAC7C,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAC9C,YAAY,EACZ;AACI,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,SAAS,EAAE,OAAO;AACrB,KAAA,CACJ,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAmB,CAAC;IAC7F,MAAM,YAAY,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAmB,CAAC;AAE9F,IAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC;AAErF,IAAA,kBAAkB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAClD,IAAA,kBAAkB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAEhD,IAAI,gBAAgB,GAAG,mBAAmB,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;IAC9E,IAAI,cAAc,GAAG,mBAAmB,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAE1E,IAAA,MAAM,WAAW,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC,sBAAsB,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;AAC5F,IAAA,MAAM,WAAW,GAAG,SAAS,CAAC,gBAAgB,EAAE,sBAAsB,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;AAE3F,IAAA,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC,sBAAsB,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;AACxF,IAAA,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,EAAE,sBAAsB,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;AAEvF,IAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAC7B,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,EACd,eAAe,CAAC,oBAAoB,KAAK,sBAAsB,CAAC,KAAK,CAAC,CACzE,CAAC;AAEF,IAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAC3B,SAAS,CAAC,CAAC,CAAC,EACZ,SAAS,CAAC,CAAC,CAAC,EACZ,SAAS,CAAC,CAAC,CAAC,EACZ,SAAS,CAAC,CAAC,CAAC,EACZ,eAAe,CAAC,oBAAoB,KAAK,sBAAsB,CAAC,GAAG,CAAC,CACvE,CAAC;AAEF,IAAA,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAC;AAE5D,IAAA,WAAW,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AACpD,IAAA,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAElD,IAAA,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACtC,IAAA,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACpC,IAAA,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAEpC,IAAA,OAAO,iBAAiB,CAAC;AAC7B,CAAC;AAEK,SAAU,eAAe,CAAC,OAAgB,EAAA;AAC5C,IAAA,OAAO,OAAO;AACV,UAAE;AACI,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,SAAS,EAAE,OAAO;AACrB,SAAA;AACH,UAAE;AACI,YAAA,MAAM,EAAE,qBAAqB;AAC7B,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,SAAS,EAAE,OAAO;SACrB,CAAC;AACZ,CAAC;SAEe,gBAAgB,CAAC,KAAiB,EAAE,oBAAwD,EAAE,YAAqB,EAAA;AAC/H,IAAA,IAAI,oBAAoB,EAAE;AACtB,QAAA,IAAI,YAAY,EAAE;AACd,YAAA,UAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AACzF,SAAA;AAAM,aAAA;AACH,YAAA,UAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AACvF,SAAA;AACJ,KAAA;AAAM,SAAA;AACH,QAAA,UAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;AACzF,QAAA,UAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAC1F,KAAA;AACL;;MChHsB,UAAU,CAAA;AAG5B,IAAA,WAAA,CAAsB,KAAiB,EAAA;QAAjB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;KAAI;IAM3C,OAAO,GAAA;QACH,IAAI,IAAI,CAAC,CAAC,EAAE;AACR,YAAA,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACnB,SAAA;KACJ;AACJ,CAAA;AAMK,SAAU,YAAY,CAAC,KAAU,EAAA;IACnC,IAAI,KAAK,CAAC,SAAS,EAAE;AACjB,QAAA,OAAO,IAAI,CAAC;AACf,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB;;ACxBgB,SAAA,oBAAoB,CAAC,KAAiB,EAAE,OAAqB,EAAA;AACzE,IAAA,OAAO,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACxI,CAAC;AAEe,SAAA,sBAAsB,CAAC,KAAiB,EAAE,OAAqB,EAAA;IAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjD,IAAA,OAAOC,MAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B;;ACUM,MAAO,iBAAkB,SAAQ,UAAU,CAAA;AAC7C,IAAA,OAAO,CAAC,OAA8B,EAAA;AAClC,QAAA,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,EAAE,WAAW,EAAE;AAC3D,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,IAAI,CAAC,OAA8B,EAAA;QAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,GAAG,CAAC,CAAC;AAChF,QAAA,MAAM,YAAY,GAAG,OAAO,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC;AACtB,QAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1C,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAEzD;;;;;;AAMG;AACH,QAAA,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;;AAE7C,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,YAAY,CAAC;QAC7E,IAAI,qBAAqB,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,KAAK,aAAa,CAAC,cAAc,IAAI,MAAM,KAAK,CAAC,EAAE;YACxD,qBAAqB,GAAG,WAAW,CAAC;AACvC,SAAA;QACD,IAAI,yBAAyB,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,yBAAyB,GAAG,WAAW,CAAC;AAC3C,SAAA;;QAED,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,QAAA,MAAM,oBAAoB,GAAkC;;AAExD,YAAA,CAAC,cAAc,CAAC,IAAI,GAAG;;gBAEnB,MAAM,EAAE,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,aAAa,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,yBAAyB;gBACvF,MAAM,EAAE,CAAC,GAAG,MAAM;AAClB,gBAAA,IAAI,EACA,CAAC;oBACD,qBAAqB;oBACrB,yBAAyB;AACzB,qBAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,WAAW,GAAG,CAAC,CAAC;oBACpE,aAAa;gBACjB,IAAI,EAAE,CAAC,GAAG,MAAM;AACnB,aAAA;;AAED,YAAA,CAAC,cAAc,CAAC,KAAK,GAAG;gBACpB,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,CAAC,CAAC,GAAG,yBAAyB;gBACtG,MAAM,EAAE,CAAC,GAAG,MAAM;AAClB,gBAAA,IAAI,EACA,CAAC;oBACD,KAAK;oBACL,qBAAqB;AACrB,qBAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,WAAW,GAAG,CAAC,CAAC;oBACpE,aAAa;oBACb,yBAAyB;gBAC7B,IAAI,EAAE,CAAC,GAAG,MAAM;AACnB,aAAA;;AAED,YAAA,CAAC,cAAc,CAAC,MAAM,GAAG;AACrB,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;gBACvB,MAAM,EAAE,CAAC,GAAG,qBAAqB,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,CAAC,CAAC,GAAG,yBAAyB;AACtH,gBAAA,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;AACrB,gBAAA,IAAI,EACA,CAAC;oBACD,qBAAqB;AACrB,qBAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,WAAW,GAAG,CAAC,CAAC;oBACpE,aAAa;oBACb,yBAAyB;AAChC,aAAA;;AAED,YAAA,CAAC,cAAc,CAAC,QAAQ,GAAG;AACvB,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;gBACvB,MAAM,EACF,CAAC,GAAG,MAAM,GAAG,qBAAqB,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,CAAC,CAAC,GAAG,yBAAyB;AAC3H,gBAAA,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;AACrB,gBAAA,IAAI,EACA,CAAC;oBACD,MAAM;oBACN,qBAAqB;AACrB,qBAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,WAAW,GAAG,CAAC,CAAC;oBACpE,aAAa;oBACb,yBAAyB;AAChC,aAAA;AACD,YAAA,CAAC,cAAc,CAAC,kBAAkB,GAAG;AACjC,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;gBACvB,MAAM,EACF,CAAC,GAAG,MAAM,GAAG,qBAAqB,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,CAAC,CAAC,GAAG,yBAAyB;AAC3H,gBAAA,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;AACrB,gBAAA,IAAI,EACA,CAAC;oBACD,MAAM;oBACN,qBAAqB;AACrB,qBAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,WAAW,GAAG,CAAC,CAAC;oBACpE,aAAa;oBACb,yBAAyB;AAChC,aAAA;AACD,YAAA,CAAC,cAAc,CAAC,eAAe,GAAG;AAC9B,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;gBACvB,MAAM,EAAE,CAAC,GAAG,qBAAqB,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,CAAC,CAAC,GAAG,yBAAyB;AACtH,gBAAA,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;AACrB,gBAAA,IAAI,EACA,CAAC;oBACD,qBAAqB;AACrB,qBAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,CAAC,CAAC;oBACtD,aAAa;oBACb,yBAAyB;AAChC,aAAA;AACD,YAAA,CAAC,cAAc,CAAC,mBAAmB,GAAG;AAClC,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;gBACvB,MAAM,EACF,CAAC,GAAG,MAAM,GAAG,qBAAqB,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,CAAC,CAAC,GAAG,yBAAyB;AAC3H,gBAAA,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;AACrB,gBAAA,IAAI,EACA,CAAC;oBACD,MAAM;oBACN,qBAAqB;AACrB,qBAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,WAAW,GAAG,CAAC,CAAC;oBACpE,aAAa;oBACb,yBAAyB;AAChC,aAAA;AACD,YAAA,CAAC,cAAc,CAAC,gBAAgB,GAAG;AAC/B,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;gBACvB,MAAM,EAAE,CAAC,GAAG,qBAAqB,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,CAAC,CAAC,GAAG,yBAAyB;AACtH,gBAAA,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;AACrB,gBAAA,IAAI,EACA,CAAC;oBACD,qBAAqB;AACrB,qBAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,0BAA0B,GAAG,CAAC,CAAC;oBACtD,aAAa;oBACb,yBAAyB;AAChC,aAAA;SACJ,CAAC;QACF,IAAI,KAAK,KAAK,aAAa,CAAC,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE;YAC1D,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,GAAG,GAAG,CAAC;YACjE,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,GAAG,GAAG,CAAC;YAC/D,oBAAoB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,MAAM,GAAG,GAAG,CAAC;YAClE,oBAAoB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,MAAM,GAAG,GAAG,CAAC;AACnE,SAAA;QACD,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/H,IAAI,UAAU,GAAG,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAqB,CAAC;QACpF,IAAI,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC,EAAE;YAChD,MAAM,IAAI,GAAG,OAAqB,CAAC;YACnC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC;AACzG,SAAA;AACD,QAAA,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;AAC7D,QAAA,IAAI,mBAAmB,EAAE;AACrB,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CACrD,mBAAmB,CAAC,MAAM,EAC1B,mBAAmB,CAAC,MAAM,EAC1B,mBAAmB,CAAC,IAAI,EACxB,mBAAmB,CAAC,IAAI,EACxB,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,CACvC,CAAC;AACF,YAAA,MAAM,iBAAiB,GAAG;gBACtB,MAAM,EAAE,mBAAmB,CAAC,IAAI;gBAChC,MAAM,EAAE,mBAAmB,CAAC,IAAI;aACnC,CAAC;YACF,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE;AACxH,gBAAA,IAAI,EAAE,yBAAyB;AAC/B,gBAAA,MAAM,EAAE,yBAAyB;AACjC,gBAAA,SAAS,EAAE,OAAO;AACrB,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,qBAAqB,GAAG;AAC1B,gBAAA,UAAU,EAAE;oBACR,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,aAAa,GAAG,GAAG,GAAG,CAAC;oBAC1D,MAAM,EAAE,iBAAiB,CAAC,MAAM;oBAChC,IAAI,EAAE,iBAAiB,CAAC,MAAM,GAAG,aAAa,GAAG,GAAG,GAAG,CAAC;oBACxD,IAAI,EAAE,iBAAiB,CAAC,MAAM;AACjC,iBAAA;AACD,gBAAA,QAAQ,EAAE;oBACN,MAAM,EAAE,iBAAiB,CAAC,MAAM;oBAChC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,aAAa,GAAG,GAAG,GAAG,CAAC;oBAC1D,IAAI,EAAE,iBAAiB,CAAC,MAAM;oBAC9B,IAAI,EAAE,iBAAiB,CAAC,MAAM,GAAG,aAAa,GAAG,GAAG,GAAG,CAAC;AAC3D,iBAAA;aACJ,CAAC;AACF,YAAA,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAC3D,qBAAqB,CAAC,UAAU,CAAC,MAAM,EACvC,qBAAqB,CAAC,UAAU,CAAC,MAAM,EACvC,qBAAqB,CAAC,UAAU,CAAC,IAAI,EACrC,qBAAqB,CAAC,UAAU,CAAC,IAAI,EACrC;AACI,gBAAA,MAAM,EAAE,8BAA8B;AACtC,gBAAA,WAAW,EAAE,CAAC;AACjB,aAAA,CACJ,CAAC;AACF,YAAA,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAC1D,qBAAqB,CAAC,QAAQ,CAAC,MAAM,EACrC,qBAAqB,CAAC,QAAQ,CAAC,MAAM,EACrC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EACnC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EACnC;AACI,gBAAA,MAAM,EAAE,8BAA8B;AACtC,gBAAA,WAAW,EAAE,CAAC;AACjB,aAAA,CACJ,CAAC;AACF,YAAA,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACpC,YAAA,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,YAAA,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AAC1C,YAAA,YAAY,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AAC5C,SAAA;AACD,QAAA,OAAO,YAAY,CAAC;KACvB;AACD,IAAA,SAAS,CAAC,OAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;AACT,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,CAA6B,CAAC,CAAC;AAClD,SAAA;AACD,QAAA,SAAS,CAAa,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC;AACrC,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACb,SAAS,CAAC,CAAC,IAAG;YACX,CAAC,CAAC,eAAe,EAAE,CAAC;AACxB,SAAC,CAAC,CAAC;AACP,QAAA,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC;AACvB,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACb,SAAS,CAAC,MAAK;YACZ,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACvD,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACjD,SAAC,CAAC,CAAC;KACV;AACJ;;ACvKK,MAAO,iBAAuD,SAAQ,2BAA8B,CAAA;AAsCtG,IAAA,IAAW,UAAU,GAAA;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,gBAAgB,CAAC,IAAI,CAAC;KACvD;AAED,IAAA,WAAA,CAAoB,gBAAkC,EAAY,GAAsB,EAAU,OAAkB,EAAA;QAChH,KAAK,CAAC,GAAG,CAAC,CAAC;QADK,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAAY,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAO,CAAA,OAAA,GAAP,OAAO,CAAW;QAxCpH,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAcnB,IAAO,CAAA,OAAA,GAAkB,EAAE,CAAC;QAE5B,IAAM,CAAA,MAAA,GAAuB,IAAI,CAAC;AAclC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAmlB/B,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,KAAa,EAAE,IAAc,KAAI;AACxC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,SAAC,CAAC;KAzkBD;IAED,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,KAA4B,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/F,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAa,CAAC;QAC1D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAoB,CAAC;QAC7G,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,gBAAgB,CAAC,KAAmC,EAAE,QAAsC,EAAA;QACxF,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAa,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,SAAA;;AAGD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;AAC/D,gBAAA,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,QAAuB,CAAC,CAAC;AAChG,aAAA;AACJ,SAAA;AAED,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE;YACX,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,SAAA;KACJ;IAED,UAAU,GAAA;AACN,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,EAAE;AACH,YAAA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,SAAA;KACJ;IAED,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC9C,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpD,YAAA,IAAI,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;gBACtC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClD,aAAA;AACD,YAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAChC,SAAA;KACJ;IAED,SAAS,GAAA;QACL,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAkB,CAAC;AACvE,QAAA,QAAQ,KAAK;YACT,KAAK,aAAa,CAAC,cAAc;AAC7B,gBAAA,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAgB,CAAC,CAAC;gBACnE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,MAAM;AACV,YAAA;gBACI,MAAM;AACb,SAAA;KACJ;IAED,YAAY,GAAA;QACR,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACtB,SAAA;KACJ;IAED,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO;AACV,SAAA;QAED,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACvB,SAAA;AAED,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAmB,CAAC;QACpF,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AACpF,SAAA;aAAM,IAAI,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACrE,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9F,SAAA;QACD,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC7B;IAED,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACvB,aAAA;AACJ,SAAA;KACJ;IAED,SAAS,GAAA;QACL,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,eAAe,GAAG,CAAC,CAAC;QAC1B,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAmB,CAAC;AACtF,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AACtC,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;AACxC,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAgB,CAAC,CAAC;QAE1E,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAI,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC;AAE5B,QAAA,QAAQ,IAAI;AACR,YAAA,KAAK,KAAK;AACN,gBAAA,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC;AAC5B,gBAAA,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC;AACzB,gBAAA,SAAS,GAAG,CAAC,GAAG,KAAK,GAAG,eAAe,CAAC;AACxC,gBAAA,UAAU,GAAG,CAAC,GAAG,MAAM,GAAG,eAAe,CAAC;gBAC1C,MAAM;AACV,YAAA,KAAK,QAAQ;AACT,gBAAA,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC;AAC5B,gBAAA,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC;AAC5B,gBAAA,SAAS,GAAG,CAAC,GAAG,KAAK,GAAG,eAAe,CAAC;AACxC,gBAAA,UAAU,GAAG,CAAC,GAAG,MAAM,GAAG,YAAY,CAAC;gBACvC,MAAM;AACV,YAAA,KAAK,MAAM;AACP,gBAAA,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC;AACzB,gBAAA,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC;AAC5B,gBAAA,SAAS,GAAG,CAAC,GAAG,KAAK,GAAG,eAAe,CAAC;AACxC,gBAAA,UAAU,GAAG,CAAC,GAAG,MAAM,GAAG,eAAe,CAAC;gBAC1C,MAAM;AACV,YAAA,KAAK,OAAO;AACR,gBAAA,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC;AAC5B,gBAAA,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC;AAC5B,gBAAA,SAAS,GAAG,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC;AACrC,gBAAA,UAAU,GAAG,CAAC,GAAG,MAAM,GAAG,eAAe,CAAC;gBAC1C,MAAM;AACb,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAC3B,IAAI,CAAC,QAAoB,EACzB,KAAK,EACL,KAAK,EACL,SAAS,EACT,UAAU,EACV,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,EAAE,EACnE,IAAI,CACP,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,SAAA;AAED,QAAA,SAAS,CAAa,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC;aAC1C,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAK;YACR,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3F,SAAC,CAAC,CACL;aACA,SAAS,CAAC,MAAK;YACZ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;AACP,QAAA,SAAS,CAAa,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC;aAC1C,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAK;AACR,YAAA,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AACvE,SAAC,CAAC,CACL;aACA,SAAS,CAAC,MAAK;YACZ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;KACV;IAED,YAAY,GAAA;QACR,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACtC,SAAA;KACJ;IAED,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACpD,SAAA;KACJ;IAED,aAAa,GAAA;QACT,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AACnD,SAAA;KACJ;IAED,WAAW,GAAA;QACP,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,wBAAwB,EAAE,MAAM,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACvC,IAAI,CAAC,6BAA6B,EAAE,CAAC;AACxC,aAAA;AACD,YAAA,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAgB,CAAC,CAAC;YACxE,MAAM,eAAe,GAAG,kBAAkB,CACtC,IAAI,CAAC,QAAoB,EACzB,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,KAAK,GAAG,CAAC,EACb,CAAC,GAAG,MAAM,GAAG,CAAC,EACd,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EACnD,IAAI,CACP,CAAC;;AAEF,YAAA,eAAe,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;AAC7C,YAAA,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,aAAa,KAAK,IAAI,EAAE;gBAC5D,MAAM,mBAAmB,GAAG,kBAAkB,CAC1C,IAAI,CAAC,QAAoB,EACzB,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,KAAK,GAAG,CAAC,EACb,CAAC,GAAG,MAAM,GAAG,CAAC,EACd,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,EAClE,IAAI,CACP,CAAC;AACF,gBAAA,mBAAmB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;;AAE3C,gBAAA,mBAAmB,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;AACjD,gBAAA,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;gBACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;AAC3D,aAAA;AACJ,SAAA;KACJ;IAED,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;KACrB;IAED,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;YACT,OAAO;AACV,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC3C,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC9C,SAAA;KACJ;IAED,YAAY,GAAA;AACR,QAAA,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC9H,QAAA,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AACjD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;KAC5B;IAED,UAAU,GAAA;QACN,IAAI,CAAC,aAAa,EAAE,CAAC;;AAErB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;AACzB,QAAA,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACrC,QAAA,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC9C,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC/B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACzB,OAAO;AACV,SAAA;;AAED,QAAA,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;aAC1B,IAAI,CACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAC7D,IAAI,CAAC,CAAC,CAAC,CACV;aACA,SAAS,CAAC,MAAK;YACZ,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,YAAA,MAAM,UAAU,GAAyB,EAAE,WAAW,EAAE,CAAC;AACzD,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3D,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;AAEP,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAA,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC;AAC/F,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAG,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAmB,CAAC;AAEzF,QAAA,IAAI,YAAY,GAAG;AACf,YAAA,CAAC,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC;AACpB,YAAA,CAAC,CAAC,GAAG,KAAK,GAAG,aAAa,EAAE,OAAO,CAAC;SACvC,CAAC;AAEF,QAAA,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,YAAY,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;AAEtC,QAAA,IAAI,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE/B,IAAI,YAAY,GAAG,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1C,IAAI,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;YACjE,iBAAiB;gBACZ,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAmB,KAAK,aAAa,CAAC,cAAc;AACvF,sBAAE,CAAC,CAAC,EAAE,CAAC,CAAC;sBACN,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE;;AAE1B,gBAAA,iBAAiB,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;gBACzD,YAAY,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,gBAAA,YAAY,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACzC,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE;;AAEzB,gBAAA,iBAAiB,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;AAC7D,gBAAA,iBAAiB,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;AAC/D,gBAAA,YAAY,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtC,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;AAC1C,aAAA;AAAM,iBAAA;;AAEH,gBAAA,iBAAiB,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;AAC7D,gBAAA,iBAAiB,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;gBAC7D,YAAY,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBAClC,YAAY,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;AACzC,aAAA;AACJ,SAAA;AAED,QAAA,YAAY,GAAG;YACX,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACtF,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;SACzF,CAAC;AAEF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YAClH,WAAW;YACX,MAAM;AACT,SAAA,CAAC,CAAC;;QAGH,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EACpC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EACpC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EACpC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EACpC;YACI,MAAM;AACN,YAAA,WAAW,EAAE,CAAC;AACjB,SAAA,CACJ,CAAC;QACF,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAC1C,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EACpC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EACpC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EACpC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EACpC;YACI,MAAM;AACN,YAAA,WAAW,EAAE,CAAC;AACjB,SAAA,CACJ,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAC9B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE;AAC1H,gBAAA,IAAI,EAAE,MAAM;gBACZ,MAAM;AACN,gBAAA,SAAS,EAAE,OAAO;AACrB,aAAA,CAAC,CAAC;YAEH,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAAE,YAAY,GAAG,CAAC,CAAC,CAAC;YAChE,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,YAAY,GAAG,CAAC,CAAC;YAE/D,MAAM,SAAS,GAAG,UAAU,CACxB,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,EACvD,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,EACxC,MAAM,EACN,CAAG,EAAA,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAE,CAAA,CAC1C,CAAC;YAEF,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAClC,YAAA,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAC7C,YAAA,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACnD,YAAA,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7B,YAAA,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACjC,YAAA,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACrC,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACpC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EACpC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EACpC,aAAa,GAAG,CAAC,EACjB;AACI,oBAAA,IAAI,EAAE,MAAM;oBACZ,MAAM;oBACN,WAAW;AACX,oBAAA,SAAS,EAAE,OAAO;AACrB,iBAAA,CACJ,CAAC;AACF,gBAAA,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACnC,gBAAA,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;AACxC,gBAAA,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AAC9C,aAAA;AACJ,SAAA;KACJ;IAED,aAAa,GAAA;QACT,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AACzB,SAAA;KACJ;IAED,eAAe,GAAA;QACX,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;AAC3B,SAAA;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;AACvC,SAAA;KACJ;IAED,6BAA6B,CAAC,oBAA6C,EAAE,gBAAyB,EAAA;AAClG,QAAA,IAAI,CAAC,wBAAwB,EAAE,MAAM,EAAE,CAAC;QACxC,IAAI,CAAC,wBAAwB,GAAG,2BAA2B,CACvD,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,oBAAoB,EACpB,gBAAgB,CACnB,CAAC;AACF,QAAA,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;KACxE;IAED,cAAc,GAAA;AACV,QAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAqB,CAAC,CAAC;AACxE,QAAA,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAwB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;KACtF;IAED,aAAa,CAAC,KAAc,EAAE,OAAgB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACrD,SAAA;AACD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAE5D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAwB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACnF,IAAI,gBAAgB,CAAC,aAAa,EAAE;AAChC,YAAA,gBAAgB,CAAC,aAAa,GAAG,KAAK,CAAC;AACvC,YAAA,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;YAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE,YAAA,wBAAwB,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC5D,YAAA,IAAI,OAAO,EAAE;AACT,gBAAA,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClD,aAAA;;AAED,YAAA,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC1E,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAChE,gBAAA,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACxE,aAAA;AACJ,SAAA;AACD,QAAA,IAAI,QAAQ,GAAG,gBAAgB,CAAC,UAAU,CAAC;;AAE3C,QAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW;aAC5C,IAAI,CACD,YAAY,CAAC,CAAC,CAAC,EACf,MAAM,CAAC,KAAK,IAAG;;AAEX,YAAA,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,SAAS,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7E,SAAC,CAAC,CACL;aACA,SAAS,CAAC,KAAK,IAAG;AACf,YAAA,IAAI,QAAQ,KAAK,KAAK,CAAC,KAAK,EAAE;gBAC1B,OAAO;AACV,aAAA;YACD,IAAI,CAAC,cAAc,EAAE,CAAC;;AAEtB,YAAA,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC1E,YAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;AACP,QAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AAC3F,YAAA,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC1E,IAAI,KAAK,GAAG,cAAc,EAAE;gBACxB,KAAK,GAAG,cAAc,CAAC;AAC1B,aAAA;YACD,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AAC/F,gBAAA,MAAM,UAAU,GAAyB;oBACrC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI;oBACvC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI;iBAC5C,CAAC;AACF,gBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3D,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACjC,aAAA;AACL,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,UAAU,GAAG,SAAS,CAAa,QAAQ,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC5F,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpG,YAAA,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACpE,YAAA,IAAI,WAAW,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;gBAC1E,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B,aAAA;iBAAM,IAAI,CAAC,WAAW,EAAE;;AAErB,gBAAA,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACpB,oBAAA,UAAU,EAAE,CAAC;oBACb,IAAI,CAAC,WAAW,EAAE,CAAC;AACvB,iBAAC,CAAC,CAAC;AACN,aAAA;AACL,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;AACvC,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;AAC3B,QAAA,MAAM,CAAC,OAAO,GAAG,CAAC,KAAoB,KAAI;YACtC,IAAI,KAAK,CAAC,WAAW,EAAE;gBACnB,OAAO;AACV,aAAA;AACD,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;gBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,gBAAA,UAAU,EAAE,CAAC;gBACb,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO;AACV,aAAA;YACD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAC1C,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,gBAAA,UAAU,EAAE,CAAC;gBACb,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO;AACV,aAAA;AACD,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;gBACrB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,gBAAA,UAAU,EAAE,CAAC;gBACb,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,EAAE,CAAC;AACpB,aAAA;AACL,SAAC,CAAC;QACF,MAAM,UAAU,GAAG,MAAK;;YAEpB,YAAY,CAAC,WAAW,EAAE,CAAC;YAC3B,YAAY,CAAC,WAAW,EAAE,CAAC;YAC3B,UAAU,CAAC,WAAW,EAAE,CAAC;AACzB,YAAA,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;;YAEzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/B,YAAA,gBAAgB,CAAC,aAAa,GAAG,IAAI,CAAC;AACtC,YAAA,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC5D,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,YAAA,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAwB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACnF,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5C,SAAC,CAAC;KACL;IAMD,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,wBAAwB,EAAE,MAAM,EAAE,CAAC;QACxC,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACzB,QAAA,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;AACjD,YAAA,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,SAAA;KACJ;;8GAhoBQ,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAXhB,QAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;AAQT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FAGQ,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAb7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;AAQT,IAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;ACtEM,MAAM,gBAAgB,GAAG,MAAK;AACjC,IAAA,SAAS,WAAW,CAAC,OAAoB,EAAE,MAAmB,EAAA;AAC1D,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC;QACxD,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,OAAO,IAAI,GAAG,EAAE,CAAC;AACpB,SAAA;AACD,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;AAC3B,YAAA,OAAO,IAAI,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;AACrC,SAAA;AACD,QAAA,OAAO,IAAI,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;KACrC;AAED,IAAA,SAAS,aAAa,CAAC,OAAoB,EAAE,MAAmB,EAAA;AAC5D,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC;QACxD,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,YAAA,OAAO,IAAI,GAAG,EAAE,GAAG,WAAW,GAAG,CAAC,CAAC;AACtC,SAAA;AACD,QAAA,OAAO,IAAI,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;KACrC;IAED,OAAO;AACH,QAAA,SAAS,CAAC,OAAoB,EAAA;AAC1B,YAAA,OAAO,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SAC3C;AACD,QAAA,QAAQ,CAAC,OAAoB,EAAA;AACzB,YAAA,OAAO,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SAC1C;QACD,gBAAgB,CAAC,OAAoB,EAAE,MAAmB,EAAA;AACtD,YAAA,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC;AACpE,YAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACjD,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC;AACxD,YAAA,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE;AAC3B,gBAAA,OAAO,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC;AACjC,aAAA;YACD,IAAI,CAAC,YAAY,EAAE;AACf,gBAAA,OAAO,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACvC,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACzC,aAAA;SACJ;QACD,cAAc,CAAC,OAAoB,EAAE,MAAmB,EAAA;AACpD,YAAA,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC;AACpE,YAAA,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE;AAC3B,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AACD,YAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACjD,YAAA,IAAI,YAAY,EAAE;AACd,gBAAA,OAAO,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACvC,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACzC,aAAA;SACJ;QACD,6BAA6B,CAAC,OAAoB,EAAE,MAAmB,EAAA;AACnE,YAAA,IAAI,OAAO,CAAC,KAAK,KAAK,aAAa,CAAC,SAAS,IAAI,MAAM,IAAI,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBAC/F,OAAO,kBAAkB,CAAC,MAAM,CAAC;AACpC,aAAA;AACD,YAAA,OAAO,SAAS,CAAC;SACpB;AACD,QAAA,eAAe,CAAC,IAAgB,EAAA;YAC5B,OAAO,IAAI,GAAG,CAAC,CAAC;SACnB;QACD,wBAAwB,GAAA;YACpB,OAAO,IAAI,GAAG,CAAC,CAAC;SACnB;KACa,CAAC;AACvB,CAAC;;ACvDK,MAAO,kBAAmB,SAAQ,iBAA4B,CAAA;IAKhE,QAAQ,GAAA;QACJ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,KAAK,CAAC,QAAQ,EAAE,CAAC;KACpB;AAED,IAAA,mBAAmB,CAAC,KAA2C,EAAA;QAC3D,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;AACpD,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACxC,SAAA;KACJ;AAED,IAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAA;QACnC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;AAC5D,QAAA,IAAI,CAAC,IAAI,GAAI,YAAY,CAAC,MAAM,CAAE,OAAiC,EAAE,gBAAgB,EAAE,EAAE,cAAc,CAAyB,CAAC;AACjI,QAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACxC;AAED,IAAA,sBAAsB,CAAC,OAAkB,EAAA;AACrC,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;AACvC,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC;AACzB,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC;AACzB,QAAA,mBAAmB,CAAW,IAAI,CAAC,IAAI,EAAE,IAAI,IAAG;AAC5C,YAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3C,SAAC,CAAC,CAAC;KACN;;+GA/BQ,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EALjB,QAAA,EAAA,YAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAET,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FAGQ,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,CAAA;;AAET,IAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MCJY,UAAU,CAAA;;uGAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAV,UAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,EAJJ,YAAA,EAAA,CAAA,kBAAkB,EAAE,iBAAiB,CAC1C,EAAA,OAAA,EAAA,CAAA,aAAa,EAAE,cAAc,EAAE,WAAW,CAC1C,EAAA,OAAA,EAAA,CAAA,kBAAkB,EAAE,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAEtC,UAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,EAHT,OAAA,EAAA,CAAA,aAAa,EAAE,cAAc,EAAE,WAAW,CAAA,EAAA,CAAA,CAAA;2FAG3C,UAAU,EAAA,UAAA,EAAA,CAAA;kBALtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;AACrD,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,WAAW,CAAC;AACrD,oBAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;AACnD,iBAAA,CAAA;;;ACoCD,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAEpB,MAAM,OAAO,GAAG,CAAC,KAAiB,KAAI;IACzC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AAE/D,IAAA,IAAI,aAAiC,CAAC;AACtC,IAAA,IAAI,UAAiB,CAAC;AACtB,IAAA,IAAI,aAAsC,CAAC;AAC3C,IAAA,IAAI,aAAsC,CAAC;IAC3C,IAAI,UAAU,GAA+D,IAAI,CAAC;AAElF,IAAA,KAAK,CAAC,SAAS,GAAG,CAAC,KAAiB,KAAI;AACpC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7E,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO;AACV,SAAA;;QAGD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpD,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAmB,KAAI;AAC3C,YAAA,IAAI,aAAa,EAAE;gBACf,OAAO;AACV,aAAA;AACD,YAAA,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBACzB,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAuB,CAAC;AAC/E,gBAAA,MAAM,IAAI,GAAG,gBAAgB,EAAE,IAAI,CAAC;AACnC,gBAAA,IAAY,CAAC,QAAQ,CAAC,CAAC,IAAc,KAAI;AACtC,oBAAA,IAAI,aAAa,EAAE;wBACf,OAAO;AACV,qBAAA;oBAED,MAAM,OAAO,GACT,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACzC,wBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;AACnB,wBAAA,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,wBAAA,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAC;AAEjC,oBAAA,IAAI,OAAO,EAAE;AACT,wBAAA,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;wBAC5B,UAAU,GAAG,KAAK,CAAC;AACtB,qBAAA;AACL,iBAAC,CAAC,CAAC;AACN,aAAA;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,aAAa,EAAE;YACf,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B,SAAA;QAED,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,SAAS,GAAG,CAAC,KAAiB,KAAI;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,aAAa,IAAI,UAAU,EAAE;YACxD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7F,MAAM,QAAQ,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACtG,IAAI,QAAQ,GAAG,gBAAgB,EAAE;gBAC7B,OAAO;AACV,aAAA;AAED,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AACpB,gBAAA,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC3B,aAAa,GAAG,OAAO,EAAE,CAAC;gBAC1B,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,sBAAsB,CAAC,CAAC;gBAC7E,aAAa,GAAG,OAAO,EAAE,CAAC;gBAC1B,qBAAqB,CAAC,aAAa,CAAC,CAAC;gBACrC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBACrD,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AACxD,aAAA;AAAM,iBAAA;AACH,gBAAA,aAAa,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,IAAG;oBACrC,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,iBAAC,CAAC,CAAC;AACH,gBAAA,aAAa,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,IAAG;oBACrC,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,iBAAC,CAAC,CAAC;AACN,aAAA;;YAGD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,aAAa,CAAsB,CAAC;YACtF,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC/C,YAAA,MAAM,gBAAgB,GAAa;gBAC/B,GAAG,eAAe,CAAC,IAAI;AACvB,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO;AACnC,gBAAA,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO;aACtC,CAAC;YACF,MAAM,aAAa,GAAG,0BAA0B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACvE,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAgB,CAAC;YAC5E,mBAAmB,CACf,SAAS,EACT,aAAa,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,EAC/B,aAAa,CAAC,MAAM,EACpB,aAAa,CAAC,CAAC,GAAG,OAAO,EACzB,aAAa,CAAC,CAAC,GAAG,OAAO,CAC5B,CAAC;AACF,YAAA,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AACjC,YAAA,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;;YAGjC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AACtD,YAAA,MAAM,iBAAiB,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAU,CAAC;YAE/F,IAAI,YAAY,GAA0B,IAAI,CAAC;YAC/C,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAmB,KAAI;AAC3C,gBAAA,IAAI,YAAY,EAAE;oBACd,OAAO;AACV,iBAAA;AACD,gBAAA,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACzB,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAuB,CAAC;AAC/E,oBAAA,MAAM,IAAI,GAAG,gBAAgB,EAAE,IAAI,CAAC;AAEnC,oBAAA,IAAY,CAAC,QAAQ,CAAC,CAAC,IAAc,KAAI;AACtC,wBAAA,IAAI,YAAY,EAAE;4BACd,OAAO;AACV,yBAAA;wBACD,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAC9D,wBAAA,IAAI,UAAU,EAAE;AACZ,4BAAA,YAAY,GAAG,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACvD,yBAAA;wBACD,UAAU,GAAG,IAAI,CAAC;AAClB,wBAAA,IAAI,YAAY,IAAI,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AACzE,4BAAA,UAAU,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;AACvE,yBAAA;AACL,qBAAC,CAAC,CAAC;AACN,iBAAA;AACL,aAAC,CAAC,CAAC;YAEH,IAAI,UAAU,EAAE,MAAM,EAAE;AACpB,gBAAA,UAAU,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;AAChD,gBAAA,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAC9D,aAAA;AACJ,SAAA;QAED,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,aAAa,GAAG,CAAC,KAAiB,KAAI;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,aAAa,EAAE;YAC1C,IAAI,UAAU,EAAE,MAAM,EAAE;gBACpB,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,aAAa,CAAsB,CAAC;gBACtF,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAsB,CAAC;AAC1F,gBAAA,IAAI,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;gBACrE,MAAM,cAAc,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC7D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,CAAC,cAA2B,CAAuB,CAAC;AACrG,gBAAA,MAAM,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAqB,CAAC,CAAC;gBACnG,UAAU,GAAG,+BAA+B,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC7E,gBAAA,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;gBACvE,IAAI,UAAU,GAAyB,EAAE,WAAW,EAAE,KAAK,EAAE,EACzD,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;AAE1E,gBAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;oBAC1B,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;AAC1F,iBAAA;AAED,gBAAA,IAAI,UAAU,CAAC,YAAY,KAAK,OAAO,EAAE;AACrC,oBAAA,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;wBACpC,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;AACjE,wBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACnB,MAAM,cAAc,GAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,cAAyB,GAAG,CAAC,CAAC;wBAClF,UAAU,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;AACvD,qBAAA;oBACD,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,eAAuB,CAAC,CAAC;AAClE,iBAAA;gBAED,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AACtD,aAAA;AAED,YAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;gBACnB,wBAAwB,CAAC,aAAa,CAAC,CAAC;AAC3C,aAAA;AACD,YAAA,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC5B,aAAa,GAAG,IAAI,CAAC;YACrB,aAAa,EAAE,MAAM,EAAE,CAAC;YACxB,aAAa,GAAG,SAAS,CAAC;YAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;YACxB,aAAa,GAAG,SAAS,CAAC;YAC1B,UAAU,GAAG,IAAI,CAAC;AACrB,SAAA;QACD,aAAa,CAAC,KAAK,CAAC,CAAC;AACzB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,OAAO,GAAG,CAAC,KAAoB,KAAI;QACrC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,KAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEK,MAAM,aAAa,GAAG,CAAC,MAAmB,EAAE,MAAmB,KAAI;IACtE,OAAO,MAAM,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC,CAAC;AAEK,MAAM,qBAAqB,GAAG,CAAC,aAA0B,EAAE,QAAQ,GAAG,IAAI,KAAI;IACjF,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,aAAa,CAAsB,CAAC;AACtF,IAAA,IAAI,QAAQ,EAAE;QACV,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AACtD,KAAA;AAAM,SAAA;QACH,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACrD,KAAA;IACD,CAAC,aAAa,CAAC,WAAW;AACtB,QAAA,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAG;AACnC,YAAA,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AACX,CAAC,CAAC;AAEK,MAAM,wBAAwB,GAAG,CAAC,aAA0B,EAAE,QAAQ,GAAG,IAAI,KAAI;IACpF,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,aAAa,CAAsB,CAAC;AACtF,IAAA,IAAI,QAAQ,EAAE;QACV,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACzD,KAAA;AAAM,SAAA;QACH,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACxD,KAAA;IACD,CAAC,aAAa,CAAC,WAAW;AACtB,QAAA,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAG;AACnC,YAAA,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3C,SAAC,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG,CACpC,UAAgB,EAChB,MAAsB,EACtB,UAA+D,KAC/D;;AAEA,IAAA,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE;QAC/B,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,YAAY,KAAK,KAAK,EAAE;YAC1D,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtD,SAAA;QACD,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,YAAY,KAAK,QAAQ,EAAE;YAChE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtD,SAAA;;AAED,QAAA,IAAI,UAAU,CAAC,YAAY,KAAK,OAAO,EAAE;AACrC,YAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtC,SAAA;AACJ,KAAA;;AAED,IAAA,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE;AACjC,QAAA,IAAI,UAAU,CAAC,YAAY,KAAK,OAAO,EAAE;YACrC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtD,SAAA;AACD,QAAA,IAAI,UAAU,CAAC,YAAY,KAAK,MAAM,EAAE;YACpC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtD,SAAA;;AAED,QAAA,IAAI,UAAU,CAAC,YAAY,KAAK,QAAQ,EAAE;AACtC,YAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtC,SAAA;AACJ,KAAA;;AAED,IAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;QAC1B,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,YAAY,KAAK,KAAK,EAAE;AAC1D,YAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtC,SAAA;QACD,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,YAAY,KAAK,QAAQ,EAAE;AAChE,YAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtC,SAAA;QACD,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,YAAY,KAAK,MAAM,EAAE;YAC5D,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtD,SAAA;QACD,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,YAAY,KAAK,OAAO,EAAE;YAC9D,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtD,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEK,MAAM,oBAAoB,GAAG,CAChC,KAAiB,EACjB,eAAkC,EAClC,eAAkC,EAClC,YAA0B,KAC1B;AACA,IAAA,IAAI,cAAc,CAAC;AACnB,IAAA,MAAM,cAAc,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IACvE,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,CAAC,cAA2B,CAAuB,CAAC;AACrG,IAAA,MAAM,WAAW,GAAG,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAW,CAAC;AAC5F,IAAA,MAAM,WAAW,GAAG,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAW,CAAC;AAC5F,IAAA,MAAM,eAAe,GAAG,WAAW,KAAK,CAAC,CAAC,IAAI,WAAW,IAAK,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,cAAyB,GAAG,CAAC,CAAC;IAC1H,MAAM,eAAe,GACjB,eAAe,CAAC,MAAM,IAAI,WAAW,KAAK,CAAC,CAAC,IAAI,WAAW,IAAK,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,cAAyB,GAAG,CAAC,CAAC;AAChI,IAAA,MAAM,aAAa,GAAG,eAAe,IAAI,eAAe,CAAC;IACzD,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAgB,CAAC;IACxE,MAAM,kBAAkB,GAAG,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,cAAwB,CAAC;IAElF,IAAI,CAAC,aAAa,EAAE;AAChB,QAAA,IAAI,eAAe,EAAE;AACjB,YAAA,cAAc,GAAG,cAAc,GAAG,kBAAkB,GAAG,cAAc,GAAG,CAAC,GAAG,kBAAkB,GAAG,CAAC,CAAC;YACnG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5G,SAAA;AAED,QAAA,IAAI,eAAe,IAAI,YAAY,KAAK,OAAO,EAAE;AAC7C,YAAA,cAAc,GAAG,cAAc,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,CAAC,CAAC;YACnG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5G,SAAA;;AAGD,QAAA,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,YAAY,KAAK,MAAM,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE;YACrF,cAAc,GAAG,cAAc,CAAC;YAChC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AACtG,SAAA;AACJ,KAAA;AACL,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,OAAO,EAAuB,CAAC;AAEhD,MAAM,UAAU,GAAG,CAAC,KAAiB,KAAI;IAC5C,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC,CAAC;AAEK,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAE,KAAc,KAAI;AAC/D,IAAA,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;;AC5VM,MAAM,kBAAkB,GAAG,CAAC,KAAiB,EAAE,gBAA+B,KAAI;IACrF,IAAI,MAAM,GAAkB,EAAE,CAAC;AAC/B,IAAA,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACpF,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAC7E,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;QACrC,MAAM,aAAa,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC;AACR,YAAA,GAAG,IAAI;AACP,YAAA,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AACrF,SAAA,CAAC,CAAC;AACP,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEK,MAAM,gBAAgB,GAAG,CAAC,IAAyB,EAAE,QAAuB,KAAI;IACnF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,WAAW,KAAI;AACjD,QAAA,OAAO,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;KACjD,EAAE,EAAE,CAAC,CAAC;IACP,IAAI,EAAE,OAAO,CAAC,CAAA,YAAA,EAAe,qBAAqB,CAAE,CAAA,EAAE,OAAO,CAAC,CAAC;AAC/D,IAAA,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC;AAEK,MAAM,oBAAoB,GAAG,CAAC,IAAyB,KAAI;IAC9D,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,CAAe,YAAA,EAAA,qBAAqB,CAAE,CAAA,CAAC,CAAC;IACtE,IAAI,SAAS,GAAmB,EAAE,CAAC;AACnC,IAAA,IAAI,OAAO,EAAE;QACT,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,QAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC,KAAA;AACD,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEK,MAAM,mBAAmB,GAAG,CAAC,KAAiB,EAAE,QAAwB,EAAE,WAAkB,KAAI;IACnG,IAAI,UAAuB,EAAE,IAAU,CAAC;AACxC,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,WAAW,GAAmB,EAAE,CAAC;IAErC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAkB,EAAE,KAAa,KAAI;AACnD,QAAA,UAAU,GAAG,WAAW,CAAC,IAAmB,CAAC,CAAC;AAE9C,QAAA,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,UAAU,GAAG,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACvD,aAAA;AACD,YAAA,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC/B,gBAAA,UAAU,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;AACpD,aAAA;AACD,YAAA,MAAM,mBAAmB,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;AAC1F,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,KAAK,GAAU,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,YAAA,UAAU,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;AAE5B,YAAA,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC/B,gBAAA,UAAU,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;AACpD,aAAA;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,gBAAA,UAAU,GAAG,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACvD,aAAA;YAED,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO;AACX,KAAC,CAAC,CAAC;AACH,IAAA,UAAU,CAAC,iCAAiC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACrE,CAAC,CAAC;AAEK,MAAM,mBAAmB,GAAG,CAAC,KAAiB,EAAE,aAA2B,EAAE,IAAY,EAAE,KAAa,EAAE,MAAc,KAAI;AAC/H,IAAA,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IACrG,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO;AACX,CAAC;;ACpFY,MAAA,SAAS,GAAG,CAAC,KAAiB,KAAI;IAC3C,MAAM,QAAQ,GAAG,KAAyC,CAAC;IAE3D,QAAQ,CAAC,SAAS,GAAG,CAAC,KAAgB,EAAE,OAAoB,KAAI;AAC5D,QAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC7D,KAAC,CAAC;AAEF,IAAA,OAAO,QAAQ,CAAC;AACpB;;ACAO,MAAM,YAAY,GAAgB,CAAC,KAAiB,KAAI;IAC3D,MAAM,QAAQ,GAAG,KAAwC,CAAC;IAE1D,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AAChD,IAAA,IAAI,qBAA+C,CAAC;AACpD,IAAA,IAAI,sBAA0D,CAAC;AAC/D,IAAA,IAAI,eAAyC,CAAC;AAC9C,IAAA,IAAI,UAA6B,CAAC;AAClC,IAAA,IAAI,WAA4D,CAAC;AAEjE,IAAA,KAAK,CAAC,SAAS,GAAG,CAAC,KAAiB,KAAI;QACpC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9G,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAK,CAAC,CAAC,CAAC;AAEtE,QAAA,qBAAqB,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,IAAG;YAC1D,sBAAsB,GAAG,oBAAoB,CAAC,KAAK,EAAE,OAAsB,EAAE,KAAK,CAAC,CAAC;YACpF,IAAI,QAAQ,EAAE,cAAc,EAAE;AAC1B,gBAAA,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACtD,aAAA;AACD,YAAA,OAAO,sBAAsB,CAAC;AAClC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,qBAAqB,EAAE;YACvB,UAAU,GAAG,KAAK,CAAC;YACnB,OAAO;AACV,SAAA;QAED,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,SAAS,GAAG,CAAC,KAAiB,KAAI;QACpC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAK,CAAC,CAAC,CAAC;QAEzE,eAAe,GAAG,qBAAqB,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE1E,IAAI,sBAAsB,IAAI,qBAAqB,EAAE;YACjD,MAAM,iBAAiB,GAAG,YAAY,CAAC,YAAY,CAAC,qBAAqB,CAAsB,CAAC;AAChG,YAAA,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC;YAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,yBAAyB,CAAC,qBAAoC,CAAmB,CAAC;AACjH,YAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;YACpD,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAErD,YAAA,IAAI,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;YAEtC,MAAM,YAAY,GAAG,WAAW,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;AACnE,YAAA,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAE;AAChC,gBAAA,MAAM,cAAc,GAAG,aAAa,CAAC,cAAe,CAAC;gBACrD,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACxE,gBAAA,IAAK,qBAAqC,CAAC,GAAI,GAAG,cAAc,EAAE;oBAC9D,QAAQ,GAAG,aAAa,CAAC;AAC5B,iBAAA;AACD,gBAAA,IAAK,qBAAqC,CAAC,KAAM,IAAI,cAAc,EAAE;oBACjE,QAAQ,GAAG,YAAY,CAAC;AAC3B,iBAAA;AACJ,aAAA;YAED,IAAI,QAAQ,EAAE,cAAc,EAAE;AAC1B,gBAAA,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACzD,aAAA;AAED,YAAA,MAAM,gBAAgB,GAAG,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,MAAM,GAAI,WAAW,CAAC,OAAO,CAAC,aAAa,CAA2B,CAAC;AAC7E,YAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACvG,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAE5E,YAAA,IAAI,aAAa,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AAEnF,YAAA,MAAM,mBAAmB,GACrB,CAAC,sBAAsB,KAAK,sBAAsB,CAAC,KAAK;AACpD,gBAAA,aAAa,GAAG,CAAC,KAAM,qBAAqC,CAAC,KAAM;AACvE,iBAAC,sBAAsB,KAAK,sBAAsB,CAAC,GAAG,IAAI,aAAa,KAAM,qBAAqC,CAAC,GAAI,CAAC,CAAC;AAE7H,YAAA,IAAI,mBAAmB,EAAE;gBACrB,WAAW,GAAG,SAAS,CAAC;AAC3B,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACjC,oBAAA,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;AACpD,oBAAA,IAAI,KAAK,GAAG,OAAO,CAAC,KAAM,CAAC;oBAC3B,IAAI,KAAK,IAAI,cAAc,EAAE;wBACzB,aAAa,IAAI,cAAc,CAAC;AACnC,qBAAA;AACJ,iBAAA;gBAED,WAAW;oBACP,sBAAsB,KAAK,sBAAsB,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,aAAa,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;AACvH,aAAA;AAED,YAAA,iBAAkB,CAAC,6BAA6B,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;AACtF,SAAA;QACD,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,OAAO,GAAG,CAAC,KAAiB,KAAI;QAClC,UAAU,GAAG,SAAS,CAAC;QACvB,sBAAsB,GAAG,SAAS,CAAC;AACnC,QAAA,IAAI,qBAAqB,EAAE;YACvB,IAAI,QAAQ,EAAE,cAAc,EAAE;AAC1B,gBAAA,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;AACpD,aAAA;AAED,YAAA,IAAI,WAAW,EAAE;gBACb,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;gBAC/D,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AAChD,aAAA;AAAM,iBAAA;gBACH,MAAM,iBAAiB,GAAG,YAAY,CAAC,YAAY,CAAC,qBAAqB,CAAsB,CAAC;gBAChG,iBAAkB,CAAC,6BAA6B,EAAE,CAAC;AACtD,aAAA;YACD,qBAAqB,GAAG,SAAS,CAAC;AACrC,SAAA;QACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,KAAC,CAAC;AACF,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;;ACxFY,MAAA,QAAQ,GAAG,CAAC,KAAiB,KAAI;IAC1C,MAAM,EACF,WAAW,EACX,QAAQ,EACR,OAAO,EACP,cAAc,EACd,WAAW,EACX,cAAc,EACd,cAAc,EACd,YAAY,EACZ,SAAS,EACT,WAAW,EACd,GAAG,KAAK,CAAC;AAEV,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,OAAkC,KAAI;QACvD,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACnC,YAAA,OAAO,kBAAkB,CAAC;AAC7B,SAAA;aAAM,IAAI,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1D,YAAA,OAAO,iBAAiB,CAAC;AAC5B,SAAA;AACD,QAAA,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AAChC,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,YAAY,GAAG,OAAO,IAAG;QAC3B,IAAI,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;YAC3C,OAAO,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3D,SAAA;AACD,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AACjC,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,WAAW,GAAG,OAAO,IAAG;AAC1B,QAAA,IAAI,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE;AAClE,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AAChC,KAAC,CAAC;IAEF,KAAK,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,KAAY,KAAI;AAC7C,QAAA,IAAI,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE;YAC9D,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAChE,OAAO,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACxG,SAAA;AACD,QAAA,OAAO,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC1C,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,SAAS,GAAG,OAAO,IAAG;QACxB,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;AAC7C,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;AAC9B,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,OAAO,GAAG,CAAC,KAAoB,KAAI;AACrC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACvD,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,OAAO;AACV,SAAA;AACD,QAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAkB,CAAC;QACrE,IAAI,gBAAgB,CAAC,MAAM,EAAE;AACzB,YAAA,IACI,gBAAgB,CAAC,MAAM,KAAK,CAAC;AAC7B,iBAAC,KAAK,CAAC,GAAG,KAAK,KAAK;qBACf,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC9G;gBACE,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,MAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAA,qBAAqB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBAC9C,MAAM,mBAAmB,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AACxE,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;oBACrB,IAAI,eAAe,CAAC,WAAW,EAAE;AAC7B,wBAAA,MAAM,UAAU,GAAyB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAChE,wBAAA,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,MAAK;4BACxC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;AAC/D,yBAAC,CAAC,CAAC;AACN,qBAAA;AACD,oBAAA,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,oBAAoB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;AAC3F,iBAAA;AAAM,qBAAA;AACH,oBAAA,IAAI,0BAA0B,CAAC,eAAe,CAAC,EAAE;AAC7C,wBAAA,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnE,qBAAA;AAED,oBAAA,kCAAkC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AAE3D,oBAAA,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,sBAAsB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;AAC7F,iBAAA;gBACD,OAAO;AACV,aAAA;AACD,YAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;gBACnE,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBAChD,IAAI,QAAQ,GAAmB,IAAI,CAAC;AACpC,gBAAA,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAChE,gBAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,cAAc,GAAG,YAAY,CAAC,YAAY,CAAC,YAAY,CAAsB,CAAC;gBACpF,MAAM,SAAS,GAAG,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC;gBACzG,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,IAAG;AACpD,oBAAA,OAAO,iBAAiB,CAAC,OAAO,CAAC,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACjH,iBAAC,CAAC,CAAC;AACH,gBAAA,IAAI,YAAY,EAAE;AACd,oBAAA,MAAM,UAAU,GAAG,cAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC;oBACvF,IAAI,UAAU,KAAK,CAAC,EAAE;AAClB,wBAAA,QAAQ,GAAG,cAAc,EAAE,MAAM,CAAC;AACrC,qBAAA;yBAAM,IAAI,SAAS,KAAK,CAAC,EAAE;wBACxB,QAAQ,GAAG,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACzE,qBAAA;yBAAM,IAAI,SAAU,GAAG,CAAC,EAAE;wBACvB,QAAQ,GAAG,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAU,GAAG,CAAC,CAAC,CAAC;AAC9D,qBAAA;AACJ,iBAAA;AAED,gBAAA,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;oBAC1E,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACjE,iBAAA;AAED,gBAAA,IAAI,QAAQ,EAAE;AACV,oBAAA,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9C,iBAAA;gBACD,OAAO;AACV,aAAA;;AAED,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBACtB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,MAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAC5C,gBAAgB,CAAC,eAAe,CAAC,CAAC;gBAClC,OAAO;AACV,aAAA;AACJ,SAAA;QAED,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YAC3C,IAAI,gBAAgB,EAAE,MAAM,EAAE;gBAC1B,OAAO;AACV,aAAA;AACJ,SAAA;QAED,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAiB,KAAI;AACnC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACvD,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO;AACV,SAAA;QACD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,KAAK,CAAC,QAAQ;aACT,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACxC,OAAO,CAAC,OAAO,IAAG;AACf,YAAA,mBAAmB,CAAc,OAAsB,EAAE,IAAI,IAAG;AAC5D,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE;oBAC7E,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC1B,iBAAA;AACL,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACP,QAAA,IAAI,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;YACtC,OAAO;AACV,SAAA;QACD,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,IAAyB,KAAI;QAC9C,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,KAAK,CAAkB,CAAC,CAAC;QAEzF,IAAI,gBAAgB,CAAC,MAAM,EAAE;YACzB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC7D,YAAA,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACjC,OAAO;AACV,SAAA;QACD,WAAW,CAAC,IAAI,CAAC,CAAC;AACtB,KAAC,CAAC;IAEF,KAAK,CAAC,cAAc,GAAG,CAAC,IAAyB,EAAE,WAAmB,KAAI;AACtE,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;AACxB,YAAA,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAClC,OAAO;AACV,SAAA;AAED,QAAA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,QAAQ,CAAC,MAAM,EAAE;AACjB,YAAA,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/D,SAAA;AAAM,aAAA;YACH,MAAM,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA,UAAA,CAAY,CAAW,CAAC;YACnD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,CACnC,IAAI,EACJ,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,aAA4B,EACtD,4BAA4B,CAC/B,CAAC;AACF,YAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,YAAA,IAAI,IAAI,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AACvC,gBAAA,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACxE,aAAA;AACJ,SAAA;AACD,QAAA,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACtC,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,cAAc,GAAG,CAAC,IAAyB,KAAI;AACjD,QAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAkB,CAAC;AACrE,QAAA,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAChD,cAAc,CAAC,IAAI,CAAC,CAAC;AACzB,KAAC,CAAC;IAEF,OAAO,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnD;;MC9Oa,sBAAsB,CAAA;AAU/B,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;KACxC;AAED,IAAA,WAAA,CAAsB,UAAmC,EAAA;QAAnC,IAAU,CAAA,UAAA,GAAV,UAAU,CAAyB;QAZzD,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;KAYuC;;mHAdpD,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGAAtB,sBAAsB,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,SAAS;iGAGN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAIN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAIN,KAAK,EAAA,CAAA;sBADJ,KAAK;;;ACZV;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"plait-mind.mjs","sources":["../../../packages/mind/src/utils/weak-maps.ts","../../../packages/mind/src/constants/default.ts","../../../packages/mind/src/constants/node.ts","../../../packages/mind/src/utils/graph.ts","../../../packages/mind/src/queries/get-correct-layout-by-element.ts","../../../packages/mind/src/queries/get-branch-layouts.ts","../../../packages/mind/src/queries/get-available-sublayouts-by-element.ts","../../../packages/mind/src/queries/get-layout-parent-by-element.ts","../../../packages/mind/src/queries/get-layout-by-element.ts","../../../packages/mind/src/queries/index.ts","../../../packages/mind/src/interfaces/element.ts","../../../packages/mind/src/interfaces/node.ts","../../../packages/mind/src/interfaces/layout.ts","../../../packages/mind/src/interfaces/abstract.ts","../../../packages/mind/src/utils/layout.ts","../../../packages/mind/src/utils/node.ts","../../../packages/mind/src/utils/abstract/common.ts","../../../packages/mind/src/utils/mind.ts","../../../packages/mind/src/utils/shape.ts","../../../packages/mind/src/utils/node-style/branch.ts","../../../packages/mind/src/utils/node-style/node.ts","../../../packages/mind/src/utils/is-virtual-key.ts","../../../packages/mind/src/draw/link.ts","../../../packages/mind/src/utils/draw-placeholder.ts","../../../packages/mind/src/utils/direction-detector.ts","../../../packages/mind/src/utils/direction-corrector.ts","../../../packages/mind/src/utils/drop-target-corrector.ts","../../../packages/mind/src/utils/abstract/resize.ts","../../../packages/mind/src/draw/indented-link.ts","../../../packages/mind/src/interfaces/types.ts","../../../packages/mind/src/utils/point-placement.ts","../../../packages/mind/src/draw/link/logic-link.ts","../../../packages/mind/src/plugins/emoji/emoji.ts","../../../packages/mind/src/utils/node-space.ts","../../../packages/mind/src/draw/richtext.ts","../../../packages/mind/src/draw/shape.ts","../../../packages/mind/src/draw/link/abstract-link.ts","../../../packages/mind/src/plugins/emoji/emoji.drawer.ts","../../../packages/mind/src/transforms/layout.ts","../../../packages/mind/src/transforms/node.ts","../../../packages/mind/src/transforms/index.ts","../../../packages/mind/src/draw/abstract.ts","../../../packages/mind/src/drawer/base/base.ts","../../../packages/mind/src/utils/path.ts","../../../packages/mind/src/drawer/quick-insert.drawer.ts","../../../packages/mind/src/node.component.ts","../../../packages/mind/src/layout-option.ts","../../../packages/mind/src/mind.component.ts","../../../packages/mind/src/mind.module.ts","../../../packages/mind/src/plugins/with-dnd.ts","../../../packages/mind/src/utils/clipboard.ts","../../../packages/mind/src/plugins/emoji/with-mind-emoji.ts","../../../packages/mind/src/plugins/with-abstract.ts","../../../packages/mind/src/plugins/with-mind.ts","../../../packages/mind/src/plugins/emoji/emoji-base.component.ts","../../../packages/mind/src/public-api.ts","../../../packages/mind/src/plait-mind.ts"],"sourcesContent":["import { MindElement } from '../interfaces/element';\nimport { MindNode } from '../interfaces/node';\n\nexport const ELEMENT_TO_NODE = new WeakMap<MindElement, MindNode>();\n","export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const MINDMAP_KEY = 'plait-mindmap';\nexport const MAX_RADIUS = BASE * 4;\n\nexport const TRANSPARENT = 'transparent';\nexport const GRAY_COLOR = '#AAAAAA';\nexport const STROKE_WIDTH = 3;\n\nexport const EXTEND_OFFSET = 8;\nexport const EXTEND_RADIUS = 16;\n\nexport const QUICK_INSERT_CIRCLE_OFFSET = 9;\nexport const QUICK_INSERT_CIRCLE_COLOR = '#6698FF';\nexport const QUICK_INSERT_INNER_CROSS_COLOR = 'white';\n","export const TOPIC_COLOR = '#333';\nexport const TOPIC_FONT_SIZE = 14;\nexport const NODE_FILL = '#FFFFFF';\nexport const ROOT_NODE_FILL = '#F5F5F5';\nexport const ROOT_NODE_STROKE = '#F5F5F5';\nexport const ROOT_TOPIC_FONT_SIZE = 18;\nexport const NODE_MIN_WIDTH = 18;\n\nexport const COLORS = ['#A287E1', '#6F81DB', '#6EC4C4', '#DFB85D', '#B1C774', '#77C386', '#C28976', '#E48484', '#E482D4', '#69B1E4'];\n\nexport enum MindNodeShape {\n roundRectangle = 'round-rectangle',\n underline = 'underline'\n}\n\nexport const ABSTRACT_HANDLE_COLOR = '#6698FF80'; //PRIMARY_COLOR 50% 透明度\nexport const ABSTRACT_INCLUDED_OUTLINE_OFFSET = 3.5;\nexport const ABSTRACT_HANDLE_LENGTH = 10;\n\nexport const TOPIC_DEFAULT_MAX_WORD_COUNT = 34;\nexport const ABSTRACT_HANDLE_MASK_WIDTH = 8;\n","import { MindNode } from '../interfaces/node';\nimport { PlaitBoard, Point, RectangleClient, distanceBetweenPointAndRectangle } from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { ELEMENT_TO_NODE } from './weak-maps';\n\nexport function getRectangleByNode(node: MindNode): RectangleClient {\n const x = node.x + node.hGap;\n let y = node.y + node.vGap;\n const width = node.width - node.hGap * 2;\n const height = node.height - node.vGap * 2;\n return {\n x,\n y,\n width,\n height\n };\n}\n\nexport function hitMindElement(board: PlaitBoard, point: Point, element: MindElement) {\n const node = ELEMENT_TO_NODE.get(element);\n if (node && distanceBetweenPointAndRectangle(point[0], point[1], getRectangleByNode(node)) === 0) {\n return true;\n } else {\n return false;\n }\n}\n","import { PlaitElement } from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { MindNodeComponent } from '../node.component';\nimport { correctLayoutByDirection, findUpElement, getDefaultLayout, getInCorrectLayoutDirection } from '../utils';\nimport { AbstractNode, MindLayoutType, getAbstractLayout, isIndentedLayout, LayoutNode, isChildOfAbstract } from '@plait/layouts';\n\n/**\n * get correctly layout:\n * 1. root is standard -> left or right\n * 2. correct layout by incorrect layout direction\n * @param element\n */\nexport const getCorrectLayoutByElement = (element: MindElement) => {\n const { root } = findUpElement(element);\n const rootLayout = root.layout || getDefaultLayout();\n let correctRootLayout = rootLayout;\n\n if (element.isRoot) {\n return correctRootLayout;\n }\n\n const component = PlaitElement.getComponent(element) as MindNodeComponent;\n let layout = element.layout;\n\n let parentComponent: MindNodeComponent | null = null;\n let parent: MindElement | undefined = component.parent.origin;\n\n while (!layout && parent) {\n parentComponent = PlaitElement.getComponent(parent) as MindNodeComponent;\n layout = parentComponent.node.origin.layout;\n parent = parentComponent.parent?.origin;\n }\n if (\n (AbstractNode.isAbstract(element) || isChildOfAbstract((MindElement.getNode(element) as unknown) as LayoutNode)) &&\n isIndentedLayout(layout!)\n ) {\n return getAbstractLayout(layout!);\n }\n\n // handle root standard\n if (rootLayout === MindLayoutType.standard) {\n correctRootLayout = component?.node.left ? MindLayoutType.left : MindLayoutType.right;\n }\n\n if (parentComponent && parentComponent.node.origin.isRoot) {\n return correctRootLayout;\n }\n\n if (layout) {\n const incorrectDirection = getInCorrectLayoutDirection(correctRootLayout, layout);\n if (incorrectDirection) {\n return correctLayoutByDirection(layout, incorrectDirection);\n } else {\n return layout;\n }\n } else {\n return correctRootLayout;\n }\n};\n","import { MindElement } from '../interfaces';\nimport { findParentElement } from '../utils';\nimport { MindLayoutType } from '@plait/layouts';\nimport { getCorrectLayoutByElement } from './get-correct-layout-by-element';\n\nexport const getBranchLayouts = (element: MindElement) => {\n const layouts: MindLayoutType[] = [];\n if (element.layout) {\n //getCorrectLayoutByElement含有递归操作,getBranchMindmapLayouts本身也有递归操作,有待优化\n layouts.unshift(getCorrectLayoutByElement(element));\n }\n let parent = findParentElement(element);\n while (parent) {\n if (parent.layout) {\n layouts.unshift(parent.layout);\n }\n parent = findParentElement(parent);\n }\n return layouts;\n};\n","import { MindElement } from '../interfaces';\nimport {\n findParentElement,\n getAvailableSubLayoutsByLayoutDirections,\n getBranchDirectionsByLayouts,\n} from '../utils';\nimport { MindLayoutType } from '@plait/layouts';\nimport { getBranchLayouts } from './get-branch-layouts';\n\n/**\n * get available sub layouts by element\n * @param element\n * @returns MindLayoutType[]\n */\nexport const getAvailableSubLayoutsByElement = (element: MindElement) => {\n const parentElement = findParentElement(element);\n if (parentElement) {\n const branchLayouts = getBranchLayouts(parentElement);\n if (branchLayouts[0] === MindLayoutType.standard) {\n const node = MindElement.getNode(element);\n branchLayouts[0] = node.left ? MindLayoutType.left : MindLayoutType.right;\n }\n const currentLayoutDirections = getBranchDirectionsByLayouts(branchLayouts);\n let availableSubLayouts = getAvailableSubLayoutsByLayoutDirections(currentLayoutDirections);\n const parentLayout = [branchLayouts[branchLayouts.length - 1]];\n const parentDirections = getBranchDirectionsByLayouts(parentLayout);\n const parentAvailableSubLayouts = getAvailableSubLayoutsByLayoutDirections(parentDirections);\n\n availableSubLayouts = availableSubLayouts.filter(layout =>\n parentAvailableSubLayouts.some(parentAvailableSubLayout => parentAvailableSubLayout === layout)\n );\n return availableSubLayouts;\n }\n return undefined;\n};\n","import { MindElement } from '../interfaces';\nimport { findParentElement, getDefaultLayout } from '../utils';\nimport { MindLayoutType } from '@plait/layouts';\n\n/**\n * 获取父节点布局类型\n * @param element\n * @returns MindLayoutType\n */\nexport const getLayoutParentByElement = (element: MindElement): MindLayoutType => {\n let parent = findParentElement(element);\n while (parent) {\n if (parent.layout) {\n return parent.layout;\n }\n parent = findParentElement(parent);\n }\n return getDefaultLayout();\n};\n","import { MindElement } from '../interfaces';\nimport { AbstractNode, MindLayoutType, getAbstractLayout, isIndentedLayout, isChildOfAbstract, LayoutNode } from '@plait/layouts';\nimport { getLayoutParentByElement } from './get-layout-parent-by-element';\n\nexport const getLayoutByElement = (element: MindElement): MindLayoutType => {\n const layout = element.layout;\n if (layout) {\n return layout;\n }\n\n if (\n AbstractNode.isAbstract(element) ||\n (isChildOfAbstract((MindElement.getNode(element) as unknown) as LayoutNode) && isIndentedLayout(layout!))\n ) {\n const parentLayout = getLayoutParentByElement(element);\n return getAbstractLayout(parentLayout);\n }\n return getLayoutParentByElement(element);\n};\n","import { getAvailableSubLayoutsByElement } from './get-available-sublayouts-by-element';\nimport { getBranchLayouts } from './get-branch-layouts';\nimport { getCorrectLayoutByElement } from './get-correct-layout-by-element';\nimport { getLayoutByElement } from './get-layout-by-element';\nimport { getLayoutParentByElement } from './get-layout-parent-by-element';\n\nexport const MindQueries = {\n getAvailableSubLayoutsByElement,\n getLayoutParentByElement,\n getBranchLayouts,\n getLayoutByElement,\n getCorrectLayoutByElement\n};\n","import { MindNodeShape } from '../constants/node';\nimport { isIndentedLayout, MindLayoutType } from '@plait/layouts';\nimport { NODE_TO_PARENT, Path, PlaitBoard, PlaitElement, PlaitNode, Point } from '@plait/core';\nimport { MindQueries } from '../queries';\nimport { ELEMENT_TO_NODE } from '../utils';\nimport { BaseData, EmojiData } from './element-data';\n\nexport interface MindElement<T = BaseData> extends PlaitElement {\n data: T;\n children: MindElement[];\n rightNodeCount?: number;\n width: number;\n height: number;\n isRoot?: boolean;\n\n // node style attributes\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n shape?: MindNodeShape;\n\n // link style attributes\n branchColor?: string;\n branchWidth?: number;\n\n // layout\n layout?: MindLayoutType;\n isCollapsed?: boolean;\n\n start?: number;\n end?: number;\n}\n\nexport interface PlaitMind extends MindElement {\n type: 'mindmap';\n points: Point[];\n}\n\nexport const PlaitMind = {\n isMind: (value: any): value is PlaitMind => {\n return value.type === 'mindmap';\n }\n};\n\nexport const MindElement = {\n hasLayout(value: MindElement, layout: MindLayoutType) {\n const _layout = MindQueries.getLayoutByElement(value);\n return _layout === layout;\n },\n isIndentedLayout(value: MindElement) {\n const _layout = MindQueries.getLayoutByElement(value) as MindLayoutType;\n return isIndentedLayout(_layout);\n },\n isMindElement(board: PlaitBoard, element: PlaitElement): element is MindElement {\n const path = PlaitBoard.findPath(board, element);\n const rootElement = PlaitNode.get(board, path.slice(0, 1));\n if (PlaitMind.isMind(rootElement)) {\n return true;\n } else {\n return false;\n }\n },\n getParent(node: MindElement) {\n if (PlaitMind.isMind(node)) {\n throw new Error('mind root node can not get parent');\n }\n const parent = NODE_TO_PARENT.get(node) as MindElement;\n return parent;\n },\n getRoot(board: PlaitBoard, element: MindElement) {\n const path = PlaitBoard.findPath(board, element);\n return PlaitNode.get(board, path.slice(0, 1)) as PlaitMind;\n },\n getAncestors(board: PlaitBoard, element: MindElement) {\n const path = PlaitBoard.findPath(board, element);\n const parents: PlaitElement[] = [];\n for (const p of Path.ancestors(path, { reverse: true })) {\n const n = PlaitNode.get(board, p);\n if (n && !PlaitBoard.isBoard(n)) {\n parents.push(n);\n }\n }\n return parents;\n },\n getNode(element: MindElement) {\n const node = ELEMENT_TO_NODE.get(element);\n if (!node) {\n throw new Error(`can not get node from ${JSON.stringify(element)}`);\n }\n return node;\n },\n hasEmojis(element: MindElement): element is MindElement<EmojiData> {\n if (element.data.emojis) {\n return true;\n } else {\n return false;\n }\n },\n getEmojis(element: MindElement<EmojiData>) {\n return element.data.emojis;\n }\n};\n","import { MindLayoutType } from '@plait/layouts';\nimport { Path, PlaitElement, Point } from '@plait/core';\nimport { MindElement } from './element';\n\nexport interface MindNode {\n depth: number;\n x: number;\n y: number;\n width: number;\n height: number;\n hGap: number;\n vGap: number;\n children: MindNode[];\n origin: MindElement;\n parent: MindNode;\n left: boolean;\n up: boolean;\n}\n\nexport const MindNode = {\n get(root: MindNode, path: Path) {\n let node = root;\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n node = node.children[p];\n }\n return node;\n },\n isEquals(node: MindNode, otherNode: MindNode) {\n const hasSameSize =\n node.x === otherNode.x && node.y === otherNode.y && node.width === otherNode.width && node.height === otherNode.height;\n const hasSameOrigin = node.origin === otherNode.origin;\n let hasSameParentOriginChildren = false;\n if (node.parent && otherNode.parent) {\n hasSameParentOriginChildren = node.parent.origin.children == otherNode.parent.origin.children;\n }\n return hasSameSize && hasSameOrigin && hasSameParentOriginChildren;\n }\n};\n\n// mindmap node extend 支持的布局类型\nexport type ExtendLayoutType = Exclude<MindLayoutType, MindLayoutType.standard>;\n\nexport type CoordinateType = {\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n};\n\nexport type ExtendUnderlineCoordinateType = {\n [key in ExtendLayoutType]: CoordinateType;\n};\n\nexport type DetectResult = 'top' | 'bottom' | 'right' | 'left' | null;\n\nexport type RootBaseDirection = 'right' | 'left' | null;\n","import { MindLayoutType } from '@plait/layouts';\n\nexport enum LayoutDirection {\n 'top' = 'top',\n 'right' = 'right',\n 'bottom' = 'bottom',\n 'left' = 'left'\n}\n\nexport const LayoutDirectionsMap: LayoutDirectionMapType = {\n [MindLayoutType.right]: [LayoutDirection.right],\n [MindLayoutType.left]: [LayoutDirection.left],\n [MindLayoutType.upward]: [LayoutDirection.top],\n [MindLayoutType.downward]: [LayoutDirection.bottom],\n [MindLayoutType.rightBottomIndented]: [LayoutDirection.right, LayoutDirection.bottom],\n [MindLayoutType.rightTopIndented]: [LayoutDirection.right, LayoutDirection.top],\n [MindLayoutType.leftBottomIndented]: [LayoutDirection.left, LayoutDirection.bottom],\n [MindLayoutType.leftTopIndented]: [LayoutDirection.left, LayoutDirection.top]\n};\n\nexport type LayoutDirectionMapType = { [key: string]: LayoutDirection[] };\n","import { PlaitBoard } from '@plait/core';\n\nexport enum AbstractHandlePosition {\n start = 'start',\n end = 'end'\n}\n\nexport enum AbstractResizeState {\n start = 'start',\n resizing = 'resizing',\n end = 'end'\n}\n\nexport interface PlaitAbstractBoard extends PlaitBoard {\n abstractResize?: (state: AbstractResizeState) => void;\n}\n","import { LayoutDirection, LayoutDirectionsMap, MindElement } from '../interfaces';\nimport { isIndentedLayout, MindLayoutType } from '@plait/layouts';\n\nexport const getBranchDirectionsByLayouts = (branchLayouts: MindLayoutType[]) => {\n const branchDirections: LayoutDirection[] = [];\n branchLayouts.forEach(l => {\n const directions = LayoutDirectionsMap[l];\n directions.forEach(d => {\n if (!branchDirections.includes(d) && !branchDirections.includes(getLayoutReverseDirection(d))) {\n branchDirections.push(d);\n }\n });\n });\n return branchDirections;\n};\n\nexport const isCorrectLayout = (root: MindElement, layout: MindLayoutType) => {\n const rootLayout = root.layout || getDefaultLayout();\n return !getInCorrectLayoutDirection(rootLayout, layout);\n};\n\nexport const isMixedLayout = (parentLayout: MindLayoutType, layout: MindLayoutType) => {\n return (!isIndentedLayout(parentLayout) && isIndentedLayout(layout)) || (isIndentedLayout(parentLayout) && !isIndentedLayout(layout));\n};\n\nexport const getInCorrectLayoutDirection = (rootLayout: MindLayoutType, layout: MindLayoutType) => {\n const directions = LayoutDirectionsMap[rootLayout];\n const subLayoutDirections = LayoutDirectionsMap[layout];\n if (!subLayoutDirections) {\n throw new Error(`unexpected layout: ${layout} on correct layout`);\n }\n return subLayoutDirections.find(d => directions.includes(getLayoutReverseDirection(d)));\n};\n\nexport const correctLayoutByDirection = (layout: MindLayoutType, direction: LayoutDirection) => {\n const isHorizontal = direction === LayoutDirection.left || direction === LayoutDirection.right ? true : false;\n let inverseDirectionLayout = MindLayoutType.standard;\n switch (layout) {\n case MindLayoutType.left:\n inverseDirectionLayout = MindLayoutType.right;\n break;\n case MindLayoutType.right:\n inverseDirectionLayout = MindLayoutType.left;\n break;\n case MindLayoutType.downward:\n inverseDirectionLayout = MindLayoutType.upward;\n break;\n case MindLayoutType.upward:\n inverseDirectionLayout = MindLayoutType.downward;\n break;\n case MindLayoutType.rightBottomIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.leftBottomIndented : MindLayoutType.rightTopIndented;\n break;\n case MindLayoutType.leftBottomIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.rightBottomIndented : MindLayoutType.leftTopIndented;\n break;\n case MindLayoutType.rightTopIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.leftTopIndented : MindLayoutType.rightBottomIndented;\n break;\n case MindLayoutType.leftTopIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.rightTopIndented : MindLayoutType.leftBottomIndented;\n break;\n }\n return inverseDirectionLayout;\n};\n\nexport const getLayoutDirection = (root: MindElement) => {\n const layout = root.layout || getDefaultLayout();\n return LayoutDirectionsMap[layout];\n};\n\nexport const getDefaultLayout = () => {\n return MindLayoutType.standard;\n};\n\nexport const getAvailableSubLayoutsByLayoutDirections = (directions: LayoutDirection[]): MindLayoutType[] => {\n const result: MindLayoutType[] = [];\n const reverseDirections = directions.map(getLayoutReverseDirection);\n for (const key in MindLayoutType) {\n const layout = MindLayoutType[key as keyof typeof MindLayoutType];\n const layoutDirections = LayoutDirectionsMap[layout];\n if (layoutDirections) {\n const hasSameDirection = layoutDirections.some(d => directions.includes(d));\n const hasReverseDirection = layoutDirections.some(r => reverseDirections.includes(r));\n if (hasSameDirection && !hasReverseDirection) {\n result.push(layout);\n }\n }\n }\n return result;\n};\n\nexport const getLayoutReverseDirection = (layoutDirection: LayoutDirection) => {\n let reverseDirection = LayoutDirection.right;\n switch (layoutDirection) {\n case LayoutDirection.top:\n reverseDirection = LayoutDirection.bottom;\n break;\n case LayoutDirection.bottom:\n reverseDirection = LayoutDirection.top;\n break;\n case LayoutDirection.right:\n reverseDirection = LayoutDirection.left;\n break;\n case LayoutDirection.left:\n reverseDirection = LayoutDirection.right;\n break;\n }\n return reverseDirection;\n};\n\nexport const getRootLayout = (root: MindElement) => {\n return root.layout || getDefaultLayout();\n};\n","import { ELEMENT_TO_COMPONENT } from '@plait/core';\nimport { MindElement } from '../interfaces/element';\nimport { MindNodeComponent } from '../node.component';\n\nexport function enterNodeEditing(element: MindElement) {\n const component = ELEMENT_TO_COMPONENT.get(element) as MindNodeComponent;\n component.startEditText(false, false);\n}\n","import { AbstractNode, isStandardLayout } from '@plait/layouts';\nimport { MindElement } from '../../interfaces/element';\nimport { Path, PlaitBoard, PlaitElement, Transforms } from '@plait/core';\nimport { createMindElement, divideElementByParent, filterChildElement } from '../mind';\nimport { GRAY_COLOR } from '../../constants';\nimport { MindQueries } from '../../queries';\n\nexport const separateChildren = (parentElement: MindElement) => {\n const rightNodeCount = parentElement.rightNodeCount!;\n const children = parentElement.children;\n let rightChildren = [],\n leftChildren = [];\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (AbstractNode.isAbstract(child) && child.end < rightNodeCount) {\n rightChildren.push(child);\n continue;\n }\n if (AbstractNode.isAbstract(child) && child.start >= rightNodeCount) {\n leftChildren.push(child);\n continue;\n }\n\n if (i < rightNodeCount) {\n rightChildren.push(child);\n } else {\n leftChildren.push(child);\n }\n }\n\n return { leftChildren, rightChildren };\n};\n\nexport const isSetAbstract = (element: PlaitElement) => {\n return !!getCorrespondingAbstract(element as MindElement);\n};\n\nexport const canSetAbstract = (element: PlaitElement) => {\n return !PlaitElement.isRootElement(element) && !AbstractNode.isAbstract(element) && !isSetAbstract(element);\n};\n\nexport const setAbstract = (board: PlaitBoard, elements: PlaitElement[]) => {\n let elementGroup = filterChildElement(elements as MindElement[]);\n const { parentElements, abstractIncludedGroups } = divideElementByParent(elementGroup);\n\n abstractIncludedGroups.forEach((group, index) => {\n const groupParent = parentElements[index];\n setAbstractByElements(board, groupParent, group);\n });\n};\n\nexport const setAbstractByElements = (board: PlaitBoard, groupParent: MindElement, group: MindElement[]) => {\n const indexArray = group.map(child => groupParent!.children.indexOf(child)).sort((a, b) => a - b);\n const rightNodeCount = groupParent?.rightNodeCount;\n const start = indexArray[0],\n end = indexArray[indexArray.length - 1];\n\n if (\n isStandardLayout(MindQueries.getLayoutByElement(groupParent)) &&\n rightNodeCount &&\n start < rightNodeCount &&\n end >= rightNodeCount\n ) {\n const childrenLength = groupParent.children.length;\n const path = [...PlaitBoard.findPath(board, groupParent), childrenLength];\n const leftChildren = indexArray.filter(index => index >= rightNodeCount);\n const rightChildren = indexArray.filter(index => index < rightNodeCount);\n\n insertAbstractNode(board, path, rightChildren[0], rightChildren[rightChildren.length - 1]);\n insertAbstractNode(board, Path.next(path), leftChildren[0], leftChildren[leftChildren.length - 1]);\n } else {\n const path = [...PlaitBoard.findPath(board, groupParent), groupParent.children.length];\n\n insertAbstractNode(board, path, start, end);\n }\n};\n\nexport const insertAbstractNode = (board: PlaitBoard, path: Path, start: number, end: number) => {\n const mindElement = createMindElement('概要', 28, 20, {\n strokeColor: GRAY_COLOR,\n branchColor: GRAY_COLOR\n });\n\n mindElement.start = start;\n mindElement.end = end;\n\n Transforms.insertNode(board, mindElement, path);\n};\n\nexport const handleAbstractIncluded = (board: PlaitBoard, element: MindElement) => {\n const rightNodeCount = element.rightNodeCount!;\n const abstract = element.children.find(child => {\n return AbstractNode.isAbstract(child) && child.end >= rightNodeCount && child.start < rightNodeCount;\n });\n\n if (abstract) {\n const path = PlaitBoard.findPath(board, abstract);\n Transforms.setNode(board, { end: rightNodeCount - 1 }, path);\n }\n};\n\nexport const getCorrespondingAbstract = (element: MindElement) => {\n const parent = MindElement.getParent(element);\n if (!parent) return undefined;\n\n const elementIndex = parent.children.indexOf(element);\n return parent.children.find(child => {\n return AbstractNode.isAbstract(child) && elementIndex >= child.start! && elementIndex <= child.end!;\n });\n};\n\nexport const getBehindAbstracts = (element: MindElement) => {\n const parent = MindElement.getParent(element);\n const index = parent.children.indexOf(element);\n return parent.children.filter(child => AbstractNode.isAbstract(child) && child.start! > index);\n};\n\nexport const insertSiblingElementHandleAbstract = (board: PlaitBoard, selectedElement: MindElement) => {\n const abstract = getCorrespondingAbstract(selectedElement);\n if (abstract) {\n PlaitBoard.findPath(board, abstract);\n Transforms.setNode(board, { end: abstract.end! + 1 }, PlaitBoard.findPath(board, abstract));\n }\n\n const abstracts = getBehindAbstracts(selectedElement);\n if (abstracts.length) {\n moveAbstractPosition(board, abstracts, 1);\n }\n};\n\nexport const moveAbstractPosition = (board: PlaitBoard, abstracts: MindElement[], step: number) => {\n abstracts.forEach(abstract => {\n Transforms.setNode(board, { start: abstract.start! + step, end: abstract.end! + step }, PlaitBoard.findPath(board, abstract));\n });\n};\n","import { AbstractNode, MindLayoutType } from '@plait/layouts';\nimport {\n addSelectedElement,\n clearSelectedElement,\n idCreator,\n isNullOrUndefined,\n Path,\n PlaitBoard,\n PlaitElement,\n Point,\n Transforms\n} from '@plait/core';\nimport { Node } from 'slate';\nimport { MindNodeShape, NODE_MIN_WIDTH, ROOT_TOPIC_FONT_SIZE, TOPIC_DEFAULT_MAX_WORD_COUNT } from '../constants/node';\nimport { MindNode, PlaitMind } from '../interfaces';\nimport { MindElement } from '../interfaces/element';\nimport { getRootLayout } from './layout';\nimport { TEXT_DEFAULT_HEIGHT, getSizeByText, ROOT_DEFAULT_HEIGHT } from '@plait/richtext';\nimport { enterNodeEditing } from './node';\nimport { MindNodeComponent } from '../node.component';\nimport { getBehindAbstracts, getCorrespondingAbstract } from './abstract/common';\n\nexport function findParentElement(element: MindElement): MindElement | undefined {\n const component = PlaitElement.getComponent(element) as MindNodeComponent;\n if (component && component.parent) {\n return component.parent.origin;\n }\n return undefined;\n}\n\nexport function findUpElement(element: MindElement): { root: MindElement; branch?: MindElement } {\n let branch;\n let root = element;\n let parent = findParentElement(element);\n while (parent) {\n branch = root;\n root = parent;\n parent = findParentElement(parent);\n }\n return { root, branch };\n}\n\nexport const getChildrenCount = (element: MindElement) => {\n const count: number = element.children.reduce((p: number, c: MindElement) => {\n return p + getChildrenCount(c);\n }, 0);\n return count + element.children.length;\n};\n\nexport const isChildElement = (origin: MindElement, child: MindElement) => {\n let parent = findParentElement(child);\n while (parent) {\n if (parent === origin) {\n return true;\n }\n parent = findParentElement(parent);\n }\n return false;\n};\n\nexport const filterChildElement = (elements: MindElement[]) => {\n let result: MindElement[] = [];\n elements.forEach(element => {\n const isChild = elements.some(node => {\n return isChildElement(node, element);\n });\n\n if (!isChild) {\n result.push(element);\n }\n });\n return result;\n};\n\nexport const isChildRight = (node: MindNode, child: MindNode) => {\n return node.x < child.x;\n};\n\nexport const isChildUp = (node: MindNode, child: MindNode) => {\n return node.y > child.y;\n};\n\nexport const copyNewNode = (node: MindElement) => {\n const newNode: MindElement = { ...node };\n newNode.id = idCreator();\n newNode.children = [];\n\n for (const childNode of node.children) {\n newNode.children.push(copyNewNode(childNode));\n }\n return newNode;\n};\n\nexport const transformRootToNode = (board: PlaitBoard, node: MindElement) => {\n const newNode: MindElement = { ...node };\n delete newNode.isRoot;\n delete newNode.rightNodeCount;\n delete newNode.type;\n\n const text = Node.string(node.data.topic.children[0]) || ' ';\n const { width, height } = getSizeByText(text, PlaitBoard.getViewportContainer(board), TOPIC_DEFAULT_MAX_WORD_COUNT);\n\n newNode.width = Math.max(width, NODE_MIN_WIDTH);\n newNode.height = height;\n\n if (newNode.layout === MindLayoutType.standard) {\n delete newNode.layout;\n }\n\n return newNode;\n};\n\nexport const transformAbstractToNode = (node: MindElement) => {\n const newNode: MindElement = { ...node };\n delete newNode.start;\n delete newNode.end;\n\n return newNode;\n};\n\nexport const transformNodeToRoot = (board: PlaitBoard, node: MindElement): MindElement => {\n const newElement = { ...node };\n let text = Node.string(newElement.data.topic);\n\n if (!text) {\n text = '思维导图';\n newElement.data.topic = { children: [{ text }] };\n }\n\n delete newElement?.strokeColor;\n delete newElement?.fill;\n delete newElement?.shape;\n delete newElement?.strokeWidth;\n\n const { width, height } = getSizeByText(\n text,\n PlaitBoard.getViewportContainer(board),\n TOPIC_DEFAULT_MAX_WORD_COUNT,\n ROOT_TOPIC_FONT_SIZE\n );\n newElement.width = Math.max(width, NODE_MIN_WIDTH);\n newElement.height = height;\n\n return {\n ...newElement,\n layout: newElement.layout ?? MindLayoutType.right,\n isCollapsed: false,\n isRoot: true,\n type: 'mindmap'\n };\n};\n\nexport const extractNodesText = (node: MindElement) => {\n let str = '';\n if (node) {\n str += Node.string(node.data.topic.children[0]) + ' ';\n for (const childNode of node.children) {\n str += extractNodesText(childNode);\n }\n }\n return str;\n};\n\nexport const changeRightNodeCount = (board: PlaitBoard, parentPath: Path, changeNumber: number) => {\n const _rightNodeCount = board.children[parentPath[0]].rightNodeCount;\n Transforms.setNode(\n board,\n {\n rightNodeCount:\n changeNumber >= 0\n ? _rightNodeCount! + changeNumber\n : _rightNodeCount! + changeNumber < 0\n ? 0\n : _rightNodeCount! + changeNumber\n },\n parentPath\n );\n};\n\nexport const shouldChangeRightNodeCount = (selectedElement: MindElement) => {\n const parentElement = findParentElement(selectedElement);\n if (parentElement) {\n const nodeIndex: number = parentElement.children.findIndex(item => item.id === selectedElement.id);\n if (\n parentElement.isRoot &&\n getRootLayout(parentElement) === MindLayoutType.standard &&\n parentElement.rightNodeCount &&\n nodeIndex <= parentElement.rightNodeCount - 1\n ) {\n return true;\n }\n }\n return false;\n};\n\nexport const createDefaultMindMapElement = (point: Point, rightNodeCount: number, layout: MindLayoutType) => {\n const root = createMindElement('思维导图', 72, ROOT_DEFAULT_HEIGHT, { shape: MindNodeShape.roundRectangle, layout });\n root.rightNodeCount = rightNodeCount;\n root.isRoot = true;\n root.type = 'mindmap';\n root.points = [point];\n const children = [1, 1, 1].map(() => {\n return createMindElement('新建节点', 56, TEXT_DEFAULT_HEIGHT, { shape: MindNodeShape.roundRectangle });\n });\n root.children = children;\n return root;\n};\n\nexport const createMindElement = (\n text: string,\n width: number,\n height: number,\n options: {\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n shape?: MindNodeShape;\n layout?: MindLayoutType;\n branchColor?: string;\n }\n) => {\n const newElement: MindElement = {\n id: idCreator(),\n data: {\n topic: { children: [{ text }] }\n },\n children: [],\n width,\n height,\n fill: options.fill,\n strokeColor: options.strokeColor,\n strokeWidth: options.strokeWidth,\n shape: options.shape\n };\n if (options.fill) {\n newElement.fill = options.fill;\n }\n if (options.strokeColor) {\n newElement.strokeColor = options.strokeColor;\n }\n if (!isNullOrUndefined(options.strokeWidth)) {\n newElement.strokeWidth = options.strokeWidth;\n }\n if (options.shape) {\n newElement.shape = options.shape;\n }\n if (options.layout) {\n newElement.layout = options.layout;\n }\n if (options.branchColor) {\n newElement.branchColor = options.branchColor;\n }\n return newElement;\n};\n\n// layoutLevel 用来表示插入兄弟节点还是子节点\nexport const insertMindElement = (board: PlaitBoard, inheritNode: MindElement, path: Path) => {\n let fill,\n strokeColor,\n strokeWidth,\n shape = MindNodeShape.roundRectangle;\n if (!inheritNode.isRoot) {\n fill = inheritNode.fill;\n strokeColor = inheritNode.strokeColor;\n strokeWidth = inheritNode.strokeWidth;\n }\n\n shape = inheritNode.shape as MindNodeShape;\n\n const newElement = createMindElement('', NODE_MIN_WIDTH, TEXT_DEFAULT_HEIGHT, { fill, strokeColor, strokeWidth, shape });\n\n Transforms.insertNode(board, newElement, path);\n clearSelectedElement(board);\n addSelectedElement(board, newElement);\n setTimeout(() => {\n enterNodeEditing(newElement);\n });\n};\n\nexport const findLastChild = (child: MindNode) => {\n let result = child;\n while (result.children.length !== 0) {\n result = result.children[result.children.length - 1];\n }\n return result;\n};\n\nexport const deleteSelectedELements = (board: PlaitBoard, selectedElements: MindElement[]) => {\n //翻转,从下到上修改,防止找不到 path\n const deletableElements = filterChildElement(selectedElements).reverse();\n const relativeAbstracts: MindElement[] = [];\n const accumulativeProperties = new WeakMap<MindElement, { start: number; end: number }>();\n\n deletableElements.forEach(node => {\n if (!PlaitMind.isMind(node)) {\n const behindAbstracts = getBehindAbstracts(node).filter(abstract => !deletableElements.includes(abstract));\n if (behindAbstracts.length) {\n behindAbstracts.forEach(abstract => {\n let newProperties = accumulativeProperties.get(abstract);\n if (!newProperties) {\n newProperties = { start: abstract.start!, end: abstract.end! };\n accumulativeProperties.set(abstract, newProperties);\n relativeAbstracts.push(abstract);\n }\n newProperties.start = newProperties.start - 1;\n newProperties.end = newProperties.end - 1;\n });\n }\n\n const correspondingAbstract = getCorrespondingAbstract(node);\n if (correspondingAbstract && !deletableElements.includes(correspondingAbstract)) {\n let newProperties = accumulativeProperties.get(correspondingAbstract);\n if (!newProperties) {\n newProperties = { start: correspondingAbstract.start!, end: correspondingAbstract.end! };\n accumulativeProperties.set(correspondingAbstract, newProperties);\n relativeAbstracts.push(correspondingAbstract);\n }\n newProperties.end = newProperties.end - 1;\n }\n }\n });\n\n const abstractHandles = relativeAbstracts.map(value => {\n const newProperties = accumulativeProperties.get(value);\n if (newProperties) {\n const path = PlaitBoard.findPath(board, value as MindElement);\n return () => {\n if (newProperties.start > newProperties.end) {\n Transforms.removeNode(board, path);\n } else {\n Transforms.setNode(board, newProperties, path);\n }\n };\n }\n return () => {};\n });\n\n const deletableHandles = deletableElements.map(node => {\n const path = PlaitBoard.findPath(board, node);\n return () => {\n if (shouldChangeRightNodeCount(node)) {\n changeRightNodeCount(board, path.slice(0, path.length - 1), -1);\n }\n Transforms.removeNode(board, path);\n };\n });\n\n abstractHandles.forEach(action => action());\n deletableHandles.forEach(action => action());\n};\n\nexport const divideElementByParent = (elements: MindElement[]) => {\n const abstractIncludedGroups = [];\n const parentElements: MindElement[] = [];\n\n for (let i = 0; i < elements.length; i++) {\n const parent = MindElement.getParent(elements[i]);\n const parentIndex = parentElements.indexOf(parent);\n if (parentIndex === -1) {\n parentElements.push(parent);\n abstractIncludedGroups.push([elements[i]]);\n } else {\n abstractIncludedGroups[parentIndex].push(elements[i]);\n }\n }\n return { parentElements, abstractIncludedGroups };\n};\n","import { MindNodeShape } from '../constants';\nimport { MindElement } from '../interfaces';\nimport { findParentElement } from './mind';\n\nexport const getNodeShapeByElement = (element: MindElement): MindNodeShape => {\n let nodeShape = element.shape;\n if (nodeShape) {\n return nodeShape;\n }\n let parent = findParentElement(element);\n\n while (parent) {\n if (parent.shape) {\n return parent.shape;\n }\n parent = findParentElement(parent);\n }\n return MindNodeShape.roundRectangle;\n};\n","/**\n * Processing of branch color, width, style, etc. of the mind node\n */\nimport { PlaitBoard, PlaitNode } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { COLORS } from '../../constants/node';\n\nexport const getBranchColorByMindElement = (board: PlaitBoard, element: MindElement) => {\n const ancestors = MindElement.getAncestors(board, element) as MindElement[];\n ancestors.unshift(element);\n const ancestor = ancestors.find(value => value.branchColor);\n if (ancestor && ancestor.branchColor) {\n return ancestor.branchColor;\n }\n\n const root = ancestors[ancestors.length - 1];\n const branch = ancestors[ancestors.length - 2];\n if (branch) {\n const index = root.children.indexOf(branch);\n const length = COLORS.length;\n const remainder = index % length;\n return COLORS[remainder];\n } else {\n throw new Error('root element should not have branch color');\n }\n};\n\nexport const getNextBranchColor = (root: MindElement) => {\n const index = root.children.length;\n const length = COLORS.length;\n const remainder = index % length;\n return COLORS[remainder];\n};\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { COLORS, ROOT_NODE_STROKE } from '../../constants/node';\n\nexport const getStrokeByMindElement = (board: PlaitBoard, element: MindElement) => {\n const ancestors = MindElement.getAncestors(board, element) as MindElement[];\n ancestors.unshift(element);\n const ancestor = ancestors.find(value => value.strokeColor);\n if (ancestor && ancestor.strokeColor) {\n return ancestor.strokeColor;\n }\n\n const root = ancestors[ancestors.length - 1];\n const branch = ancestors[ancestors.length - 2];\n if (branch) {\n const index = root.children.indexOf(branch);\n const length = COLORS.length;\n const remainder = index % length;\n return COLORS[remainder];\n } else {\n return ROOT_NODE_STROKE;\n }\n};\n","import { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n","import { pointsOnBezierCurves } from 'points-on-curve';\nimport { MindNodeShape, STROKE_WIDTH } from '../constants';\nimport { MindNode } from '../interfaces/node';\nimport { PlaitBoard, Point } from '@plait/core';\nimport { getNodeShapeByElement, isChildRight } from '../utils';\nimport { MindLayoutType, isTopLayout, isIndentedLayout, isStandardLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { getBranchColorByMindElement } from '../utils/node-style/branch';\n\nexport function drawLink(\n board: PlaitBoard,\n node: MindNode,\n child: MindNode,\n defaultStroke: string | null = null,\n isHorizontal = true,\n needDrawUnderline = true\n) {\n let beginX,\n beginY,\n endX,\n endY,\n beginNode = node,\n endNode = child;\n const layout = MindQueries.getCorrectLayoutByElement(node.origin) as MindLayoutType;\n if (isHorizontal) {\n if (!isChildRight(node, child)) {\n beginNode = child;\n endNode = node;\n }\n beginX = beginNode.x + beginNode.width - beginNode.hGap;\n beginY = beginNode.y + beginNode.height / 2;\n endX = endNode.x + endNode.hGap;\n endY = endNode.y + endNode.height / 2;\n\n if (\n node.parent &&\n isIndentedLayout(MindQueries.getLayoutByElement(node.parent?.origin)) &&\n (getNodeShapeByElement(node.origin) as MindNodeShape) === MindNodeShape.underline\n ) {\n if (isChildRight(node, child)) {\n beginY = node.y + node.height - node.vGap;\n } else {\n endY = node.y + node.height - node.vGap;\n }\n }\n } else {\n if (node.y > child.y) {\n beginNode = child;\n endNode = node;\n }\n beginX = beginNode.x + beginNode.width / 2;\n beginY = beginNode.y + beginNode.height - beginNode.vGap;\n endX = endNode.x + endNode.width / 2;\n endY = endNode.y + endNode.vGap;\n }\n\n const stroke = defaultStroke || getBranchColorByMindElement(board, child.origin);\n const strokeWidth = child.origin.branchWidth ? child.origin.branchWidth : STROKE_WIDTH;\n if (endNode.origin.isRoot) {\n if (layout === MindLayoutType.left || isStandardLayout(layout)) {\n endX -= strokeWidth;\n }\n if (layout === MindLayoutType.upward) {\n endY -= strokeWidth;\n }\n }\n if (beginNode.origin.isRoot) {\n if (layout === MindLayoutType.right || isStandardLayout(layout)) {\n beginX += strokeWidth;\n }\n if (layout === MindLayoutType.downward) {\n beginY += strokeWidth;\n }\n }\n if (isHorizontal) {\n let curve: Point[] = [\n [beginX, beginY],\n [beginX + (beginNode.hGap + endNode.hGap) / 3, beginY],\n [endX - (beginNode.hGap + endNode.hGap) / 2, endY],\n [endX, endY]\n ];\n const shape = getNodeShapeByElement(child.origin) as MindNodeShape;\n\n if (!node.origin.isRoot) {\n if (node.x > child.x) {\n curve = [\n [beginX, beginY],\n [beginX + (beginNode.hGap + endNode.hGap) / 3, beginY],\n [endX - (beginNode.hGap + endNode.hGap) / 2, endY],\n [endX - 12, endY]\n ];\n const line = [\n [endX - 12, endY],\n [endX - 12, endY],\n [endX, endY]\n ] as Point[];\n curve = [...curve, ...line];\n } else {\n curve = [\n [beginX + 12, beginY],\n [beginX + (beginNode.hGap + endNode.hGap) / 2, beginY],\n [endX - (beginNode.hGap + endNode.hGap) / 3, endY],\n [endX, endY]\n ];\n const line = [\n [beginX, beginY],\n [beginX + 12, beginY],\n [beginX + 12, beginY]\n ] as Point[];\n curve = [...line, ...curve];\n }\n }\n\n if (needDrawUnderline && shape === MindNodeShape.underline) {\n if (child.left) {\n const underline = [\n [beginX - (beginNode.width - beginNode.hGap * 2), beginY],\n [beginX - (beginNode.width - beginNode.hGap * 2), beginY],\n [beginX - (beginNode.width - beginNode.hGap * 2), beginY]\n ] as Point[];\n curve = [...underline, ...curve];\n } else {\n const underline = [\n [endX + (endNode.width - endNode.hGap * 2), endY],\n [endX + (endNode.width - endNode.hGap * 2), endY],\n [endX + (endNode.width - endNode.hGap * 2), endY]\n ] as Point[];\n curve = [...curve, ...underline];\n }\n }\n\n const points = pointsOnBezierCurves(curve);\n return PlaitBoard.getRoughSVG(board).curve(points as any, { stroke, strokeWidth });\n } else {\n let curve: Point[] = [\n [beginX, beginY],\n [beginX, beginY + (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY - (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY]\n ];\n\n if (!node.origin.isRoot) {\n if (isTopLayout(layout)) {\n curve = [\n [beginX, beginY],\n [beginX, beginY + (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY - (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY - 12]\n ];\n\n const line = [\n [endX, endY - 12],\n [endX, endY - 12],\n [endX, endY]\n ] as Point[];\n curve = [...curve, ...line];\n } else {\n curve = [\n [beginX, beginY + 12],\n [beginX, beginY + (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY - (beginNode.vGap + endNode.vGap) / 2],\n [endX, endY]\n ];\n const line = [\n [beginX, beginY],\n [beginX, beginY + 12],\n [beginX, beginY + 12]\n ] as Point[];\n\n curve = [...line, ...curve];\n }\n }\n const points = pointsOnBezierCurves(curve);\n return PlaitBoard.getRoughSVG(board).curve(points as any, { stroke, strokeWidth });\n }\n}\n","import { BASE, PRIMARY_COLOR, STROKE_WIDTH } from '../constants';\nimport { drawLink } from '../draw/link';\nimport { DetectResult, MindElement, MindNode } from '../interfaces';\nimport { MindNodeComponent } from '../node.component';\nimport { getRectangleByNode } from './graph';\nimport { PlaitBoard, PlaitElement, Point, drawRoundRectangle } from '@plait/core';\nimport { MindQueries } from '../queries';\nimport {\n getNonAbstractChildren,\n isBottomLayout,\n isHorizontalLayout,\n isHorizontalLogicLayout,\n isIndentedLayout,\n isRightLayout,\n isVerticalLogicLayout,\n MindLayoutType\n} from '@plait/layouts';\nimport { drawIndentedLink } from '../draw/indented-link';\nimport { isLeftLayout, isTopLayout } from '@plait/layouts';\nimport { isStandardLayout } from '@plait/layouts';\nimport { isMixedLayout } from './layout';\n\nexport const drawPlaceholderDropNodeG = (\n board: PlaitBoard,\n dropTarget: { target: MindElement; detectResult: DetectResult },\n fakeDropNodeG: SVGGElement | undefined\n) => {\n const targetComponent = PlaitElement.getComponent(dropTarget.target) as MindNodeComponent;\n const targetRect = getRectangleByNode(targetComponent.node);\n if (dropTarget.detectResult && ['right', 'left'].includes(dropTarget.detectResult)) {\n drawStraightDropNodeG(board, targetRect, dropTarget.detectResult, targetComponent, fakeDropNodeG);\n }\n\n if (targetComponent.parent && dropTarget.detectResult && ['top', 'bottom'].includes(dropTarget.detectResult)) {\n const parentComponent = PlaitElement.getComponent(targetComponent.parent.origin) as MindNodeComponent;\n const targetIndex = parentComponent.node.origin.children.indexOf(targetComponent.node.origin);\n drawCurvePlaceholderDropNodeG(\n board,\n targetRect,\n dropTarget.detectResult,\n targetIndex,\n targetComponent,\n parentComponent,\n fakeDropNodeG\n );\n }\n};\n\nexport const drawCurvePlaceholderDropNodeG = (\n board: PlaitBoard,\n targetRect: {\n x: number;\n y: number;\n width: number;\n height: number;\n },\n detectResult: DetectResult,\n targetIndex: number,\n targetComponent: MindNodeComponent,\n parentComponent: MindNodeComponent,\n fakeDropNodeG: SVGGElement | undefined\n) => {\n const parentNodeLayout = MindQueries.getCorrectLayoutByElement(parentComponent.node.origin);\n const layout = MindQueries.getCorrectLayoutByElement(targetComponent.node.parent.origin);\n const strokeWidth = targetComponent.node.origin.branchWidth ? targetComponent.node.origin.branchWidth : STROKE_WIDTH;\n let fakeX = targetComponent.node.x,\n fakeY = targetRect.y - 30,\n fakeRectangleStartX = targetRect.x,\n fakeRectangleEndX = targetRect.x + 30,\n fakeRectangleStartY = fakeY,\n fakeRectangleEndY = fakeRectangleStartY + 12,\n width = 30;\n\n if (isLeftLayout(layout)) {\n fakeX = targetComponent.node.x + targetComponent.node.width - 30;\n fakeRectangleStartX = targetRect.x + targetRect.width - 30;\n fakeRectangleEndX = targetRect.x + targetRect.width;\n }\n if (isHorizontalLogicLayout(parentNodeLayout)) {\n fakeY = getHorizontalFakeY(detectResult as 'top' | 'bottom', targetIndex, parentComponent.node, targetRect, layout, fakeY);\n if (isStandardLayout(parentNodeLayout)) {\n const rightNodeCount = parentComponent.node.origin.rightNodeCount || 0;\n const idx = parentComponent.node.children.findIndex(x => x === targetComponent.node);\n const isLeft = idx >= rightNodeCount;\n // 标准布局的左,需要调整 x\n if (isLeft) {\n fakeX = targetComponent.node.x + targetComponent.node.width - 30;\n fakeRectangleStartX = targetRect.x + targetRect.width - 30;\n fakeRectangleEndX = targetRect.x + targetRect.width;\n }\n const isLeftFirst = idx === rightNodeCount;\n const isRightLast = idx === rightNodeCount - 1;\n // 拖拽至左第一个节点的情况\n if (detectResult === 'top' && isLeftFirst) {\n fakeY = targetRect.y - targetRect.height;\n }\n if (detectResult === 'bottom' && isRightLast) {\n fakeY = targetRect.y + targetRect.height + 30;\n }\n }\n fakeRectangleStartY = fakeY;\n fakeRectangleEndY = fakeRectangleStartY + 12;\n }\n\n if (isVerticalLogicLayout(layout)) {\n parentComponent = targetComponent;\n targetComponent = PlaitElement.getComponent(targetComponent.parent.origin) as MindNodeComponent;\n fakeX = parentComponent.node.x;\n width = parentComponent.node.width;\n const vGap = BASE * 6 + strokeWidth;\n if (isTopLayout(layout) && detectResult === 'top') {\n fakeY = targetRect.y - vGap;\n fakeRectangleStartY = fakeY - vGap + strokeWidth;\n }\n if (isBottomLayout(layout) && detectResult === 'bottom') {\n fakeY = targetRect.y + targetRect.height + vGap;\n fakeRectangleStartY = fakeY + vGap - strokeWidth;\n }\n fakeRectangleStartX = fakeX + Math.ceil(parentComponent.node.width / 2) - parentComponent.node.hGap - Math.ceil(strokeWidth / 2);\n fakeRectangleEndX = fakeRectangleStartX + 30;\n fakeRectangleEndY = fakeRectangleStartY + 12;\n }\n if (isIndentedLayout(layout)) {\n // 偏移一个 Gap\n if (isLeftLayout(layout)) {\n fakeX -= BASE * 4;\n }\n if (isRightLayout(layout)) {\n fakeX += BASE * 4;\n }\n if (isTopLayout(layout)) {\n if (detectResult === 'top') {\n const isLastNode = targetIndex === parentComponent.node.origin.children.length - 1;\n if (isLastNode) {\n fakeY = targetRect.y - targetRect.height - BASE;\n } else {\n const nextComponent = PlaitElement.getComponent(\n parentComponent.node.origin.children[targetIndex + 1]\n ) as MindNodeComponent;\n const nextRect = getRectangleByNode(nextComponent.node);\n fakeY = targetRect.y - Math.abs((nextRect.y + nextRect.height - targetRect.y) / 2);\n }\n }\n if (detectResult === 'bottom') {\n const isFirstNode = targetIndex === 0;\n if (isFirstNode) {\n const parentRect = getRectangleByNode(parentComponent.node);\n fakeY = parentRect.y - parentRect.height / 2 - BASE;\n } else {\n const previousComponent = PlaitElement.getComponent(\n parentComponent.node.origin.children[targetIndex + 1]\n ) as MindNodeComponent;\n const previousRect = getRectangleByNode(previousComponent.node);\n fakeY = previousRect.y - Math.abs((targetRect.y + targetRect.height - previousRect.y) / 2);\n }\n }\n }\n fakeRectangleStartX = fakeX;\n fakeRectangleEndX = fakeRectangleStartX + 30;\n fakeRectangleStartY = fakeY;\n fakeRectangleEndY = fakeRectangleStartY + 12;\n }\n\n // 构造一条曲线\n const fakeNode: MindNode = { ...targetComponent.node, x: fakeX, y: fakeY, width, height: 12 };\n const linkSVGG = isIndentedLayout(layout)\n ? drawIndentedLink(board, parentComponent.node, fakeNode, PRIMARY_COLOR, false)\n : drawLink(board, parentComponent.node, fakeNode, PRIMARY_COLOR, isHorizontalLayout(layout), false);\n // 构造一个矩形框坐标\n const fakeRectangleG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n fakeRectangleStartX,\n fakeRectangleStartY,\n fakeRectangleEndX,\n fakeRectangleEndY,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 2,\n fill: PRIMARY_COLOR,\n fillStyle: 'solid'\n }\n );\n fakeDropNodeG?.appendChild(linkSVGG);\n fakeDropNodeG?.appendChild(fakeRectangleG);\n};\nexport const drawStraightDropNodeG = (\n board: PlaitBoard,\n targetRect: {\n x: number;\n y: number;\n width: number;\n height: number;\n },\n detectResult: DetectResult,\n targetComponent: MindNodeComponent,\n fakeDropNodeG: SVGGElement | undefined\n) => {\n const { x, y, width, height } = targetRect;\n const lineLength = 40;\n let startLinePoint = x + width;\n let endLinePoint = x + width + lineLength;\n let startRectanglePointX = x + width + lineLength;\n let endRectanglePointX = x + lineLength + width + 30;\n let startRectanglePointY = y + height / 2 - 6;\n let endRectanglePointY = y + height / 2 - 6 + 12;\n\n if (detectResult === 'left') {\n startLinePoint = x - lineLength;\n endLinePoint = x;\n startRectanglePointX = x - lineLength - 30;\n endRectanglePointX = x - lineLength;\n }\n let fakeY = targetComponent.node.y;\n let fakeX = targetRect.x;\n const strokeWidth = targetComponent.node.origin.branchWidth ? targetComponent.node.origin.branchWidth : STROKE_WIDTH;\n const pointOptions = {\n fakeX,\n fakeY,\n x,\n y,\n width,\n height,\n strokeWidth\n };\n const parentLayout = MindQueries.getCorrectLayoutByElement(\n targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin\n );\n const layout = MindQueries.getCorrectLayoutByElement(targetComponent.node.origin);\n if (!isMixedLayout(parentLayout, layout)) {\n // 构造一条直线\n let linePoints = [\n [startLinePoint, y + height / 2],\n [endLinePoint, y + height / 2]\n ] as Point[];\n if (isIndentedLayout(parentLayout)) {\n const fakePoint = getIndentedFakePoint(parentLayout, pointOptions);\n drawIndentNodeG(board, fakeDropNodeG as SVGGElement, fakePoint, targetComponent.node);\n return;\n } else if (isVerticalLogicLayout(parentLayout)) {\n if (!targetComponent.node.origin.isRoot) {\n /**\n * 计算逻辑:\n * 1. 移动到左侧:当前节点 startX - 偏移值,偏移值计算如下:\n * a. 第一个节点: 固定值(来源于 getMainAxle,第二级节点:BASE * 8,其他 BASE * 3 + strokeWidth / 2);\n * b. 第二个节点到最后一个节点之间:上一个节点到当前节点间距的一半((当前节点 startX - 上一个节点的 endX) / 2),endX = 当前节点的 startX + width;\n * 2. 移动到右侧:当前节点 x + width + 偏移值,偏移值计算如下:\n * a. 第二个节点到最后一个节点之间的右侧:当前节点到下一个节点间距的一半((下一个节点 startX - 当前节点的 endX) / 2),endX = 当前节点的 startX + width;\n * b. 最后一个节点的右侧:固定值(来源于 getMainAxle,第二级节点:BASE * 8,其他 BASE * 3 + strokeWidth / 2);\n */\n fakeY = targetComponent.node.y;\n const parentComponent = PlaitElement.getComponent(targetComponent.parent.origin) as MindNodeComponent;\n const targetIndex = parentComponent.node.origin.children.indexOf(targetComponent.node.origin);\n\n if (detectResult === 'left') {\n let offsetX = 0;\n const isFirstNode = targetIndex === 0;\n if (isFirstNode) {\n offsetX = parentComponent.node.origin.isRoot ? BASE * 8 : BASE * 3 + strokeWidth / 2;\n } else {\n const previousComponent = PlaitElement.getComponent(\n parentComponent.node.origin.children[targetIndex - 1]\n ) as MindNodeComponent;\n const previousRect = getRectangleByNode(previousComponent.node);\n const space = targetRect.x - (previousRect.x + previousRect.width);\n offsetX = space / 2;\n }\n fakeX = targetRect.x - offsetX - width / 2 - Math.ceil(strokeWidth / 2);\n }\n if (detectResult === 'right') {\n let offsetX = 0;\n const isLastNode = targetIndex === parentComponent.node.origin.children.length - 1;\n if (isLastNode) {\n offsetX = parentComponent.node.origin.isRoot ? BASE * 8 : BASE * 3 + strokeWidth / 2;\n } else {\n const nextComponent = PlaitElement.getComponent(\n parentComponent.node.origin.children[targetIndex + 1]\n ) as MindNodeComponent;\n const nextRect = getRectangleByNode(nextComponent.node);\n const space = nextRect.x - (targetRect.x + targetRect.width);\n offsetX = space / 2;\n }\n fakeX = targetRect.x + width + offsetX - width / 2 - Math.ceil(strokeWidth / 2);\n }\n startRectanglePointX = fakeX;\n if (isTopLayout(parentLayout)) {\n // 因为矩形是从左上角为起点向下画的,所以需要向上偏移一个矩形的高度(-12)\n startRectanglePointY = fakeY + height + targetComponent.node.vGap - 12;\n }\n if (isBottomLayout(parentLayout)) {\n startRectanglePointY = fakeY + targetComponent.node.vGap;\n }\n endRectanglePointX = startRectanglePointX + 30;\n endRectanglePointY = startRectanglePointY + 12;\n const fakeNode: MindNode = { ...targetComponent.node, x: fakeX, y: fakeY, width: 30 };\n const linkSVGG = drawLink(board, parentComponent.node, fakeNode, PRIMARY_COLOR, false, false);\n fakeDropNodeG?.appendChild(linkSVGG);\n }\n } else {\n let linkSVGG = PlaitBoard.getRoughSVG(board).linearPath(linePoints, { stroke: PRIMARY_COLOR, strokeWidth });\n fakeDropNodeG?.appendChild(linkSVGG);\n }\n // 构造一个矩形框坐标\n let fakeRectangleG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n startRectanglePointX,\n startRectanglePointY,\n endRectanglePointX,\n endRectanglePointY,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 2,\n fill: PRIMARY_COLOR,\n fillStyle: 'solid'\n }\n );\n\n fakeDropNodeG?.appendChild(fakeRectangleG);\n } else {\n // 混合布局画线逻辑\n if (isHorizontalLogicLayout(parentLayout)) {\n if (isIndentedLayout(layout)) {\n const fakePoint = getIndentedFakePoint(layout, pointOptions);\n drawIndentNodeG(board, fakeDropNodeG as SVGGElement, fakePoint, targetComponent.node);\n return;\n }\n }\n }\n};\n\nexport const getHorizontalFakeY = (\n detectResult: 'top' | 'bottom',\n targetIndex: number,\n parentNode: MindNode,\n targetRect: {\n x: number;\n y: number;\n width: number;\n height: number;\n },\n layout: MindLayoutType,\n fakeY: number\n) => {\n const childrenLength = getNonAbstractChildren(parentNode).length;\n\n if (detectResult === 'top') {\n if (targetIndex === 0 && isTopLayout(layout)) {\n fakeY = targetRect.y + targetRect.height;\n }\n if (targetIndex > 0) {\n const previousComponent = PlaitElement.getComponent(parentNode.origin.children[targetIndex - 1]) as MindNodeComponent;\n const previousRect = getRectangleByNode(previousComponent.node);\n const topY = previousRect.y + previousRect.height;\n fakeY = topY + (targetRect.y - topY) / 5;\n }\n }\n if (detectResult === 'bottom') {\n fakeY = targetRect.y + targetRect.height + 30;\n if (targetIndex < childrenLength - 1) {\n const nextComponent = PlaitElement.getComponent(parentNode.origin.children[targetIndex + 1]) as MindNodeComponent;\n const nextRect = getRectangleByNode(nextComponent.node);\n const topY = targetRect.y + targetRect.height;\n fakeY = topY + (nextRect.y - topY) / 5;\n }\n if (targetIndex === childrenLength - 1) {\n fakeY = targetRect.y + targetRect.height + 30;\n }\n }\n return fakeY;\n};\n\nexport const getIndentedFakePoint = (\n layout: MindLayoutType,\n pointOptions: {\n fakeX: number;\n fakeY: number;\n x: number;\n y: number;\n width: number;\n height: number;\n strokeWidth: number;\n }\n) => {\n let { fakeX, fakeY, x, y, width, height, strokeWidth } = pointOptions;\n const hGap = BASE * 4;\n const vGap = BASE * 6;\n const offsetX = hGap + width / 2 + strokeWidth;\n const offsetY = vGap + height / 2 + strokeWidth;\n if (isLeftLayout(layout)) {\n fakeX = x - offsetX;\n }\n if (isRightLayout(layout)) {\n fakeX = x + offsetX;\n }\n if (isTopLayout(layout)) {\n fakeY = y - offsetY;\n }\n if (isBottomLayout(layout)) {\n fakeY = y + height + offsetY;\n }\n return { fakeX, fakeY };\n};\n\nexport const drawIndentNodeG = (\n board: PlaitBoard,\n fakeDropNodeG: SVGGElement,\n fakePoint: { fakeX: number; fakeY: number },\n node: MindNode\n) => {\n const { fakeX, fakeY } = fakePoint;\n const fakeNode: MindNode = { ...node, x: fakeX, y: fakeY, width: 30, height: 12 };\n const linkSVGG = drawIndentedLink(board, node, fakeNode, PRIMARY_COLOR, false);\n\n const startRectanglePointX = fakeX,\n startRectanglePointY = fakeY,\n endRectanglePointX = fakeX + 30,\n endRectanglePointY = fakeY + 12;\n const fakeRectangleG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n startRectanglePointX,\n startRectanglePointY,\n endRectanglePointX,\n endRectanglePointY,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 2,\n fill: PRIMARY_COLOR,\n fillStyle: 'solid'\n }\n );\n fakeDropNodeG?.appendChild(linkSVGG);\n fakeDropNodeG?.appendChild(fakeRectangleG);\n};\n","import { Point } from '@plait/core';\nimport { DetectResult, MindNode } from '../interfaces';\nimport { getRectangleByNode } from './graph';\n\n/**\n *\n * @param targetNode\n * @param centerPoint\n * @returns DetectResult[] | null\n */\n\nexport const directionDetector = (targetNode: MindNode, centerPoint: Point): DetectResult[] | null => {\n const { x, y, width, height } = getRectangleByNode(targetNode);\n const yCenter = y + height / 2;\n const xCenter = x + width / 2;\n\n const top = targetNode.y;\n const bottom = targetNode.y + targetNode.height;\n const left = targetNode.x;\n const right = targetNode.x + targetNode.width;\n const direction: DetectResult[] = [];\n\n // x 轴\n if (centerPoint[1] > y && centerPoint[1] < y + height) {\n if (centerPoint[0] > left && centerPoint[0] < xCenter) {\n direction.push('left');\n }\n if (centerPoint[0] > xCenter && centerPoint[0] < right) {\n direction.push('right');\n }\n // 重合区域,返回两个方向\n if ((centerPoint[0] > x && centerPoint[0] < xCenter) || (centerPoint[0] > xCenter && centerPoint[0] < x + width)) {\n if (centerPoint[1] < yCenter) {\n direction.push('top');\n } else {\n direction.push('bottom');\n }\n }\n return direction.length ? direction : null;\n }\n\n // y 轴\n if (centerPoint[0] > x && centerPoint[0] < x + width) {\n if (centerPoint[1] > top && centerPoint[1] < yCenter) {\n direction.push('top');\n }\n if (centerPoint[1] > yCenter && centerPoint[1] < bottom) {\n direction.push('bottom');\n }\n if ((centerPoint[1] > y && centerPoint[1] < y + height) || (centerPoint[1] > yCenter && centerPoint[1] < y + height)) {\n if (centerPoint[0] < xCenter) {\n direction.push('left');\n } else {\n direction.push('right');\n }\n }\n return direction.length ? direction : null;\n }\n\n return null;\n};\n","import { DetectResult, MindElement, MindNode } from '../interfaces';\nimport { isBottomLayout, isRightLayout, isLeftLayout, MindLayoutType, isStandardLayout, isTopLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\n\nexport const directionCorrector = (node: MindNode, detectResults: DetectResult[]): DetectResult[] | null => {\n if (!node.origin.isRoot) {\n const parentlayout = MindQueries.getCorrectLayoutByElement(node?.parent.origin as MindElement);\n if (isStandardLayout(parentlayout)) {\n const idx = node.parent.children.findIndex(x => x === node);\n const isLeft = idx >= (node.parent.origin.rightNodeCount || 0);\n return getAllowedDirection(detectResults, [isLeft ? 'right' : 'left']);\n }\n\n if (isLeftLayout(parentlayout)) {\n return getAllowedDirection(detectResults, ['right']);\n }\n\n if (isRightLayout(parentlayout)) {\n return getAllowedDirection(detectResults, ['left']);\n }\n\n if (parentlayout === MindLayoutType.upward) {\n return getAllowedDirection(detectResults, ['bottom']);\n }\n\n if (parentlayout === MindLayoutType.downward) {\n return getAllowedDirection(detectResults, ['top']);\n }\n } else {\n const layout = MindQueries.getCorrectLayoutByElement(node?.origin as MindElement);\n if (isStandardLayout(layout)) {\n return getAllowedDirection(detectResults, ['top', 'bottom']);\n }\n\n if (isTopLayout(layout)) {\n return getAllowedDirection(detectResults, ['left', 'right', 'bottom']);\n }\n\n if (isBottomLayout(layout)) {\n return getAllowedDirection(detectResults, ['left', 'right', 'top']);\n }\n\n if (layout === MindLayoutType.left) {\n return getAllowedDirection(detectResults, ['right', 'top', 'bottom']);\n }\n\n if (layout === MindLayoutType.right) {\n return getAllowedDirection(detectResults, ['left', 'top', 'bottom']);\n }\n }\n\n return null;\n};\n\nexport const getAllowedDirection = (detectResults: DetectResult[], illegalDirections: DetectResult[]): DetectResult[] | null => {\n const directions = detectResults;\n illegalDirections.forEach(item => {\n const bottomDirectionIndex = directions.findIndex(direction => direction === item);\n if (bottomDirectionIndex !== -1) {\n directions.splice(bottomDirectionIndex, 1);\n }\n });\n return directions.length ? directions : null;\n};\n","import { isStandardLayout, isIndentedLayout, isVerticalLogicLayout, isTopLayout, MindLayoutType } from '@plait/layouts';\nimport { DetectResult, MindElement } from '../interfaces';\nimport { MindNodeComponent } from '../node.component';\nimport { MindQueries } from '../queries';\nimport { isMixedLayout } from './layout';\nimport { PlaitElement } from '@plait/core';\n\n/* 根据布局调整 target 以及 direction */\nexport const readjustmentDropTarget = (dropTarget: {\n target: MindElement;\n detectResult: DetectResult;\n}): { target: MindElement; detectResult: DetectResult } => {\n const { target, detectResult } = dropTarget;\n const newDropTarget = { target, detectResult };\n const targetComponent = PlaitElement.getComponent(target) as MindNodeComponent;\n if (targetComponent.node.children.length > 0 && dropTarget.detectResult) {\n const layout = MindQueries.getCorrectLayoutByElement(targetComponent.node.origin);\n const parentLayout = MindQueries.getCorrectLayoutByElement(\n targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin\n );\n if (['right', 'left'].includes(dropTarget.detectResult)) {\n if (!isMixedLayout(parentLayout, layout)) {\n if (targetComponent.node.origin.isRoot) {\n const layout = MindQueries.getCorrectLayoutByElement(targetComponent.node.origin);\n // 标准布局,根节点\n if (isStandardLayout(layout)) {\n const rightNodeCount = targetComponent.node.origin.rightNodeCount as number;\n if (detectResult === 'left') {\n // 作为左的第一个节点\n if (targetComponent.node.children.length === rightNodeCount) {\n return newDropTarget;\n }\n } else {\n // 作为右的第一个节点或最后一个节点\n if (rightNodeCount === 0) {\n newDropTarget.target = target;\n } else {\n newDropTarget.target = targetComponent.node.children[rightNodeCount - 1].origin;\n newDropTarget.detectResult = 'bottom';\n }\n return newDropTarget;\n }\n }\n }\n\n // 缩进布局探测到第一个子节点\n if (isIndentedLayout(parentLayout)) {\n newDropTarget.target = targetComponent.node.children[0].origin;\n newDropTarget.detectResult = isTopLayout(parentLayout) ? 'bottom' : 'top';\n return newDropTarget;\n }\n // 上下布局的根节点只可以探测到上或者下,子节点的左右探测不处理,跳过。\n if (isVerticalLogicLayout(parentLayout)) {\n return newDropTarget;\n }\n // 剩下是水平布局的默认情况:插入最后一个子节点的下方\n const lastChildNodeIndex = targetComponent.node.children.length - 1;\n newDropTarget.target = targetComponent.node.children[lastChildNodeIndex].origin;\n newDropTarget.detectResult = 'bottom';\n } else {\n // 处理左右布局下的混合布局\n if ([MindLayoutType.left, MindLayoutType.right].includes(parentLayout)) {\n const layout = MindQueries.getCorrectLayoutByElement(targetComponent.node.origin);\n if (isIndentedLayout(layout)) {\n newDropTarget.target = targetComponent.node.children[0].origin;\n newDropTarget.detectResult = isTopLayout(layout) ? 'bottom' : 'top';\n return newDropTarget;\n }\n }\n }\n }\n if (['top', 'bottom'].includes(dropTarget.detectResult)) {\n // 缩进布局移动至第一个节点\n if (targetComponent.node.origin.isRoot && isIndentedLayout(layout)) {\n newDropTarget.target = targetComponent.node.children[0].origin;\n newDropTarget.detectResult = isTopLayout(layout) ? 'bottom' : 'top';\n return newDropTarget;\n }\n // 上下布局,插到右边\n const parentLayout = MindQueries.getCorrectLayoutByElement(\n targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin\n );\n if (isVerticalLogicLayout(parentLayout)) {\n const lastChildNodeIndex = targetComponent.node.children.length - 1;\n newDropTarget.target = targetComponent.node.children[lastChildNodeIndex].origin;\n newDropTarget.detectResult = 'right';\n return newDropTarget;\n }\n }\n return newDropTarget;\n }\n return dropTarget;\n};\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, getRectangleByElements, getSelectedElements } from '@plait/core';\nimport { AbstractHandlePosition, MindElement } from '../../interfaces';\nimport { AbstractNode, LayoutNode, MindLayoutType, isHorizontalLayout } from '@plait/layouts';\nimport { ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants';\nimport { MindQueries } from '../../queries';\nimport { getCorrectStartEnd } from '@plait/layouts';\nimport { MindNodeComponent } from '../../node.component';\n\nexport const getRectangleByResizingLocation = (\n abstractRectangle: RectangleClient,\n location: number,\n activeHandlePosition: AbstractHandlePosition,\n isHorizontal: boolean\n) => {\n if (isHorizontal) {\n if (activeHandlePosition === AbstractHandlePosition.start) {\n return {\n ...abstractRectangle,\n y: location,\n height: abstractRectangle.height + abstractRectangle.y - location\n };\n } else {\n return {\n ...abstractRectangle,\n height: location - abstractRectangle.y\n };\n }\n } else {\n if (activeHandlePosition === AbstractHandlePosition.start) {\n return {\n ...abstractRectangle,\n x: location,\n width: abstractRectangle.width + abstractRectangle.x - location\n };\n } else {\n return {\n ...abstractRectangle,\n width: location - abstractRectangle.x\n };\n }\n }\n};\n\nexport const getLocationScope = (\n board: PlaitBoard,\n handlePosition: AbstractHandlePosition,\n parentChildren: MindElement[],\n element: MindElement,\n parent: LayoutNode,\n isHorizontal: boolean\n) => {\n const node = (MindElement.getNode(element) as unknown) as LayoutNode;\n const { start, end } = getCorrectStartEnd(node.origin as AbstractNode, parent);\n\n const startNode = parentChildren[start];\n const endNode = parentChildren[end];\n\n if (handlePosition === AbstractHandlePosition.start) {\n const abstractNode = parentChildren.filter(child => AbstractNode.isAbstract(child) && child.end < element.start!);\n let minNode;\n\n if (abstractNode.length) {\n const index = abstractNode\n .map(node => {\n const { end } = getCorrectStartEnd(node as AbstractNode, parent);\n return end;\n })\n .sort((a, b) => b - a)[0];\n minNode = parentChildren[index + 1];\n } else {\n minNode = parentChildren[0];\n }\n\n const minNodeRectangle = getRectangleByElements(board, [minNode], true);\n const endNodeRectangle = getRectangleByElements(board, [endNode], false);\n\n if (isHorizontal) {\n return {\n max: endNodeRectangle.y - ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: minNodeRectangle.y - ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n } else {\n return {\n max: endNodeRectangle.x - ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: minNodeRectangle.x - ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n }\n } else {\n const abstractNode = parentChildren.filter(child => AbstractNode.isAbstract(child) && child.start > element.end!);\n let maxNode;\n\n if (abstractNode.length) {\n const index = abstractNode\n .map(node => {\n const { start } = getCorrectStartEnd(node as AbstractNode, parent);\n return start;\n })\n .sort((a, b) => a - b)[0];\n maxNode = parentChildren[index - 1];\n } else {\n const children = parentChildren.filter(child => !AbstractNode.isAbstract(child));\n maxNode = parentChildren[children.length - 1];\n }\n\n const maxNodeRectangle = getRectangleByElements(board, [maxNode], true);\n const startNodeRectangle = getRectangleByElements(board, [startNode], false);\n\n if (isHorizontal) {\n return {\n max: maxNodeRectangle.y + maxNodeRectangle.height + ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: startNodeRectangle.y + startNodeRectangle.height + ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n } else {\n return {\n max: maxNodeRectangle.x + maxNodeRectangle.width + ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: startNodeRectangle.x + startNodeRectangle.width + ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n }\n }\n};\n\nexport const getHitAbstractHandle = (board: PlaitBoard, element: MindElement, point: Point) => {\n const nodeLayout = MindQueries.getCorrectLayoutByElement(element) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n\n const parentElement = MindElement.getParent(element);\n const includedElements = parentElement.children.slice(element.start!, element.end! + 1);\n let abstractRectangle = getRectangleByElements(board, includedElements, true);\n abstractRectangle = RectangleClient.getOutlineRectangle(abstractRectangle, -ABSTRACT_INCLUDED_OUTLINE_OFFSET);\n\n const startHandleRec = getAbstractHandleRectangle(abstractRectangle, isHorizontal, AbstractHandlePosition.start);\n const endHandleRec = getAbstractHandleRectangle(abstractRectangle, isHorizontal, AbstractHandlePosition.end);\n\n const pointRec = RectangleClient.toRectangleClient([point, point]);\n if (RectangleClient.isHit(pointRec, startHandleRec)) return AbstractHandlePosition.start;\n if (RectangleClient.isHit(pointRec, endHandleRec)) return AbstractHandlePosition.end;\n return undefined;\n};\n\nexport const getAbstractHandleRectangle = (rectangle: RectangleClient, isHorizontal: boolean, position: AbstractHandlePosition) => {\n let result;\n if (position === AbstractHandlePosition.start) {\n const location = isHorizontal ? rectangle.y : rectangle.x;\n\n result = getRectangleByResizingLocation(\n rectangle,\n location + ABSTRACT_HANDLE_MASK_WIDTH / 2,\n AbstractHandlePosition.end,\n isHorizontal\n );\n result = getRectangleByResizingLocation(result, location - ABSTRACT_HANDLE_MASK_WIDTH / 2, position, isHorizontal);\n } else {\n const location = isHorizontal ? rectangle.y + rectangle.height : rectangle.x + rectangle.width;\n\n result = getRectangleByResizingLocation(\n rectangle,\n location - ABSTRACT_HANDLE_MASK_WIDTH / 2,\n AbstractHandlePosition.start,\n isHorizontal\n );\n result = getRectangleByResizingLocation(result, location + ABSTRACT_HANDLE_MASK_WIDTH / 2, position, isHorizontal);\n }\n return result;\n};\n\nexport function findLocationLeftIndex(board: PlaitBoard, parentChildren: MindElement[], location: number, isHorizontal: boolean) {\n const children = parentChildren.filter(child => {\n return !AbstractNode.isAbstract(child);\n });\n const recArray = children.map(child => {\n return getRectangleByElements(board, [child], false);\n });\n\n const firstRec = getRectangleByElements(board, [children[0]], true);\n const fakeLeftRec = {\n x: firstRec.x - firstRec.width,\n y: firstRec.y - firstRec.height,\n width: firstRec.width,\n height: firstRec.height\n };\n const lastRec = getRectangleByElements(board, [children[children.length - 1]], true);\n const fakeRightRec = {\n x: lastRec.x + lastRec.width,\n y: lastRec.y + lastRec.height,\n width: lastRec.width,\n height: lastRec.height\n };\n\n recArray.push(fakeRightRec);\n recArray.unshift(fakeLeftRec);\n\n for (let i = 0; i < recArray.length - 1; i++) {\n const recXOrY = isHorizontal ? recArray[i].y : recArray[i].x;\n const recWidthOrHeight = isHorizontal ? recArray[i].height : recArray[i].width;\n\n if (\n location >= recXOrY + recWidthOrHeight / 2 &&\n location <= recArray[i + 1][isHorizontal ? 'y' : 'x'] + recArray[i + 1][isHorizontal ? 'height' : 'width'] / 2\n ) {\n return i - 1;\n }\n }\n return 0;\n}\n\nexport function handleTouchedAbstract(board: PlaitBoard, touchedAbstract: PlaitElement | undefined, endPoint: Point) {\n let touchedHandle;\n const abstract = getSelectedElements(board)\n .filter(element => AbstractNode.isAbstract(element))\n .find(element => {\n touchedHandle = getHitAbstractHandle(board, element as MindElement, endPoint);\n return touchedHandle;\n });\n\n if (touchedAbstract === abstract) {\n return touchedAbstract;\n }\n\n if (touchedAbstract) {\n const component = PlaitElement.getComponent(touchedAbstract!) as MindNodeComponent;\n component.updateAbstractIncludedOutline();\n touchedAbstract = undefined;\n }\n\n if (abstract) {\n touchedAbstract = abstract;\n const component = PlaitElement.getComponent(touchedAbstract!) as MindNodeComponent;\n component.updateAbstractIncludedOutline(touchedHandle);\n }\n\n return touchedAbstract;\n}\n","import { pointsOnBezierCurves } from 'points-on-curve';\nimport { MindNodeShape, STROKE_WIDTH } from '../constants';\nimport { MindNode } from '../interfaces/node';\nimport { PlaitBoard, Point } from '@plait/core';\nimport { getNodeShapeByElement, getRectangleByNode, isChildUp } from '../utils';\nimport { MindLayoutType } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { getBranchColorByMindElement } from '../utils/node-style/branch';\n\nexport function drawIndentedLink(\n board: PlaitBoard,\n node: MindNode,\n child: MindNode,\n defaultStroke: string | null = null,\n needDrawUnderline = true\n) {\n const isUnderlineShap = (getNodeShapeByElement(child.origin) as MindNodeShape) === MindNodeShape.underline;\n let beginX,\n beginY,\n endX,\n endY,\n beginNode = node,\n endNode = child;\n const beginRectangle = getRectangleByNode(beginNode);\n const endRectangle = getRectangleByNode(endNode);\n\n beginX = beginNode.x + beginNode.width / 2;\n beginY = isChildUp(node, child) ? beginRectangle.y : beginRectangle.y + beginRectangle.height;\n endX = node.left ? endNode.x + endNode.hGap + endRectangle.width : endNode.x + endNode.hGap;\n endY = isUnderlineShap ? endNode.y + endNode.height - endNode.vGap : endNode.y + endNode.height / 2;\n //根据位置,设置正负参数\n let plusMinus = isChildUp(node, child) ? (node.left ? [-1, -1] : [1, -1]) : node.left ? [-1, 1] : [1, 1];\n const layout = MindQueries.getCorrectLayoutByElement(node.origin);\n const strokeWidth = child.origin.branchWidth ? child.origin.branchWidth : STROKE_WIDTH;\n if (beginNode.origin.isRoot) {\n if (layout === MindLayoutType.leftBottomIndented || layout === MindLayoutType.rightBottomIndented) {\n beginY += strokeWidth;\n }\n if (layout === MindLayoutType.leftTopIndented || layout === MindLayoutType.rightTopIndented) {\n beginY -= strokeWidth;\n }\n }\n let curve: Point[] = [\n [beginX, beginY],\n [beginX, beginY],\n [beginX, beginY],\n [beginX, endY - (endNode.hGap * 3 * plusMinus[1]) / 5],\n [beginX, endY - (endNode.hGap * plusMinus[1]) / 5],\n [beginX + (endNode.hGap * plusMinus[0]) / 4, endY],\n [beginX + (endNode.hGap * plusMinus[0] * 3) / 5, endY],\n isUnderlineShap && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY],\n isUnderlineShap && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY],\n isUnderlineShap && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY]\n ];\n\n const stroke = defaultStroke || getBranchColorByMindElement(board, child.origin);\n\n const points = pointsOnBezierCurves(curve);\n return PlaitBoard.getRoughSVG(board).curve(points as any, { stroke, strokeWidth });\n}\n","export enum HorizontalPlacement {\n left = 'left',\n center = 'center',\n right = 'right'\n}\n\nexport enum VerticalPlacement {\n top = 'top',\n middle = 'middle',\n bottom = 'bottom'\n}\n\nexport type PointPlacement = [HorizontalPlacement, VerticalPlacement];\n","import { Point, RectangleClient } from '@plait/core';\nimport { MindNode } from '../interfaces/node';\nimport { LayoutDirection } from '../interfaces/layout';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../interfaces/types';\n\nexport const getPointByPlacement = (client: RectangleClient, placement: PointPlacement): Point => {\n let x = client.x;\n let y = client.y;\n if (placement[0] === HorizontalPlacement.center) {\n x = client.x + client.width / 2;\n }\n if (placement[0] === HorizontalPlacement.right) {\n x = client.x + client.width;\n }\n if (placement[1] === VerticalPlacement.middle) {\n y = client.y + client.height / 2;\n }\n if (placement[1] === VerticalPlacement.bottom) {\n y = client.y + client.height;\n }\n return [x, y];\n};\n\nexport const getLayoutDirection = (node: MindNode, isHorizontal: boolean) => {\n if (isHorizontal) {\n if (node.left) {\n return LayoutDirection.left;\n } else {\n return LayoutDirection.right;\n }\n } else {\n if (node.up) {\n return LayoutDirection.top;\n } else {\n return LayoutDirection.bottom;\n }\n }\n};\n\n// 以右为基准\n// 右 -> 左:\n// 1. 终点 -> 起点/起点 -> 终点\n// 2. 加 -> 减\n\n// 水平 -> 垂直:\n// 1. 起点/终点 -> 纵轴\n// 2. 加减 -> 纵轴\n\n// 下 -> 上:\n// 1. 终点 -> 起点/终点 -> 起点\n// 2. 加 -> 减\nexport const movePoint = (point: Point, distance: number, direction: LayoutDirection = LayoutDirection.right): Point => {\n if (direction === LayoutDirection.left) {\n return [point[0] - distance, point[1]];\n }\n if (direction === LayoutDirection.bottom) {\n return [point[0], point[1] + distance];\n }\n if (direction === LayoutDirection.top) {\n return [point[0], point[1] - distance];\n }\n return [point[0] + distance, point[1]];\n};\n\nexport const transformPlacement = (placement: PointPlacement, direction: LayoutDirection) => {\n // to left\n if (direction === LayoutDirection.left) {\n if (placement[0] === HorizontalPlacement.right) {\n placement[0] = HorizontalPlacement.left;\n } else if (placement[0] === HorizontalPlacement.left) {\n placement[0] = HorizontalPlacement.right;\n }\n }\n // to bottom\n if (direction === LayoutDirection.bottom || direction === LayoutDirection.top) {\n let horizontal = HorizontalPlacement.center;\n let vertical = VerticalPlacement.middle;\n if (placement[1] === VerticalPlacement.top) {\n horizontal = HorizontalPlacement.left;\n }\n if (placement[1] === VerticalPlacement.bottom) {\n horizontal = HorizontalPlacement.right;\n }\n if (placement[0] === HorizontalPlacement.left) {\n vertical = VerticalPlacement.top;\n }\n if (placement[0] === HorizontalPlacement.right) {\n vertical = VerticalPlacement.bottom;\n }\n placement[0] = horizontal;\n placement[1] = vertical;\n }\n // to up\n if (direction === LayoutDirection.top) {\n if (placement[1] === VerticalPlacement.bottom) {\n placement[1] = VerticalPlacement.top;\n } else if (placement[1] === VerticalPlacement.top) {\n placement[1] = VerticalPlacement.bottom;\n }\n }\n};\n","import { pointsOnBezierCurves } from 'points-on-curve';\nimport { MindNodeShape, STROKE_WIDTH } from '../../constants';\nimport { MindNode } from '../../interfaces/node';\nimport { PlaitBoard, Point } from '@plait/core';\nimport { getRectangleByNode } from '../../utils';\nimport { getLayoutDirection, getPointByPlacement, movePoint, transformPlacement } from '../../utils/point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../interfaces/types';\nimport { getBranchColorByMindElement } from '../../utils/node-style/branch';\n\nexport function drawLogicLink(board: PlaitBoard, node: MindNode, parent: MindNode, isHorizontal: boolean) {\n const branchColor = getBranchColorByMindElement(board, node.origin);\n const strokeWidth = node.origin.branchWidth ? node.origin.branchWidth : STROKE_WIDTH;\n const hasStraightLine = !parent.origin.isRoot;\n const hasUnderlineShape = node.origin.shape === MindNodeShape.underline;\n const hasUnderlineShapeOfParent = parent.origin.shape === MindNodeShape.underline;\n const nodeClient = getRectangleByNode(node);\n const parentClient = getRectangleByNode(parent);\n const linkDirection = getLayoutDirection(node, isHorizontal);\n\n // ① ensure begin placement and end placement\n // begin placement represent parent connector position and end placement represent child connector\n const beginPlacement: PointPlacement = [HorizontalPlacement.right, VerticalPlacement.middle];\n const endPlacement: PointPlacement = [HorizontalPlacement.left, VerticalPlacement.middle];\n\n transformPlacement(beginPlacement, linkDirection);\n transformPlacement(endPlacement, linkDirection);\n\n // underline shape and horizontal\n if (isHorizontal && hasUnderlineShapeOfParent && !parent.origin.isRoot) {\n beginPlacement[1] = VerticalPlacement.bottom;\n }\n if (isHorizontal && hasUnderlineShape) {\n endPlacement[1] = VerticalPlacement.bottom;\n }\n\n let beginPoint = getPointByPlacement(parentClient, beginPlacement);\n let endPoint = getPointByPlacement(nodeClient, endPlacement);\n\n // ② 确定凸出直线,从起始点开始画一条直线,从直线的结束位置绘制曲线,保证收起图标可以完美覆盖起始连线,根节点不需要这条直线\n // 绘制贝塞尔曲线要求,需要增加三个点,正常两个点就可以确定这条直线\n const straightLineDistance = 8;\n const beginPoint2 = hasStraightLine ? movePoint(beginPoint, straightLineDistance, linkDirection) : beginPoint;\n let straightLine: Point[] = hasStraightLine ? [beginPoint, beginPoint2, beginPoint2] : [];\n\n // ③ 确定曲线\n const beginBufferDistance = (parent.hGap + node.hGap) / 3;\n const endBufferDistance = -(parent.hGap + node.hGap) / 2.4;\n let curve: Point[] = [\n beginPoint2,\n movePoint(beginPoint2, beginBufferDistance, linkDirection),\n movePoint(endPoint, endBufferDistance, linkDirection),\n endPoint\n ];\n\n // ④ 下划线绘制,underline shape and horizontal\n const underlineEnd = movePoint(endPoint, nodeClient.width, linkDirection);\n const underline: Point[] = hasUnderlineShape && isHorizontal ? [underlineEnd, underlineEnd, underlineEnd] : [];\n\n const points = pointsOnBezierCurves([...straightLine, ...curve, ...underline]);\n return PlaitBoard.getRoughSVG(board).curve(points as any, { stroke: branchColor, strokeWidth });\n}\n","import { EmojiData, MindElement, PlaitMind } from '../../interfaces';\n\nexport function getEmojisRectangle(element: MindElement<EmojiData>) {\n const count = element.data.emojis.length;\n const fontSize = getEmojiFontSize(element);\n return { width: fontSize * count + (count - 1) * 4, height: element.height };\n}\n\nexport function getEmojiFontSize(element: MindElement<EmojiData>) {\n if (PlaitMind.isMind(element)) {\n return 18 + 2;\n } else {\n return 14 + 2;\n }\n}\n","import { BASE } from '../constants/default';\nimport { PlaitMind } from '../interfaces/element';\nimport { MindElement } from '../interfaces/element';\nimport { getEmojisRectangle } from '../plugins/emoji/emoji';\n\nconst NodeDefaultSpace = {\n horizontal: {\n nodeAndText: BASE * 3,\n emojiAndText: BASE * 1.5\n },\n vertical: {\n nodeAndText: BASE * 1.5\n }\n};\n\nconst RootDefaultSpace = {\n horizontal: {\n nodeAndText: BASE * 4,\n emojiAndText: BASE * 2\n },\n vertical: {\n nodeAndText: BASE * 2\n }\n};\n\nconst getHorizontalSpaceBetweenNodeAndText = (element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const nodeAndText = isMind ? RootDefaultSpace.horizontal.nodeAndText : NodeDefaultSpace.horizontal.nodeAndText;\n return nodeAndText;\n};\n\nconst getHorizontalSpaceEmojiAndText = (element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const emojiAndText = isMind ? RootDefaultSpace.horizontal.emojiAndText : NodeDefaultSpace.horizontal.emojiAndText;\n return emojiAndText;\n};\n\nconst getVerticalSpaceBetweenNodeAndText = (element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const nodeAndText = isMind ? RootDefaultSpace.vertical.nodeAndText : NodeDefaultSpace.vertical.nodeAndText;\n return nodeAndText;\n};\n\nexport const NodeSpace = {\n getNodeWidth(element: MindElement) {\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(element);\n if (MindElement.hasEmojis(element)) {\n return nodeAndText + getEmojisRectangle(element).width + getHorizontalSpaceEmojiAndText(element) + element.width + nodeAndText;\n }\n return nodeAndText + element.width + nodeAndText;\n },\n getNodeHeight(element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);\n return nodeAndText + element.height + nodeAndText;\n },\n getTextHorizontalSpace(element: MindElement) {\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(element);\n if (MindElement.hasEmojis(element)) {\n return nodeAndText + getEmojisRectangle(element).width + getHorizontalSpaceEmojiAndText(element);\n } else {\n return nodeAndText;\n }\n },\n getTextVerticalSpace(element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);\n return nodeAndText;\n },\n getEmojiHorizontalSpace(element: MindElement) {\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(element);\n return nodeAndText;\n },\n getEmojiVerticalSpace(element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);\n return nodeAndText;\n }\n};\n","import { ViewContainerRef } from '@angular/core';\nimport { drawRichtext, updateForeignObject } from '@plait/richtext';\nimport { BASE } from '../constants/default';\nimport { MindNode } from '../interfaces/node';\nimport { getRectangleByNode } from '../utils/graph';\nimport { NodeSpace } from '../utils/node-space';\n\nexport function drawMindNodeRichtext(node: MindNode, viewContainerRef: ViewContainerRef) {\n const { x, y } = getRichtextRectangleByNode(node);\n const classList = [];\n if (node.origin.isRoot) {\n classList.push('root-node');\n classList.push('font-size-18');\n } else if (node.parent?.origin?.isRoot) {\n classList.push('root-child-node');\n } else {\n classList.push('child-node');\n }\n // COMPAT: last character can not show in safari browser\n return drawRichtext(\n x,\n y,\n Math.ceil(node.origin.width),\n Math.ceil(node.origin.height),\n node.origin.data.topic,\n viewContainerRef,\n classList\n );\n}\n\nexport function updateMindNodeTopicSize(node: MindNode, g: SVGGElement, isEditable: boolean) {\n const { x, y, width, height } = getRichtextRectangleByNode(node);\n if (isEditable) {\n // add 999, avoid changing lines when paste more text\n updateForeignObject(g, width + 999, height + 999, x, y);\n } else {\n // COMPAT: last character can not show in safari browser\n updateForeignObject(g, Math.ceil(node.origin.width), Math.ceil(node.origin.height), x, y);\n }\n}\n\nexport function getRichtextRectangleByNode(node: MindNode) {\n let { x, y, width, height } = getRectangleByNode(node);\n x = x + NodeSpace.getTextHorizontalSpace(node.origin);\n y = y + NodeSpace.getTextVerticalSpace(node.origin);\n return { width, height, x, y };\n}\n","import { NODE_FILL, ROOT_NODE_FILL, STROKE_WIDTH } from '../constants';\nimport { MindNode } from '../interfaces/node';\nimport { getRectangleByNode } from '../utils/graph';\nimport { PlaitBoard, drawRoundRectangle } from '@plait/core';\nimport { getStrokeByMindElement } from '../utils/node-style/node';\n\nexport function drawRectangleNode(board: PlaitBoard, node: MindNode) {\n const { x, y, width, height } = getRectangleByNode(node);\n\n const fill = node.origin.fill ? node.origin.fill : node.origin.isRoot ? ROOT_NODE_FILL : NODE_FILL;\n const stroke = getStrokeByMindElement(board, node.origin);\n const strokeWidth = node.origin.strokeWidth ? node.origin.strokeWidth : STROKE_WIDTH;\n\n const nodeG = drawRoundRectangle(PlaitBoard.getRoughSVG(board), x, y, x + width, y + height, {\n stroke,\n strokeWidth,\n fill,\n fillStyle: 'solid'\n });\n\n return nodeG;\n}\n","import { PlaitBoard, getRectangleByElements } from '@plait/core';\nimport { MindNode } from '../../interfaces/node';\nimport { getRectangleByNode } from '../../utils/graph';\nimport { GRAY_COLOR } from '../../constants/default';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../interfaces/types';\nimport { getLayoutDirection, getPointByPlacement, movePoint, transformPlacement } from '../../utils/point-placement';\n\nexport function drawAbstractLink(board: PlaitBoard, node: MindNode, isHorizontal: boolean) {\n const linkPadding = 15;\n const parent = node.parent;\n const abstractRectangle = getRectangleByNode(node);\n let includedElements = parent.children.slice(node.origin.start, node.origin.end! + 1).map(node => {\n return node.origin;\n });\n const includedElementsRectangle = getRectangleByElements(board, includedElements, true);\n\n const linkDirection = getLayoutDirection(node, isHorizontal);\n const bezierBeginPlacement = [HorizontalPlacement.right, VerticalPlacement.top] as PointPlacement;\n const bezierEndPlacement = [HorizontalPlacement.right, VerticalPlacement.bottom] as PointPlacement;\n const abstractConnectorPlacement = [HorizontalPlacement.left, VerticalPlacement.middle] as PointPlacement;\n\n transformPlacement(bezierBeginPlacement, linkDirection);\n transformPlacement(bezierEndPlacement, linkDirection);\n transformPlacement(abstractConnectorPlacement, linkDirection);\n\n let bezierBeginPoint = getPointByPlacement(includedElementsRectangle, bezierBeginPlacement);\n let bezierEndPoint = getPointByPlacement(includedElementsRectangle, bezierEndPlacement);\n let abstractConnectorPoint = getPointByPlacement(abstractRectangle, abstractConnectorPlacement);\n\n let curveDistance = 0;\n if (isHorizontal) {\n curveDistance = Math.abs(abstractConnectorPoint[0] - bezierBeginPoint[0]) - linkPadding * 2;\n } else {\n curveDistance = Math.abs(abstractConnectorPoint[1] - bezierBeginPoint[1]) - linkPadding * 2;\n }\n\n bezierBeginPoint = movePoint(bezierBeginPoint, linkPadding, linkDirection);\n let c1 = movePoint(bezierBeginPoint, curveDistance, linkDirection);\n bezierEndPoint = movePoint(bezierEndPoint, linkPadding, linkDirection);\n let c2 = movePoint(bezierEndPoint, curveDistance, linkDirection);\n let bezierConnectorPoint = movePoint(abstractConnectorPoint, -linkPadding, linkDirection);\n\n const link = PlaitBoard.getRoughSVG(board).path(\n `M${bezierBeginPoint[0]},${bezierBeginPoint[1]} Q${c1[0]},${c1[1]} ${bezierConnectorPoint[0]},${bezierConnectorPoint[1]} Q${c2[0]},${c2[1]} ${bezierEndPoint[0]},${bezierEndPoint[1]} M${abstractConnectorPoint[0]},${abstractConnectorPoint[1]} L${bezierConnectorPoint[0]},${bezierConnectorPoint[1]}`,\n {\n stroke: GRAY_COLOR,\n strokeWidth: 2\n }\n );\n return link;\n}\n","import { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { EmojiData, EmojiItem, MindElement } from '../../interfaces';\nimport { MindEmojiBaseComponent } from './emoji-base.component';\nimport { PlaitMindEmojiBoard } from './with-mind-emoji';\nimport { createForeignObject } from '@plait/richtext';\nimport { createG } from '@plait/core';\nimport { getRectangleByNode } from '../../utils/graph';\nimport { getEmojiFontSize, getEmojisRectangle } from './emoji';\nimport { NodeSpace } from '../../utils/node-space';\n\nexport class EmojiDrawer {\n componentRef: ComponentRef<MindEmojiBaseComponent> | null = null;\n\n constructor(private board: PlaitMindEmojiBoard, private viewContainerRef: ViewContainerRef) {}\n\n draw(emoji: EmojiItem, element: MindElement<EmojiData>) {\n this.destroy();\n const componentType = this.board.drawEmoji(emoji, element);\n this.componentRef = this.viewContainerRef.createComponent(componentType);\n this.componentRef.instance.emojiItem = emoji;\n this.componentRef.instance.board = this.board;\n this.componentRef.instance.element = element;\n this.componentRef.instance.fontSize = getEmojiFontSize(element);\n }\n\n get nativeElement() {\n if (this.componentRef) {\n return this.componentRef.instance.nativeElement;\n } else {\n return null;\n }\n }\n\n destroy() {\n if (this.componentRef) {\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n}\n\nexport class EmojisDrawer {\n emojiDrawers: EmojiDrawer[] = [];\n\n g?: SVGGElement;\n\n constructor(private board: PlaitMindEmojiBoard, private viewContainerRef: ViewContainerRef) {}\n\n drawEmojis(element: MindElement) {\n this.destroy();\n if (MindElement.hasEmojis(element)) {\n this.g = createG();\n this.g.classList.add('emojis');\n let { x, y } = getRectangleByNode(MindElement.getNode(element));\n x = x + NodeSpace.getEmojiHorizontalSpace(element);\n y = y + NodeSpace.getEmojiVerticalSpace(element);\n const { width, height } = getEmojisRectangle(element);\n const foreignObject = createForeignObject(x, y, width, height);\n this.g.append(foreignObject);\n const container = document.createElement('div');\n container.classList.add('node-emojis-container');\n foreignObject.append(container);\n this.emojiDrawers = element.data.emojis.map(emojiItem => {\n const drawer = new EmojiDrawer(this.board, this.viewContainerRef);\n drawer.draw(emojiItem, element);\n return drawer;\n });\n this.emojiDrawers.forEach(drawer => {\n container.append(drawer.nativeElement!);\n });\n return this.g;\n }\n return undefined;\n }\n\n destroy() {\n if (this.g) {\n this.g.remove();\n }\n this.emojiDrawers.forEach(drawer => drawer.destroy());\n this.emojiDrawers = [];\n }\n}\n","import { PlaitBoard, Path, PlaitNode, Transforms } from '@plait/core';\nimport { isHorizontalLogicLayout, isStandardLayout, isVerticalLogicLayout, MindLayoutType } from '@plait/layouts';\nimport { MindElement, PlaitMind } from '../interfaces/element';\nimport { handleAbstractIncluded } from '../utils/abstract/common';\n\nexport const setLayout = (board: PlaitBoard, layout: MindLayoutType, path: Path) => {\n correctLogicLayoutNode(board, layout, path);\n const element = PlaitNode.get(board, path) as MindElement;\n\n if (PlaitMind.isMind(element) && isStandardLayout(layout)) {\n handleAbstractIncluded(board, element);\n }\n\n Transforms.setNode(board, { layout }, path);\n};\n\nconst correctLogicLayoutNode = (board: PlaitBoard, layout: MindLayoutType, path: Path) => {\n const node = PlaitNode.get(board, path);\n if (node && layout) {\n node.children?.forEach((value: PlaitNode, index) => {\n if (value.layout) {\n if (\n (isHorizontalLogicLayout(layout) && isVerticalLogicLayout(value.layout)) ||\n (isVerticalLogicLayout(layout) && isHorizontalLogicLayout(value.layout))\n ) {\n Transforms.setNode(board, { layout: null }, [...path, index]);\n }\n if (value.children?.length) {\n correctLogicLayoutNode(board, layout, [...path, index]);\n }\n }\n });\n }\n};\n","import { Element } from 'slate';\nimport { MindElement } from '../interfaces/element';\nimport { NODE_MIN_WIDTH } from '../constants/node';\nimport { PlaitBoard, Transforms } from '@plait/core';\nimport { EmojiData, EmojiItem } from '../interfaces/element-data';\n\nexport const setTopic = (board: PlaitBoard, element: MindElement, topic: Element, width: number, height: number) => {\n const newElement = {\n data: { topic },\n width: width < NODE_MIN_WIDTH * board.viewport.zoom ? NODE_MIN_WIDTH : width / board.viewport.zoom,\n height: height / board.viewport.zoom\n } as MindElement;\n if (MindElement.hasEmojis(element)) {\n newElement.data.emojis = element.data.emojis;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const setTopicSize = (board: PlaitBoard, element: MindElement, width: number, height: number) => {\n const newElement = {\n width: width < NODE_MIN_WIDTH * board.viewport.zoom ? NODE_MIN_WIDTH : width / board.viewport.zoom,\n height: height / board.viewport.zoom\n };\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const addEmoji = (board: PlaitBoard, element: MindElement, emojiItem: EmojiItem) => {\n const emojis = element.data.emojis || [];\n const newEmojis = [...emojis];\n newEmojis.push(emojiItem);\n const newElement = {\n data: { topic: element.data.topic, emojis: newEmojis }\n } as MindElement;\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const removeEmoji = (board: PlaitBoard, element: MindElement<EmojiData>, emojiItem: EmojiItem) => {\n const emojis = element.data.emojis.filter(value => value !== emojiItem);\n const newElement = {\n data: { topic: element.data.topic }\n } as MindElement;\n if (emojis.length > 0) {\n newElement.data.emojis = emojis;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const replaceEmoji = (board: PlaitBoard, element: MindElement<EmojiData>, oldEmoji: EmojiItem, newEmoji: EmojiItem) => {\n const newElement = {\n data: { topic: element.data.topic }\n } as MindElement;\n const newEmojis = element.data.emojis.map(value => {\n if (value === oldEmoji) {\n return newEmoji;\n }\n return value;\n });\n newElement.data.emojis = newEmojis;\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n","import { setLayout } from './layout';\nimport { addEmoji, removeEmoji, setTopic, setTopicSize, replaceEmoji } from './node';\n\nexport const MindTransforms = {\n setLayout,\n setTopic,\n setTopicSize,\n addEmoji,\n removeEmoji,\n replaceEmoji\n};\n","import { drawAbstractRoundRectangle, createG, getRectangleByElements, PlaitBoard, RectangleClient } from '@plait/core';\nimport { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET, PRIMARY_COLOR } from '../constants';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { AbstractHandlePosition, MindElement } from '../interfaces';\nimport { MindLayoutType, isHorizontalLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { getLayoutDirection, getPointByPlacement, movePoint, transformPlacement } from '../utils/point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../interfaces/types';\nimport { getRectangleByResizingLocation } from '../utils/abstract/resize';\n\nexport function drawAbstractIncludedOutline(\n board: PlaitBoard,\n roughSVG: RoughSVG,\n element: MindElement,\n activeHandlePosition?: AbstractHandlePosition,\n resizingLocation?: number\n) {\n const abstractIncludedG = createG();\n\n const parentElement = MindElement.getParent(element);\n const nodeLayout = MindQueries.getCorrectLayoutByElement(element) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n\n const includedElements = parentElement.children.slice(element.start!, element.end! + 1);\n let abstractRectangle = getRectangleByElements(board, includedElements, true);\n abstractRectangle = RectangleClient.getOutlineRectangle(abstractRectangle, -ABSTRACT_INCLUDED_OUTLINE_OFFSET);\n\n if (resizingLocation) {\n abstractRectangle = getRectangleByResizingLocation(abstractRectangle, resizingLocation, activeHandlePosition!, isHorizontal);\n }\n\n const rectangle = drawAbstractRoundRectangle(\n roughSVG,\n abstractRectangle.x,\n abstractRectangle.y,\n abstractRectangle.x + abstractRectangle.width,\n abstractRectangle.y + abstractRectangle.height,\n isHorizontal,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 1,\n fillStyle: 'solid'\n }\n );\n\n const startPlacement = [HorizontalPlacement.center, VerticalPlacement.top] as PointPlacement;\n const endPlacement = [HorizontalPlacement.center, VerticalPlacement.bottom] as PointPlacement;\n\n const linkDirection = getLayoutDirection(MindElement.getNode(element), isHorizontal);\n\n transformPlacement(startPlacement, linkDirection);\n transformPlacement(endPlacement, linkDirection);\n\n let startCenterPoint = getPointByPlacement(abstractRectangle, startPlacement);\n let endCenterPoint = getPointByPlacement(abstractRectangle, endPlacement);\n\n const startPoint1 = movePoint(startCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n const startPoint2 = movePoint(startCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n\n const endPoint1 = movePoint(endCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n const endPoint2 = movePoint(endCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n\n const startHandle = roughSVG.line(\n startPoint1[0],\n startPoint1[1],\n startPoint2[0],\n startPoint2[1],\n getHandleOption(activeHandlePosition === AbstractHandlePosition.start)\n );\n\n const endHandle = roughSVG.line(\n endPoint1[0],\n endPoint1[1],\n endPoint2[0],\n endPoint2[1],\n getHandleOption(activeHandlePosition === AbstractHandlePosition.end)\n );\n\n changeBoardClass(board, activeHandlePosition, isHorizontal);\n\n startHandle.setAttribute('stroke-linecap', 'round');\n endHandle.setAttribute('stroke-linecap', 'round');\n\n abstractIncludedG.append(startHandle);\n abstractIncludedG.append(endHandle);\n abstractIncludedG.append(rectangle);\n\n return abstractIncludedG;\n}\n\nexport function getHandleOption(isHover: boolean) {\n return isHover\n ? {\n stroke: PRIMARY_COLOR,\n strokeWidth: 4,\n fillStyle: 'solid'\n }\n : {\n stroke: ABSTRACT_HANDLE_COLOR,\n strokeWidth: 3,\n fillStyle: 'solid'\n };\n}\n\nexport function changeBoardClass(board: PlaitBoard, activeHandlePosition: AbstractHandlePosition | undefined, isHorizontal: boolean) {\n if (activeHandlePosition) {\n if (isHorizontal) {\n PlaitBoard.getBoardNativeElement(board).classList.add('abstract-resizing-horizontal');\n } else {\n PlaitBoard.getBoardNativeElement(board).classList.add('abstract-resizing-vertical');\n }\n } else {\n PlaitBoard.getBoardNativeElement(board).classList.remove('abstract-resizing-horizontal');\n PlaitBoard.getBoardNativeElement(board).classList.remove('abstract-resizing-vertical');\n }\n}\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../../interfaces';\n\nexport abstract class BaseDrawer {\n g?: SVGGElement;\n\n constructor(protected board: PlaitBoard) {}\n\n abstract canDraw(element: MindElement): boolean;\n\n abstract draw(element: MindElement): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n }\n }\n}\n\nexport interface AfterDraw {\n afterDraw(element: MindElement): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { AbstractNode } from '@plait/layouts';\nimport { Path } from 'slate';\n\nexport function findNewChildNodePath(board: PlaitBoard, element: PlaitElement) {\n return PlaitBoard.findPath(board, element).concat((element.children || []).filter(child => !AbstractNode.isAbstract(child)).length);\n}\n\nexport function findNewSiblingNodePath(board: PlaitBoard, element: PlaitElement) {\n const path = PlaitBoard.findPath(board, element);\n return Path.next(path);\n}\n","import { PlaitBoard, createG } from '@plait/core';\nimport { MindElement, BaseData, ExtendUnderlineCoordinateType, ExtendLayoutType, PlaitMind } from '../interfaces';\nimport { AfterDraw, BaseDrawer } from './base/base';\nimport { getRectangleByNode } from '../utils/graph';\nimport { getNodeShapeByElement } from '../utils/shape';\nimport {\n EXTEND_RADIUS,\n QUICK_INSERT_CIRCLE_COLOR,\n QUICK_INSERT_CIRCLE_OFFSET,\n QUICK_INSERT_INNER_CROSS_COLOR,\n STROKE_WIDTH\n} from '../constants/default';\nimport { MindNodeShape } from '../constants/node';\nimport { MindLayoutType, OriginNode, isStandardLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { fromEvent } from 'rxjs';\nimport { insertMindElement } from '../utils/mind';\nimport { take } from 'rxjs/operators';\nimport { findNewChildNodePath } from '../utils/path';\nimport { getBranchColorByMindElement, getNextBranchColor } from '../utils/node-style/branch';\n\nexport class QuickInsertDrawer extends BaseDrawer implements AfterDraw {\n canDraw(element: MindElement<BaseData>): boolean {\n if (PlaitBoard.isReadonly(this.board) || element?.isCollapsed) {\n return false;\n }\n return true;\n }\n draw(element: MindElement<BaseData>): SVGGElement {\n let offset = element.children.length > 0 && !element.isRoot ? EXTEND_RADIUS : 0;\n const quickInsertG = createG();\n this.g = quickInsertG;\n quickInsertG.classList.add('quick-insert');\n const node = MindElement.getNode(element);\n const { x, y, width, height } = getRectangleByNode(node);\n\n /**\n * 方位:\n * 1. 左、左上、左下\n * 2. 右、右上、右下\n * 3. 上、上左、上右\n * 4. 下、下左、下右\n */\n const shape = getNodeShapeByElement(element);\n // 形状是矩形要偏移边框的线宽\n const strokeWidth = element.branchWidth ? element.branchWidth : STROKE_WIDTH;\n let offsetBorderLineWidth = 0;\n if (shape === MindNodeShape.roundRectangle && offset === 0) {\n offsetBorderLineWidth = strokeWidth;\n }\n let offsetRootBorderLineWidth = 0;\n if (element.isRoot) {\n offsetRootBorderLineWidth = strokeWidth;\n }\n // 当没有子节点时,需要缩小的偏移量\n const extraOffset = 3;\n const underlineCoordinates: ExtendUnderlineCoordinateType = {\n // 画线方向:右向左 <--\n [MindLayoutType.left]: {\n // EXTEND_RADIUS * 0.5 是 左方向,折叠/收起的偏移量\n startX: x - (offset > 0 ? offset + EXTEND_RADIUS * 0.5 : 0) - offsetRootBorderLineWidth,\n startY: y + height,\n endX:\n x -\n offsetBorderLineWidth -\n offsetRootBorderLineWidth -\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) -\n EXTEND_RADIUS,\n endY: y + height\n },\n // 画线方向:左向右 -->\n [MindLayoutType.right]: {\n startX: x + width + (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) + offsetRootBorderLineWidth,\n startY: y + height,\n endX:\n x +\n width +\n offsetBorderLineWidth +\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) +\n EXTEND_RADIUS +\n offsetRootBorderLineWidth,\n endY: y + height\n },\n // 画线方向:下向上 -->\n [MindLayoutType.upward]: {\n startX: x + width * 0.5,\n startY: y - offsetBorderLineWidth - (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) - offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y -\n offsetBorderLineWidth -\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) -\n EXTEND_RADIUS -\n offsetRootBorderLineWidth\n },\n // 画线方向:上向下 -->\n [MindLayoutType.downward]: {\n startX: x + width * 0.5,\n startY:\n y + height + offsetBorderLineWidth + (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) + offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y +\n height +\n offsetBorderLineWidth +\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) +\n EXTEND_RADIUS +\n offsetRootBorderLineWidth\n },\n [MindLayoutType.leftBottomIndented]: {\n startX: x + width * 0.5,\n startY:\n y + height + offsetBorderLineWidth + (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) + offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y +\n height +\n offsetBorderLineWidth +\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) +\n EXTEND_RADIUS +\n offsetRootBorderLineWidth\n },\n [MindLayoutType.leftTopIndented]: {\n startX: x + width * 0.5,\n startY: y - offsetBorderLineWidth - (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) - offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y -\n offsetBorderLineWidth -\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) -\n EXTEND_RADIUS -\n offsetRootBorderLineWidth\n },\n [MindLayoutType.rightBottomIndented]: {\n startX: x + width * 0.5,\n startY:\n y + height + offsetBorderLineWidth + (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) + offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y +\n height +\n offsetBorderLineWidth +\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET - extraOffset : 0) +\n EXTEND_RADIUS +\n offsetRootBorderLineWidth\n },\n [MindLayoutType.rightTopIndented]: {\n startX: x + width * 0.5,\n startY: y - offsetBorderLineWidth - (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) - offsetRootBorderLineWidth,\n endX: x + width * 0.5,\n endY:\n y -\n offsetBorderLineWidth -\n (offset > 0 ? offset + QUICK_INSERT_CIRCLE_OFFSET : 0) -\n EXTEND_RADIUS -\n offsetRootBorderLineWidth\n }\n };\n if (shape === MindNodeShape.roundRectangle || element.isRoot) {\n underlineCoordinates[MindLayoutType.left].startY -= height * 0.5;\n underlineCoordinates[MindLayoutType.left].endY -= height * 0.5;\n underlineCoordinates[MindLayoutType.right].startY -= height * 0.5;\n underlineCoordinates[MindLayoutType.right].endY -= height * 0.5;\n }\n const branchColor = PlaitMind.isMind(element) ? getNextBranchColor(element) : getBranchColorByMindElement(this.board, element);\n let nodeLayout = MindQueries.getCorrectLayoutByElement(element) as ExtendLayoutType;\n if (element.isRoot && isStandardLayout(nodeLayout)) {\n const root = element as OriginNode;\n nodeLayout = root.children.length >= root.rightNodeCount ? MindLayoutType.left : MindLayoutType.right;\n }\n const underlineCoordinate = underlineCoordinates[nodeLayout];\n if (underlineCoordinate) {\n const underline = PlaitBoard.getRoughSVG(this.board).line(\n underlineCoordinate.startX,\n underlineCoordinate.startY,\n underlineCoordinate.endX,\n underlineCoordinate.endY,\n { stroke: branchColor, strokeWidth }\n );\n const circleCoordinates = {\n startX: underlineCoordinate.endX,\n startY: underlineCoordinate.endY\n };\n const circle = PlaitBoard.getRoughSVG(this.board).circle(circleCoordinates.startX, circleCoordinates.startY, EXTEND_RADIUS, {\n fill: QUICK_INSERT_CIRCLE_COLOR,\n stroke: QUICK_INSERT_CIRCLE_COLOR,\n fillStyle: 'solid'\n });\n const innerCrossCoordinates = {\n horizontal: {\n startX: circleCoordinates.startX - EXTEND_RADIUS * 0.5 + 3,\n startY: circleCoordinates.startY,\n endX: circleCoordinates.startX + EXTEND_RADIUS * 0.5 - 3,\n endY: circleCoordinates.startY\n },\n vertical: {\n startX: circleCoordinates.startX,\n startY: circleCoordinates.startY - EXTEND_RADIUS * 0.5 + 3,\n endX: circleCoordinates.startX,\n endY: circleCoordinates.startY + EXTEND_RADIUS * 0.5 - 3\n }\n };\n const innerCrossHLine = PlaitBoard.getRoughSVG(this.board).line(\n innerCrossCoordinates.horizontal.startX,\n innerCrossCoordinates.horizontal.startY,\n innerCrossCoordinates.horizontal.endX,\n innerCrossCoordinates.horizontal.endY,\n {\n stroke: QUICK_INSERT_INNER_CROSS_COLOR,\n strokeWidth: 2\n }\n );\n const innerRingVLine = PlaitBoard.getRoughSVG(this.board).line(\n innerCrossCoordinates.vertical.startX,\n innerCrossCoordinates.vertical.startY,\n innerCrossCoordinates.vertical.endX,\n innerCrossCoordinates.vertical.endY,\n {\n stroke: QUICK_INSERT_INNER_CROSS_COLOR,\n strokeWidth: 2\n }\n );\n quickInsertG.appendChild(underline);\n quickInsertG.appendChild(circle);\n quickInsertG.appendChild(innerCrossHLine);\n quickInsertG.appendChild(innerRingVLine);\n }\n return quickInsertG;\n }\n afterDraw(element: MindElement): void {\n if (!this.g) {\n throw new Error(`can not find quick insert g`);\n }\n fromEvent<MouseEvent>(this.g, 'mousedown')\n .pipe(take(1))\n .subscribe(e => {\n e.stopPropagation();\n });\n fromEvent(this.g, 'mouseup')\n .pipe(take(1))\n .subscribe(() => {\n const path = findNewChildNodePath(this.board, element);\n insertMindElement(this.board, element, path);\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewContainerRef\n} from '@angular/core';\nimport {\n PlaitPointerType,\n createG,\n createText,\n IS_TEXT_EDITABLE,\n MERGING,\n PlaitBoard,\n toPoint,\n transformPoint,\n Transforms,\n drawRoundRectangle,\n PlaitPluginElementComponent,\n PlaitElement,\n NODE_TO_INDEX,\n PlaitPluginElementContext,\n OnContextChanged\n} from '@plait/core';\nimport {\n isBottomLayout,\n isHorizontalLayout,\n isIndentedLayout,\n isLeftLayout,\n AbstractNode,\n isRightLayout,\n isTopLayout,\n MindLayoutType\n} from '@plait/layouts';\nimport { hasEditableTarget, PlaitRichtextComponent, setFullSelectionAndFocus, updateRichText } from '@plait/richtext';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject, timer } from 'rxjs';\nimport { debounceTime, filter, take, takeUntil } from 'rxjs/operators';\nimport { Editor, Operation } from 'slate';\nimport { EXTEND_OFFSET, EXTEND_RADIUS, MindNodeShape, NODE_MIN_WIDTH, PRIMARY_COLOR, STROKE_WIDTH } from './constants';\nimport { drawIndentedLink } from './draw/indented-link';\nimport { drawLogicLink } from './draw/link/logic-link';\nimport { drawMindNodeRichtext, updateMindNodeTopicSize } from './draw/richtext';\nimport { drawRectangleNode } from './draw/shape';\nimport { MindElement, PlaitMind } from './interfaces/element';\nimport { MindNode } from './interfaces/node';\nimport { MindQueries } from './queries';\nimport { getRectangleByNode, hitMindElement } from './utils/graph';\nimport { getChildrenCount } from './utils/mind';\nimport { getNodeShapeByElement } from './utils/shape';\nimport { ELEMENT_TO_NODE } from './utils/weak-maps';\nimport { getRichtextContentSize } from '@plait/richtext';\nimport { drawAbstractLink } from './draw/link/abstract-link';\nimport { EmojisDrawer } from './plugins/emoji/emoji.drawer';\nimport { PlaitMindEmojiBoard } from './plugins/emoji/with-mind-emoji';\nimport { MindTransforms } from './transforms';\nimport { drawAbstractIncludedOutline } from './draw/abstract';\nimport { AbstractHandlePosition } from './interfaces';\nimport { QuickInsertDrawer } from './drawer/quick-insert.drawer';\nimport { hasAfterDraw } from './drawer/base/base';\nimport { getBranchColorByMindElement } from './utils/node-style/branch';\n\n@Component({\n selector: 'plait-mind-node',\n template: `\n <plait-children\n *ngIf=\"!element.isCollapsed\"\n [board]=\"board\"\n [parent]=\"element\"\n [effect]=\"effect\"\n [parentG]=\"parentG\"\n ></plait-children>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MindNodeComponent<T extends MindElement = MindElement> extends PlaitPluginElementComponent<T>\n implements OnInit, OnDestroy, OnContextChanged<T> {\n isEditable = false;\n\n roughSVG!: RoughSVG;\n\n node!: MindNode;\n\n parent!: MindNode;\n\n index!: number;\n\n abstractIncludedOutlineG?: SVGGElement;\n\n parentG!: SVGGElement;\n\n activeG: SVGGElement[] = [];\n\n shapeG: SVGGElement | null = null;\n\n linkG?: SVGGElement;\n\n richtextG?: SVGGElement;\n\n foreignObject?: SVGForeignObjectElement;\n\n extendG?: SVGGElement;\n\n maskG!: SVGGElement;\n\n richtextComponentRef?: ComponentRef<PlaitRichtextComponent>;\n\n destroy$ = new Subject<void>();\n\n emojisDrawer!: EmojisDrawer;\n\n quickInsertDrawer!: QuickInsertDrawer;\n\n public get handActive(): boolean {\n return this.board.pointer === PlaitPointerType.hand;\n }\n\n constructor(private viewContainerRef: ViewContainerRef, protected cdr: ChangeDetectorRef, private render2: Renderer2) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.emojisDrawer = new EmojisDrawer(this.board as PlaitMindEmojiBoard, this.viewContainerRef);\n this.quickInsertDrawer = new QuickInsertDrawer(this.board);\n super.ngOnInit();\n this.node = ELEMENT_TO_NODE.get(this.element) as MindNode;\n if (!PlaitMind.isMind(this.element)) {\n this.parent = MindElement.getNode(MindElement.getParent(this.element));\n }\n this.index = NODE_TO_INDEX.get(this.element) || 0;\n this.roughSVG = PlaitBoard.getRoughSVG(this.board);\n this.parentG = PlaitElement.getComponent(MindElement.getRoot(this.board, this.element)).rootG as SVGGElement;\n this.drawShape();\n this.drawLink();\n this.drawRichtext();\n this.drawActiveG();\n this.updateActiveClass();\n this.drawMaskG();\n this.drawEmojis();\n this.drawExtend();\n this.drawQuickInsert();\n }\n\n onContextChanged(value: PlaitPluginElementContext<T>, previous: PlaitPluginElementContext<T>) {\n const newNode = ELEMENT_TO_NODE.get(this.element) as MindNode;\n if (!PlaitMind.isMind(this.element)) {\n this.parent = MindElement.getNode(MindElement.getParent(this.element));\n }\n\n // resolve move node richtext lose issue\n if (this.node !== newNode) {\n if (this.foreignObject && this.foreignObject.children.length <= 0) {\n this.foreignObject?.appendChild(this.richtextComponentRef?.instance.editable as HTMLElement);\n }\n }\n\n const isEquals = MindNode.isEquals(this.node, newNode);\n this.node = newNode;\n this.drawActiveG();\n this.updateActiveClass();\n if (!isEquals) {\n this.drawShape();\n this.drawLink();\n this.updateRichtext();\n this.drawMaskG();\n this.drawExtend();\n this.drawQuickInsert();\n this.drawEmojis();\n }\n }\n\n drawEmojis() {\n const g = this.emojisDrawer.drawEmojis(this.element);\n if (g) {\n this.g.append(g);\n }\n }\n\n drawQuickInsert() {\n this.quickInsertDrawer.destroy();\n if (this.quickInsertDrawer.canDraw(this.element)) {\n const g = this.quickInsertDrawer.draw(this.element);\n if (hasAfterDraw(this.quickInsertDrawer)) {\n this.quickInsertDrawer.afterDraw(this.element);\n }\n this.extendG?.appendChild(g);\n }\n }\n\n drawShape() {\n this.destroyShape();\n const shape = getNodeShapeByElement(this.node.origin) as MindNodeShape;\n switch (shape) {\n case MindNodeShape.roundRectangle:\n this.shapeG = drawRectangleNode(this.board, this.node as MindNode);\n this.g.prepend(this.shapeG);\n break;\n default:\n break;\n }\n }\n\n destroyShape() {\n if (this.shapeG) {\n this.shapeG.remove();\n this.shapeG = null;\n }\n }\n\n drawLink() {\n if (!this.parent) {\n return;\n }\n\n if (this.linkG) {\n this.linkG.remove();\n }\n\n const layout = MindQueries.getLayoutByElement(this.parent.origin) as MindLayoutType;\n if (AbstractNode.isAbstract(this.node.origin)) {\n this.linkG = drawAbstractLink(this.board, this.node, isHorizontalLayout(layout));\n } else if (MindElement.isIndentedLayout(this.parent.origin)) {\n this.linkG = drawIndentedLink(this.board, this.parent, this.node);\n } else {\n this.linkG = drawLogicLink(this.board, this.node, this.parent, isHorizontalLayout(layout));\n }\n this.g.append(this.linkG);\n }\n\n destroyLine() {\n if (this.parent) {\n if (this.linkG) {\n this.linkG.remove();\n }\n }\n }\n\n drawMaskG() {\n this.destroyMaskG();\n const lineWidthOffset = 2;\n const extendOffset = 15;\n const nodeLayout = MindQueries.getLayoutByElement(this.node.origin) as MindLayoutType;\n const isTop = isTopLayout(nodeLayout);\n const isRight = isRightLayout(nodeLayout);\n const isBottom = isBottomLayout(nodeLayout);\n const isLeft = isLeftLayout(nodeLayout);\n const { x, y, width, height } = getRectangleByNode(this.node as MindNode);\n\n let drawX = x;\n let drawY = y;\n let drawWidth = x + width;\n let drawHeight = y + height;\n\n switch (true) {\n case isTop:\n drawX = x - lineWidthOffset;\n drawY = y - extendOffset;\n drawWidth = x + width + lineWidthOffset;\n drawHeight = y + height + lineWidthOffset;\n break;\n case isBottom:\n drawX = x - lineWidthOffset;\n drawY = y - lineWidthOffset;\n drawWidth = x + width + lineWidthOffset;\n drawHeight = y + height + extendOffset;\n break;\n case isLeft:\n drawX = x - extendOffset;\n drawY = y - lineWidthOffset;\n drawWidth = x + width + lineWidthOffset;\n drawHeight = y + height + lineWidthOffset;\n break;\n case isRight:\n drawX = x - lineWidthOffset;\n drawY = y - lineWidthOffset;\n drawWidth = x + width + extendOffset;\n drawHeight = y + height + lineWidthOffset;\n break;\n }\n this.maskG = drawRoundRectangle(\n this.roughSVG as RoughSVG,\n drawX,\n drawY,\n drawWidth,\n drawHeight,\n { stroke: 'none', fill: 'rgba(255,255,255,0)', fillStyle: 'solid' },\n true\n );\n this.maskG.classList.add('mask');\n this.maskG.setAttribute('visibility', 'visible');\n this.g.append(this.maskG);\n\n if (this.isEditable) {\n this.disabledMaskG();\n }\n\n fromEvent<MouseEvent>(this.maskG, 'mouseenter')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return PlaitBoard.isFocus(this.board) && !this.element.isCollapsed && !this.handActive;\n })\n )\n .subscribe(() => {\n this.g.classList.add('hovered');\n });\n fromEvent<MouseEvent>(this.maskG, 'mouseleave')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return PlaitBoard.isFocus(this.board) && !this.element.isCollapsed;\n })\n )\n .subscribe(() => {\n this.g.classList.remove('hovered');\n });\n }\n\n destroyMaskG() {\n if (this.maskG) {\n this.maskG.remove();\n this.g.classList.remove('hovered');\n }\n }\n\n enableMaskG() {\n if (this.maskG) {\n this.maskG.setAttribute('visibility', 'visible');\n }\n }\n\n disabledMaskG() {\n if (this.maskG) {\n this.maskG.setAttribute('visibility', 'hidden');\n }\n }\n\n drawActiveG() {\n this.destroyActiveG();\n this.abstractIncludedOutlineG?.remove();\n if (this.selected) {\n if (AbstractNode.isAbstract(this.element)) {\n this.updateAbstractIncludedOutline();\n }\n let { x, y, width, height } = getRectangleByNode(this.node as MindNode);\n const selectedStrokeG = drawRoundRectangle(\n this.roughSVG as RoughSVG,\n x - 2,\n y - 2,\n x + width + 2,\n y + height + 2,\n { stroke: PRIMARY_COLOR, strokeWidth: 2, fill: '' },\n true\n );\n // 影响 mask 移入移出事件\n selectedStrokeG.style.pointerEvents = 'none';\n this.g.appendChild(selectedStrokeG);\n this.activeG.push(selectedStrokeG);\n if (this.richtextComponentRef?.instance.plaitReadonly === true) {\n const selectedBackgroundG = drawRoundRectangle(\n this.roughSVG as RoughSVG,\n x - 2,\n y - 2,\n x + width + 2,\n y + height + 2,\n { stroke: PRIMARY_COLOR, fill: PRIMARY_COLOR, fillStyle: 'solid' },\n true\n );\n selectedBackgroundG.style.opacity = '0.15';\n // 影响双击事件\n selectedBackgroundG.style.pointerEvents = 'none';\n this.g.appendChild(selectedBackgroundG);\n this.activeG.push(selectedBackgroundG, selectedStrokeG);\n }\n }\n }\n\n destroyActiveG() {\n this.activeG.forEach(g => g.remove());\n this.activeG = [];\n }\n\n updateActiveClass() {\n if (!this.g) {\n return;\n }\n if (this.selected) {\n this.render2.addClass(this.g, 'active');\n } else {\n this.render2.removeClass(this.g, 'active');\n }\n }\n\n drawRichtext() {\n const { richtextG, richtextComponentRef, foreignObject } = drawMindNodeRichtext(this.node as MindNode, this.viewContainerRef);\n this.richtextComponentRef = richtextComponentRef;\n this.richtextG = richtextG;\n this.foreignObject = foreignObject;\n this.render2.addClass(richtextG, 'richtext');\n this.g.append(richtextG);\n }\n\n drawExtend() {\n this.destroyExtend();\n // create extend\n this.extendG = createG();\n const collapseG = createG();\n this.extendG.classList.add('extend');\n collapseG.classList.add('collapse-container');\n this.g.append(this.extendG);\n this.extendG.append(collapseG);\n if (this.node.origin.isRoot) {\n return;\n }\n // interactive\n fromEvent(collapseG, 'mouseup')\n .pipe(\n filter(() => !this.handActive || this.board.options.readonly),\n take(1)\n )\n .subscribe(() => {\n const isCollapsed = !this.node.origin.isCollapsed;\n const newElement: Partial<MindElement> = { isCollapsed };\n const path = PlaitBoard.findPath(this.board, this.element);\n Transforms.setNode(this.board, newElement, path);\n });\n\n const { x, y, width, height } = getRectangleByNode(this.node);\n const stroke = getBranchColorByMindElement(this.board, this.element);\n const strokeWidth = this.node.origin.branchWidth ? this.node.origin.branchWidth : STROKE_WIDTH;\n const extendY = y + height / 2;\n const nodeLayout = MindQueries.getCorrectLayoutByElement(this.element) as MindLayoutType;\n\n let extendLineXY = [\n [x + width, extendY],\n [x + width + EXTEND_OFFSET, extendY]\n ];\n\n let arrowYOffset = [-4, 1, -0.6, 4];\n let arrowXOffset = [10, 5.5, 5.5, 10];\n\n let extendLineXOffset = [0, 0];\n let extendLineYOffset = [0, 0];\n\n let circleOffset = [EXTEND_RADIUS / 2, 0];\n\n if (isHorizontalLayout(nodeLayout) && !isIndentedLayout(nodeLayout)) {\n extendLineYOffset =\n (getNodeShapeByElement(this.node.origin) as MindNodeShape) === MindNodeShape.roundRectangle\n ? [0, 0]\n : [height / 2, height / 2];\n if (isLeftLayout(nodeLayout)) {\n //左\n extendLineXOffset = [-width, -width - EXTEND_OFFSET * 2];\n circleOffset = [-EXTEND_RADIUS / 2, 0];\n arrowXOffset = [-10, -5.5, -5.5, -10];\n }\n } else {\n arrowXOffset = [-4, 0.6, -1, 4];\n if (isTopLayout(nodeLayout)) {\n //上\n extendLineXOffset = [-width / 2, -width / 2 - EXTEND_OFFSET];\n extendLineYOffset = [-height / 2, -height / 2 - EXTEND_OFFSET];\n arrowYOffset = [-10, -5.5, -5.5, -10];\n circleOffset = [0, -EXTEND_RADIUS / 2];\n } else {\n //下\n extendLineXOffset = [-width / 2, -width / 2 - EXTEND_OFFSET];\n extendLineYOffset = [height / 2, height / 2 + EXTEND_OFFSET];\n arrowYOffset = [10, 5.5, 5.5, 10];\n circleOffset = [0, EXTEND_RADIUS / 2];\n }\n }\n\n extendLineXY = [\n [extendLineXY[0][0] + extendLineXOffset[0], extendLineXY[0][1] + extendLineYOffset[0]],\n [extendLineXY[1][0] + extendLineXOffset[1], extendLineXY[1][1] + extendLineYOffset[1]]\n ];\n\n const extendLine = this.roughSVG.line(extendLineXY[0][0], extendLineXY[0][1], extendLineXY[1][0], extendLineXY[1][1], {\n strokeWidth,\n stroke\n });\n\n //绘制箭头\n const hideArrowTopLine = this.roughSVG.line(\n extendLineXY[1][0] + arrowXOffset[0],\n extendLineXY[1][1] + arrowYOffset[0],\n extendLineXY[1][0] + arrowXOffset[1],\n extendLineXY[1][1] + arrowYOffset[1],\n {\n stroke,\n strokeWidth: 2\n }\n );\n const hideArrowBottomLine = this.roughSVG.line(\n extendLineXY[1][0] + arrowXOffset[2],\n extendLineXY[1][1] + arrowYOffset[2],\n extendLineXY[1][0] + arrowXOffset[3],\n extendLineXY[1][1] + arrowYOffset[3],\n {\n stroke,\n strokeWidth: 2\n }\n );\n\n if (this.node.origin.isCollapsed) {\n const badge = this.roughSVG.circle(extendLineXY[1][0] + circleOffset[0], extendLineXY[1][1] + circleOffset[1], EXTEND_RADIUS, {\n fill: stroke,\n stroke,\n fillStyle: 'solid'\n });\n\n let numberOffset = 0;\n if (getChildrenCount(this.node.origin) >= 10) numberOffset = -2;\n if (getChildrenCount(this.node.origin) === 1) numberOffset = 1;\n\n const badgeText = createText(\n extendLineXY[1][0] + circleOffset[0] - 4 + numberOffset,\n extendLineXY[1][1] + circleOffset[1] + 4,\n stroke,\n `${getChildrenCount(this.node.origin)}`\n );\n\n this.g.classList.add('collapsed');\n badge.setAttribute('style', 'opacity: 0.15');\n badgeText.setAttribute('style', 'font-size: 12px');\n collapseG.appendChild(badge);\n collapseG.appendChild(badgeText);\n collapseG.appendChild(extendLine);\n } else {\n this.g.classList.remove('collapsed');\n if (this.node.origin.children.length > 0) {\n const hideCircleG = this.roughSVG.circle(\n extendLineXY[1][0] + circleOffset[0],\n extendLineXY[1][1] + circleOffset[1],\n EXTEND_RADIUS - 1,\n {\n fill: '#fff',\n stroke,\n strokeWidth,\n fillStyle: 'solid'\n }\n );\n collapseG.appendChild(hideCircleG);\n collapseG.appendChild(hideArrowTopLine);\n collapseG.appendChild(hideArrowBottomLine);\n }\n }\n }\n\n destroyExtend() {\n if (this.extendG) {\n this.extendG.remove();\n }\n }\n\n destroyRichtext() {\n if (this.richtextG) {\n this.richtextG.remove();\n }\n if (this.richtextComponentRef) {\n this.richtextComponentRef.destroy();\n }\n }\n\n updateAbstractIncludedOutline(activeHandlePosition?: AbstractHandlePosition, resizingLocation?: number) {\n this.abstractIncludedOutlineG?.remove();\n this.abstractIncludedOutlineG = drawAbstractIncludedOutline(\n this.board,\n this.roughSVG,\n this.element,\n activeHandlePosition,\n resizingLocation\n );\n PlaitBoard.getHost(this.board).append(this.abstractIncludedOutlineG);\n }\n\n updateRichtext() {\n updateRichText(this.node.origin.data.topic, this.richtextComponentRef!);\n updateMindNodeTopicSize(this.node, this.richtextG as SVGGElement, this.isEditable);\n }\n\n startEditText(isEnd: boolean, isClear: boolean) {\n if (!this.richtextComponentRef) {\n throw new Error('undefined richtextComponentRef');\n }\n const richtextInstance = this.richtextComponentRef.instance;\n\n this.isEditable = true;\n IS_TEXT_EDITABLE.set(this.board, true);\n this.disabledMaskG();\n updateMindNodeTopicSize(this.node, this.richtextG as SVGGElement, this.isEditable);\n if (richtextInstance.plaitReadonly) {\n richtextInstance.plaitReadonly = false;\n this.richtextComponentRef.changeDetectorRef.detectChanges();\n this.drawActiveG();\n const location = isEnd ? Editor.end(richtextInstance.editor, [0]) : [0];\n setFullSelectionAndFocus(richtextInstance.editor, location);\n if (isClear) {\n Editor.deleteBackward(richtextInstance.editor);\n }\n // handle invalid width and height (old data)\n let { width, height } = getRichtextContentSize(richtextInstance.editable);\n if (width !== this.element.width || height !== this.element.height) {\n MindTransforms.setTopicSize(this.board, this.element, width, height);\n }\n }\n let richtext = richtextInstance.plaitValue;\n // use debounceTime to wait DOM render complete\n const valueChange$ = richtextInstance.plaitChange\n .pipe(\n debounceTime(0),\n filter(event => {\n // 过滤掉 operations 中全是 set_selection 的操作\n return !event.operations.every(op => Operation.isSelectionOperation(op));\n })\n )\n .subscribe(event => {\n if (richtext === event.value) {\n return;\n }\n this.updateRichtext();\n // 更新富文本、更新宽高\n let { width, height } = getRichtextContentSize(richtextInstance.editable);\n MindTransforms.setTopic(this.board, this.element, event.value, width, height);\n MERGING.set(this.board, true);\n });\n const composition$ = richtextInstance.plaitComposition.pipe(debounceTime(0)).subscribe(event => {\n let { width, height } = getRichtextContentSize(richtextInstance.editable);\n if (width < NODE_MIN_WIDTH) {\n width = NODE_MIN_WIDTH;\n }\n if (event.isComposing && (width !== this.node.origin.width || height !== this.node.origin.height)) {\n const newElement: Partial<MindElement> = {\n width: width / this.board.viewport.zoom,\n height: height / this.board.viewport.zoom\n };\n const path = PlaitBoard.findPath(this.board, this.element);\n Transforms.setNode(this.board, newElement, path);\n MERGING.set(this.board, true);\n }\n });\n const mousedown$ = fromEvent<MouseEvent>(document, 'mousedown').subscribe((event: MouseEvent) => {\n const point = transformPoint(this.board, toPoint(event.x, event.y, PlaitBoard.getHost(this.board)));\n const clickInNode = hitMindElement(this.board, point, this.element);\n if (clickInNode && !hasEditableTarget(richtextInstance.editor, event.target)) {\n event.preventDefault();\n } else if (!clickInNode) {\n // handle composition input state, like: Chinese IME Composition Input\n timer(0).subscribe(() => {\n exitHandle();\n this.enableMaskG();\n });\n }\n });\n const editor = richtextInstance.editor;\n const { keydown } = editor;\n editor.keydown = (event: KeyboardEvent) => {\n if (event.isComposing) {\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n exitHandle();\n this.drawActiveG();\n this.enableMaskG();\n return;\n }\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n event.stopPropagation();\n exitHandle();\n this.drawActiveG();\n this.enableMaskG();\n return;\n }\n if (event.key === 'Tab') {\n event.preventDefault();\n event.stopPropagation();\n exitHandle();\n this.drawActiveG();\n this.drawMaskG();\n }\n };\n const exitHandle = () => {\n // unsubscribe\n valueChange$.unsubscribe();\n composition$.unsubscribe();\n mousedown$.unsubscribe();\n editor.keydown = keydown; // reset keydown\n // editable status\n MERGING.set(this.board, false);\n richtextInstance.plaitReadonly = true;\n this.richtextComponentRef?.changeDetectorRef.markForCheck();\n this.isEditable = false;\n updateMindNodeTopicSize(this.node, this.richtextG as SVGGElement, this.isEditable);\n IS_TEXT_EDITABLE.set(this.board, false);\n };\n }\n\n trackBy = (index: number, node: MindNode) => {\n return node.origin.id;\n };\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.abstractIncludedOutlineG?.remove();\n this.destroyRichtext();\n this.destroy$.next();\n this.destroy$.complete();\n if (ELEMENT_TO_NODE.get(this.element) === this.node) {\n ELEMENT_TO_NODE.delete(this.element);\n }\n }\n}\n","import { ConnectingPosition, LayoutNode, LayoutOptions, OriginNode, isHorizontalLayout, isHorizontalLogicLayout, isIndentedLayout } from \"@plait/layouts\";\nimport { MindElement } from \"./interfaces/element\";\nimport { BASE, STROKE_WIDTH } from \"./constants/default\";\nimport { getRootLayout } from \"./utils/layout\";\nimport { MindNodeShape } from \"./constants/node\";\nimport { NodeSpace } from \"./utils/node-space\";\n\nexport const getLayoutOptions = () => {\n function getMainAxle(element: MindElement, parent?: LayoutNode) {\n const strokeWidth = element.strokeWidth || STROKE_WIDTH;\n if (element.isRoot) {\n return BASE * 12;\n }\n if (parent && parent.isRoot()) {\n return BASE * 3 + strokeWidth / 2;\n }\n return BASE * 3 + strokeWidth / 2;\n }\n\n function getSecondAxle(element: MindElement, parent?: LayoutNode) {\n const strokeWidth = element.strokeWidth || STROKE_WIDTH;\n if (element.isRoot) {\n return BASE * 10 + strokeWidth / 2;\n }\n return BASE * 6 + strokeWidth / 2;\n }\n\n return {\n getHeight(element: MindElement) {\n return NodeSpace.getNodeHeight(element);\n },\n getWidth(element: MindElement) {\n return NodeSpace.getNodeWidth(element);\n },\n getHorizontalGap(element: MindElement, parent?: LayoutNode) {\n const _layout = (parent && parent.layout) || getRootLayout(element);\n const isHorizontal = isHorizontalLayout(_layout);\n const strokeWidth = element.strokeWidth || STROKE_WIDTH;\n if (isIndentedLayout(_layout)) {\n return BASE * 4 + strokeWidth;\n }\n if (!isHorizontal) {\n return getMainAxle(element, parent);\n } else {\n return getSecondAxle(element, parent);\n }\n },\n getVerticalGap(element: MindElement, parent?: LayoutNode) {\n const _layout = (parent && parent.layout) || getRootLayout(element);\n if (isIndentedLayout(_layout)) {\n return BASE;\n }\n const isHorizontal = isHorizontalLayout(_layout);\n if (isHorizontal) {\n return getMainAxle(element, parent);\n } else {\n return getSecondAxle(element, parent);\n }\n },\n getVerticalConnectingPosition(element: MindElement, parent?: LayoutNode) {\n if (element.shape === MindNodeShape.underline && parent && isHorizontalLogicLayout(parent.layout)) {\n return ConnectingPosition.bottom;\n }\n return undefined;\n },\n getExtendHeight(node: OriginNode) {\n return BASE * 6;\n },\n getIndentedCrossLevelGap() {\n return BASE * 2;\n }\n } as LayoutOptions;\n}","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { PlaitMind } from './interfaces/element';\nimport { MindNode } from './interfaces/node';\nimport { BeforeContextChange, PlaitPluginElementContext, depthFirstRecursion } from '@plait/core';\nimport { GlobalLayout, OriginNode } from '@plait/layouts';\nimport { ELEMENT_TO_NODE } from './utils/weak-maps';\nimport { MindNodeComponent } from './node.component';\nimport { getLayoutOptions } from './layout-option';\nimport { getDefaultLayout } from './utils/layout';\n\n@Component({\n selector: 'plait-mind',\n template: `\n <plait-children [board]=\"board\" [parent]=\"element\" [effect]=\"effect\" [parentG]=\"rootG\"></plait-children>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitMindComponent extends MindNodeComponent<PlaitMind> implements OnInit, BeforeContextChange<PlaitMind> {\n root!: MindNode;\n\n rootG!: SVGGElement;\n\n ngOnInit(): void {\n this.updateMindLayout();\n super.ngOnInit();\n }\n\n beforeContextChange(value: PlaitPluginElementContext<PlaitMind>) {\n if (value.element !== this.element && this.initialized) {\n this.updateMindLayout(value.element);\n }\n }\n\n updateMindLayout(element = this.element) {\n const mindLayoutType = element.layout || getDefaultLayout();\n this.root = (GlobalLayout.layout((element as unknown) as OriginNode, getLayoutOptions(), mindLayoutType) as unknown) as MindNode;\n this.updateMindNodeLocation(element);\n }\n\n updateMindNodeLocation(element: PlaitMind) {\n const { x, y, hGap, vGap } = this.root;\n const offsetX = x + hGap;\n const offsetY = y + vGap;\n depthFirstRecursion<MindNode>(this.root, node => {\n node.x = node.x - offsetX + element.points[0][0];\n node.y = node.y - offsetY + element.points[0][1];\n ELEMENT_TO_NODE.set(node.origin, node);\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { PlaitModule } from '@plait/core';\nimport { RichtextModule } from '@plait/richtext';\nimport { MindNodeComponent } from './node.component';\nimport { PlaitMindComponent } from './mind.component';\n\n@NgModule({\n declarations: [PlaitMindComponent, MindNodeComponent],\n imports: [BrowserModule, RichtextModule, PlaitModule],\n exports: [PlaitMindComponent, MindNodeComponent]\n})\nexport class MindModule {}\n","import {\n createG,\n distanceBetweenPointAndPoint,\n IS_TEXT_EDITABLE,\n Path,\n PlaitBoard,\n PlaitElement,\n PlaitPlugin,\n Point,\n toPoint,\n transformPoint,\n Transforms,\n ELEMENT_TO_COMPONENT,\n getSelectedElements\n} from '@plait/core';\nimport {\n AbstractNode,\n isBottomLayout,\n isHorizontalLogicLayout,\n isIndentedLayout,\n isLeftLayout,\n isRightLayout,\n isStandardLayout,\n isTopLayout,\n isVerticalLogicLayout,\n MindLayoutType\n} from '@plait/layouts';\nimport { updateForeignObject } from '@plait/richtext';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { BASE } from '../constants';\nimport { getRichtextRectangleByNode } from '../draw/richtext';\nimport { drawRectangleNode } from '../draw/shape';\nimport { MindElement, PlaitMind } from '../interfaces/element';\nimport { DetectResult, MindNode } from '../interfaces/node';\nimport { MindNodeComponent } from '../node.component';\nimport {\n directionCorrector,\n directionDetector,\n drawPlaceholderDropNodeG,\n findUpElement,\n isChildElement,\n readjustmentDropTarget\n} from '../utils';\nimport { getRectangleByNode, hitMindElement } from '../utils/graph';\nimport { MindQueries } from '../queries';\nimport { PlaitMindComponent } from '../mind.component';\n\nconst DRAG_MOVE_BUFFER = 5;\n\nexport const withDnd = (board: PlaitBoard) => {\n const { mousedown, mousemove, globalMouseup, keydown } = board;\n\n let activeElement: MindElement | null;\n let startPoint: Point;\n let fakeDragNodeG: SVGGElement | undefined;\n let fakeDropNodeG: SVGGElement | undefined;\n let dropTarget: { target: MindElement; detectResult: DetectResult } | null = null;\n\n board.mousedown = (event: MouseEvent) => {\n if (board.options.readonly || IS_TEXT_EDITABLE.get(board) || event.button === 2) {\n mousedown(event);\n return;\n }\n\n // 确认是否 hit 节点\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const selectedElements = getSelectedElements(board);\n board.children.forEach((value: PlaitElement) => {\n if (activeElement) {\n return;\n }\n if (PlaitMind.isMind(value)) {\n const mindmapComponent = ELEMENT_TO_COMPONENT.get(value) as PlaitMindComponent;\n const root = mindmapComponent?.root;\n (root as any).eachNode((node: MindNode) => {\n if (activeElement) {\n return;\n }\n\n const canDrag =\n hitMindElement(board, point, node.origin) &&\n !node.origin.isRoot &&\n !AbstractNode.isAbstract(node.origin) &&\n selectedElements.length <= 1;\n\n if (canDrag) {\n activeElement = node.origin;\n startPoint = point;\n }\n });\n }\n });\n\n if (activeElement) {\n event.preventDefault();\n }\n\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n if (!board.options.readonly && activeElement && startPoint) {\n const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance < DRAG_MOVE_BUFFER) {\n return;\n }\n\n if (!isDragging(board)) {\n setIsDragging(board, true);\n fakeDragNodeG = createG();\n fakeDragNodeG.classList.add('dragging', 'fake-node', 'plait-board-attached');\n fakeDropNodeG = createG();\n addActiveOnDragOrigin(activeElement);\n PlaitBoard.getHost(board).appendChild(fakeDropNodeG);\n PlaitBoard.getHost(board).appendChild(fakeDragNodeG);\n } else {\n if (fakeDragNodeG) {\n fakeDragNodeG.innerHTML = '';\n }\n\n fakeDropNodeG?.childNodes.forEach(node => {\n node.remove();\n });\n }\n\n // fake dragging origin node\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n const activeComponent = PlaitElement.getComponent(activeElement) as MindNodeComponent;\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const fakeDraggingNode: MindNode = {\n ...activeComponent.node,\n children: [],\n x: activeComponent.node.x + offsetX,\n y: activeComponent.node.y + offsetY\n };\n const textRectangle = getRichtextRectangleByNode(activeComponent.node);\n const fakeNodeG = drawRectangleNode(board, fakeDraggingNode);\n const richtextG = activeComponent.richtextG?.cloneNode(true) as SVGGElement;\n updateForeignObject(\n richtextG,\n textRectangle.width + BASE * 10,\n textRectangle.height,\n textRectangle.x + offsetX,\n textRectangle.y + offsetY\n );\n fakeDragNodeG?.append(fakeNodeG);\n fakeDragNodeG?.append(richtextG);\n\n // drop position detect\n const { x, y } = getRectangleByNode(fakeDraggingNode);\n const detectCenterPoint = [x + textRectangle.width / 2, y + textRectangle.height / 2] as Point;\n\n let detectResult: DetectResult[] | null = null;\n board.children.forEach((value: PlaitElement) => {\n if (detectResult) {\n return;\n }\n if (PlaitMind.isMind(value)) {\n const mindmapComponent = ELEMENT_TO_COMPONENT.get(value) as PlaitMindComponent;\n const root = mindmapComponent?.root;\n\n (root as any).eachNode((node: MindNode) => {\n if (detectResult) {\n return;\n }\n const directions = directionDetector(node, detectCenterPoint);\n if (directions) {\n detectResult = directionCorrector(node, directions);\n }\n dropTarget = null;\n if (detectResult && isValidTarget(activeComponent.node.origin, node.origin)) {\n dropTarget = { target: node.origin, detectResult: detectResult[0] };\n }\n });\n }\n });\n\n if (dropTarget?.target) {\n dropTarget = readjustmentDropTarget(dropTarget);\n drawPlaceholderDropNodeG(board, dropTarget, fakeDropNodeG);\n }\n }\n\n mousemove(event);\n };\n\n board.globalMouseup = (event: MouseEvent) => {\n if (!board.options.readonly && activeElement) {\n if (dropTarget?.target) {\n const activeComponent = PlaitElement.getComponent(activeElement) as MindNodeComponent;\n const targetComponent = PlaitElement.getComponent(dropTarget.target) as MindNodeComponent;\n let targetPath = PlaitBoard.findPath(board, targetComponent.element);\n const mindmapElement = findUpElement(dropTarget.target).root;\n const mindmapComponent = ELEMENT_TO_COMPONENT.get(mindmapElement as PlaitMind) as PlaitMindComponent;\n const layout = MindQueries.getCorrectLayoutByElement(mindmapComponent?.root.origin as MindElement);\n targetPath = updatePathByLayoutAndDropTarget(targetPath, layout, dropTarget);\n const originPath = PlaitBoard.findPath(board, activeComponent.element);\n let newElement: Partial<MindElement> = { isCollapsed: false },\n rightTargetPath = PlaitBoard.findPath(board, targetComponent.element);\n\n if (isStandardLayout(layout)) {\n updateRightNodeCount(board, activeComponent, targetComponent, dropTarget.detectResult);\n }\n\n if (dropTarget.detectResult === 'right') {\n if (targetComponent.node.origin.isRoot) {\n targetPath = PlaitBoard.findPath(board, targetComponent.element);\n targetPath.push(0);\n const rightNodeCount = (targetComponent.node.origin.rightNodeCount as number) + 1;\n newElement = { isCollapsed: false, rightNodeCount };\n }\n Transforms.setNode(board, newElement, rightTargetPath as Path);\n }\n\n Transforms.moveNode(board, originPath, targetPath);\n }\n\n if (isDragging(board)) {\n removeActiveOnDragOrigin(activeElement);\n }\n setIsDragging(board, false);\n activeElement = null;\n fakeDragNodeG?.remove();\n fakeDragNodeG = undefined;\n fakeDropNodeG?.remove();\n fakeDropNodeG = undefined;\n dropTarget = null;\n }\n globalMouseup(event);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n keydown(event);\n };\n\n return board;\n};\n\nexport const isValidTarget = (origin: MindElement, target: MindElement) => {\n return origin !== target && !isChildElement(origin, target);\n};\n\nexport const addActiveOnDragOrigin = (activeElement: MindElement, isOrigin = true) => {\n const activeComponent = PlaitElement.getComponent(activeElement) as MindNodeComponent;\n if (isOrigin) {\n activeComponent.g.classList.add('dragging-origin');\n } else {\n activeComponent.g.classList.add('dragging-child');\n }\n !activeElement.isCollapsed &&\n activeElement.children.forEach(child => {\n addActiveOnDragOrigin(child, false);\n });\n};\n\nexport const removeActiveOnDragOrigin = (activeElement: MindElement, isOrigin = true) => {\n const activeComponent = PlaitElement.getComponent(activeElement) as MindNodeComponent;\n if (isOrigin) {\n activeComponent.g.classList.remove('dragging-origin');\n } else {\n activeComponent.g.classList.remove('dragging-child');\n }\n !activeElement.isCollapsed &&\n activeElement.children.forEach(child => {\n removeActiveOnDragOrigin(child, false);\n });\n};\n\nconst updatePathByLayoutAndDropTarget = (\n targetPath: Path,\n layout: MindLayoutType,\n dropTarget: { target: MindElement; detectResult: DetectResult }\n) => {\n // 上下布局:左右是兄弟节点,上下是子节点\n if (isVerticalLogicLayout(layout)) {\n if (isTopLayout(layout) && dropTarget.detectResult === 'top') {\n targetPath.push(dropTarget.target.children.length);\n }\n if (isBottomLayout(layout) && dropTarget.detectResult === 'bottom') {\n targetPath.push(dropTarget.target.children.length);\n }\n // 如果是左,位置不变,右则插入到下一个兄弟节点\n if (dropTarget.detectResult === 'right') {\n targetPath = Path.next(targetPath);\n }\n }\n // 水平布局/标准布局:上下是兄弟节点,左右是子节点\n if (isHorizontalLogicLayout(layout)) {\n if (dropTarget.detectResult === 'right') {\n targetPath.push(dropTarget.target.children.length);\n }\n if (dropTarget.detectResult === 'left') {\n targetPath.push(dropTarget.target.children.length);\n }\n // 如果是上,位置不变,下插入到下一个兄弟节点\n if (dropTarget.detectResult === 'bottom') {\n targetPath = Path.next(targetPath);\n }\n }\n // 缩进布局:上下是兄弟节点,左右是子节点,但上(左上/右上),探测到上是子节点,下则位置不变,反之同理。\n if (isIndentedLayout(layout)) {\n if (isTopLayout(layout) && dropTarget.detectResult === 'top') {\n targetPath = Path.next(targetPath);\n }\n if (isBottomLayout(layout) && dropTarget.detectResult === 'bottom') {\n targetPath = Path.next(targetPath);\n }\n if (isLeftLayout(layout) && dropTarget.detectResult === 'left') {\n targetPath.push(dropTarget.target.children.length);\n }\n if (isRightLayout(layout) && dropTarget.detectResult === 'right') {\n targetPath.push(dropTarget.target.children.length);\n }\n }\n return targetPath;\n};\n\nexport const updateRightNodeCount = (\n board: PlaitBoard,\n activeComponent: MindNodeComponent,\n targetComponent: MindNodeComponent,\n detectResult: DetectResult\n) => {\n let rightNodeCount;\n const mindmapElement = findUpElement(targetComponent.node.origin).root;\n const mindmapComponent = ELEMENT_TO_COMPONENT.get(mindmapElement as PlaitMind) as PlaitMindComponent;\n const activeIndex = mindmapComponent?.root.children.indexOf(activeComponent.node) as number;\n const targetIndex = mindmapComponent?.root.children.indexOf(targetComponent.node) as number;\n const isActiveOnRight = activeIndex !== -1 && activeIndex <= (activeComponent.parent.origin.rightNodeCount as number) - 1;\n const isTargetOnRight =\n targetComponent.parent && targetIndex !== -1 && targetIndex <= (targetComponent.parent.origin.rightNodeCount as number) - 1;\n const isBothOnRight = isActiveOnRight && isTargetOnRight;\n const rootChildCount = mindmapComponent.root.children?.length as number;\n const rootRightNodeCount = mindmapComponent?.root.origin.rightNodeCount as number;\n\n if (!isBothOnRight) {\n if (isActiveOnRight) {\n rightNodeCount = rootChildCount < rootRightNodeCount ? rootChildCount - 1 : rootRightNodeCount - 1;\n Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, activeComponent.parent.origin));\n }\n\n if (isTargetOnRight && detectResult !== 'right') {\n rightNodeCount = rootChildCount < rootRightNodeCount ? rootRightNodeCount : rootRightNodeCount + 1;\n Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, targetComponent.parent.origin));\n }\n\n //二级子节点拖动到根节点左侧\n if (targetComponent.node.origin.isRoot && detectResult === 'left' && activeIndex === -1) {\n rightNodeCount = rootChildCount;\n Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, targetComponent.element));\n }\n }\n};\n\nconst IS_DRAGGING = new WeakMap<PlaitBoard, boolean>();\n\nexport const isDragging = (board: PlaitBoard) => {\n return !!IS_DRAGGING.get(board);\n};\n\nexport const setIsDragging = (board: PlaitBoard, state: boolean) => {\n IS_DRAGGING.set(board, state);\n};\n","import {\n CLIP_BOARD_FORMAT_KEY,\n getRectangleByElements,\n getSelectedElements,\n Path,\n PlaitBoard,\n PlaitElement,\n Point,\n Transforms\n} from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { copyNewNode, extractNodesText, transformNodeToRoot, transformRootToNode, createMindElement, transformAbstractToNode } from '.';\nimport { getRectangleByNode } from './graph';\nimport { AbstractNode } from '@plait/layouts';\n\nexport const buildClipboardData = (board: PlaitBoard, selectedElements: MindElement[]) => {\n let result: MindElement[] = [];\n const selectedMindNodes = selectedElements.map(value => MindElement.getNode(value));\n const nodesRectangle = getRectangleByElements(board, selectedElements, true);\n selectedElements.forEach((node, index) => {\n const nodeRectangle = getRectangleByNode(selectedMindNodes[index]);\n result.push({\n ...node,\n points: [[nodeRectangle.x - nodesRectangle.x, nodeRectangle.y - nodesRectangle.y]]\n });\n });\n\n return result;\n};\n\nexport const setClipboardData = (data: DataTransfer | null, elements: MindElement[]) => {\n const stringObj = JSON.stringify(elements);\n const encoded = window.btoa(encodeURIComponent(stringObj));\n const text = elements.reduce((string, currentNode) => {\n return string + extractNodesText(currentNode);\n }, '');\n data?.setData(`application/${CLIP_BOARD_FORMAT_KEY}`, encoded);\n data?.setData(`text/plain`, text);\n};\n\nexport const getDataFromClipboard = (data: DataTransfer | null) => {\n const encoded = data?.getData(`application/${CLIP_BOARD_FORMAT_KEY}`);\n let nodesData: PlaitElement[] = [];\n if (encoded) {\n const decoded = decodeURIComponent(window.atob(encoded));\n nodesData = JSON.parse(decoded);\n }\n return nodesData;\n};\n\nexport const insertClipboardData = (board: PlaitBoard, elements: PlaitElement[], targetPoint: Point) => {\n let newElement: MindElement, path: Path;\n const selectedElements = getSelectedElements(board);\n let newELements: PlaitElement[] = [];\n\n elements.forEach((item: PlaitElement, index: number) => {\n newElement = copyNewNode(item as MindElement);\n\n if (selectedElements.length === 1) {\n if (item.isRoot) {\n newElement = transformRootToNode(board, newElement);\n }\n if (AbstractNode.isAbstract(item)) {\n newElement = transformAbstractToNode(newElement);\n }\n const selectedElementPath = PlaitBoard.findPath(board, selectedElements[0]);\n path = selectedElementPath.concat((selectedElements[0].children || []).length + index);\n } else {\n const point: Point = [targetPoint[0] + item.points![0][0], targetPoint[1] + item.points![0][1]];\n newElement.points = [point];\n\n if (AbstractNode.isAbstract(item)) {\n newElement = transformAbstractToNode(newElement);\n }\n\n if (!item.isRoot) {\n newElement = transformNodeToRoot(board, newElement);\n }\n\n path = [board.children.length];\n }\n newELements.push(newElement);\n Transforms.insertNode(board, newElement, path);\n return;\n });\n Transforms.setSelectionWithTemporaryElements(board, newELements);\n};\n\nexport const insertClipboardText = (board: PlaitBoard, parentElement: PlaitElement, text: string, width: number, height: number) => {\n const newElement = createMindElement(text, width, height, {});\n const path = PlaitBoard.findPath(board, parentElement).concat((parentElement.children || []).length);\n Transforms.insertNode(board, newElement, path);\n return;\n};\n","import { ComponentType, PlaitBoard, PlaitPlugin } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { EmojiItem } from '../../interfaces/element-data';\nimport { MindEmojiBaseComponent } from './emoji-base.component';\n\nexport interface PlaitMindEmojiBoard extends PlaitBoard {\n drawEmoji: (emoji: EmojiItem, element: MindElement) => ComponentType<MindEmojiBaseComponent>;\n}\n\nexport const withEmoji = (board: PlaitBoard) => {\n const newBoard = board as PlaitBoard & PlaitMindEmojiBoard;\n\n newBoard.drawEmoji = (emoji: EmojiItem, element: MindElement) => {\n throw new Error('Not implement drawEmoji method error.');\n };\n\n return newBoard;\n};\n","import {\n BOARD_TO_HOST,\n PlaitBoard,\n PlaitElement,\n PlaitPlugin,\n Point,\n Transforms,\n getSelectedElements,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { AbstractNode, LayoutNode, MindLayoutType, isHorizontalLayout, isStandardLayout } from '@plait/layouts';\nimport { AbstractHandlePosition, AbstractResizeState, MindElement, PlaitAbstractBoard } from '../interfaces';\nimport { MindNodeComponent, MindQueries } from '../public-api';\nimport { findLocationLeftIndex, getHitAbstractHandle, getLocationScope, handleTouchedAbstract } from '../utils/abstract/resize';\nimport { separateChildren } from '../utils/abstract/common';\n\nexport const withAbstract: PlaitPlugin = (board: PlaitBoard) => {\n const newBoard = board as PlaitBoard & PlaitAbstractBoard;\n\n const { mousedown, mousemove, mouseup } = board;\n let activeAbstractElement: PlaitElement | undefined;\n let abstractHandlePosition: AbstractHandlePosition | undefined;\n let touchedAbstract: PlaitElement | undefined;\n let startPoint: Point | undefined;\n let newProperty: { end: number } | { start: number } | undefined;\n\n board.mousedown = (event: MouseEvent) => {\n const activeAbstractElements = getSelectedElements(board).filter(element => AbstractNode.isAbstract(element));\n const host = BOARD_TO_HOST.get(board);\n const point = transformPoint(board, toPoint(event.x, event.y, host!));\n\n activeAbstractElement = activeAbstractElements.find(element => {\n abstractHandlePosition = getHitAbstractHandle(board, element as MindElement, point);\n if (newBoard?.abstractResize) {\n newBoard.abstractResize(AbstractResizeState.start);\n }\n return abstractHandlePosition;\n });\n\n if (activeAbstractElement) {\n startPoint = point;\n return;\n }\n\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n getSelectedElements(board);\n const host = BOARD_TO_HOST.get(board);\n const endPoint = transformPoint(board, toPoint(event.x, event.y, host!));\n\n touchedAbstract = handleTouchedAbstract(board, touchedAbstract, endPoint);\n\n if (abstractHandlePosition && activeAbstractElement) {\n event.preventDefault();\n const abstractComponent = PlaitElement.getComponent(activeAbstractElement) as MindNodeComponent;\n const element = abstractComponent.element;\n const nodeLayout = MindQueries.getCorrectLayoutByElement(activeAbstractElement as MindElement) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n const parentElement = MindElement.getParent(element);\n\n let children = parentElement.children;\n\n const parentLayout = MindQueries.getLayoutByElement(parentElement);\n if (isStandardLayout(parentLayout)) {\n const rightNodeCount = parentElement.rightNodeCount!;\n const { leftChildren, rightChildren } = separateChildren(parentElement);\n if ((activeAbstractElement as MindElement).end! < rightNodeCount) {\n children = rightChildren;\n }\n if ((activeAbstractElement as MindElement).start! >= rightNodeCount) {\n children = leftChildren;\n }\n }\n\n if (newBoard?.abstractResize) {\n newBoard.abstractResize(AbstractResizeState.resizing);\n }\n\n const resizingLocation = isHorizontal ? endPoint[1] : endPoint[0];\n const parent = (MindElement.getNode(parentElement) as unknown) as LayoutNode;\n const scope = getLocationScope(board, abstractHandlePosition, children, element, parent, isHorizontal);\n const location = Math.min(scope.max, Math.max(scope.min, resizingLocation));\n\n let locationIndex = findLocationLeftIndex(board, children, location, isHorizontal);\n\n const isPropertyUnchanged =\n (abstractHandlePosition === AbstractHandlePosition.start &&\n locationIndex + 1 === (activeAbstractElement as MindElement).start!) ||\n (abstractHandlePosition === AbstractHandlePosition.end && locationIndex === (activeAbstractElement as MindElement).end!);\n\n if (isPropertyUnchanged) {\n newProperty = undefined;\n } else {\n if (isStandardLayout(parent.layout)) {\n const rightNodeCount = parent.origin.rightNodeCount;\n let start = element.start!;\n if (start >= rightNodeCount) {\n locationIndex += rightNodeCount;\n }\n }\n\n newProperty =\n abstractHandlePosition === AbstractHandlePosition.start ? { start: locationIndex + 1 } : { end: locationIndex };\n }\n\n abstractComponent!.updateAbstractIncludedOutline(abstractHandlePosition, location);\n }\n mousemove(event);\n };\n\n board.mouseup = (event: MouseEvent) => {\n startPoint = undefined;\n abstractHandlePosition = undefined;\n if (activeAbstractElement) {\n if (newBoard?.abstractResize) {\n newBoard.abstractResize(AbstractResizeState.end);\n }\n\n if (newProperty) {\n const path = PlaitBoard.findPath(board, activeAbstractElement);\n Transforms.setNode(board, newProperty, path);\n } else {\n const abstractComponent = PlaitElement.getComponent(activeAbstractElement) as MindNodeComponent;\n abstractComponent!.updateAbstractIncludedOutline();\n }\n activeAbstractElement = undefined;\n }\n mouseup(event);\n };\n return board;\n};\n","import {\n addSelectedElement,\n getSelectedElements,\n hotkeys,\n IS_TEXT_EDITABLE,\n PlaitBoard,\n PlaitHistoryBoard,\n PlaitPlugin,\n PlaitPluginElementContext,\n Point,\n RectangleClient,\n removeSelectedElement,\n toPoint,\n transformPoint,\n Transforms,\n Range,\n depthFirstRecursion,\n PlaitElement\n} from '@plait/core';\nimport { getSizeByText } from '@plait/richtext';\nimport { MindElement, PlaitMind } from '../interfaces';\nimport { MindNode } from '../interfaces/node';\nimport { PlaitMindComponent } from '../mind.component';\nimport { MindNodeComponent } from '../node.component';\nimport {\n changeRightNodeCount,\n insertMindElement,\n deleteSelectedELements,\n filterChildElement,\n findParentElement,\n shouldChangeRightNodeCount,\n insertSiblingElementHandleAbstract\n} from '../utils';\nimport { getRectangleByNode, hitMindElement } from '../utils/graph';\nimport { isVirtualKey } from '../utils/is-virtual-key';\nimport { withDnd } from './with-dnd';\nimport { buildClipboardData, getDataFromClipboard, insertClipboardData, insertClipboardText, setClipboardData } from '../utils/clipboard';\nimport { AbstractNode } from '@plait/layouts';\nimport { findNewChildNodePath, findNewSiblingNodePath } from '../utils/path';\nimport { enterNodeEditing } from '../utils/node';\nimport { withEmoji } from './emoji/with-mind-emoji';\nimport { TOPIC_DEFAULT_MAX_WORD_COUNT } from '../constants';\nimport { withAbstract } from './with-abstract';\n\nexport const withMind = (board: PlaitBoard) => {\n const {\n drawElement,\n dblclick,\n keydown,\n insertFragment,\n setFragment,\n deleteFragment,\n isHitSelection,\n getRectangle,\n isMovable,\n isRecursion\n } = board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (PlaitMind.isMind(context.element)) {\n return PlaitMindComponent;\n } else if (MindElement.isMindElement(board, context.element)) {\n return MindNodeComponent;\n }\n return drawElement(context);\n };\n\n board.getRectangle = element => {\n if (MindElement.isMindElement(board, element)) {\n return getRectangleByNode(MindElement.getNode(element));\n }\n return getRectangle(element);\n };\n\n board.isRecursion = element => {\n if (MindElement.isMindElement(board, element) && element.isCollapsed) {\n return false;\n }\n return isRecursion(element);\n };\n\n board.isHitSelection = (element, range: Range) => {\n if (MindElement.isMindElement(board, element) && board.selection) {\n const client = getRectangleByNode(MindElement.getNode(element));\n return RectangleClient.isHit(RectangleClient.toRectangleClient([range.anchor, range.focus]), client);\n }\n return isHitSelection(element, range);\n };\n\n board.isMovable = element => {\n if (PlaitMind.isMind(element) && element.isRoot) {\n return true;\n }\n return isMovable(element);\n };\n\n board.keydown = (event: KeyboardEvent) => {\n if (board.options.readonly || IS_TEXT_EDITABLE.get(board)) {\n keydown(event);\n return;\n }\n const selectedElements = getSelectedElements(board) as MindElement[];\n if (selectedElements.length) {\n if (\n selectedElements.length === 1 &&\n (event.key === 'Tab' ||\n (event.key === 'Enter' && !selectedElements[0].isRoot && !AbstractNode.isAbstract(selectedElements[0])))\n ) {\n event.preventDefault();\n const selectedElement = selectedElements[0];\n removeSelectedElement(board, selectedElement);\n const selectedElementPath = PlaitBoard.findPath(board, selectedElement);\n if (event.key === 'Tab') {\n if (selectedElement.isCollapsed) {\n const newElement: Partial<MindElement> = { isCollapsed: false };\n PlaitHistoryBoard.withoutSaving(board, () => {\n Transforms.setNode(board, newElement, selectedElementPath);\n });\n }\n insertMindElement(board, selectedElement, findNewChildNodePath(board, selectedElement));\n } else {\n if (shouldChangeRightNodeCount(selectedElement)) {\n changeRightNodeCount(board, selectedElementPath.slice(0, 1), 1);\n }\n\n insertSiblingElementHandleAbstract(board, selectedElement);\n\n insertMindElement(board, selectedElement, findNewSiblingNodePath(board, selectedElement));\n }\n return;\n }\n if (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event)) {\n event.preventDefault();\n deleteSelectedELements(board, selectedElements);\n let lastNode: MindNode | any = null;\n const firstLevelElements = filterChildElement(selectedElements);\n const firstElement = firstLevelElements[0];\n const firstComponent = PlaitElement.getComponent(firstElement) as MindNodeComponent;\n const nodeIndex = firstComponent?.parent?.children.findIndex(item => item.origin.id === firstElement.id);\n const isSameParent = firstLevelElements.every(element => {\n return findParentElement(element) && findParentElement(firstLevelElements[0]) === findParentElement(element);\n });\n if (isSameParent) {\n const childCount = firstComponent!.parent?.children.length - firstLevelElements.length;\n if (childCount === 0) {\n lastNode = firstComponent?.parent;\n } else if (nodeIndex === 0) {\n lastNode = firstComponent?.parent.children[firstLevelElements.length];\n } else if (nodeIndex! > 0) {\n lastNode = firstComponent?.parent.children[nodeIndex! - 1];\n }\n }\n\n if (firstLevelElements.length === 1 && AbstractNode.isAbstract(firstElement)) {\n lastNode = firstComponent.parent.children[firstElement.start];\n }\n\n if (lastNode) {\n addSelectedElement(board, lastNode.origin);\n }\n return;\n }\n // auto enter edit status\n if (!isVirtualKey(event)) {\n event.preventDefault();\n const selectedElement = selectedElements[0];\n enterNodeEditing(selectedElement);\n return;\n }\n }\n\n if (board.selection && event.code === 'Space') {\n if (selectedElements?.length) {\n return;\n }\n }\n\n keydown(event);\n };\n\n board.dblclick = (event: MouseEvent) => {\n if (board.options.readonly || IS_TEXT_EDITABLE.get(board)) {\n dblclick(event);\n return;\n }\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n board.children\n .filter(value => PlaitMind.isMind(value))\n .forEach(mindmap => {\n depthFirstRecursion<MindElement>(mindmap as MindElement, node => {\n if (!PlaitBoard.hasBeenTextEditing(board) && hitMindElement(board, point, node)) {\n enterNodeEditing(node);\n }\n });\n });\n if (PlaitBoard.hasBeenTextEditing(board)) {\n return;\n }\n dblclick(event);\n };\n\n board.setFragment = (data: DataTransfer | null) => {\n const selectedElements = filterChildElement(getSelectedElements(board) as MindElement[]);\n\n if (selectedElements.length) {\n const elements = buildClipboardData(board, selectedElements);\n setClipboardData(data, elements);\n return;\n }\n setFragment(data);\n };\n\n board.insertFragment = (data: DataTransfer | null, targetPoint?: Point) => {\n if (board.options.readonly) {\n insertFragment(data, targetPoint);\n return;\n }\n\n const elements = getDataFromClipboard(data);\n if (elements.length) {\n insertClipboardData(board, elements, targetPoint || [0, 0]);\n } else {\n const text = data?.getData(`text/plain`) as string;\n const { width, height } = getSizeByText(\n text,\n PlaitBoard.getHost(board).parentElement as HTMLElement,\n TOPIC_DEFAULT_MAX_WORD_COUNT\n );\n const selectedElements = getSelectedElements(board);\n if (text && selectedElements.length === 1) {\n insertClipboardText(board, selectedElements[0], text, width, height);\n }\n }\n insertFragment(data, targetPoint);\n };\n\n board.deleteFragment = (data: DataTransfer | null) => {\n const selectedElements = getSelectedElements(board) as MindElement[];\n deleteSelectedELements(board, selectedElements);\n deleteFragment(data);\n };\n\n return withEmoji(withAbstract(withDnd(board)));\n};\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core';\nimport { EmojiData, EmojiItem } from '../../interfaces/element-data';\nimport { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../../interfaces';\n\n@Directive({\n host: {\n class: 'mind-node-emoji'\n }\n})\nexport class MindEmojiBaseComponent implements OnInit {\n @Input()\n fontSize: number = 14;\n\n @Input()\n emojiItem!: EmojiItem;\n\n @Input()\n board!: PlaitBoard;\n\n @Input()\n element!: MindElement<EmojiData>;\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n constructor(protected elementRef: ElementRef<HTMLElement>) {}\n\n ngOnInit(): void {\n this.elementRef.nativeElement.style.fontSize = `${this.fontSize}px`;\n }\n}\n","/*\n * Public API Surface of mind\n */\n\nexport * from './mind.component';\nexport * from './node.component';\nexport * from './mind.module';\nexport * from './utils';\nexport * from './interfaces';\nexport * from './plugins/with-mind';\nexport * from './constants';\nexport * from './queries/index';\nexport * from './transforms/index';\nexport * from './plugins/emoji';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getLayoutDirection","Path","i1"],"mappings":"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"}