@plait/mind 0.2.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/constants/default.d.ts +12 -0
- package/constants/index.d.ts +2 -0
- package/constants/node.d.ts +17 -0
- package/draw/abstract.d.ts +4 -0
- package/draw/indented-link.d.ts +3 -0
- package/draw/link/abstract-link.d.ts +3 -0
- package/draw/link/logic-link.d.ts +3 -0
- package/draw/link.d.ts +3 -0
- package/draw/richtext.d.ts +14 -0
- package/draw/shape.d.ts +3 -0
- package/esm2020/constants/default.mjs +13 -0
- package/esm2020/constants/index.mjs +3 -0
- package/esm2020/constants/node.mjs +19 -0
- package/esm2020/draw/abstract.mjs +48 -0
- package/esm2020/draw/indented-link.mjs +44 -0
- package/esm2020/draw/link/abstract-link.mjs +42 -0
- package/esm2020/draw/link/logic-link.mjs +51 -0
- package/esm2020/draw/link.mjs +158 -0
- package/esm2020/draw/richtext.mjs +35 -0
- package/esm2020/draw/shape.mjs +18 -0
- package/esm2020/interfaces/abstract.mjs +6 -0
- package/esm2020/interfaces/element-data.mjs +2 -0
- package/esm2020/interfaces/element.mjs +59 -0
- package/esm2020/interfaces/index.mjs +6 -0
- package/esm2020/interfaces/layout.mjs +19 -0
- package/esm2020/interfaces/node.mjs +23 -0
- package/esm2020/interfaces/types.mjs +13 -0
- package/esm2020/layout-option.mjs +72 -0
- package/esm2020/mind.component.mjs +50 -0
- package/esm2020/mind.module.mjs +21 -0
- package/esm2020/node.component.mjs +742 -0
- package/esm2020/plait-mind.mjs +5 -0
- package/esm2020/plugins/emoji/emoji-base.component.mjs +21 -0
- package/esm2020/plugins/emoji/emoji.drawer.mjs +79 -0
- package/esm2020/plugins/emoji/emoji.mjs +15 -0
- package/esm2020/plugins/emoji/index.mjs +4 -0
- package/esm2020/plugins/emoji/with-mind-emoji.mjs +8 -0
- package/esm2020/plugins/with-abstract.mjs +92 -0
- package/esm2020/plugins/with-dnd.mjs +276 -0
- package/esm2020/plugins/with-mind.mjs +183 -0
- package/esm2020/public-api.mjs +14 -0
- package/esm2020/queries/get-available-sublayouts-by-element.mjs +29 -0
- package/esm2020/queries/get-branch-mindmap-layouts-by-element.mjs +18 -0
- package/esm2020/queries/get-correct-layout-by-element.mjs +50 -0
- package/esm2020/queries/get-layout-by-element.mjs +16 -0
- package/esm2020/queries/get-layout-parent-by-element.mjs +17 -0
- package/esm2020/queries/index.mjs +13 -0
- package/esm2020/transforms/index.mjs +10 -0
- package/esm2020/transforms/layout.mjs +23 -0
- package/esm2020/transforms/node.mjs +44 -0
- package/esm2020/utils/abstract/common.mjs +25 -0
- package/esm2020/utils/abstract/resize.mjs +169 -0
- package/esm2020/utils/clipboard.mjs +71 -0
- package/esm2020/utils/colors.mjs +41 -0
- package/esm2020/utils/direction-corrector.mjs +54 -0
- package/esm2020/utils/direction-detector.mjs +56 -0
- package/esm2020/utils/draw-placeholder.mjs +311 -0
- package/esm2020/utils/drop-target-corrector.mjs +86 -0
- package/esm2020/utils/graph.mjs +24 -0
- package/esm2020/utils/index.mjs +14 -0
- package/esm2020/utils/is-virtual-key.mjs +13 -0
- package/esm2020/utils/layout.mjs +105 -0
- package/esm2020/utils/mindmap.mjs +295 -0
- package/esm2020/utils/node-space.mjs +72 -0
- package/esm2020/utils/node.mjs +6 -0
- package/esm2020/utils/path.mjs +11 -0
- package/esm2020/utils/point-placement.mjs +99 -0
- package/esm2020/utils/shape.mjs +17 -0
- package/esm2020/utils/weak-maps.mjs +3 -0
- package/fesm2015/plait-mind.mjs +3583 -0
- package/fesm2015/plait-mind.mjs.map +1 -0
- package/fesm2020/plait-mind.mjs +3595 -0
- package/fesm2020/plait-mind.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/interfaces/abstract.d.ts +4 -0
- package/interfaces/element-data.d.ts +11 -0
- package/interfaces/element.d.ts +39 -0
- package/interfaces/index.d.ts +5 -0
- package/interfaces/layout.d.ts +10 -0
- package/interfaces/node.d.ts +33 -0
- package/interfaces/types.d.ts +11 -0
- package/layout-option.d.ts +2 -0
- package/mind.component.d.ts +16 -0
- package/mind.module.d.ts +11 -0
- package/node.component.d.ts +60 -0
- package/package.json +31 -0
- package/plugins/emoji/emoji-base.component.d.ts +12 -0
- package/plugins/emoji/emoji.d.ts +6 -0
- package/plugins/emoji/emoji.drawer.d.ts +22 -0
- package/plugins/emoji/index.d.ts +3 -0
- package/plugins/emoji/with-mind-emoji.d.ts +8 -0
- package/plugins/with-abstract.d.ts +2 -0
- package/plugins/with-dnd.d.ts +11 -0
- package/plugins/with-mind.d.ts +2 -0
- package/public-api.d.ts +10 -0
- package/queries/get-available-sublayouts-by-element.d.ts +8 -0
- package/queries/get-branch-mindmap-layouts-by-element.d.ts +3 -0
- package/queries/get-correct-layout-by-element.d.ts +9 -0
- package/queries/get-layout-by-element.d.ts +3 -0
- package/queries/get-layout-parent-by-element.d.ts +8 -0
- package/queries/index.d.ts +7 -0
- package/styles/styles.scss +99 -0
- package/transforms/index.d.ts +7 -0
- package/transforms/layout.d.ts +3 -0
- package/transforms/node.d.ts +8 -0
- package/utils/abstract/common.d.ts +5 -0
- package/utils/abstract/resize.d.ts +21 -0
- package/utils/clipboard.d.ts +7 -0
- package/utils/colors.d.ts +4 -0
- package/utils/direction-corrector.d.ts +3 -0
- package/utils/direction-detector.d.ts +9 -0
- package/utils/draw-placeholder.d.ts +42 -0
- package/utils/drop-target-corrector.d.ts +8 -0
- package/utils/graph.d.ts +5 -0
- package/utils/index.d.ts +13 -0
- package/utils/is-virtual-key.d.ts +1 -0
- package/utils/layout.d.ts +12 -0
- package/utils/mindmap.d.ts +33 -0
- package/utils/node-space.d.ts +9 -0
- package/utils/node.d.ts +2 -0
- package/utils/path.d.ts +4 -0
- package/utils/point-placement.d.ts +8 -0
- package/utils/shape.d.ts +3 -0
- package/utils/weak-maps.d.ts +5 -0
|
@@ -0,0 +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/utils/shape.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/common.ts","../../../packages/mind/src/utils/abstract/resize.ts","../../../packages/mind/src/queries/get-correct-layout-by-element.ts","../../../packages/mind/src/queries/get-branch-mindmap-layouts-by-element.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/mindmap.ts","../../../packages/mind/src/utils/colors.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/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/utils/path.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 { MindNodeComponent } from '../node.component';\nimport { MindElement } from '../interfaces/element';\nimport { MindmapNode } from '../interfaces/node';\n\nexport const MINDMAP_ELEMENT_TO_COMPONENT: WeakMap<MindElement, MindNodeComponent> = new WeakMap();\n\nexport const ELEMENT_TO_NODE = new WeakMap<MindElement, MindmapNode>();\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 MindmapNodeShape {\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 = 12;\n\nexport const TOPIC_DEFAULT_MAX_WORD_COUNT = 34;\nexport const ABSTRACT_HANDLE_MASK_WIDTH = 8;\n","import { MindmapNode } 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: MindmapNode): 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 hitMindmapElement(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 { MindmapNodeShape } from '../constants';\nimport { MindElement } from '../interfaces';\nimport { findParentElement } from './mindmap';\n\nexport const getNodeShapeByElement = (element: MindElement): MindmapNodeShape => {\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 MindmapNodeShape.roundRectangle;\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 { RoughSVG } from 'roughjs/bin/svg';\nimport { GRAY_COLOR, MindmapNodeShape, STROKE_WIDTH } from '../constants';\nimport { MindmapNode } from '../interfaces/node';\nimport { getLinkLineColorByMindmapElement } from '../utils/colors';\nimport { PlaitBoard, Point, createG, getRectangleByElements } from '@plait/core';\nimport { getNodeShapeByElement, getRectangleByNode, isChildRight } from '../utils';\nimport { MindmapLayoutType, isTopLayout, isIndentedLayout, isStandardLayout } from '@plait/layouts';\nimport { MindmapQueries } from '../queries';\n\nexport function drawLink(\n roughSVG: RoughSVG,\n node: MindmapNode,\n child: MindmapNode,\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 = MindmapQueries.getCorrectLayoutByElement(node.origin) as MindmapLayoutType;\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(MindmapQueries.getLayoutByElement(node.parent?.origin)) &&\n (getNodeShapeByElement(node.origin) as MindmapNodeShape) === MindmapNodeShape.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 || getLinkLineColorByMindmapElement(child.origin);\n const strokeWidth = child.origin.linkLineWidth ? child.origin.linkLineWidth : STROKE_WIDTH;\n if (endNode.origin.isRoot) {\n if (layout === MindmapLayoutType.left || isStandardLayout(layout)) {\n endX -= strokeWidth;\n }\n if (layout === MindmapLayoutType.upward) {\n endY -= strokeWidth;\n }\n }\n if (beginNode.origin.isRoot) {\n if (layout === MindmapLayoutType.right || isStandardLayout(layout)) {\n beginX += strokeWidth;\n }\n if (layout === MindmapLayoutType.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 MindmapNodeShape;\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 === MindmapNodeShape.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 roughSVG.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 roughSVG.curve(points as any, { stroke, strokeWidth });\n }\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { BASE, PRIMARY_COLOR, STROKE_WIDTH } from '../constants';\nimport { drawLink } from '../draw/link';\nimport { DetectResult, MindElement, MindmapNode } from '../interfaces';\nimport { MindNodeComponent } from '../node.component';\nimport { getRectangleByNode } from './graph';\nimport { MINDMAP_ELEMENT_TO_COMPONENT } from './weak-maps';\nimport { Point, drawRoundRectangle } from '@plait/core';\nimport { MindmapQueries } from '../queries';\nimport {\n isBottomLayout,\n isHorizontalLayout,\n isHorizontalLogicLayout,\n isIndentedLayout,\n isRightLayout,\n isVerticalLogicLayout,\n MindmapLayoutType\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 dropTarget: { target: MindElement; detectResult: DetectResult },\n roughSVG: RoughSVG,\n fakeDropNodeG: SVGGElement | undefined\n) => {\n const targetComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(dropTarget.target) as MindNodeComponent;\n const targetRect = getRectangleByNode(targetComponent.node);\n if (dropTarget.detectResult && ['right', 'left'].includes(dropTarget.detectResult)) {\n drawStraightDropNodeG(targetRect, dropTarget.detectResult, targetComponent, roughSVG, fakeDropNodeG);\n }\n\n if (targetComponent.parent && dropTarget.detectResult && ['top', 'bottom'].includes(dropTarget.detectResult)) {\n const parentComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(targetComponent.parent.origin) as MindNodeComponent;\n const targetIndex = parentComponent.node.origin.children.indexOf(targetComponent.node.origin);\n drawCurvePlaceholderDropNodeG(\n targetRect,\n dropTarget.detectResult,\n targetIndex,\n targetComponent,\n roughSVG,\n parentComponent,\n fakeDropNodeG\n );\n }\n};\n\nexport const drawCurvePlaceholderDropNodeG = (\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 roughSVG: RoughSVG,\n parentComponent: MindNodeComponent,\n fakeDropNodeG: SVGGElement | undefined\n) => {\n const parentNodeLayout = MindmapQueries.getCorrectLayoutByElement(parentComponent.node.origin);\n const layout = MindmapQueries.getCorrectLayoutByElement(targetComponent.node.parent.origin);\n const strokeWidth = targetComponent.node.origin.linkLineWidth ? targetComponent.node.origin.linkLineWidth : 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 = MINDMAP_ELEMENT_TO_COMPONENT.get(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 = MINDMAP_ELEMENT_TO_COMPONENT.get(\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 = MINDMAP_ELEMENT_TO_COMPONENT.get(\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: MindmapNode = { ...targetComponent.node, x: fakeX, y: fakeY, width, height: 12 };\n const linkSVGG = isIndentedLayout(layout)\n ? drawIndentedLink(roughSVG, parentComponent.node, fakeNode, PRIMARY_COLOR, false)\n : drawLink(roughSVG, parentComponent.node, fakeNode, PRIMARY_COLOR, isHorizontalLayout(layout), false);\n // 构造一个矩形框坐标\n const fakeRectangleG = drawRoundRectangle(roughSVG, fakeRectangleStartX, fakeRectangleStartY, fakeRectangleEndX, fakeRectangleEndY, {\n stroke: PRIMARY_COLOR,\n strokeWidth: 2,\n fill: PRIMARY_COLOR,\n fillStyle: 'solid'\n });\n fakeDropNodeG?.appendChild(linkSVGG);\n fakeDropNodeG?.appendChild(fakeRectangleG);\n};\nexport const drawStraightDropNodeG = (\n targetRect: {\n x: number;\n y: number;\n width: number;\n height: number;\n },\n detectResult: DetectResult,\n targetComponent: MindNodeComponent,\n roughSVG: RoughSVG,\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.linkLineWidth ? targetComponent.node.origin.linkLineWidth : STROKE_WIDTH;\n const pointOptions = {\n fakeX,\n fakeY,\n x,\n y,\n width,\n height,\n strokeWidth\n };\n const parentLayout = MindmapQueries.getCorrectLayoutByElement(\n targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin\n );\n const layout = MindmapQueries.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(fakeDropNodeG as SVGGElement, roughSVG, 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 = MINDMAP_ELEMENT_TO_COMPONENT.get(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 = MINDMAP_ELEMENT_TO_COMPONENT.get(\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 = MINDMAP_ELEMENT_TO_COMPONENT.get(\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: MindmapNode = { ...targetComponent.node, x: fakeX, y: fakeY, width: 30 };\n const linkSVGG = drawLink(roughSVG, parentComponent.node, fakeNode, PRIMARY_COLOR, false, false);\n fakeDropNodeG?.appendChild(linkSVGG);\n }\n } else {\n let linkSVGG = roughSVG.linearPath(linePoints, { stroke: PRIMARY_COLOR, strokeWidth });\n fakeDropNodeG?.appendChild(linkSVGG);\n }\n // 构造一个矩形框坐标\n let fakeRectangleG = drawRoundRectangle(\n roughSVG,\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(fakeDropNodeG as SVGGElement, roughSVG, fakePoint, targetComponent.node);\n return;\n }\n }\n }\n};\n\nexport const getHorizontalFakeY = (\n detectResult: 'top' | 'bottom',\n targetIndex: number,\n parentNode: MindmapNode,\n targetRect: {\n x: number;\n y: number;\n width: number;\n height: number;\n },\n layout: MindmapLayoutType,\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 = MINDMAP_ELEMENT_TO_COMPONENT.get(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 = MINDMAP_ELEMENT_TO_COMPONENT.get(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: MindmapLayoutType,\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 fakeDropNodeG: SVGGElement,\n roughSVG: RoughSVG,\n fakePoint: { fakeX: number; fakeY: number },\n node: MindmapNode\n) => {\n const { fakeX, fakeY } = fakePoint;\n const fakeNode: MindmapNode = { ...node, x: fakeX, y: fakeY, width: 30, height: 12 };\n const linkSVGG = drawIndentedLink(roughSVG, 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 roughSVG,\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, MindmapNode } 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: MindmapNode, 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, MindmapNode } from '../interfaces';\nimport { isBottomLayout, isRightLayout, isLeftLayout, MindmapLayoutType, isStandardLayout, isTopLayout } from '@plait/layouts';\nimport { MindmapQueries } from '../queries';\n\nexport const directionCorrector = (node: MindmapNode, detectResults: DetectResult[]): DetectResult[] | null => {\n if (!node.origin.isRoot) {\n const parentlayout = MindmapQueries.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 === MindmapLayoutType.upward) {\n return getAllowedDirection(detectResults, ['bottom']);\n }\n\n if (parentlayout === MindmapLayoutType.downward) {\n return getAllowedDirection(detectResults, ['top']);\n }\n } else {\n const layout = MindmapQueries.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 === MindmapLayoutType.left) {\n return getAllowedDirection(detectResults, ['right', 'top', 'bottom']);\n }\n\n if (layout === MindmapLayoutType.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, MindmapLayoutType } from '@plait/layouts';\nimport { DetectResult, MindElement } from '../interfaces';\nimport { MindNodeComponent } from '../node.component';\nimport { MINDMAP_ELEMENT_TO_COMPONENT } from './weak-maps';\nimport { MindmapQueries } from '../queries';\nimport { isMixedLayout } from './layout';\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 = MINDMAP_ELEMENT_TO_COMPONENT.get(target) as MindNodeComponent;\n if (targetComponent.node.children.length > 0 && dropTarget.detectResult) {\n const layout = MindmapQueries.getCorrectLayoutByElement(targetComponent.node.origin);\n const parentLayout = MindmapQueries.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 = MindmapQueries.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 ([MindmapLayoutType.left, MindmapLayoutType.right].includes(parentLayout)) {\n const layout = MindmapQueries.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 = MindmapQueries.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 { AbstractNode } from '@plait/layouts';\nimport { MindElement } from '../../interfaces/element';\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","import { PlaitBoard, Point, RectangleClient, getRectangleByElements } from '@plait/core';\nimport { AbstractHandlePosition, MindElement } from '../../interfaces';\nimport { AbstractNode, LayoutNode, MindmapLayoutType, isHorizontalLayout } from '@plait/layouts';\nimport { ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants';\nimport { MindmapQueries } from '../../queries';\nimport { getCorrectStartEnd } from '@plait/layouts';\n\nexport const getRectangleByResizingLocation = (\n abstractRectangle: RectangleClient,\n location: number,\n handlePosition: AbstractHandlePosition,\n isHorizontal: boolean\n) => {\n if (isHorizontal) {\n if (handlePosition === 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 (handlePosition === 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 = MindmapQueries.getCorrectLayoutByElement(element) as MindmapLayoutType;\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.isIntersect(pointRec, startHandleRec)) return AbstractHandlePosition.start;\n if (RectangleClient.isIntersect(pointRec, endHandleRec)) return AbstractHandlePosition.end;\n return null;\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","import { MindElement } from '../interfaces';\nimport { MindNodeComponent } from '../node.component';\nimport {\n correctLayoutByDirection,\n findUpElement,\n getDefaultMindmapLayout,\n getInCorrectLayoutDirection,\n MINDMAP_ELEMENT_TO_COMPONENT\n} from '../utils';\nimport { AbstractNode, MindmapLayoutType, 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 || getDefaultMindmapLayout();\n let correctRootLayout = rootLayout;\n\n if (element.isRoot) {\n return correctRootLayout;\n }\n\n const component = MINDMAP_ELEMENT_TO_COMPONENT.get(element);\n let layout = component?.node.origin.layout;\n\n let parentComponent: undefined | MindNodeComponent;\n let parent: MindElement | undefined = component?.parent?.origin;\n\n while (!layout && parent) {\n parentComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(parent);\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 === MindmapLayoutType.standard) {\n correctRootLayout = component?.node.left ? MindmapLayoutType.left : MindmapLayoutType.right;\n }\n\n if (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 { MindmapLayoutType } from '@plait/layouts';\nimport { getCorrectLayoutByElement } from './get-correct-layout-by-element';\n\nexport const getBranchMindmapLayouts = (element: MindElement) => {\n const layouts: MindmapLayoutType[] = [];\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 MINDMAP_ELEMENT_TO_COMPONENT\n} from '../utils';\nimport { MindmapLayoutType } from '@plait/layouts';\nimport { getBranchMindmapLayouts } from './get-branch-mindmap-layouts-by-element';\n\n/**\n * get available sub layouts by element\n * @param element\n * @returns MindmapLayoutType[]\n */\nexport const getAvailableSubLayoutsByElement = (element: MindElement) => {\n const parentElement = findParentElement(element);\n if (parentElement) {\n const branchLayouts = getBranchMindmapLayouts(parentElement);\n if (branchLayouts[0] === MindmapLayoutType.standard) {\n const component = MINDMAP_ELEMENT_TO_COMPONENT.get(element);\n if (component) {\n branchLayouts[0] = component.node.left ? MindmapLayoutType.left : MindmapLayoutType.right;\n }\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, getDefaultMindmapLayout } from '../utils';\nimport { MindmapLayoutType } from '@plait/layouts';\n\n/**\n * 获取父节点布局类型\n * @param element\n * @returns MindmapLayoutType\n */\nexport const getLayoutParentByElement = (element: MindElement): MindmapLayoutType => {\n let parent = findParentElement(element);\n while (parent) {\n if (parent.layout) {\n return parent.layout;\n }\n parent = findParentElement(parent);\n }\n return getDefaultMindmapLayout();\n};\n","import { MindElement } from '../interfaces';\nimport { AbstractNode, MindmapLayoutType, getAbstractLayout, isIndentedLayout, isChildOfAbstract, LayoutNode } from '@plait/layouts';\nimport { getLayoutParentByElement } from './get-layout-parent-by-element';\n\nexport const getLayoutByElement = (element: MindElement): MindmapLayoutType => {\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 { getBranchMindmapLayouts } from './get-branch-mindmap-layouts-by-element';\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 MindmapQueries = {\n getAvailableSubLayoutsByElement,\n getLayoutParentByElement,\n getBranchMindmapLayouts,\n getLayoutByElement,\n getCorrectLayoutByElement\n};\n","import { Element } from 'slate';\nimport { MindmapNodeShape } from '../constants/node';\nimport { isIndentedLayout, MindmapLayoutType } from '@plait/layouts';\nimport { NODE_TO_PARENT, PlaitBoard, PlaitElement, PlaitNode, Point } from '@plait/core';\nimport { MindmapQueries } 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?: MindmapNodeShape;\n\n // link style attributes\n linkLineColor?: string;\n linkLineWidth?: number;\n\n // layout\n layout?: MindmapLayoutType;\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: MindmapLayoutType) {\n const _layout = MindmapQueries.getLayoutByElement(value);\n return _layout === layout;\n },\n isIndentedLayout(value: MindElement) {\n const _layout = MindmapQueries.getLayoutByElement(value) as MindmapLayoutType;\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 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 { MindmapLayoutType } from '@plait/layouts';\nimport { Path, PlaitElement, Point } from '@plait/core';\nimport { MindElement } from './element';\n\nexport interface MindmapNode {\n depth: number;\n x: number;\n y: number;\n width: number;\n height: number;\n hGap: number;\n vGap: number;\n children: MindmapNode[];\n origin: MindElement;\n parent: MindmapNode;\n left: boolean;\n up: boolean;\n}\n\nexport const MindmapNode = {\n get(root: MindmapNode, 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: MindmapNode, otherNode: MindmapNode) {\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<MindmapLayoutType, MindmapLayoutType.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 { MindmapLayoutType } 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 [MindmapLayoutType.right]: [LayoutDirection.right],\n [MindmapLayoutType.left]: [LayoutDirection.left],\n [MindmapLayoutType.upward]: [LayoutDirection.top],\n [MindmapLayoutType.downward]: [LayoutDirection.bottom],\n [MindmapLayoutType.rightBottomIndented]: [LayoutDirection.right, LayoutDirection.bottom],\n [MindmapLayoutType.rightTopIndented]: [LayoutDirection.right, LayoutDirection.top],\n [MindmapLayoutType.leftBottomIndented]: [LayoutDirection.left, LayoutDirection.bottom],\n [MindmapLayoutType.leftTopIndented]: [LayoutDirection.left, LayoutDirection.top]\n};\n\nexport type LayoutDirectionMapType = { [key: string]: LayoutDirection[] };\n","export enum AbstractHandlePosition {\n start = 'start',\n end = 'end'\n}\n","import { LayoutDirection, LayoutDirectionsMap, MindElement } from '../interfaces';\nimport { isIndentedLayout, MindmapLayoutType } from '@plait/layouts';\n\nexport const getBranchDirectionsByLayouts = (branchLayouts: MindmapLayoutType[]) => {\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: MindmapLayoutType) => {\n const rootLayout = root.layout || getDefaultMindmapLayout();\n return !getInCorrectLayoutDirection(rootLayout, layout);\n};\n\nexport const isMixedLayout = (parentLayout: MindmapLayoutType, layout: MindmapLayoutType) => {\n return (!isIndentedLayout(parentLayout) && isIndentedLayout(layout)) || (isIndentedLayout(parentLayout) && !isIndentedLayout(layout));\n};\n\nexport const getInCorrectLayoutDirection = (rootLayout: MindmapLayoutType, layout: MindmapLayoutType) => {\n const mindmapDirections = LayoutDirectionsMap[rootLayout];\n const subLayoutDirections = LayoutDirectionsMap[layout];\n if (!subLayoutDirections) {\n throw new Error(`unexpection layout: ${layout} on correct layout`);\n }\n return subLayoutDirections.find(d => mindmapDirections.includes(getLayoutReverseDirection(d)));\n};\n\nexport const correctLayoutByDirection = (layout: MindmapLayoutType, direction: LayoutDirection) => {\n const isHorizontal = direction === LayoutDirection.left || direction === LayoutDirection.right ? true : false;\n let inverseDirectionLayout = MindmapLayoutType.standard;\n switch (layout) {\n case MindmapLayoutType.left:\n inverseDirectionLayout = MindmapLayoutType.right;\n break;\n case MindmapLayoutType.right:\n inverseDirectionLayout = MindmapLayoutType.left;\n break;\n case MindmapLayoutType.downward:\n inverseDirectionLayout = MindmapLayoutType.upward;\n break;\n case MindmapLayoutType.upward:\n inverseDirectionLayout = MindmapLayoutType.downward;\n break;\n case MindmapLayoutType.rightBottomIndented:\n inverseDirectionLayout = isHorizontal ? MindmapLayoutType.leftBottomIndented : MindmapLayoutType.rightTopIndented;\n break;\n case MindmapLayoutType.leftBottomIndented:\n inverseDirectionLayout = isHorizontal ? MindmapLayoutType.rightBottomIndented : MindmapLayoutType.leftTopIndented;\n break;\n case MindmapLayoutType.rightTopIndented:\n inverseDirectionLayout = isHorizontal ? MindmapLayoutType.leftTopIndented : MindmapLayoutType.rightBottomIndented;\n break;\n case MindmapLayoutType.leftTopIndented:\n inverseDirectionLayout = isHorizontal ? MindmapLayoutType.rightTopIndented : MindmapLayoutType.leftBottomIndented;\n break;\n }\n return inverseDirectionLayout;\n};\n\nexport const getMindmapDirection = (root: MindElement) => {\n const layout = root.layout || getDefaultMindmapLayout();\n return LayoutDirectionsMap[layout];\n};\n\nexport const getDefaultMindmapLayout = () => {\n return MindmapLayoutType.standard;\n};\n\nexport const getAvailableSubLayoutsByLayoutDirections = (directions: LayoutDirection[]): MindmapLayoutType[] => {\n const result: MindmapLayoutType[] = [];\n const reverseDirections = directions.map(getLayoutReverseDirection);\n for (const key in MindmapLayoutType) {\n const layout = MindmapLayoutType[key as keyof typeof MindmapLayoutType];\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 || getDefaultMindmapLayout();\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, MindmapLayoutType } from '@plait/layouts';\nimport { addSelectedElement, idCreator, isNullOrUndefined, Path, PlaitBoard, PlaitElement, PlaitNode, Transforms } from '@plait/core';\nimport { Node } from 'slate';\nimport { MindmapNodeShape, NODE_MIN_WIDTH, ROOT_TOPIC_FONT_SIZE, TOPIC_DEFAULT_MAX_WORD_COUNT } from '../constants/node';\nimport { MindmapNode } from '../interfaces';\nimport { MindElement } from '../interfaces/element';\nimport { getRootLayout } from './layout';\nimport { MINDMAP_ELEMENT_TO_COMPONENT } from './weak-maps';\nimport { TEXT_DEFAULT_HEIGHT, getSizeByText, ROOT_DEFAULT_HEIGHT } from '@plait/richtext';\nimport { enterNodeEditing } from './node';\n\nexport function findParentElement(element: MindElement): MindElement | undefined {\n const component = MINDMAP_ELEMENT_TO_COMPONENT.get(element);\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: MindmapNode, child: MindmapNode) => {\n return node.x < child.x;\n};\n\nexport const isChildUp = (node: MindmapNode, child: MindmapNode) => {\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 === MindmapLayoutType.standard) {\n delete newNode.layout;\n }\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(text, PlaitBoard.getViewportContainer(board), TOPIC_DEFAULT_MAX_WORD_COUNT, ROOT_TOPIC_FONT_SIZE);\n newElement.width = Math.max(width, NODE_MIN_WIDTH);\n newElement.height = height;\n\n return {\n ...newElement,\n layout: newElement.layout ?? MindmapLayoutType.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 const MindNodeComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(selectedElement);\n if (parentElement && MindNodeComponent) {\n const nodeIndex: number = MindNodeComponent.parent.children.findIndex(item => item.origin.id === selectedElement.id);\n if (\n parentElement.isRoot &&\n getRootLayout(parentElement) === MindmapLayoutType.standard &&\n parentElement.rightNodeCount &&\n nodeIndex <= parentElement.rightNodeCount - 1\n ) {\n return true;\n }\n }\n return false;\n};\n\nexport const createMindmapData = (rightNodeCount: number, layout: MindmapLayoutType) => {\n const mindmapData: PlaitElement = {\n type: 'mindmap',\n id: idCreator(),\n isRoot: true,\n rightNodeCount,\n layout,\n width: 72,\n height: ROOT_DEFAULT_HEIGHT,\n points: [[230, 208]],\n value: { children: [{ text: '思维导图' }] },\n shape: MindmapNodeShape.roundRectangle,\n children: [\n {\n id: idCreator(),\n value: { children: [{ text: '新建节点' }] },\n children: [],\n width: 56,\n height: TEXT_DEFAULT_HEIGHT,\n shape: MindmapNodeShape.roundRectangle\n },\n {\n id: idCreator(),\n value: { children: [{ text: '新建节点' }] },\n children: [],\n width: 56,\n height: TEXT_DEFAULT_HEIGHT,\n shape: MindmapNodeShape.roundRectangle\n },\n {\n id: idCreator(),\n value: { children: [{ text: '新建节点' }] },\n children: [],\n width: 56,\n height: TEXT_DEFAULT_HEIGHT,\n shape: MindmapNodeShape.roundRectangle\n }\n ]\n };\n return [mindmapData];\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?: MindmapNodeShape;\n layout?: MindmapLayoutType;\n linkLineColor?: 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.linkLineColor) {\n newElement.linkLineColor = options.linkLineColor;\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 = MindmapNodeShape.roundRectangle;\n if (!inheritNode.isRoot) {\n fill = inheritNode.fill;\n strokeColor = inheritNode.strokeColor;\n strokeWidth = inheritNode.strokeWidth;\n }\n\n shape = inheritNode.shape as MindmapNodeShape;\n\n const newElement = createMindElement('', NODE_MIN_WIDTH, TEXT_DEFAULT_HEIGHT, { fill, strokeColor, strokeWidth, shape });\n\n const index = path[path.length - 1];\n const abstractNode = inheritNode.children.find(\n child => AbstractNode.isAbstract(child) && index > child.start && index <= child.end + 1\n );\n if (abstractNode) {\n const path = PlaitBoard.findPath(board, abstractNode as MindElement);\n Transforms.setNode(board, { end: (abstractNode as AbstractNode).end + 1 }, path);\n }\n Transforms.insertNode(board, newElement, path);\n addSelectedElement(board, newElement);\n setTimeout(() => {\n enterNodeEditing(newElement);\n });\n};\n\nexport const findLastChild = (child: MindmapNode) => {\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\n const relativeAbstracts: AbstractNode[] = [];\n const accumulativeProperties = new WeakMap<AbstractNode, { start: number; end: number }>();\n\n deletableElements.forEach(node => {\n const MindNodeComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(node);\n if (MindNodeComponent && MindNodeComponent.parent) {\n const index = MindNodeComponent.parent.origin.children.indexOf(node);\n const abstracts = MindNodeComponent.parent.children.filter(value => AbstractNode.isAbstract(value.origin));\n abstracts.forEach(abstract => {\n const abstractNode = abstract.origin as AbstractNode;\n if (index >= abstractNode.start && index <= abstractNode.end) {\n let newProperties = accumulativeProperties.get(abstractNode);\n if (!newProperties) {\n newProperties = { start: abstractNode.start, end: abstractNode.end };\n accumulativeProperties.set(abstractNode, newProperties);\n relativeAbstracts.push(abstractNode);\n }\n newProperties.end = newProperties.end - 1;\n }\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","import { COLORS, ROOT_NODE_STROKE } from '../constants';\nimport { MindElement } from '../interfaces';\nimport { findUpElement } from './mindmap';\n\nexport const getStrokeByMindmapElement = (element: MindElement) => {\n let stroke = element.strokeColor;\n if (stroke) {\n return stroke;\n }\n const { root, branch } = findUpElement(element);\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\nexport const getLinkLineColorByMindmapElement = (element: MindElement) => {\n let color = element.linkLineColor;\n if (color) {\n return color;\n }\n const { root, branch } = findUpElement(element);\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 link line');\n }\n};\n\nexport const getRootLinkLineColorByMindmapElement = (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 { pointsOnBezierCurves } from 'points-on-curve';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MindmapNodeShape, STROKE_WIDTH } from '../constants';\nimport { MindmapNode } from '../interfaces/node';\nimport { getLinkLineColorByMindmapElement } from '../utils/colors';\nimport { Point } from '@plait/core';\nimport { getNodeShapeByElement, getRectangleByNode, isChildUp } from '../utils';\nimport { MindmapLayoutType } from '@plait/layouts';\nimport { MindmapQueries } from '../queries';\n\nexport function drawIndentedLink(\n roughSVG: RoughSVG,\n node: MindmapNode,\n child: MindmapNode,\n defaultStroke: string | null = null,\n needDrawUnderline = true\n) {\n const isUnderlineShap = (getNodeShapeByElement(child.origin) as MindmapNodeShape) === MindmapNodeShape.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 = MindmapQueries.getCorrectLayoutByElement(node.origin);\n const strokeWidth = child.origin.linkLineWidth ? child.origin.linkLineWidth : STROKE_WIDTH;\n if (beginNode.origin.isRoot) {\n if (layout === MindmapLayoutType.leftBottomIndented || layout === MindmapLayoutType.rightBottomIndented) {\n beginY += strokeWidth;\n }\n if (layout === MindmapLayoutType.leftTopIndented || layout === MindmapLayoutType.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 || getLinkLineColorByMindmapElement(child.origin);\n\n const points = pointsOnBezierCurves(curve);\n return roughSVG.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 { MindmapNode } 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: MindmapNode, 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 { RoughSVG } from 'roughjs/bin/svg';\nimport { MindmapNodeShape, STROKE_WIDTH } from '../../constants';\nimport { MindmapNode } from '../../interfaces/node';\nimport { getLinkLineColorByMindmapElement } from '../../utils/colors';\nimport { Point } from '@plait/core';\nimport { getRectangleByNode } from '../../utils';\nimport { getLayoutDirection, getPointByPlacement, movePoint, transformPlacement } from '../../utils/point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../interfaces/types';\n\nexport function drawLogicLink(roughSVG: RoughSVG, node: MindmapNode, parent: MindmapNode, isHorizontal: boolean) {\n const stroke = getLinkLineColorByMindmapElement(node.origin);\n const strokeWidth = node.origin.linkLineWidth ? node.origin.linkLineWidth : STROKE_WIDTH;\n const hasStraightLine = !parent.origin.isRoot;\n const hasUnderlineShape = node.origin.shape === MindmapNodeShape.underline;\n const hasUnderlineShapeOfParent = parent.origin.shape === MindmapNodeShape.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 roughSVG.curve(points as any, { stroke, 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 { MindmapNode } from '../interfaces/node';\nimport { getRectangleByNode } from '../utils/graph';\nimport { NodeSpace } from '../utils/node-space';\n\nexport function drawMindmapNodeRichtext(node: MindmapNode, 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 return drawRichtext(x, y, node.origin.width, node.origin.height, node.origin.data.topic, viewContainerRef, classList);\n}\n\nexport function updateMindNodeTopicSize(node: MindmapNode, 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 updateForeignObject(g, node.origin.width, node.origin.height, x, y);\n }\n}\n\nexport function getRichtextRectangleByNode(node: MindmapNode) {\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 { RoughSVG } from 'roughjs/bin/svg';\nimport { NODE_FILL, ROOT_NODE_FILL, STROKE_WIDTH, TRANSPARENT } from '../constants';\nimport { MindmapNode } from '../interfaces/node';\nimport { getStrokeByMindmapElement } from '../utils/colors';\nimport { getRectangleByNode } from '../utils/graph';\nimport { PlaitBoard, drawRoundRectangle } from '@plait/core';\n\nexport function drawRectangleNode(board: PlaitBoard, node: MindmapNode) {\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 = getStrokeByMindmapElement(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 { MindmapNode } 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: MindmapNode, 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 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, isVerticalLogicLayout, MindmapLayoutType } from '@plait/layouts';\n\nexport const setLayout = (board: PlaitBoard, layout: MindmapLayoutType, path: Path) => {\n correctLogicLayoutNode(board, layout, path);\n Transforms.setNode(board, { layout }, path);\n};\n\nconst correctLogicLayoutNode = (board: PlaitBoard, layout: MindmapLayoutType, 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 emojis.push(emojiItem);\n const newElement = {\n data: { topic: element.data.topic, emojis }\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","import { setLayout } from './layout';\nimport { addEmoji, removeEmoji, setTopic, setTopicSize } from './node';\n\nexport const MindTransforms = {\n setLayout,\n setTopic,\n setTopicSize,\n addEmoji,\n removeEmoji\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 { MindmapLayoutType, isHorizontalLayout } from '@plait/layouts';\nimport { MindmapQueries } 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 handlePosition: AbstractHandlePosition = AbstractHandlePosition.start,\n resizingLocation?: number\n) {\n const abstractIncludedG = createG();\n\n const parentElement = MindElement.getParent(element);\n const nodeLayout = MindmapQueries.getCorrectLayoutByElement(element) as MindmapLayoutType;\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, handlePosition, 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 handleOptions = {\n stroke: ABSTRACT_HANDLE_COLOR,\n strokeWidth: 3,\n fillStyle: 'solid'\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(startPoint1[0], startPoint1[1], startPoint2[0], startPoint2[1], handleOptions);\n const endHandle = roughSVG.line(endPoint1[0], endPoint1[1], endPoint2[0], endPoint2[1], handleOptions);\n\n abstractIncludedG.append(startHandle);\n abstractIncludedG.append(endHandle);\n abstractIncludedG.append(rectangle);\n\n return abstractIncludedG;\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 Point\n} from '@plait/core';\nimport {\n isBottomLayout,\n isHorizontalLayout,\n isIndentedLayout,\n isLeftLayout,\n AbstractNode,\n isRightLayout,\n isStandardLayout,\n isTopLayout,\n MindmapLayoutType,\n OriginNode\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 {\n EXTEND_OFFSET,\n EXTEND_RADIUS,\n MindmapNodeShape,\n NODE_MIN_WIDTH,\n PRIMARY_COLOR,\n QUICK_INSERT_CIRCLE_COLOR,\n QUICK_INSERT_CIRCLE_OFFSET,\n QUICK_INSERT_INNER_CROSS_COLOR,\n STROKE_WIDTH\n} from './constants';\nimport { drawIndentedLink } from './draw/indented-link';\nimport { drawLogicLink } from './draw/link/logic-link';\nimport { drawMindmapNodeRichtext, updateMindNodeTopicSize } from './draw/richtext';\nimport { drawRectangleNode } from './draw/shape';\nimport { MindElement, PlaitMind } from './interfaces/element';\nimport { ExtendLayoutType, ExtendUnderlineCoordinateType, MindmapNode } from './interfaces/node';\nimport { MindmapQueries } from './queries';\nimport { getLinkLineColorByMindmapElement, getRootLinkLineColorByMindmapElement } from './utils/colors';\nimport { getRectangleByNode, hitMindmapElement } from './utils/graph';\nimport { insertMindElement, getChildrenCount } from './utils/mindmap';\nimport { getNodeShapeByElement } from './utils/shape';\nimport { ELEMENT_TO_NODE, MINDMAP_ELEMENT_TO_COMPONENT } 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';\n\n@Component({\n selector: 'plait-mindmap-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!: MindmapNode;\n\n parent!: MindmapNode;\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 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 MINDMAP_ELEMENT_TO_COMPONENT.set(this.element, this);\n super.ngOnInit();\n this.node = ELEMENT_TO_NODE.get(this.element) as MindmapNode;\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 }\n\n onContextChanged(value: PlaitPluginElementContext<T>, previous: PlaitPluginElementContext<T>) {\n const newNode = ELEMENT_TO_NODE.get(this.element) as MindmapNode;\n if (!PlaitMind.isMind(this.element)) {\n this.parent = MindElement.getNode(MindElement.getParent(this.element));\n }\n\n MINDMAP_ELEMENT_TO_COMPONENT.set(this.element, this);\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 = MindmapNode.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.drawEmojis();\n }\n }\n\n drawShape() {\n this.destroyShape();\n const shape = getNodeShapeByElement(this.node.origin) as MindmapNodeShape;\n switch (shape) {\n case MindmapNodeShape.roundRectangle:\n this.shapeG = drawRectangleNode(this.board, this.node as MindmapNode);\n this.g.prepend(this.shapeG);\n break;\n default:\n break;\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 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 = MindmapQueries.getLayoutByElement(this.parent.origin) as MindmapLayoutType;\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.roughSVG, this.parent, this.node);\n } else {\n this.linkG = drawLogicLink(this.roughSVG, 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 = MindmapQueries.getLayoutByElement(this.node.origin) as MindmapLayoutType;\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 MindmapNode);\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 MindmapNode);\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 } = drawMindmapNodeRichtext(this.node as MindmapNode, 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 private drawQuickInsert(offset = 0) {\n if (this.board.options.readonly) {\n return;\n }\n const quickInsertG = createG();\n quickInsertG.classList.add('quick-insert');\n this.extendG?.append(quickInsertG);\n const { x, y, width, height } = getRectangleByNode(this.node);\n\n /**\n * 方位:\n * 1. 左、左上、左下\n * 2. 右、右上、右下\n * 3. 上、上左、上右\n * 4. 下、下左、下右\n */\n const shape = getNodeShapeByElement(this.node.origin);\n // 形状是矩形要偏移边框的线宽\n const strokeWidth = this.node.origin.linkLineWidth ? this.node.origin.linkLineWidth : STROKE_WIDTH;\n let offsetBorderLineWidth = 0;\n if (shape === MindmapNodeShape.roundRectangle && offset === 0) {\n offsetBorderLineWidth = strokeWidth;\n }\n let offsetRootBorderLineWidth = 0;\n if (this.node.origin.isRoot) {\n offsetRootBorderLineWidth = strokeWidth;\n }\n // 当没有子节点时,需要缩小的偏移量\n const extraOffset = 3;\n const underlineCoordinates: ExtendUnderlineCoordinateType = {\n // 画线方向:右向左 <--\n [MindmapLayoutType.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 [MindmapLayoutType.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 [MindmapLayoutType.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 [MindmapLayoutType.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 [MindmapLayoutType.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 [MindmapLayoutType.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 [MindmapLayoutType.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 [MindmapLayoutType.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 === MindmapNodeShape.roundRectangle || this.node.origin.isRoot) {\n underlineCoordinates[MindmapLayoutType.left].startY -= height * 0.5;\n underlineCoordinates[MindmapLayoutType.left].endY -= height * 0.5;\n underlineCoordinates[MindmapLayoutType.right].startY -= height * 0.5;\n underlineCoordinates[MindmapLayoutType.right].endY -= height * 0.5;\n }\n const stroke = this.node.origin.isRoot\n ? getRootLinkLineColorByMindmapElement(this.element)\n : getLinkLineColorByMindmapElement(this.element);\n let nodeLayout = MindmapQueries.getCorrectLayoutByElement(this.node.origin) as ExtendLayoutType;\n if (this.node.origin.isRoot && isStandardLayout(nodeLayout)) {\n const root = this.node.origin as OriginNode;\n nodeLayout = root.children.length >= root.rightNodeCount ? MindmapLayoutType.left : MindmapLayoutType.right;\n }\n const underlineCoordinate = underlineCoordinates[nodeLayout];\n if (underlineCoordinate) {\n const underline = this.roughSVG.line(\n underlineCoordinate.startX,\n underlineCoordinate.startY,\n underlineCoordinate.endX,\n underlineCoordinate.endY,\n { stroke, strokeWidth }\n );\n const circleCoordinates = {\n startX: underlineCoordinate.endX,\n startY: underlineCoordinate.endY\n };\n const circle = this.roughSVG.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 = this.roughSVG.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 = this.roughSVG.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\n fromEvent(quickInsertG, 'mouseup')\n .pipe(take(1))\n .subscribe(() => {\n const path = PlaitBoard.findPath(this.board, this.element).concat(\n this.element.children.filter(child => !AbstractNode.isAbstract(child)).length\n );\n insertMindElement(this.board, this.node.origin, path);\n });\n }\n\n drawExtend() {\n // destroy\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 this.drawQuickInsert();\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 = getLinkLineColorByMindmapElement(this.element);\n const strokeWidth = this.node.origin.linkLineWidth ? this.node.origin.linkLineWidth : STROKE_WIDTH;\n const extendY = y + height / 2;\n const nodeLayout = MindmapQueries.getCorrectLayoutByElement(this.element) as MindmapLayoutType;\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 MindmapNodeShape) === MindmapNodeShape.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\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 this.drawQuickInsert(EXTEND_RADIUS);\n } else {\n this.drawQuickInsert();\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(resizingLocation?: number, handlePosition?: AbstractHandlePosition) {\n this.abstractIncludedOutlineG?.remove();\n this.abstractIncludedOutlineG = drawAbstractIncludedOutline(\n this.board,\n this.roughSVG,\n this.element,\n handlePosition,\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 = hitMindmapElement(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: MindmapNode) => {\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 if (MINDMAP_ELEMENT_TO_COMPONENT.get(this.element) === this) {\n MINDMAP_ELEMENT_TO_COMPONENT.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 { MindmapNodeShape } 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 === MindmapNodeShape.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 { MindmapNode } 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 { getDefaultMindmapLayout } 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!: MindmapNode;\n\n rootG!: SVGGElement;\n\n ngOnInit(): void {\n this.updateMindmap();\n super.ngOnInit();\n }\n\n beforeContextChange(value: PlaitPluginElementContext<PlaitMind>) {\n if (value.element !== this.element && this.initialized) {\n this.updateMindmap(value.element);\n }\n }\n\n updateMindmap(element = this.element) {\n const mindLayoutType = element.layout || getDefaultMindmapLayout();\n this.root = (GlobalLayout.layout((element as unknown) as OriginNode, getLayoutOptions(), mindLayoutType) as unknown) as MindmapNode;\n this.updateMindmapLocation(element);\n }\n\n updateMindmapLocation(element: PlaitMind) {\n const { x, y, hGap, vGap } = this.root;\n const offsetX = x + hGap;\n const offsetY = y + vGap;\n depthFirstRecursion<MindmapNode>(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 isBottomLayout,\n isHorizontalLogicLayout,\n isIndentedLayout,\n isLeftLayout,\n isRightLayout,\n isStandardLayout,\n isTopLayout,\n isVerticalLogicLayout,\n MindmapLayoutType\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, MindmapNode } 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, hitMindmapElement } from '../utils/graph';\nimport { MINDMAP_ELEMENT_TO_COMPONENT } from '../utils/weak-maps';\nimport { MindmapQueries } 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: MindmapNode) => {\n if (activeElement) {\n return;\n }\n if (hitMindmapElement(board, point, node.origin) && !node.origin.isRoot && selectedElements.length <= 1) {\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 = MINDMAP_ELEMENT_TO_COMPONENT.get(activeElement) as MindNodeComponent;\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const fakeDraggingNode: MindmapNode = {\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(richtextG, textRectangle.width + BASE * 10, textRectangle.height, textRectangle.x + offsetX, textRectangle.y + offsetY);\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: MindmapNode) => {\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(dropTarget, roughSVG, 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 = MINDMAP_ELEMENT_TO_COMPONENT.get(activeElement) as MindNodeComponent;\n const targetComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(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 = MindmapQueries.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 = MINDMAP_ELEMENT_TO_COMPONENT.get(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 = MINDMAP_ELEMENT_TO_COMPONENT.get(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: MindmapLayoutType,\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 idCreator,\n Path,\n PlaitBoard,\n PlaitElement,\n Point,\n Transforms\n} from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { copyNewNode, insertMindElement, extractNodesText, transformNodeToRoot, transformRootToNode, createMindElement } from '.';\nimport { getRectangleByNode } from './graph';\nimport { MINDMAP_ELEMENT_TO_COMPONENT } from './weak-maps';\nimport { MindNodeComponent } from '../node.component';\nimport { TEXT_DEFAULT_HEIGHT } from '@plait/richtext';\n\nexport const buildClipboardData = (board: PlaitBoard, selectedElements: MindElement[]) => {\n let result: MindElement[] = [];\n const selectedMindmapNodes = Array.from(selectedElements, node => {\n return (MINDMAP_ELEMENT_TO_COMPONENT.get(node) as MindNodeComponent)?.node;\n });\n const nodesRectangle = getRectangleByElements(board, selectedElements, true);\n selectedElements.forEach((node, index) => {\n const nodeRectangle = getRectangleByNode(selectedMindmapNodes[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 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 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 { PlaitBoard, PlaitElement } from '@plait/core';\nimport { Path } from 'slate';\n\nexport function findNewChildNodePath(board: PlaitBoard, element: PlaitElement) {\n const path = PlaitBoard.findPath(board, element);\n return path.concat((element.children || []).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 { 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};","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, MindmapLayoutType, isHorizontalLayout, isStandardLayout } from '@plait/layouts';\nimport { AbstractHandlePosition, MindElement } from '../interfaces';\nimport { MindNodeComponent, MindmapQueries } from '../public-api';\nimport { findLocationLeftIndex, getHitAbstractHandle, getLocationScope } from '../utils/abstract/resize';\nimport { separateChildren } from '../utils/abstract/common';\n\nexport const withAbstract: PlaitPlugin = (board: PlaitBoard) => {\n const { mousedown, mousemove, mouseup } = board;\n let activeAbstractElement: PlaitElement | undefined;\n let abstractHandlePosition: AbstractHandlePosition | null;\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 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 if (abstractHandlePosition && activeAbstractElement) {\n const abstractComponent = PlaitElement.getComponent(activeAbstractElement) as MindNodeComponent;\n const element = abstractComponent.element;\n const nodeLayout = MindmapQueries.getCorrectLayoutByElement(activeAbstractElement as MindElement) as MindmapLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n const parentElement = MindElement.getParent(element);\n\n let children = parentElement.children;\n\n const parentLayout = MindmapQueries.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 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(location, abstractHandlePosition);\n }\n mousemove(event);\n };\n\n board.mouseup = (event: MouseEvent) => {\n startPoint = undefined;\n abstractHandlePosition = null;\n if (activeAbstractElement) {\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 }\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} from '@plait/core';\nimport { getSizeByText } from '@plait/richtext';\nimport { MindElement, PlaitMind } from '../interfaces';\nimport { MindmapNode } 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} from '../utils';\nimport { getRectangleByNode, hitMindmapElement } from '../utils/graph';\nimport { isVirtualKey } from '../utils/is-virtual-key';\nimport { MINDMAP_ELEMENT_TO_COMPONENT } from '../utils/weak-maps';\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.isIntersect(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 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\n let lastNode: MindmapNode | any = null;\n const elementGroup = filterChildElement(selectedElements);\n const selectNode = elementGroup[0];\n const MindNodeComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(selectNode);\n const nodeIndex = MindNodeComponent?.parent?.children.findIndex(item => item.origin.id === selectNode.id);\n const isSameParent = elementGroup.every(element => {\n return findParentElement(element) && findParentElement(elementGroup[0]) === findParentElement(element);\n });\n if (isSameParent) {\n const childCount = MindNodeComponent!.parent?.children.length - elementGroup.length;\n if (childCount === 0) {\n lastNode = MindNodeComponent?.parent;\n } else if (nodeIndex === 0) {\n lastNode = MindNodeComponent?.parent.children[elementGroup.length];\n } else if (nodeIndex! > 0) {\n lastNode = MindNodeComponent?.parent.children[nodeIndex! - 1];\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) && hitMindmapElement(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';\n\n@Directive()\nexport class MindEmojiBaseComponent {\n @Input()\n fontSize: number = 14;\n\n @Input()\n emojiItem!: EmojiItem;\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":["i1","Path"],"mappings":"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"}
|