@plait/mind 0.74.0 → 0.75.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"plait-mind.mjs","sources":["../../../packages/mind/src/utils/weak-maps.ts","../../../packages/mind/src/interfaces/node.ts","../../../packages/mind/src/interfaces/layout.ts","../../../packages/mind/src/interfaces/pointer.ts","../../../packages/mind/src/constants/theme.ts","../../../packages/mind/src/interfaces/theme-color.ts","../../../packages/mind/src/constants/default.ts","../../../packages/mind/src/utils/space/emoji.ts","../../../packages/mind/src/utils/node-style/common.ts","../../../packages/mind/src/constants/node-style.ts","../../../packages/mind/src/utils/abstract/common.ts","../../../packages/mind/src/utils/node-style/branch.ts","../../../packages/mind/src/utils/node-style/shape.ts","../../../packages/mind/src/utils/node/common.ts","../../../packages/mind/src/constants/node-topic-style.ts","../../../packages/mind/src/utils/layout.ts","../../../packages/mind/src/utils/space/layout-options.ts","../../../packages/mind/src/utils/node/create-node.ts","../../../packages/mind/src/utils/mind.ts","../../../packages/mind/src/utils/space/node-space.ts","../../../packages/mind/src/utils/position/node.ts","../../../packages/mind/src/utils/position/emoji.ts","../../../packages/mind/src/utils/position/topic.ts","../../../packages/mind/src/utils/position/image.ts","../../../packages/mind/src/utils/node/adjust-node.ts","../../../packages/mind/src/utils/node/image.ts","../../../packages/mind/src/utils/node/dynamic-width.ts","../../../packages/mind/src/utils/dnd/common.ts","../../../packages/mind/src/utils/dnd/detector.ts","../../../packages/mind/src/utils/draw/node-shape.ts","../../../packages/mind/src/constants/abstract-node.ts","../../../packages/mind/src/interfaces/types.ts","../../../packages/mind/src/utils/point-placement.ts","../../../packages/mind/src/utils/draw/node-link/indented-link.ts","../../../packages/mind/src/utils/draw/node-link/logic-link.ts","../../../packages/mind/src/utils/draw/node-link/draw-link.ts","../../../packages/mind/src/generators/node-emojis.generator.ts","../../../packages/mind/src/utils/draw/node-dnd.ts","../../../packages/mind/src/plugins/with-abstract-resize.board.ts","../../../packages/mind/src/utils/draw/abstract-outline.ts","../../../packages/mind/src/generators/node-active.generator.ts","../../../packages/mind/src/utils/abstract/resize.ts","../../../packages/mind/src/utils/node/right-node-count.ts","../../../packages/mind/src/utils/path.ts","../../../packages/mind/src/queries/get-correct-layout-by-element.ts","../../../packages/mind/src/queries/get-branch-layouts.ts","../../../packages/mind/src/queries/get-available-sublayouts-by-element.ts","../../../packages/mind/src/queries/get-layout-by-element.ts","../../../packages/mind/src/queries/index.ts","../../../packages/mind/src/interfaces/element.ts","../../../packages/mind/src/utils/draw/node-link/abstract-link.ts","../../../packages/mind/src/transforms/abstract-node.ts","../../../packages/mind/src/transforms/node.ts","../../../packages/mind/src/transforms/emoji.ts","../../../packages/mind/src/transforms/image.ts","../../../packages/mind/src/transforms/layout.ts","../../../packages/mind/src/transforms/property.ts","../../../packages/mind/src/transforms/index.ts","../../../packages/mind/src/generators/node-plus.generator.ts","../../../packages/mind/src/generators/node-collapse.generator.ts","../../../packages/mind/src/generators/node-shape.generator.ts","../../../packages/mind/src/mind-node.component.ts","../../../packages/mind/src/mind.component.ts","../../../packages/mind/src/plugins/with-node-dnd.ts","../../../packages/mind/src/plugins/with-abstract-resize.ts","../../../packages/mind/src/plugins/with-mind-extend.ts","../../../packages/mind/src/plugins/with-mind-create.ts","../../../packages/mind/src/plugins/with-mind-hotkey.ts","../../../packages/mind/src/utils/node-hover/extend.ts","../../../packages/mind/src/plugins/with-node-hover-hit-test.ts","../../../packages/mind/src/plugins/with-node-image.ts","../../../packages/mind/src/plugins/with-node-resize.ts","../../../packages/mind/src/plugins/with-node-image-resize.ts","../../../packages/mind/src/utils/clipboard.ts","../../../packages/mind/src/plugins/with-mind-fragment.ts","../../../packages/mind/src/emoji/with-emoji.ts","../../../packages/mind/src/plugins/with-mind.ts","../../../packages/mind/src/emoji/emoji-base.component.ts","../../../packages/mind/src/public-api.ts","../../../packages/mind/src/plait-mind.ts"],"sourcesContent":["import { MindElement } from '../interfaces/element';\nimport { MindNode } from '../interfaces/node';\n\nexport const ELEMENT_TO_NODE = new WeakMap<MindElement, MindNode>();\n","import { MindLayoutType } from '@plait/layouts';\nimport { Path } from '@plait/core';\nimport { MindElement } from './element';\n\nexport interface MindNode {\n depth: number;\n x: number;\n y: number;\n width: number;\n height: number;\n hGap: number;\n vGap: number;\n children: MindNode[];\n origin: MindElement;\n parent: MindNode;\n left: boolean;\n up: boolean;\n}\n\nexport const MindNode = {\n get(root: MindNode, path: Path) {\n let node = root;\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n node = node.children[p];\n }\n return node;\n }\n};\n\nexport type ExtendLayoutType = Exclude<MindLayoutType, MindLayoutType.standard>;\n\nexport type CoordinateType = {\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n};\n\nexport type ExtendUnderlineCoordinateType = {\n [key in ExtendLayoutType]: CoordinateType;\n};\n\nexport type DetectResult = 'top' | 'bottom' | 'right' | 'left' | null;\n\nexport type RootBaseDirection = 'right' | 'left' | null;\n","import { MindLayoutType } from '@plait/layouts';\n\nexport enum LayoutDirection {\n 'top' = 'top',\n 'right' = 'right',\n 'bottom' = 'bottom',\n 'left' = 'left'\n}\n\nexport const LayoutDirectionsMap: LayoutDirectionMapType = {\n [MindLayoutType.right]: [LayoutDirection.right],\n [MindLayoutType.left]: [LayoutDirection.left],\n [MindLayoutType.upward]: [LayoutDirection.top],\n [MindLayoutType.downward]: [LayoutDirection.bottom],\n [MindLayoutType.rightBottomIndented]: [LayoutDirection.right, LayoutDirection.bottom],\n [MindLayoutType.rightTopIndented]: [LayoutDirection.right, LayoutDirection.top],\n [MindLayoutType.leftBottomIndented]: [LayoutDirection.left, LayoutDirection.bottom],\n [MindLayoutType.leftTopIndented]: [LayoutDirection.left, LayoutDirection.top]\n};\n\nexport type LayoutDirectionMapType = { [key: string]: LayoutDirection[] };\n","export enum MindPointerType {\n 'mind' = 'mind'\n}\n","export const DEFAULT_BRANCH_COLORS = [\n '#A287E0',\n '#6E80DB',\n '#6DC4C4',\n '#E0B75E',\n '#B1C675',\n '#77C386',\n '#C18976',\n '#E48484',\n '#E582D4',\n '#6AB1E4'\n];\n\nexport const COLORFUL_BRANCH_COLORS = [\n '#F94239',\n '#FF8612',\n '#F3D222',\n '#B3D431',\n '#00BC7B',\n '#06ADBF',\n '#476BFF',\n '#4E49BE',\n '#8957E5',\n '#FE5DA1'\n];\n\nexport const SOFT_BRANCH_COLORS = [\n '#6D89C1',\n '#F2BDC7',\n '#B796D9',\n '#5BA683',\n '#B3D431 ',\n '#F2DC6C',\n '#F7C98D',\n '#60B4D1',\n '#838F9E',\n '#C1A381'\n];\n\nexport const RETRO_BRANCH_COLORS = [\n '#459476',\n '#9A894F',\n '#D48444',\n '#E9C358 ',\n '#4B9D9D',\n '#C14C41',\n '#827086 ',\n '#60718D',\n '#D38183',\n '#9DC19D'\n];\n\nexport const DARK_BRANCH_COLORS = [\n '#3DD1AE',\n '#F6C659',\n '#A9E072',\n '#FF877B ',\n '#F693E7',\n '#5DCFFF',\n '#868AF6',\n '#4C6DC7',\n '#D97C26',\n '#268FAC'\n];\n\nexport const STARRY_BRANCH_COLORS = [\n '#E46C57',\n '#579360',\n '#B98339',\n '#3A62D1 ',\n '#B883B7',\n '#42ABE5',\n '#2B9D8F',\n '#A4705E',\n '#265833',\n '#787865'\n];\n","import {\n DefaultThemeColor,\n StarryThemeColor,\n ThemeColor,\n ThemeColorMode,\n DarkThemeColor,\n ColorfulThemeColor,\n SoftThemeColor,\n RetroThemeColor,\n DEFAULT_COLOR\n} from '@plait/core';\nimport {\n COLORFUL_BRANCH_COLORS,\n DARK_BRANCH_COLORS,\n DEFAULT_BRANCH_COLORS,\n RETRO_BRANCH_COLORS,\n SOFT_BRANCH_COLORS,\n STARRY_BRANCH_COLORS\n} from '../constants/theme';\n\nexport interface MindThemeColor extends ThemeColor {\n mode: ThemeColorMode | string;\n branchColors: string[];\n rootFill: string;\n rootTextColor: string;\n}\n\nexport const MindDefaultThemeColor: MindThemeColor = {\n ...DefaultThemeColor,\n branchColors: DEFAULT_BRANCH_COLORS,\n rootFill: '#f5f5f5',\n rootTextColor: DEFAULT_COLOR\n};\n\nexport const MindColorfulThemeColor: MindThemeColor = {\n ...ColorfulThemeColor,\n branchColors: COLORFUL_BRANCH_COLORS,\n rootFill: DEFAULT_COLOR,\n rootTextColor: '#FFFFFF'\n};\n\nexport const MindSoftThemeColor: MindThemeColor = {\n ...SoftThemeColor,\n branchColors: SOFT_BRANCH_COLORS,\n rootFill: '#FFFFFF',\n rootTextColor: DEFAULT_COLOR\n};\n\nexport const MindRetroThemeColor: MindThemeColor = {\n ...RetroThemeColor,\n branchColors: RETRO_BRANCH_COLORS,\n rootFill: '#153D5D',\n rootTextColor: '#FFFFFF'\n};\n\nexport const MindDarkThemeColor: MindThemeColor = {\n ...DarkThemeColor,\n branchColors: DARK_BRANCH_COLORS,\n rootFill: '#FFFFFF',\n rootTextColor: DEFAULT_COLOR\n};\n\nexport const MindStarryThemeColor: MindThemeColor = {\n ...StarryThemeColor,\n branchColors: STARRY_BRANCH_COLORS,\n rootFill: '#FFFFFF',\n rootTextColor: DEFAULT_COLOR\n};\n\nexport const MindThemeColors: MindThemeColor[] = [\n MindDefaultThemeColor,\n MindColorfulThemeColor,\n MindSoftThemeColor,\n MindRetroThemeColor,\n MindDarkThemeColor,\n MindStarryThemeColor\n];\n\nexport const MindThemeColor = {\n isMindThemeColor(value: any): value is MindThemeColor {\n if (value.branchColors && value.rootFill && value.rootTextColor) {\n return true;\n } else {\n return false;\n }\n }\n};\n","export const WithMindPluginKey = 'plait-mind-plugin-key';\n\nexport const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const GRAY_COLOR = '#AAAAAA';\nexport const STROKE_WIDTH = 3;\n\nexport const EXTEND_OFFSET = 8;\nexport const EXTEND_DIAMETER = 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\nexport const DEFAULT_MIND_IMAGE_WIDTH = 240;\n","import { WithMindPluginKey } from '../../constants/default';\nimport { EmojiData, MindElement, PlaitMind } from '../../interfaces';\nimport { WithMindOptions } from '../../interfaces/options';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\n\nexport function getEmojisWidthHeight(board: PlaitMindBoard, element: MindElement<EmojiData>) {\n const options = board.getPluginOptions<WithMindOptions>(WithMindPluginKey);\n const count = element.data.emojis.length;\n const fontSize = getEmojiFontSize(element);\n return {\n width: fontSize * count + count * 2 * options.emojiPadding + (count - 1) * options.spaceBetweenEmojis,\n height: element.height\n };\n}\n\nexport function getEmojiFontSize(element: MindElement<EmojiData>) {\n if (PlaitMind.isMind(element)) {\n return 18 + 2;\n } else {\n return 14 + 2;\n }\n}\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\n\nexport const getAvailableProperty = (board: PlaitBoard, element: MindElement, propertyKey: keyof MindElement) => {\n return element[propertyKey];\n};\n","import { GRAY_COLOR } from './default';\n\nexport const DefaultAbstractNodeStyle = {\n branch: { color: GRAY_COLOR, width: 2 },\n shape: {\n strokeColor: GRAY_COLOR,\n strokeWidth: 2\n }\n};\n\nexport const DefaultNodeStyle = {\n branch: {\n width: 3\n },\n shape: {\n rectangleRadius: 4,\n strokeWidth: 3,\n fill: 'none'\n }\n};\n","import { AbstractNode } from '@plait/layouts';\nimport { MindElement, PlaitMind } from '../../interfaces/element';\nimport { Path, PlaitBoard, PlaitElement, PlaitNode } from '@plait/core';\n\nexport const separateChildren = (parentElement: MindElement) => {\n const rightNodeCount = parentElement.rightNodeCount!;\n const children = parentElement.children;\n let rightChildren = [],\n leftChildren = [];\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (AbstractNode.isAbstract(child) && child.end < rightNodeCount) {\n rightChildren.push(child);\n continue;\n }\n if (AbstractNode.isAbstract(child) && child.start >= rightNodeCount) {\n leftChildren.push(child);\n continue;\n }\n\n if (i < rightNodeCount) {\n rightChildren.push(child);\n } else {\n leftChildren.push(child);\n }\n }\n\n return { leftChildren, rightChildren };\n};\n\nexport const isSetAbstract = (element: PlaitElement) => {\n return !!getCorrespondingAbstract(element as MindElement);\n};\n\nexport const canSetAbstract = (element: PlaitElement) => {\n return !PlaitElement.isRootElement(element) && !AbstractNode.isAbstract(element) && !isSetAbstract(element);\n};\n\nexport const getCorrespondingAbstract = (element: MindElement) => {\n const parent = MindElement.findParent(element as MindElement);\n if (!parent) return undefined;\n\n const elementIndex = parent.children.indexOf(element);\n return parent.children.find(child => {\n return AbstractNode.isAbstract(child) && elementIndex >= child.start! && elementIndex <= child.end!;\n });\n};\n\nexport const getBehindAbstracts = (element: MindElement) => {\n const parent = MindElement.findParent(element as MindElement);\n if (!parent) return [];\n const index = parent.children.indexOf(element);\n return parent.children.filter(child => AbstractNode.isAbstract(child) && child.start! > index);\n};\n\n/**\n * return corresponding abstract that is not child of elements\n */\nexport const getOverallAbstracts = (board: PlaitBoard, elements: MindElement[]) => {\n const overallAbstracts: MindElement[] = [];\n elements\n .filter(value => !AbstractNode.isAbstract(value) && !PlaitMind.isMind(value))\n .forEach(value => {\n const abstract = getCorrespondingAbstract(value);\n if (abstract && elements.indexOf(abstract) === -1 && overallAbstracts.indexOf(abstract) === -1) {\n const { start, end } = abstract;\n const parent = MindElement.getParent(value);\n const isOverall = parent.children.slice(start!, end! + 1).every(includedElement => elements.indexOf(includedElement) > -1);\n if (isOverall) {\n overallAbstracts.push(abstract);\n }\n }\n });\n return overallAbstracts as (MindElement & AbstractNode)[];\n};\n\nexport interface AbstractRef {\n abstract: MindElement & AbstractNode;\n references: MindElement[];\n}\n\n/**\n * abstract node is valid when elements contains at least one element it is referenced with\n */\nexport const getValidAbstractRefs = (board: PlaitBoard, elements: MindElement[]) => {\n const validAbstractRefs: AbstractRef[] = [];\n elements\n .filter(value => !AbstractNode.isAbstract(value) && !PlaitMind.isMind(value))\n .forEach(value => {\n const abstract = getCorrespondingAbstract(value);\n if (abstract && elements.indexOf(abstract) > 0) {\n const index = validAbstractRefs.findIndex(value => value.abstract === abstract);\n if (index === -1) {\n validAbstractRefs.push({\n abstract: abstract as MindElement & AbstractNode,\n references: [value]\n });\n } else {\n validAbstractRefs[index].references.push(value);\n }\n }\n });\n return validAbstractRefs;\n};\n\nexport function getRelativeStartEndByAbstractRef(abstractRef: AbstractRef, elements: MindElement[]) {\n const start = elements.indexOf(abstractRef.references[0]);\n const end = elements.indexOf(abstractRef.references[abstractRef.references.length - 1]);\n return { start, end };\n}\n\nexport const insertElementHandleAbstract = (\n board: PlaitBoard,\n path: Path,\n step = 1,\n // This distinguishes between dragging and adding to the last node summarized in the abstract node\n isExtendPreviousNode: boolean = true,\n effectedAbstracts = new Map<MindElement, Pick<AbstractNode, 'start' | 'end'>>()\n) => {\n const parent = PlaitNode.parent(board, path) as MindElement;\n const hasPreviousNode = path[path.length - 1] !== 0;\n let behindAbstracts: MindElement[];\n\n if (!hasPreviousNode) {\n behindAbstracts = parent.children.filter(child => AbstractNode.isAbstract(child));\n } else {\n const selectedElement = PlaitNode.get(board, Path.previous(path)) as MindElement;\n behindAbstracts = getBehindAbstracts(selectedElement);\n }\n\n if (behindAbstracts.length) {\n behindAbstracts.forEach(abstract => {\n let newProperties = effectedAbstracts.get(abstract);\n if (!newProperties) {\n newProperties = { start: 0, end: 0 };\n effectedAbstracts.set(abstract, newProperties);\n }\n newProperties.start = newProperties.start + step;\n newProperties.end = newProperties.end + step;\n });\n }\n\n if (!hasPreviousNode) {\n return effectedAbstracts;\n }\n\n const selectedElement = PlaitNode.get(board, Path.previous(path)) as MindElement;\n const correspondingAbstract = getCorrespondingAbstract(selectedElement);\n const isDragToLast = !isExtendPreviousNode && correspondingAbstract && correspondingAbstract.end === path[path.length - 1] - 1;\n\n if (correspondingAbstract && !isDragToLast) {\n let newProperties = effectedAbstracts.get(correspondingAbstract);\n if (!newProperties) {\n newProperties = { start: 0, end: 0 };\n effectedAbstracts.set(correspondingAbstract, newProperties);\n }\n newProperties.end = newProperties.end + step;\n }\n\n return effectedAbstracts;\n};\n\nexport const deleteElementHandleAbstract = (\n board: PlaitBoard,\n deletableElements: MindElement[],\n effectedAbstracts = new Map<MindElement, Pick<AbstractNode, 'start' | 'end'>>()\n) => {\n deletableElements.forEach(node => {\n if (!PlaitMind.isMind(node)) {\n const behindAbstracts = getBehindAbstracts(node).filter(abstract => !deletableElements.includes(abstract));\n if (behindAbstracts.length) {\n behindAbstracts.forEach(abstract => {\n let newProperties = effectedAbstracts.get(abstract);\n if (!newProperties) {\n newProperties = { start: 0, end: 0 };\n effectedAbstracts.set(abstract, newProperties);\n }\n newProperties.start = newProperties.start - 1;\n newProperties.end = newProperties.end - 1;\n });\n }\n\n const correspondingAbstract = getCorrespondingAbstract(node);\n if (correspondingAbstract && !deletableElements.includes(correspondingAbstract)) {\n let newProperties = effectedAbstracts.get(correspondingAbstract);\n if (!newProperties) {\n newProperties = { start: 0, end: 0 };\n\n effectedAbstracts.set(correspondingAbstract, newProperties);\n }\n newProperties.end = newProperties.end - 1;\n }\n }\n });\n return effectedAbstracts;\n};\n\nexport const isChildOfAbstract = (board: PlaitBoard, element: MindElement) => {\n const ancestors = MindElement.getAncestors(board, element) as MindElement[];\n return !!ancestors.find(value => AbstractNode.isAbstract(value));\n};\n","/**\n * Processing of branch color, width, style, etc. of the mind node\n */\nimport { PlaitBoard, isNullOrUndefined } from '@plait/core';\nimport { BranchShape, MindElement } from '../../interfaces/element';\nimport { STROKE_WIDTH } from '../../constants/default';\nimport { DefaultAbstractNodeStyle } from '../../constants/node-style';\nimport { getAvailableProperty } from './common';\nimport { MindDefaultThemeColor, MindThemeColor } from '../../interfaces/theme-color';\nimport { AbstractNode } from '@plait/layouts';\nimport { isChildOfAbstract } from '../abstract/common';\n\nexport const getBranchColorByMindElement = (board: PlaitBoard, element: MindElement) => {\n if (AbstractNode.isAbstract(element) || isChildOfAbstract(board, element)) {\n return getAbstractBranchColor(board, element);\n }\n\n const branchColor = getAvailableProperty(board, element, 'branchColor') || getAvailableProperty(board, element, 'strokeColor');\n return branchColor || getDefaultBranchColor(board, element);\n};\n\nexport const getBranchShapeByMindElement = (board: PlaitBoard, element: MindElement) => {\n const branchShape = getAvailableProperty(board, element, 'branchShape');\n return branchShape || BranchShape.bight;\n};\n\nexport const getBranchWidthByMindElement = (board: PlaitBoard, element: MindElement) => {\n const branchWidth = getAvailableProperty(board, element, 'branchWidth') || getAvailableProperty(board, element, 'strokeWidth');\n return branchWidth || STROKE_WIDTH;\n};\n\nexport const getAbstractBranchWidth = (board: PlaitBoard, element: MindElement) => {\n if (!isNullOrUndefined(element.branchWidth)) {\n return element.branchWidth as number;\n }\n return DefaultAbstractNodeStyle.branch.width;\n};\n\nexport const getAbstractBranchColor = (board: PlaitBoard, element: MindElement) => {\n if (element.branchColor || element.strokeColor) {\n return element.branchColor || element.strokeColor;\n }\n return DefaultAbstractNodeStyle.branch.color;\n};\n\nexport const getNextBranchColor = (board: PlaitBoard, root: MindElement) => {\n const index = root.children.length;\n return getDefaultBranchColorByIndex(board, index);\n};\n\nexport const getDefaultBranchColor = (board: PlaitBoard, element: MindElement) => {\n const path = PlaitBoard.findPath(board, element);\n return getDefaultBranchColorByIndex(board, path[1]);\n};\n\nexport const getDefaultBranchColorByIndex = (board: PlaitBoard, index: number) => {\n const themeColor = getMindThemeColor(board);\n const length = themeColor.branchColors.length;\n const remainder = index % length;\n return themeColor.branchColors[remainder];\n};\n\nexport const getMindThemeColor = (board: PlaitBoard) => {\n const themeColors = PlaitBoard.getThemeColors(board);\n const themeColor = themeColors.find(val => val.mode === board.theme.themeColorMode);\n if (themeColor && MindThemeColor.isMindThemeColor(themeColor)) {\n return themeColor;\n } else {\n return MindDefaultThemeColor;\n }\n};\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement, MindElementShape, PlaitMind } from '../../interfaces/element';\nimport { getAvailableProperty } from './common';\nimport { getDefaultBranchColor, getMindThemeColor } from './branch';\nimport { AbstractNode } from '@plait/layouts';\nimport { isChildOfAbstract } from '../abstract/common';\nimport { DefaultAbstractNodeStyle, DefaultNodeStyle } from '../../constants/node-style';\nimport { StrokeStyle } from '@plait/common';\n\nexport const getStrokeColorByElement = (board: PlaitBoard, element: MindElement) => {\n if (PlaitMind.isMind(element)) {\n const defaultRootStroke = getMindThemeColor(board).rootFill;\n return element.strokeColor || defaultRootStroke;\n }\n\n if (AbstractNode.isAbstract(element) || isChildOfAbstract(board, element)) {\n return element.strokeColor || DefaultAbstractNodeStyle.shape.strokeColor;\n }\n\n return getAvailableProperty(board, element, 'strokeColor') || getDefaultBranchColor(board, element);\n};\n\nexport const getStrokeStyleByElement = (board: PlaitBoard, element: MindElement) => {\n return element.strokeStyle || StrokeStyle.solid;\n};\n\nexport const getStrokeWidthByElement = (board: PlaitBoard, element: MindElement) => {\n const strokeWidth =\n element.strokeWidth ||\n (AbstractNode.isAbstract(element) ? DefaultAbstractNodeStyle.shape.strokeWidth : DefaultNodeStyle.shape.strokeWidth);\n return strokeWidth;\n};\n\nexport const getFillByElement = (board: PlaitBoard, element: MindElement) => {\n if (element.fill) {\n return element.fill;\n }\n const defaultRootFill = getMindThemeColor(board).rootFill;\n return element.isRoot ? defaultRootFill : DefaultNodeStyle.shape.fill;\n};\n\nexport const getShapeByElement = (board: PlaitBoard, element: MindElement): MindElementShape => {\n const shape = getAvailableProperty(board, element, 'shape');\n return shape || MindElementShape.roundRectangle;\n};\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { getFirstTextManage } from '@plait/common';\n\nexport function editTopic(element: MindElement) {\n const textManage = getFirstTextManage(element);\n textManage?.edit(\n () => {},\n event => {\n const keyboardEvent = event as KeyboardEvent;\n return keyboardEvent.key === 'Enter' && !keyboardEvent.shiftKey;\n }\n );\n}\n\nexport const getSelectedMindElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n return selectedElements.filter(value => MindElement.isMindElement(board, value)) as MindElement[];\n};\n","export const TOPIC_FONT_SIZE = 14;\n\nexport const ROOT_TOPIC_FONT_SIZE = 18;\n\nexport const ROOT_TOPIC_HEIGHT = 25;\n\nexport const ROOT_TOPIC_WIDTH = 72;\n\nexport const TOPIC_DEFAULT_MAX_WORD_COUNT = 34;\n\nexport const DEFAULT_FONT_FAMILY = 'PingFangSC-Regular, \"PingFang SC\"';\n\nexport const BRANCH_FONT_FAMILY = 'PingFangSC-Medium, \"PingFang SC\"';\n\nexport const NodeTopicThreshold = {\n defaultTextMaxWidth: 34 * 14\n};\n","import { LayoutDirection, LayoutDirectionsMap, MindElement, PlaitMind } from '../interfaces';\nimport { isIndentedLayout, MindLayoutType } from '@plait/layouts';\n\nexport const getBranchDirectionsByLayouts = (branchLayouts: MindLayoutType[]) => {\n const branchDirections: LayoutDirection[] = [];\n branchLayouts.forEach(l => {\n const directions = LayoutDirectionsMap[l];\n directions.forEach(d => {\n if (!branchDirections.includes(d) && !branchDirections.includes(getLayoutReverseDirection(d))) {\n branchDirections.push(d);\n }\n });\n });\n return branchDirections;\n};\n\nexport const isCorrectLayout = (root: MindElement, layout: MindLayoutType) => {\n const rootLayout = root.layout || getDefaultLayout();\n return !getInCorrectLayoutDirection(rootLayout, layout);\n};\n\nexport const isMixedLayout = (parentLayout: MindLayoutType, layout: MindLayoutType) => {\n return (!isIndentedLayout(parentLayout) && isIndentedLayout(layout)) || (isIndentedLayout(parentLayout) && !isIndentedLayout(layout));\n};\n\nexport const getInCorrectLayoutDirection = (rootLayout: MindLayoutType, layout: MindLayoutType) => {\n const directions = LayoutDirectionsMap[rootLayout];\n const subLayoutDirections = LayoutDirectionsMap[layout];\n if (!subLayoutDirections) {\n throw new Error(`unexpected layout: ${layout} on correct layout`);\n }\n return subLayoutDirections.find(d => directions.includes(getLayoutReverseDirection(d)));\n};\n\nexport const correctLayoutByDirection = (layout: MindLayoutType, direction: LayoutDirection) => {\n const isHorizontal = direction === LayoutDirection.left || direction === LayoutDirection.right ? true : false;\n let inverseDirectionLayout = MindLayoutType.standard;\n switch (layout) {\n case MindLayoutType.left:\n inverseDirectionLayout = MindLayoutType.right;\n break;\n case MindLayoutType.right:\n inverseDirectionLayout = MindLayoutType.left;\n break;\n case MindLayoutType.downward:\n inverseDirectionLayout = MindLayoutType.upward;\n break;\n case MindLayoutType.upward:\n inverseDirectionLayout = MindLayoutType.downward;\n break;\n case MindLayoutType.rightBottomIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.leftBottomIndented : MindLayoutType.rightTopIndented;\n break;\n case MindLayoutType.leftBottomIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.rightBottomIndented : MindLayoutType.leftTopIndented;\n break;\n case MindLayoutType.rightTopIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.leftTopIndented : MindLayoutType.rightBottomIndented;\n break;\n case MindLayoutType.leftTopIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.rightTopIndented : MindLayoutType.leftBottomIndented;\n break;\n }\n return inverseDirectionLayout;\n};\n\nexport const getLayoutDirection = (root: MindElement) => {\n const layout = root.layout || getDefaultLayout();\n return LayoutDirectionsMap[layout];\n};\n\nexport const getDefaultLayout = () => {\n return MindLayoutType.standard;\n};\n\nexport const getAvailableSubLayoutsByLayoutDirections = (directions: LayoutDirection[]): MindLayoutType[] => {\n const result: MindLayoutType[] = [];\n const reverseDirections = directions.map(getLayoutReverseDirection);\n for (const key in MindLayoutType) {\n const layout = MindLayoutType[key as keyof typeof MindLayoutType];\n const layoutDirections = LayoutDirectionsMap[layout];\n if (layoutDirections) {\n const hasSameDirection = layoutDirections.some(d => directions.includes(d));\n const hasReverseDirection = layoutDirections.some(r => reverseDirections.includes(r));\n if (hasSameDirection && !hasReverseDirection) {\n result.push(layout);\n }\n }\n }\n return result;\n};\n\nexport const getLayoutReverseDirection = (layoutDirection: LayoutDirection) => {\n let reverseDirection = LayoutDirection.right;\n switch (layoutDirection) {\n case LayoutDirection.top:\n reverseDirection = LayoutDirection.bottom;\n break;\n case LayoutDirection.bottom:\n reverseDirection = LayoutDirection.top;\n break;\n case LayoutDirection.right:\n reverseDirection = LayoutDirection.left;\n break;\n case LayoutDirection.left:\n reverseDirection = LayoutDirection.right;\n break;\n }\n return reverseDirection;\n};\n\nexport const getRootLayout = (root: MindElement) => {\n return root.layout || getDefaultLayout();\n};\n","import {\n ConnectingPosition,\n LayoutNode,\n LayoutOptions,\n OriginNode,\n isHorizontalLayout,\n isHorizontalLogicLayout,\n isIndentedLayout\n} from '@plait/layouts';\nimport { MindElement, MindElementShape } from '../../interfaces/element';\nimport { BASE, STROKE_WIDTH } from '../../constants/default';\nimport { getRootLayout } from '../layout';\nimport { NodeSpace } from './node-space';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\n\nexport const getLayoutOptions = (board: PlaitMindBoard) => {\n function getMainAxle(element: MindElement, parent?: LayoutNode) {\n if (element.isRoot) {\n return BASE * 12;\n }\n if (parent && parent.isRoot()) {\n return BASE * 3;\n }\n return BASE * 3;\n }\n\n function getSecondAxle(element: MindElement, parent?: LayoutNode) {\n if (element.isRoot) {\n return BASE * 10;\n }\n return BASE * 6;\n }\n\n return {\n getHeight(element: MindElement) {\n return NodeSpace.getNodeHeight(board, element);\n },\n getWidth(element: MindElement) {\n return NodeSpace.getNodeWidth(board, element);\n },\n getHorizontalGap(element: MindElement, parent?: LayoutNode) {\n const _layout = (parent && parent.layout) || getRootLayout(element);\n const isHorizontal = isHorizontalLayout(_layout);\n if (isIndentedLayout(_layout)) {\n return BASE * 4;\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 === MindElementShape.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};\n","import { PlaitBoard, Point, idCreator, isNullOrUndefined } from '@plait/core';\nimport { MindLayoutType } from '@plait/layouts';\nimport { BranchShape, MindElement, MindElementShape } from '../../interfaces/element';\nimport { ROOT_TOPIC_HEIGHT, ROOT_TOPIC_WIDTH } from '../../constants/node-topic-style';\nimport { Element } from 'slate';\nimport { NodeSpace } from '../space';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\nimport { buildText } from '@plait/common';\nimport { TEXT_DEFAULT_HEIGHT } from '@plait/text-plugins';\n\nexport const createEmptyMind = (board: PlaitBoard, point: Point) => {\n const element = createMindElement('思维导图', ROOT_TOPIC_WIDTH, ROOT_TOPIC_HEIGHT, { layout: MindLayoutType.right });\n element.isRoot = true;\n element.type = 'mindmap';\n const width = NodeSpace.getNodeWidth(board as PlaitMindBoard, element);\n const height = NodeSpace.getNodeHeight(board as PlaitMindBoard, element);\n element.points = [[point[0] - width / 2, point[1] - height / 2]];\n return element;\n};\n\nexport const createDefaultMind = (point: Point, rightNodeCount: number, layout: MindLayoutType) => {\n const root = createMindElement('思维导图', ROOT_TOPIC_WIDTH, ROOT_TOPIC_HEIGHT, { layout });\n root.rightNodeCount = rightNodeCount;\n root.isRoot = true;\n root.type = 'mindmap';\n root.points = [point];\n const children = [1, 1, 1].map(() => {\n return createMindElement('新建节点', 56, TEXT_DEFAULT_HEIGHT, {});\n });\n root.children = children;\n return root;\n};\n\nexport const createMindElement = (text: string | Element, width: number, height: number, options: InheritAttribute) => {\n const newElement: MindElement = {\n id: idCreator(),\n data: {\n topic: buildText(text)\n },\n children: [],\n width,\n height\n };\n\n let key: keyof typeof options;\n for (key in options) {\n if (!isNullOrUndefined(options[key])) {\n (newElement as any)[key] = options[key];\n }\n }\n\n return newElement;\n};\n\nexport interface InheritAttribute {\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: number;\n shape?: MindElementShape;\n layout?: MindLayoutType;\n branchColor?: string;\n branchWidth?: number;\n branchShape?: BranchShape;\n}\n\nexport const INHERIT_ATTRIBUTE_KEYS = [\n 'fill',\n 'strokeColor',\n 'strokeWidth',\n 'strokeStyle',\n 'shape',\n 'layout',\n 'branchColor',\n 'branchWidth',\n 'branchShape'\n];\n","import { addSelectedElement, clearSelectedElement, idCreator, Path, PlaitBoard, Transforms } from '@plait/core';\nimport { MindElement, PlaitMind } from '../interfaces/element';\nimport { editTopic } from './node/common';\nimport { createMindElement, INHERIT_ATTRIBUTE_KEYS, InheritAttribute } from './node/create-node';\nimport { MindNode } from '../interfaces/node';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\nimport { ROOT_TOPIC_FONT_SIZE, TOPIC_FONT_SIZE } from '../constants/node-topic-style';\nimport { TEXT_DEFAULT_HEIGHT } from '@plait/text-plugins';\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 = MindElement.findParent(child);\n while (parent) {\n if (parent === origin) {\n return true;\n }\n parent = MindElement.findParent(parent);\n }\n return false;\n};\n\nexport const getFirstLevelElement = (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 = (parent: MindNode, child: MindNode) => {\n return parent.x < child.x;\n};\n\nexport const isChildUp = (parent: MindNode, child: MindNode) => {\n return parent.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 insertMindElement = (board: PlaitMindBoard, inheritNode: MindElement, path: Path) => {\n const newNode: InheritAttribute = {};\n if (!inheritNode.isRoot) {\n INHERIT_ATTRIBUTE_KEYS.forEach(attr => {\n (newNode as any)[attr] = inheritNode[attr];\n });\n delete newNode.layout;\n }\n const newElement = createMindElement('', TOPIC_FONT_SIZE, TEXT_DEFAULT_HEIGHT, newNode);\n Transforms.insertNode(board, newElement, path);\n clearSelectedElement(board);\n addSelectedElement(board, newElement);\n setTimeout(() => {\n editTopic(newElement);\n });\n};\n\nexport const findLastChild = (child: MindNode) => {\n let result = child;\n while (result.children.length !== 0) {\n result = result.children[result.children.length - 1];\n }\n return result;\n};\n\nexport const divideElementByParent = (elements: MindElement[]) => {\n const abstractIncludedGroups = [];\n const parentElements: MindElement[] = [];\n\n for (let i = 0; i < elements.length; i++) {\n const parent = MindElement.getParent(elements[i]);\n const parentIndex = parentElements.indexOf(parent);\n if (parentIndex === -1) {\n parentElements.push(parent);\n abstractIncludedGroups.push([elements[i]]);\n } else {\n abstractIncludedGroups[parentIndex].push(elements[i]);\n }\n }\n return { parentElements, abstractIncludedGroups };\n};\n\nexport const getDefaultMindElementFontSize = (board: PlaitBoard, element: MindElement) => {\n if (PlaitMind.isMind(element)) {\n return ROOT_TOPIC_FONT_SIZE;\n }\n if (MindElement.isMindElement(board, element)) {\n return TOPIC_FONT_SIZE;\n }\n throw new Error('can not find default font-size');\n};\n","import { BASE, WithMindPluginKey } from '../../constants/default';\nimport { PlaitMind } from '../../interfaces/element';\nimport { MindElement } from '../../interfaces/element';\nimport { EmojiData } from '../../interfaces/element-data';\nimport { WithMindOptions } from '../../interfaces/options';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\nimport { getEmojisWidthHeight } from './emoji';\nimport { Element } from 'slate';\nimport { getStrokeWidthByElement } from '../node-style/shape';\nimport { getDefaultMindElementFontSize } from '../mind';\nimport { DEFAULT_FONT_SIZE, MarkTypes, PlaitMarkEditor } from '@plait/text-plugins';\nimport { getFirstTextEditor } from '@plait/common';\n\nconst NodeDefaultSpace = {\n horizontal: {\n nodeAndText: BASE * 2.5,\n emojiAndText: BASE * 1.5\n },\n vertical: {\n nodeAndText: BASE,\n nodeAndImage: BASE,\n imageAndText: 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 = (board: PlaitMindBoard, element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const nodeAndText = isMind ? RootDefaultSpace.horizontal.nodeAndText : NodeDefaultSpace.horizontal.nodeAndText;\n const strokeWidth = getStrokeWidthByElement(board, element);\n return nodeAndText + strokeWidth;\n};\n\nconst getVerticalSpaceBetweenNodeAndText = (board: PlaitMindBoard, element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const strokeWidth = getStrokeWidthByElement(board, element);\n const nodeAndText = isMind ? RootDefaultSpace.vertical.nodeAndText : NodeDefaultSpace.vertical.nodeAndText;\n return nodeAndText + strokeWidth;\n};\n\nconst getSpaceEmojiAndText = (element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const emojiAndText = isMind ? RootDefaultSpace.horizontal.emojiAndText : NodeDefaultSpace.horizontal.emojiAndText;\n return emojiAndText;\n};\n\nexport const NodeSpace = {\n getNodeWidth(board: PlaitMindBoard, element: MindElement) {\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);\n if (MindElement.hasEmojis(element)) {\n return (\n NodeSpace.getEmojiLeftSpace(board, element) +\n getEmojisWidthHeight(board, element).width +\n getSpaceEmojiAndText(element) +\n NodeSpace.getNodeDynamicWidth(board, element) +\n nodeAndText\n );\n }\n return nodeAndText + NodeSpace.getNodeDynamicWidth(board, element) + nodeAndText;\n },\n getNodeHeight(board: PlaitMindBoard, element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);\n if (MindElement.hasImage(element)) {\n return NodeSpace.getTextTopSpace(board, element) + element.height + nodeAndText;\n }\n return nodeAndText + element.height + nodeAndText;\n },\n getNodeDynamicWidth(board: PlaitMindBoard, element: MindElement) {\n const width = element.manualWidth || element.width;\n const imageWidth = MindElement.hasImage(element) ? element.data.image?.width : 0;\n return Math.max(width, imageWidth);\n },\n /**\n * use it when upload image first or resize image\n */\n getNodeNewDynamicWidth(board: PlaitMindBoard, element: MindElement, imageWidth: number) {\n const width = element.manualWidth || element.width;\n return Math.max(width, imageWidth);\n },\n getNodeResizableMinWidth(board: PlaitMindBoard, element: MindElement) {\n const minTopicWidth = NodeSpace.getNodeTopicMinWidth(board, element);\n if (MindElement.hasImage(element) && element.data.image.width > minTopicWidth) {\n return element.data.image.width;\n } else {\n return minTopicWidth;\n }\n },\n getNodeTopicMinWidth(board: PlaitMindBoard, element: MindElement) {\n const defaultFontSize = getDefaultMindElementFontSize(board, element);\n const editor = getFirstTextEditor(element);\n const marks = PlaitMarkEditor.getMarks(editor);\n const fontSize = (marks[MarkTypes.fontSize] as number) || defaultFontSize;\n return fontSize;\n },\n getTextLeftSpace(board: PlaitMindBoard, element: MindElement) {\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);\n if (MindElement.hasEmojis(element)) {\n return NodeSpace.getEmojiLeftSpace(board, element) + getEmojisWidthHeight(board, element).width + getSpaceEmojiAndText(element);\n } else {\n return nodeAndText;\n }\n },\n getTextTopSpace(board: PlaitMindBoard, element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);\n if (MindElement.hasImage(element)) {\n return NodeSpace.getImageTopSpace(board, element) + element.data.image.height + NodeDefaultSpace.vertical.imageAndText;\n } else {\n return nodeAndText;\n }\n },\n getImageTopSpace(board: PlaitMindBoard, element: MindElement) {\n const strokeWidth = getStrokeWidthByElement(board, element);\n return strokeWidth + NodeDefaultSpace.vertical.nodeAndImage;\n },\n getEmojiLeftSpace(board: PlaitMindBoard, element: MindElement<EmojiData>) {\n const options = board.getPluginOptions<WithMindOptions>(WithMindPluginKey);\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);\n return nodeAndText - options.emojiPadding;\n },\n getEmojiTopSpace(board: PlaitMindBoard, element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);\n return nodeAndText;\n }\n};\n\nexport const getFontSizeBySlateElement = (text: string | Element) => {\n const defaultFontSize = DEFAULT_FONT_SIZE;\n if (typeof text === 'string') {\n return defaultFontSize;\n }\n const marks = PlaitMarkEditor.getMarksByElement(text);\n const fontSize = (marks[MarkTypes.fontSize] as number) || defaultFontSize;\n return fontSize;\n};\n","import { PlaitBoard, Point, RectangleClient, distanceBetweenPointAndRectangle } from '@plait/core';\nimport { MindNode } from '../../interfaces/node';\nimport { MindElement } from '../../interfaces/element';\nimport { NodeSpace } from '../space/node-space';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\n\nexport function getRectangleByNode(node: MindNode): RectangleClient {\n const x = node.x + node.hGap;\n let y = node.y + node.vGap;\n const width = node.width - node.hGap * 2;\n const height = node.height - node.vGap * 2;\n return {\n x,\n y,\n width,\n height\n };\n}\n\nexport function getRectangleByElement(board: PlaitMindBoard, element: MindElement) {\n const width = NodeSpace.getNodeWidth(board, element);\n const height = NodeSpace.getNodeHeight(board, element);\n const nodeRectangle = {\n x: element.points![0][0],\n y: element.points![0][1],\n width,\n height\n };\n return nodeRectangle;\n}\n\nexport function isHitMindElement(board: PlaitBoard, point: Point, element: MindElement) {\n const node = MindElement.getNode(element);\n if (node && distanceBetweenPointAndRectangle(point[0], point[1], getRectangleByNode(node)) === 0) {\n return true;\n } else {\n return false;\n }\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { EmojiData } from '../../interfaces/element-data';\nimport { getRectangleByNode } from './node';\nimport { NodeSpace } from '../space/node-space';\nimport { getEmojisWidthHeight } from '../space/emoji';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\n\nexport function getEmojiRectangle(board: PlaitMindBoard, element: MindElement<EmojiData>): RectangleClient {\n let { x, y } = getRectangleByNode(MindElement.getNode(element));\n x = x + NodeSpace.getEmojiLeftSpace(board, element);\n const { width, height } = getEmojisWidthHeight(board, element);\n return {\n x,\n y,\n width,\n height\n };\n}\n\nexport function getEmojiForeignRectangle(board: PlaitMindBoard, element: MindElement<EmojiData>): RectangleClient {\n let { x, y } = getRectangleByNode(MindElement.getNode(element));\n x = x + NodeSpace.getEmojiLeftSpace(board, element);\n const { width } = getEmojisWidthHeight(board, element);\n return {\n x,\n y,\n width,\n height: NodeSpace.getNodeHeight(board, element)\n };\n}\n\nexport const isHitEmojis = (board: PlaitBoard, element: MindElement<EmojiData>, point: Point) => {\n return RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), getEmojiRectangle(board as PlaitMindBoard, element));\n};\n","import { MindElement } from '../../interfaces/element';\nimport { MindNode } from '../../interfaces/node';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\nimport { NodeSpace } from '../space/node-space';\nimport { getRectangleByNode } from './node';\nimport { RectangleClient } from '@plait/core';\n\nexport function getTopicRectangleByNode(board: PlaitMindBoard, node: MindNode) {\n let nodeRectangle = getRectangleByNode(node);\n const result = getTopicRectangleByElement(board, nodeRectangle, node.origin);\n result.width = result.width;\n return result;\n}\n\nexport function getTopicRectangleByElement(board: PlaitMindBoard, nodeRectangle: RectangleClient, element: MindElement) {\n const x = nodeRectangle.x + NodeSpace.getTextLeftSpace(board, element);\n const y = nodeRectangle.y + NodeSpace.getTextTopSpace(board, element);\n const width = NodeSpace.getNodeDynamicWidth(board, element);\n const height = Math.ceil(element.height);\n return { height, width, x, y };\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { ImageData } from '../../interfaces/element-data';\nimport { getRectangleByNode } from './node';\nimport { NodeSpace } from '../space/node-space';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\nimport { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs } from '@plait/common';\n\nexport function getImageForeignRectangle(board: PlaitMindBoard, element: MindElement<ImageData>): RectangleClient {\n let { x, y } = getRectangleByNode(MindElement.getNode(element));\n const elementWidth = element.manualWidth || element.width;\n\n x =\n elementWidth > element.data.image.width\n ? x + NodeSpace.getTextLeftSpace(board, element) + (elementWidth - element.data.image.width) / 2\n : x + NodeSpace.getTextLeftSpace(board, element);\n y = NodeSpace.getImageTopSpace(board, element) + y;\n const { width, height } = element.data.image!;\n const rectangle = {\n x,\n y,\n width,\n height\n };\n return rectangle;\n}\n\nexport const isHitImage = (board: PlaitBoard, element: MindElement<ImageData>, point: Point) => {\n const imageRectangle = getImageForeignRectangle(board as PlaitMindBoard, element);\n const imageOutlineRectangle = RectangleClient.getOutlineRectangle(imageRectangle, -RESIZE_HANDLE_DIAMETER / 2);\n return RectangleClient.isPointInRectangle(imageOutlineRectangle, point);\n};\n\nexport const getHitImageResizeHandleDirection = (board: PlaitBoard, element: MindElement<ImageData>, point: Point) => {\n const imageRectangle = getImageForeignRectangle(board as PlaitMindBoard, element);\n const resizeHandleRefs = getRectangleResizeHandleRefs(imageRectangle, RESIZE_HANDLE_DIAMETER);\n const result = resizeHandleRefs.find(resizeHandleRef => {\n return RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), resizeHandleRef.rectangle);\n });\n return result;\n};\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { Node } from 'slate';\nimport { MindLayoutType } from '@plait/layouts';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\n\nexport const adjustRootToNode = (board: PlaitBoard, node: MindElement) => {\n const newNode: MindElement = { ...node };\n delete newNode.isRoot;\n delete newNode.rightNodeCount;\n delete newNode.type;\n if (newNode.layout === MindLayoutType.standard) {\n delete newNode.layout;\n }\n return newNode;\n};\n\nexport const adjustAbstractToNode = (node: MindElement) => {\n const newNode: MindElement = { ...node };\n delete newNode.start;\n delete newNode.end;\n\n return newNode;\n};\n\nexport const adjustNodeToRoot = (board: PlaitMindBoard, node: MindElement): MindElement => {\n const newElement = { ...node };\n if (!Node.string(newElement.data.topic)) {\n newElement.data.topic = { children: [{ text: '思维导图' }] };\n }\n delete newElement?.strokeColor;\n delete newElement?.fill;\n delete newElement?.shape;\n delete newElement?.strokeWidth;\n delete newElement?.isCollapsed;\n return {\n ...newElement,\n layout: newElement.layout ?? MindLayoutType.right,\n isRoot: true,\n type: 'mindmap'\n };\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { ImageData } from '../../interfaces/element-data';\nimport { ImageGenerator, PlaitCommonElementRef, addElementOfFocusedImage, removeElementOfFocusedImage } from '@plait/common';\n\nexport const addImageFocus = (board: PlaitBoard, element: MindElement<ImageData>) => {\n addElementOfFocusedImage(board, element);\n const commonElementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n const imageGenerator = commonElementRef.getGenerator<ImageGenerator>(ImageGenerator.key);\n imageGenerator.setFocus(element, true);\n};\n\nexport const removeImageFocus = (board: PlaitBoard, element: MindElement<ImageData>) => {\n removeElementOfFocusedImage(board);\n const commonElementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n const imageGenerator = commonElementRef.getGenerator<ImageGenerator>(ImageGenerator.key);\n imageGenerator.setFocus(element, false);\n};\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { getFirstTextManage } from '@plait/common';\n\n/**\n * 1. return new node height if height changed\n * 2. new height is effected by zoom\n */\nexport const getNewNodeHeight = (board: PlaitBoard, element: MindElement, newNodeDynamicWidth: number) => {\n const textManage = getFirstTextManage(element);\n const { height } = textManage.getSize(undefined, newNodeDynamicWidth);\n if (Math.abs(height - element.height) > 2) {\n return height;\n }\n return undefined;\n};\n","import { getNonAbstractChildren, isStandardLayout } from '@plait/layouts';\nimport { MindElement, PlaitMind } from '../../interfaces/element';\nimport { Path, PlaitBoard, PlaitElement, setDragging } from '@plait/core';\nimport { getRootLayout } from '../layout';\nimport { DetectResult } from '../../interfaces/node';\n\nexport const addActiveOnDragOrigin = (activeElement: MindElement) => {\n PlaitElement.getElementG(activeElement).classList.add('dragging-node');\n\n !activeElement.isCollapsed &&\n activeElement.children.forEach(child => {\n addActiveOnDragOrigin(child);\n });\n};\n\nexport const removeActiveOnDragOrigin = (activeElement: MindElement) => {\n PlaitElement.getElementG(activeElement).classList.remove('dragging-node');\n !activeElement.isCollapsed &&\n activeElement.children.forEach(child => {\n removeActiveOnDragOrigin(child);\n });\n};\n\nexport const setMindDragging = (board: PlaitBoard, state: boolean) => {\n setDragging(board, state);\n if (state) {\n PlaitBoard.getBoardContainer(board).classList.add('mind-node-dragging');\n } else {\n PlaitBoard.getBoardContainer(board).classList.remove('mind-node-dragging');\n }\n};\n\nexport const hasPreviousOrNextOfDropPath = (\n parent: MindElement,\n dropTarget: {\n target: MindElement;\n detectResult: DetectResult;\n },\n dropPath: Path\n) => {\n let children = getNonAbstractChildren(parent);\n\n if (PlaitMind.isMind(parent) && isStandardLayout(getRootLayout(parent))) {\n const isDropRight = isDropStandardRight(parent, dropTarget);\n\n if (isDropRight) {\n children = children.slice(0, parent.rightNodeCount!);\n }\n if (!isDropRight) {\n children = children.slice(parent.rightNodeCount!, children.length);\n dropPath = [...dropPath, dropPath[dropPath.length - 1] - parent.rightNodeCount!];\n }\n }\n\n let hasPreviousNode = dropPath[dropPath.length - 1] !== 0;\n let hasNextNode = dropPath[dropPath.length - 1] !== (children?.length || 0);\n\n if (parent.isCollapsed) {\n hasNextNode = false;\n hasPreviousNode = false;\n }\n\n return {\n hasPreviousNode,\n hasNextNode\n };\n};\n\nexport const isDropStandardRight = (\n parent: MindElement,\n dropTarget: {\n target: MindElement;\n detectResult: DetectResult;\n }\n) => {\n const target = dropTarget.target;\n\n return (\n (PlaitMind.isMind(parent) &&\n isStandardLayout(getRootLayout(parent)) &&\n parent.children.indexOf(target) !== -1 &&\n parent.children.indexOf(target) < parent.rightNodeCount!) ||\n (PlaitMind.isMind(target) && isStandardLayout(getRootLayout(target)) && dropTarget.detectResult === 'right')\n );\n};\n","import { MindElement, PlaitMind } from '../../interfaces/element';\nimport { PlaitBoard, Point, depthFirstRecursion, Path, getIsRecursionFunc } from '@plait/core';\nimport { DetectResult, MindNode } from '../../interfaces/node';\nimport { getRectangleByNode } from '../position/node';\nimport { MindQueries } from '../../queries';\nimport { getRootLayout } from '../layout';\nimport {\n MindLayoutType,\n getNonAbstractChildren,\n isHorizontalLogicLayout,\n isIndentedLayout,\n isStandardLayout,\n isTopLayout,\n isVerticalLogicLayout\n} from '@plait/layouts';\nimport { isBottomLayout, isRightLayout, isLeftLayout, AbstractNode } from '@plait/layouts';\nimport { isChildElement } from '../mind';\n\nexport const directionCorrector = (board: PlaitBoard, node: MindNode, detectResults: DetectResult[]): DetectResult[] | null => {\n if (!node.origin.isRoot && !AbstractNode.isAbstract(node.origin)) {\n const parentLayout = MindQueries.getCorrectLayoutByElement(board, node?.parent.origin as MindElement);\n if (isStandardLayout(parentLayout)) {\n const idx = node.parent.children.findIndex(x => x === node);\n const isLeft = idx >= (node.parent.origin.rightNodeCount || 0);\n return getAllowedDirection(detectResults, [isLeft ? 'right' : 'left']);\n }\n\n if (isLeftLayout(parentLayout)) {\n return getAllowedDirection(detectResults, ['right']);\n }\n\n if (isRightLayout(parentLayout)) {\n return getAllowedDirection(detectResults, ['left']);\n }\n\n if (parentLayout === MindLayoutType.upward) {\n return getAllowedDirection(detectResults, ['bottom']);\n }\n\n if (parentLayout === MindLayoutType.downward) {\n return getAllowedDirection(detectResults, ['top']);\n }\n } else {\n const layout = MindQueries.getCorrectLayoutByElement(board, node?.origin as MindElement);\n if (isStandardLayout(layout)) {\n return getAllowedDirection(detectResults, ['top', 'bottom']);\n }\n\n if (layout === MindLayoutType.upward) {\n return getAllowedDirection(detectResults, ['left', 'right', 'bottom']);\n }\n\n if (layout === MindLayoutType.downward) {\n return getAllowedDirection(detectResults, ['left', 'right', 'top']);\n }\n\n if (isLeftLayout(layout)) {\n return getAllowedDirection(detectResults, ['right', 'top', 'bottom']);\n }\n\n if (isRightLayout(layout)) {\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\nexport const detectDropTarget = (\n board: PlaitBoard,\n detectPoint: Point,\n dropTarget: { target: MindElement; detectResult: DetectResult } | null,\n activeElements: MindElement[]\n) => {\n let detectResult: DetectResult[] | null = null;\n depthFirstRecursion(\n (board as unknown) as MindElement,\n element => {\n if (!MindElement.isMindElement(board, element) || detectResult) {\n return;\n }\n const node = MindElement.getNode(element);\n const directions = directionDetector(node, detectPoint);\n if (directions) {\n detectResult = directionCorrector(board, node, directions);\n }\n dropTarget = null;\n const isValid = activeElements.every(element => isValidTarget(element, node.origin));\n if (detectResult && isValid) {\n dropTarget = { target: node.origin, detectResult: detectResult[0] };\n }\n },\n getIsRecursionFunc(board)\n );\n return dropTarget;\n};\n\nexport const directionDetector = (targetNode: MindNode, centerPoint: Point): DetectResult[] | null => {\n const { x, y, width, height } = getRectangleByNode(targetNode);\n const yCenter = y + height / 2;\n const xCenter = x + width / 2;\n\n const top = targetNode.y;\n const bottom = targetNode.y + targetNode.height;\n const left = targetNode.x;\n const right = targetNode.x + targetNode.width;\n const direction: DetectResult[] = [];\n\n // x-axis\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 // Overlapping area, return in both directions\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-axis\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\nexport const isValidTarget = (origin: MindElement, target: MindElement) => {\n return origin !== target && !isChildElement(origin, target);\n};\n\nexport const getPathByDropTarget = (board: PlaitBoard, dropTarget: { target: MindElement; detectResult: DetectResult }) => {\n let targetPath = PlaitBoard.findPath(board, dropTarget?.target);\n const layout = PlaitMind.isMind(dropTarget?.target)\n ? getRootLayout(dropTarget?.target)\n : MindQueries.getCorrectLayoutByElement(board, MindElement.getParent(dropTarget?.target));\n const children = getNonAbstractChildren(dropTarget.target);\n if (isVerticalLogicLayout(layout)) {\n if (dropTarget.detectResult === 'top' || dropTarget.detectResult === 'bottom') {\n targetPath.push(children.length);\n }\n if (dropTarget.detectResult === 'right') {\n targetPath = Path.next(targetPath);\n }\n }\n if (isHorizontalLogicLayout(layout)) {\n if (dropTarget.detectResult === 'right') {\n if (PlaitMind.isMind(dropTarget?.target) && isStandardLayout(layout)) {\n targetPath.push(dropTarget?.target.rightNodeCount!);\n } else {\n targetPath.push(children.length);\n }\n }\n if (dropTarget.detectResult === 'left') {\n targetPath.push(children.length);\n }\n if (dropTarget.detectResult === 'bottom') {\n targetPath = Path.next(targetPath);\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(children.length);\n }\n if (isRightLayout(layout) && dropTarget.detectResult === 'right') {\n targetPath.push(children.length);\n }\n }\n return targetPath;\n};\n","import { MindNode } from '../../interfaces/node';\nimport { getRectangleByNode } from '../position/node';\nimport { PlaitBoard, RectangleClient, drawRoundRectangle } from '@plait/core';\nimport { getFillByElement, getStrokeColorByElement, getStrokeStyleByElement, getStrokeWidthByElement } from '../node-style/shape';\nimport { DefaultNodeStyle } from '../../constants/node-style';\nimport { MindElement } from '../../interfaces';\nimport { getStrokeLineDash } from '@plait/common';\n\nexport function drawRoundRectangleByNode(board: PlaitBoard, node: MindNode) {\n const rectangle = getRectangleByNode(node);\n return drawRoundRectangleByElement(board, rectangle, node.origin);\n}\n\nexport function drawRoundRectangleByElement(board: PlaitBoard, nodeRectangle: RectangleClient, element: MindElement) {\n const fill = getFillByElement(board, element);\n const stroke = getStrokeColorByElement(board, element);\n const strokeWidth = getStrokeWidthByElement(board, element);\n const strokeStyle = getStrokeStyleByElement(board, element);\n const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n const newNodeRectangle = RectangleClient.inflate(nodeRectangle, -strokeWidth);\n const nodeG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n newNodeRectangle.x,\n newNodeRectangle.y,\n newNodeRectangle.x + newNodeRectangle.width,\n newNodeRectangle.y + newNodeRectangle.height,\n {\n stroke,\n strokeWidth,\n fill,\n fillStyle: 'solid',\n strokeLineDash\n },\n false,\n DefaultNodeStyle.shape.rectangleRadius\n );\n\n return nodeG;\n}\n","export const ABSTRACT_HANDLE_COLOR = '#6698FF80'; //primary color 50% opacity\nexport const ABSTRACT_INCLUDED_OUTLINE_OFFSET = 3.5;\nexport const ABSTRACT_HANDLE_LENGTH = 10;\n\nexport const ABSTRACT_HANDLE_MASK_WIDTH = 8;\n","export enum HorizontalPlacement {\n left = 'left',\n center = 'center',\n right = 'right'\n}\n\nexport enum VerticalPlacement {\n top = 'top',\n middle = 'middle',\n bottom = 'bottom'\n}\n\nexport type PointPlacement = [HorizontalPlacement, VerticalPlacement];\n","import { Point, RectangleClient } from '@plait/core';\nimport { MindNode } from '../interfaces/node';\nimport { LayoutDirection } from '../interfaces/layout';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../interfaces/types';\n\nexport const getPointByPlacement = (client: RectangleClient, placement: PointPlacement): Point => {\n let x = client.x;\n let y = client.y;\n if (placement[0] === HorizontalPlacement.center) {\n x = client.x + client.width / 2;\n }\n if (placement[0] === HorizontalPlacement.right) {\n x = client.x + client.width;\n }\n if (placement[1] === VerticalPlacement.middle) {\n y = client.y + client.height / 2;\n }\n if (placement[1] === VerticalPlacement.bottom) {\n y = client.y + client.height;\n }\n return [x, y];\n};\n\nexport interface PlacementRef {\n placement: PointPlacement;\n client: RectangleClient;\n}\n\nexport const getXDistanceBetweenPoint = (point1: Point, point2: Point, isHorizontalLayout: boolean) => {\n if (isHorizontalLayout) {\n return Math.abs(point1[0] - point2[0]);\n } else {\n return Math.abs(point1[1] - point2[1]);\n }\n};\n\nexport const getYDistanceBetweenPoint = (point1: Point, point2: Point, isHorizontalLayout: boolean) => {\n getXDistanceBetweenPoint(point1, point2, !isHorizontalLayout);\n};\n\nexport const getLayoutDirection = (node: MindNode, isHorizontal: boolean) => {\n if (isHorizontal) {\n if (node.left) {\n return LayoutDirection.left;\n } else {\n return LayoutDirection.right;\n }\n } else {\n if (node.up) {\n return LayoutDirection.top;\n } else {\n return LayoutDirection.bottom;\n }\n }\n};\n\n// Based on right\n// Right -> Left:\n// 1. End point -> starting point/start point -> end point\n// 2. Add -> Subtract\n\n// Horizontal -> Vertical:\n// 1. Starting point/end point -> vertical axis\n// 2. Addition and subtraction -> vertical axis\n\n// Bottom -> Top:\n// 1. End point -> starting point/end point -> starting point\n// 2. Add -> Subtract\nexport const moveXOfPoint = (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 moveYOfPoint = (point: Point, distance: number, direction: LayoutDirection = LayoutDirection.right): Point => {\n if (direction === LayoutDirection.bottom) {\n return [point[0] + distance, point[1]];\n }\n if (direction === LayoutDirection.top) {\n return [point[0] + distance, point[1]];\n }\n return [point[0], point[1] + distance];\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 { MindNode } from '../../../interfaces/node';\nimport { PlaitBoard, Point, drawBezierPath, drawLinearPath } from '@plait/core';\nimport { getShapeByElement, getRectangleByNode, isChildUp, getStrokeStyleByElement } from '../..';\nimport { getBranchColorByMindElement, getBranchShapeByMindElement, getBranchWidthByMindElement } from '../../node-style/branch';\nimport { BranchShape, MindElementShape } from '../../../interfaces/element';\nimport { getStrokeLineDash, StrokeStyle } from '@plait/common';\n\nexport function drawIndentedLink(\n board: PlaitBoard,\n parent: MindNode,\n child: MindNode,\n needDrawUnderline = true,\n defaultStrokeColor: string | null = null,\n defaultStrokeWidth?: number,\n defaultStrokeStyle?: StrokeStyle\n) {\n const branchShape = getBranchShapeByMindElement(board, parent.origin);\n const branchWidth = defaultStrokeWidth || getBranchWidthByMindElement(board, child.origin);\n const branchColor = defaultStrokeColor || getBranchColorByMindElement(board, child.origin);\n const strokeStyle = defaultStrokeStyle || getStrokeStyleByElement(board, child.origin);\n\n const isUnderlineShape = (getShapeByElement(board, child.origin) as MindElementShape) === MindElementShape.underline;\n let beginX,\n beginY,\n endX,\n endY,\n beginNode = parent,\n endNode = child;\n const beginRectangle = getRectangleByNode(beginNode);\n const endRectangle = getRectangleByNode(endNode);\n\n beginX = beginNode.x + beginNode.width / 2;\n beginY = isChildUp(parent, child) ? beginRectangle.y : beginRectangle.y + beginRectangle.height;\n endX = parent.left ? endNode.x + endNode.hGap + endRectangle.width : endNode.x + endNode.hGap;\n endY = isUnderlineShape ? endNode.y + endNode.height - endNode.vGap : endNode.y + endNode.height / 2;\n\n let plusMinus = isChildUp(parent, child) ? (parent.left ? [-1, -1] : [1, -1]) : parent.left ? [-1, 1] : [1, 1];\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 isUnderlineShape && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY],\n isUnderlineShape && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY],\n isUnderlineShape && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY]\n ];\n const strokeLineDash = getStrokeLineDash(strokeStyle, branchWidth);\n if (branchShape === BranchShape.polyline) {\n const polylinePoints = [\n [beginX, beginY],\n [beginX, endY],\n [endX, endY],\n isUnderlineShape && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY]\n ];\n\n return drawLinearPath(polylinePoints as Point[], { stroke: branchColor, strokeWidth: branchWidth, strokeLineDash });\n }\n\n const points = pointsOnBezierCurves(curve, 0.001);\n return drawBezierPath(points as Point[], { stroke: branchColor, strokeWidth: branchWidth, strokeLineDash });\n}\n","import { pointsOnBezierCurves } from 'points-on-curve';\nimport { MindNode } from '../../../interfaces/node';\nimport { PlaitBoard, Point, drawLinearPath, setStrokeLinecap } from '@plait/core';\nimport { getRectangleByNode, getShapeByElement, getStrokeStyleByElement } from '../..';\nimport { getLayoutDirection, getPointByPlacement, moveXOfPoint, transformPlacement } from '../../point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../../interfaces/types';\nimport { getBranchColorByMindElement, getBranchShapeByMindElement, getBranchWidthByMindElement } from '../../node-style/branch';\nimport { BranchShape, MindElementShape } from '../../../interfaces/element';\nimport { getStrokeLineDash, StrokeStyle } from '@plait/common';\n\nexport function drawLogicLink(\n board: PlaitBoard,\n parent: MindNode,\n node: MindNode,\n isHorizontal: boolean,\n defaultStrokeColor: string | null = null,\n defaultStrokeWidth?: number,\n defaultStrokeStyle?: StrokeStyle\n) {\n const branchShape = getBranchShapeByMindElement(board, parent.origin);\n const branchColor = defaultStrokeColor || getBranchColorByMindElement(board, node.origin);\n const branchWidth = defaultStrokeWidth || getBranchWidthByMindElement(board, node.origin);\n const strokeStyle = defaultStrokeStyle || getStrokeStyleByElement(board, node.origin);\n const hasStraightLine = branchShape === BranchShape.polyline ? true : !parent.origin.isRoot;\n const parentShape = getShapeByElement(board, parent.origin);\n const shape = getShapeByElement(board, node.origin);\n const hasUnderlineShape = shape === MindElementShape.underline;\n const hasUnderlineShapeOfParent = parentShape === MindElementShape.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 // ② Determine the convex straight line\n const straightLineDistance = 8;\n const beginPoint2 = hasStraightLine ? moveXOfPoint(beginPoint, straightLineDistance, linkDirection) : beginPoint;\n let straightLine: Point[] = hasStraightLine ? [beginPoint, beginPoint2, beginPoint2] : [];\n\n // ③ Determine the curve\n const beginBufferDistance = (parent.hGap + node.hGap) / 3;\n const endBufferDistance = -(parent.hGap + node.hGap) / 2.4;\n let curve: Point[] = [\n beginPoint2,\n moveXOfPoint(beginPoint2, beginBufferDistance, linkDirection),\n moveXOfPoint(endPoint, endBufferDistance, linkDirection),\n endPoint\n ];\n\n // ④ underline shape and horizontal\n const underlineEnd = moveXOfPoint(endPoint, nodeClient.width, linkDirection);\n const underline: Point[] = hasUnderlineShape && isHorizontal ? [underlineEnd, underlineEnd, underlineEnd] : [];\n const points = pointsOnBezierCurves([...straightLine, ...curve, ...underline]);\n const strokeLineDash = getStrokeLineDash(strokeStyle, branchWidth);\n let linkG: SVGGElement;\n if (branchShape === BranchShape.polyline) {\n const buffer = 8;\n const movePoint = moveXOfPoint(beginPoint2, buffer, linkDirection);\n const polylinePoints = [\n ...straightLine,\n movePoint,\n isHorizontal ? [movePoint[0], endPoint[1]] : [endPoint[0], movePoint[1]],\n endPoint,\n ...underline\n ];\n linkG = drawLinearPath(polylinePoints as Point[], { stroke: branchColor, strokeWidth: branchWidth, strokeLineDash });\n } else {\n linkG = PlaitBoard.getRoughSVG(board).curve(points as any, { stroke: branchColor, strokeWidth: branchWidth, strokeLineDash });\n }\n if (strokeStyle === StrokeStyle.dotted) {\n setStrokeLinecap(linkG, 'round');\n }\n return linkG;\n}\n","import { PlaitBoard } from '@plait/core';\nimport { drawIndentedLink } from './indented-link';\nimport { drawLogicLink } from './logic-link';\nimport { MindElement } from '../../../interfaces/element';\nimport { MindNode } from '../../../interfaces/node';\nimport { StrokeStyle } from '@plait/common';\n\nexport function drawLink(\n board: PlaitBoard,\n parentNode: MindNode,\n node: MindNode,\n isHorizontal: boolean,\n needDrawUnderline?: boolean,\n defaultStrokeColor?: string,\n defaultStrokeWidth?: number,\n defaultStrokeStyle?: StrokeStyle\n) {\n return MindElement.isIndentedLayout(parentNode.origin)\n ? drawIndentedLink(board, parentNode, node, needDrawUnderline, defaultStrokeColor, defaultStrokeWidth, defaultStrokeStyle)\n : drawLogicLink(board, parentNode, node, isHorizontal, defaultStrokeColor, defaultStrokeWidth, defaultStrokeStyle);\n}\n","import { EmojiData, EmojiItem, MindElement } from '../interfaces';\nimport { PlaitBoard, createForeignObject, createG } from '@plait/core';\nimport { getEmojiFontSize } from '../utils/space/emoji';\nimport { getEmojiForeignRectangle } from '../utils/position/emoji';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\nimport { EmojiComponentRef, EmojiProps, PlaitMindEmojiBoard } from '../emoji/with-emoji';\n\nexport const FOREIGN_OBJECT_EMOJI_CLASS_NAME = 'foreign-object-emoji';\n\nclass EmojiGenerator {\n emojiComponentRef: EmojiComponentRef | null = null;\n\n constructor(private board: PlaitMindEmojiBoard & PlaitBoard) {}\n\n draw(container: Element | DocumentFragment, emoji: EmojiItem, element: MindElement<EmojiData>) {\n this.destroy();\n const props: EmojiProps = {\n board: this.board,\n emojiItem: emoji,\n element,\n fontSize: getEmojiFontSize(element)\n };\n this.emojiComponentRef = this.board.renderEmoji(container, props);\n }\n\n destroy() {\n if (this.emojiComponentRef) {\n this.emojiComponentRef.destroy();\n this.emojiComponentRef = null;\n }\n }\n}\n\nexport class NodeEmojisGenerator {\n static key = 'node-emojis-generator';\n\n emojiGenerators: EmojiGenerator[] = [];\n\n g?: SVGGElement;\n\n constructor(private board: PlaitMindBoard) {}\n\n drawEmojis(element: MindElement) {\n this.destroy();\n if (MindElement.hasEmojis(element)) {\n this.g = createG();\n this.g.classList.add('emojis');\n const foreignRectangle = getEmojiForeignRectangle(this.board, element);\n const foreignObject = createForeignObject(\n foreignRectangle.x,\n foreignRectangle.y,\n foreignRectangle.width,\n foreignRectangle.height\n );\n foreignObject.classList.add(FOREIGN_OBJECT_EMOJI_CLASS_NAME);\n this.g.append(foreignObject);\n const container = document.createElement('div');\n container.classList.add('node-emojis-container');\n foreignObject.append(container);\n this.emojiGenerators = element.data.emojis.map(emojiItem => {\n const drawer = new EmojiGenerator((this.board as unknown) as PlaitBoard & PlaitMindEmojiBoard);\n drawer.draw(container, emojiItem, element);\n return drawer;\n });\n return this.g;\n }\n return undefined;\n }\n\n destroy() {\n if (this.g) {\n this.g.remove();\n }\n this.emojiGenerators.forEach(drawer => drawer.destroy());\n this.emojiGenerators = [];\n }\n}\n","import { drawRoundRectangleByNode } from './node-shape';\nimport { BASE, PRIMARY_COLOR, STROKE_WIDTH } from '../../constants';\nimport { DetectResult, LayoutDirection, MindElement, MindNode, PlaitMind } from '../../interfaces';\nimport { getRectangleByNode } from '../position/node';\nimport { PlaitBoard, Point, drawRoundRectangle, createG, Path, PlaitNode, PlaitElement, updateForeignObject } from '@plait/core';\nimport { MindQueries } from '../../queries';\nimport { isHorizontalLayout, isIndentedLayout, isStandardLayout, isTopLayout, MindLayoutType } from '@plait/layouts';\nimport { getTopicRectangleByNode } from '../position/topic';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../interfaces/types';\nimport { getLayoutDirection, getPointByPlacement, moveXOfPoint, moveYOfPoint, transformPlacement } from '../point-placement';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\nimport { hasPreviousOrNextOfDropPath } from '../dnd/common';\nimport { drawLink } from './node-link/draw-link';\nimport { getEmojiForeignRectangle } from '../position/emoji';\nimport { getImageForeignRectangle } from '../position';\nimport { ImageGenerator, PlaitCommonElementRef, getFirstTextManage } from '@plait/common';\nimport { NodeEmojisGenerator } from '../../generators/node-emojis.generator';\n\nexport const drawFakeDragNode = (board: PlaitBoard, element: MindElement, offsetX: number, offsetY: number) => {\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n const mindNode = MindElement.getNode(element);\n const dragFakeNodeG = createG();\n dragFakeNodeG.classList.add('dragging', 'fake-node', 'plait-board-attached');\n\n const fakeDraggingNode: MindNode = {\n ...mindNode,\n children: [],\n x: mindNode.x + offsetX,\n y: mindNode.y + offsetY\n };\n const textRectangle = getTopicRectangleByNode(board as PlaitMindBoard, mindNode);\n const fakeNodeG = drawRoundRectangleByNode(board, fakeDraggingNode);\n\n const richtextG = getFirstTextManage(element).g.cloneNode(true) as SVGGElement;\n updateForeignObject(richtextG, textRectangle.width, textRectangle.height, textRectangle.x + offsetX, textRectangle.y + offsetY);\n\n dragFakeNodeG?.append(fakeNodeG);\n dragFakeNodeG?.append(richtextG);\n\n // draw emojis\n if (MindElement.hasEmojis(element)) {\n const nodeEmojisGenerator = ref.getGenerator<NodeEmojisGenerator>(NodeEmojisGenerator.key);\n const fakeEmojisG = (nodeEmojisGenerator.g as SVGGElement).cloneNode(true) as SVGGElement;\n const foreignRectangle = getEmojiForeignRectangle(board as PlaitMindBoard, element);\n updateForeignObject(\n fakeEmojisG,\n foreignRectangle.width,\n foreignRectangle.height,\n foreignRectangle.x + offsetX,\n foreignRectangle.y + offsetY\n );\n dragFakeNodeG?.append(fakeEmojisG);\n }\n\n if (MindElement.hasImage(element)) {\n const imageGenerator = ref.getGenerator<ImageGenerator>(ImageGenerator.key);\n const fakeImageG = (imageGenerator.g as SVGGElement).cloneNode(true) as SVGGElement;\n const foreignRectangle = getImageForeignRectangle(board as PlaitMindBoard, element);\n updateForeignObject(\n fakeImageG,\n foreignRectangle.width,\n foreignRectangle.height,\n foreignRectangle.x + offsetX,\n foreignRectangle.y + offsetY\n );\n dragFakeNodeG?.append(fakeImageG);\n }\n return dragFakeNodeG;\n};\n\nexport const drawFakeDropNode = (\n board: PlaitBoard,\n dropTarget: {\n target: MindElement;\n detectResult: DetectResult;\n },\n path: Path\n) => {\n const target = dropTarget.target;\n const fakeDropNodeG = createG();\n const parent = PlaitNode.get(board, Path.parent(path)) as MindElement;\n const layout = MindQueries.getLayoutByElement(parent) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(layout);\n const { hasNextNode, hasPreviousNode } = hasPreviousOrNextOfDropPath(parent, dropTarget, path);\n\n const width = 30;\n const height = 12;\n let fakeNode: MindNode, centerPoint: Point, basicNode: MindNode, linkDirection: LayoutDirection;\n\n if (!hasPreviousNode && !hasNextNode) {\n const parentNode = MindElement.getNode(parent);\n const parentRect = getRectangleByNode(parentNode);\n\n linkDirection = getLayoutDirection(parentNode, isHorizontal);\n basicNode = parentNode;\n\n if (PlaitMind.isMind(target) && isStandardLayout(layout)) {\n if (dropTarget.detectResult === 'left') {\n linkDirection = LayoutDirection.left;\n basicNode.left = true;\n } else {\n linkDirection = LayoutDirection.right;\n basicNode.left = false;\n }\n }\n\n const placement: PointPlacement = [HorizontalPlacement.right, VerticalPlacement.middle];\n transformPlacement(placement, linkDirection);\n const parentCenterPoint = getPointByPlacement(parentRect, placement);\n\n if (isIndentedLayout(layout)) {\n const placement: PointPlacement = [\n HorizontalPlacement.center,\n isTopLayout(layout) ? VerticalPlacement.top : VerticalPlacement.bottom\n ];\n const parentCenterPoint = getPointByPlacement(parentRect, placement);\n\n centerPoint = moveXOfPoint(parentCenterPoint, height, linkDirection);\n centerPoint[1] = isTopLayout(layout) ? centerPoint[1] - height : centerPoint[1] + height;\n } else {\n centerPoint = moveXOfPoint(parentCenterPoint, width, linkDirection);\n }\n } else if (!hasPreviousNode && hasNextNode) {\n const nextElement = PlaitNode.get(board, path) as MindElement;\n basicNode = MindElement.getNode(nextElement);\n const nextRect = getRectangleByNode(basicNode);\n linkDirection = getLayoutDirection(basicNode, isHorizontal);\n\n const placement: PointPlacement = [HorizontalPlacement.left, VerticalPlacement.top];\n\n transformPlacement(placement, linkDirection);\n\n let offset = -height;\n if (MindElement.isIndentedLayout(parent)) {\n offset = isTopLayout(layout) ? offset / 2 + basicNode.height - basicNode.vGap : 0;\n }\n\n centerPoint = getPointByPlacement(nextRect, placement);\n centerPoint = moveYOfPoint(centerPoint, offset, linkDirection);\n } else if (hasPreviousNode && !hasNextNode) {\n const previousElement = PlaitNode.get(board, Path.previous(path)) as MindElement;\n basicNode = MindElement.getNode(previousElement);\n const previousRect = getRectangleByNode(basicNode);\n linkDirection = getLayoutDirection(basicNode, isHorizontal);\n\n const placement: PointPlacement = [HorizontalPlacement.left, VerticalPlacement.bottom];\n\n transformPlacement(placement, linkDirection);\n\n let offset = height;\n if (MindElement.isIndentedLayout(parent)) {\n offset = isTopLayout(layout) ? -offset - (basicNode.height - basicNode.vGap) : offset;\n }\n centerPoint = getPointByPlacement(previousRect, placement);\n centerPoint = moveYOfPoint(centerPoint, offset, linkDirection);\n } else {\n const previousElement = PlaitNode.get(board, Path.previous(path)) as MindElement;\n basicNode = MindElement.getNode(previousElement);\n const previousRect = getRectangleByNode(basicNode);\n\n const nextElement = PlaitNode.get(board, path) as MindElement;\n const nextNode = MindElement.getNode(nextElement);\n const nextRect = getRectangleByNode(nextNode);\n\n const beginPlacement: PointPlacement = [HorizontalPlacement.left, VerticalPlacement.bottom];\n const endPlacement: PointPlacement = [HorizontalPlacement.left, VerticalPlacement.top];\n linkDirection = getLayoutDirection(basicNode, isHorizontal);\n\n transformPlacement(beginPlacement, linkDirection);\n transformPlacement(endPlacement, linkDirection);\n\n const previousPoint = getPointByPlacement(previousRect, beginPlacement);\n const nextPoint = getPointByPlacement(nextRect, endPlacement);\n\n centerPoint = [(previousPoint[0] + nextPoint[0]) / 2, (previousPoint[1] + nextPoint[1]) / 2];\n }\n\n let cornerPoint = centerPoint,\n oppositePoint = centerPoint;\n\n const offsetY = isHorizontal ? height : width;\n const offsetX = isHorizontal ? width : height;\n\n cornerPoint = moveYOfPoint(cornerPoint, -offsetY / 2, linkDirection!);\n\n oppositePoint = moveYOfPoint(oppositePoint, offsetY / 2, linkDirection!);\n oppositePoint = moveXOfPoint(oppositePoint, offsetX, linkDirection!);\n\n const x = Math.min(cornerPoint[0], oppositePoint[0]);\n const y = Math.min(cornerPoint[1], oppositePoint[1]);\n\n fakeNode = {\n ...basicNode!,\n x,\n y,\n width,\n height,\n hGap: MindElement.isIndentedLayout(parent) ? BASE * 4 + (basicNode.origin.strokeWidth || STROKE_WIDTH) : 0,\n vGap: MindElement.isIndentedLayout(parent) ? BASE : 0\n };\n\n const fakeRectangleG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n fakeNode!.x,\n fakeNode!.y,\n fakeNode!.x + width,\n fakeNode!.y + height,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 2,\n fill: PRIMARY_COLOR,\n fillStyle: 'solid'\n }\n );\n\n const link = drawLink(board, MindElement.getNode(parent), fakeNode, isHorizontal, false, PRIMARY_COLOR, STROKE_WIDTH);\n fakeDropNodeG?.appendChild(link);\n fakeDropNodeG?.appendChild(fakeRectangleG);\n\n return fakeDropNodeG;\n};\n","import { PlaitOptionsBoard } from '@plait/core';\nimport { MindElement } from '../interfaces/element';\nimport { AbstractNode } from '@plait/layouts';\n\nexport enum AbstractHandlePosition {\n start = 'start',\n end = 'end'\n}\n\nexport enum AbstractResizeState {\n start = 'start',\n resizing = 'resizing',\n end = 'end'\n}\n\nexport interface PlaitAbstractBoard extends PlaitOptionsBoard {\n onAbstractResize?: (state: AbstractResizeState) => void;\n}\n\nexport type AbstractRefs = Map<MindElement, Pick<AbstractNode, 'start' | 'end'>>;\n","import { createG, getRectangleByElements, PlaitBoard, RectangleClient, setStrokeLinecap } from '@plait/core';\nimport { PRIMARY_COLOR } from '../../constants';\nimport { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants/abstract-node';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MindElement } from '../../interfaces';\nimport { MindLayoutType, isHorizontalLayout } from '@plait/layouts';\nimport { MindQueries } from '../../queries';\nimport { getLayoutDirection, getPointByPlacement, moveXOfPoint, transformPlacement } from '../point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../interfaces/types';\nimport { getRectangleByResizingLocation } from '../abstract/resize';\nimport { AbstractHandlePosition } from '../../plugins/with-abstract-resize.board';\nimport { Options } from 'roughjs/bin/core';\n\nexport function drawAbstractIncludedOutline(\n board: PlaitBoard,\n roughSVG: RoughSVG,\n element: MindElement,\n activeHandlePosition?: AbstractHandlePosition,\n resizingLocation?: number\n) {\n const abstractIncludedG = createG();\n\n const parentElement = MindElement.getParent(element);\n const nodeLayout = MindQueries.getCorrectLayoutByElement(board, element) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n\n const includedElements = parentElement.children.slice(element.start!, element.end! + 1);\n let abstractRectangle = getRectangleByElements(board, includedElements, true);\n abstractRectangle = RectangleClient.getOutlineRectangle(abstractRectangle, -ABSTRACT_INCLUDED_OUTLINE_OFFSET);\n\n if (resizingLocation) {\n abstractRectangle = getRectangleByResizingLocation(abstractRectangle, resizingLocation, activeHandlePosition!, isHorizontal);\n }\n\n const rectangle = drawAbstractRoundRectangle(\n roughSVG,\n abstractRectangle.x,\n abstractRectangle.y,\n abstractRectangle.x + abstractRectangle.width,\n abstractRectangle.y + abstractRectangle.height,\n isHorizontal,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 1,\n fillStyle: 'solid'\n }\n );\n\n const startPlacement = [HorizontalPlacement.center, VerticalPlacement.top] as PointPlacement;\n const endPlacement = [HorizontalPlacement.center, VerticalPlacement.bottom] as PointPlacement;\n\n const linkDirection = getLayoutDirection(MindElement.getNode(element), isHorizontal);\n\n transformPlacement(startPlacement, linkDirection);\n transformPlacement(endPlacement, linkDirection);\n\n let startCenterPoint = getPointByPlacement(abstractRectangle, startPlacement);\n let endCenterPoint = getPointByPlacement(abstractRectangle, endPlacement);\n\n const startPoint1 = moveXOfPoint(startCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n const startPoint2 = moveXOfPoint(startCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n\n const endPoint1 = moveXOfPoint(endCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n const endPoint2 = moveXOfPoint(endCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n\n const startHandle = roughSVG.line(\n startPoint1[0],\n startPoint1[1],\n startPoint2[0],\n startPoint2[1],\n getHandleOption(activeHandlePosition === AbstractHandlePosition.start)\n );\n\n const endHandle = roughSVG.line(\n endPoint1[0],\n endPoint1[1],\n endPoint2[0],\n endPoint2[1],\n getHandleOption(activeHandlePosition === AbstractHandlePosition.end)\n );\n\n handleBoardClass(board, activeHandlePosition, isHorizontal);\n\n setStrokeLinecap(startHandle, 'round');\n setStrokeLinecap(endHandle, 'round');\n\n abstractIncludedG.append(startHandle);\n abstractIncludedG.append(endHandle);\n abstractIncludedG.append(rectangle);\n\n return abstractIncludedG;\n}\n\nexport function getHandleOption(isHover: boolean) {\n return isHover\n ? {\n stroke: PRIMARY_COLOR,\n strokeWidth: 4,\n fillStyle: 'solid'\n }\n : {\n stroke: ABSTRACT_HANDLE_COLOR,\n strokeWidth: 3,\n fillStyle: 'solid'\n };\n}\n\nfunction handleBoardClass(board: PlaitBoard, activeHandlePosition: AbstractHandlePosition | undefined, isHorizontal: boolean) {\n if (activeHandlePosition) {\n if (isHorizontal) {\n PlaitBoard.getBoardContainer(board).classList.add('abstract-resizing-horizontal');\n } else {\n PlaitBoard.getBoardContainer(board).classList.add('abstract-resizing-vertical');\n }\n } else {\n PlaitBoard.getBoardContainer(board).classList.remove('abstract-resizing-horizontal');\n PlaitBoard.getBoardContainer(board).classList.remove('abstract-resizing-vertical');\n }\n}\n\nexport function drawAbstractRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n isHorizontal: boolean,\n options: Options\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n const radius = 5;\n const handleGap = 4;\n const handleLength = 10;\n\n const handleSpace = handleLength + handleGap * 2;\n\n if (isHorizontal) {\n const handleSideLine = (width - handleSpace - radius * 2) / 2;\n const sideLine = height - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${handleSideLine},0\n m${handleSpace},0\n l${handleSideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${sideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${handleSideLine},0\n m-${handleSpace},0\n l-${handleSideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${sideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n } else {\n const handleSideLine = (height - handleSpace - radius * 2) / 2;\n const sideLine = width - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${sideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${handleSideLine}\n m0,${handleSpace}\n l0,${handleSideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${sideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${handleSideLine}\n m0,-${handleSpace}\n l0,-${handleSideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n }\n}\n","import { ACTIVE_STROKE_WIDTH, PlaitBoard, RectangleClient, SELECTION_RECTANGLE_CLASS_NAME, createG, drawRoundRectangle } from '@plait/core';\nimport { MindElement, BaseData } from '../interfaces';\nimport { getRectangleByNode } from '../utils/position/node';\nimport { PRIMARY_COLOR } from '../constants/default';\nimport { AbstractNode } from '@plait/layouts';\nimport { drawAbstractIncludedOutline } from '../utils/draw/abstract-outline';\nimport { AbstractHandlePosition } from '../plugins/with-abstract-resize.board';\nimport { DefaultNodeStyle } from '../constants/node-style';\nimport { getStrokeWidthByElement } from '../utils/node-style/shape';\nimport { Generator } from '@plait/common';\n\nexport interface ActiveData {\n selected: boolean;\n}\n\nexport class NodeActiveGenerator extends Generator<MindElement, ActiveData> {\n static key = 'mind-node-active';\n\n abstractOutlineG?: SVGGElement;\n\n canDraw(element: MindElement<BaseData>, data: ActiveData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: MindElement<BaseData>, data: ActiveData): SVGGElement {\n const activeG = createG();\n const node = MindElement.getNode(element);\n const rectangle = getRectangleByNode(node);\n const strokeWidth = getStrokeWidthByElement(this.board, element);\n const activeStrokeWidth = ACTIVE_STROKE_WIDTH;\n const activeRectangle = RectangleClient.inflate(rectangle, activeStrokeWidth);\n const strokeG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(this.board),\n activeRectangle.x,\n activeRectangle.y,\n activeRectangle.x + activeRectangle.width,\n activeRectangle.y + activeRectangle.height,\n { stroke: PRIMARY_COLOR, strokeWidth: activeStrokeWidth, fill: '' },\n true,\n DefaultNodeStyle.shape.rectangleRadius + (activeStrokeWidth + strokeWidth) / 2\n );\n if (AbstractNode.isAbstract(element)) {\n this.abstractOutlineG = drawAbstractIncludedOutline(this.board, PlaitBoard.getRoughSVG(this.board), element);\n activeG.append(this.abstractOutlineG);\n strokeG.classList.add('abstract-element');\n }\n activeG.appendChild(strokeG);\n activeG.classList.add(SELECTION_RECTANGLE_CLASS_NAME)\n return activeG;\n }\n\n updateAbstractOutline(element: MindElement, activeHandlePosition?: AbstractHandlePosition, resizingLocation?: number) {\n const abstractOutlineG = drawAbstractIncludedOutline(\n this.board,\n PlaitBoard.getRoughSVG(this.board),\n element,\n activeHandlePosition,\n resizingLocation\n );\n if (this.abstractOutlineG) {\n this.abstractOutlineG.replaceWith(abstractOutlineG);\n this.abstractOutlineG = abstractOutlineG;\n }\n }\n}\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, getRectangleByElements, getSelectedElements } from '@plait/core';\nimport { MindElement } from '../../interfaces';\nimport { AbstractNode, LayoutNode, MindLayoutType, isHorizontalLayout } from '@plait/layouts';\nimport { ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants/abstract-node';\nimport { MindQueries } from '../../queries';\nimport { getCorrectStartEnd } from '@plait/layouts';\nimport { MindNodeComponent } from '../../mind-node.component';\nimport { AbstractHandlePosition } from '../../plugins/with-abstract-resize.board';\nimport { PlaitCommonElementRef } from '@plait/common';\nimport { NodeActiveGenerator } from '../../generators/node-active.generator';\n\nexport const getRectangleByResizingLocation = (\n abstractRectangle: RectangleClient,\n location: number,\n activeHandlePosition: AbstractHandlePosition,\n isHorizontal: boolean\n) => {\n if (isHorizontal) {\n if (activeHandlePosition === AbstractHandlePosition.start) {\n return {\n ...abstractRectangle,\n y: location,\n height: abstractRectangle.height + abstractRectangle.y - location\n };\n } else {\n return {\n ...abstractRectangle,\n height: location - abstractRectangle.y\n };\n }\n } else {\n if (activeHandlePosition === AbstractHandlePosition.start) {\n return {\n ...abstractRectangle,\n x: location,\n width: abstractRectangle.width + abstractRectangle.x - location\n };\n } else {\n return {\n ...abstractRectangle,\n width: location - abstractRectangle.x\n };\n }\n }\n};\n\nexport const getLocationScope = (\n board: PlaitBoard,\n handlePosition: AbstractHandlePosition,\n parentChildren: MindElement[],\n element: MindElement,\n parent: LayoutNode,\n isHorizontal: boolean\n) => {\n const node = (MindElement.getNode(element) as unknown) as LayoutNode;\n const { start, end } = getCorrectStartEnd(node.origin as AbstractNode, parent);\n\n const startNode = parentChildren[start];\n const endNode = parentChildren[end];\n\n if (handlePosition === AbstractHandlePosition.start) {\n const abstractNode = parentChildren.filter(child => AbstractNode.isAbstract(child) && child.end < element.start!);\n let minNode;\n\n if (abstractNode.length) {\n const index = abstractNode\n .map(node => {\n const { end } = getCorrectStartEnd(node as AbstractNode, parent);\n return end;\n })\n .sort((a, b) => b - a)[0];\n minNode = parentChildren[index + 1];\n } else {\n minNode = parentChildren[0];\n }\n\n const minNodeRectangle = getRectangleByElements(board, [minNode], true);\n const endNodeRectangle = getRectangleByElements(board, [endNode], false);\n\n if (isHorizontal) {\n return {\n max: endNodeRectangle.y - ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: minNodeRectangle.y - ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n } else {\n return {\n max: endNodeRectangle.x - ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: minNodeRectangle.x - ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n }\n } else {\n const abstractNode = parentChildren.filter(child => AbstractNode.isAbstract(child) && child.start > element.end!);\n let maxNode;\n\n if (abstractNode.length) {\n const index = abstractNode\n .map(node => {\n const { start } = getCorrectStartEnd(node as AbstractNode, parent);\n return start;\n })\n .sort((a, b) => a - b)[0];\n maxNode = parentChildren[index - 1];\n } else {\n const children = parentChildren.filter(child => !AbstractNode.isAbstract(child));\n maxNode = parentChildren[children.length - 1];\n }\n\n const maxNodeRectangle = getRectangleByElements(board, [maxNode], true);\n const startNodeRectangle = getRectangleByElements(board, [startNode], false);\n\n if (isHorizontal) {\n return {\n max: maxNodeRectangle.y + maxNodeRectangle.height + ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: startNodeRectangle.y + startNodeRectangle.height + ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n } else {\n return {\n max: maxNodeRectangle.x + maxNodeRectangle.width + ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: startNodeRectangle.x + startNodeRectangle.width + ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n }\n }\n};\n\nexport const getHitAbstractHandle = (board: PlaitBoard, element: MindElement, point: Point) => {\n const nodeLayout = MindQueries.getCorrectLayoutByElement(board, element) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n\n const parentElement = MindElement.getParent(element);\n const includedElements = parentElement.children.slice(element.start!, element.end! + 1);\n let abstractRectangle = getRectangleByElements(board, includedElements, true);\n abstractRectangle = RectangleClient.getOutlineRectangle(abstractRectangle, -ABSTRACT_INCLUDED_OUTLINE_OFFSET);\n\n const startHandleRec = getAbstractHandleRectangle(abstractRectangle, isHorizontal, AbstractHandlePosition.start);\n const endHandleRec = getAbstractHandleRectangle(abstractRectangle, isHorizontal, AbstractHandlePosition.end);\n\n const pointRec = RectangleClient.getRectangleByPoints([point, point]);\n if (RectangleClient.isHit(pointRec, startHandleRec)) return AbstractHandlePosition.start;\n if (RectangleClient.isHit(pointRec, endHandleRec)) return AbstractHandlePosition.end;\n return undefined;\n};\n\nexport const getAbstractHandleRectangle = (rectangle: RectangleClient, isHorizontal: boolean, position: AbstractHandlePosition) => {\n let result;\n if (position === AbstractHandlePosition.start) {\n const location = isHorizontal ? rectangle.y : rectangle.x;\n\n result = getRectangleByResizingLocation(\n rectangle,\n location + ABSTRACT_HANDLE_MASK_WIDTH / 2,\n AbstractHandlePosition.end,\n isHorizontal\n );\n result = getRectangleByResizingLocation(result, location - ABSTRACT_HANDLE_MASK_WIDTH / 2, position, isHorizontal);\n } else {\n const location = isHorizontal ? rectangle.y + rectangle.height : rectangle.x + rectangle.width;\n\n result = getRectangleByResizingLocation(\n rectangle,\n location - ABSTRACT_HANDLE_MASK_WIDTH / 2,\n AbstractHandlePosition.start,\n isHorizontal\n );\n result = getRectangleByResizingLocation(result, location + ABSTRACT_HANDLE_MASK_WIDTH / 2, position, isHorizontal);\n }\n return result;\n};\n\nexport function findLocationLeftIndex(board: PlaitBoard, parentChildren: MindElement[], location: number, isHorizontal: boolean) {\n const children = parentChildren.filter(child => {\n return !AbstractNode.isAbstract(child);\n });\n const recArray = children.map(child => {\n return getRectangleByElements(board, [child], false);\n });\n\n const firstRec = getRectangleByElements(board, [children[0]], true);\n const fakeLeftRec = {\n x: firstRec.x - firstRec.width,\n y: firstRec.y - firstRec.height,\n width: firstRec.width,\n height: firstRec.height\n };\n const lastRec = getRectangleByElements(board, [children[children.length - 1]], true);\n const fakeRightRec = {\n x: lastRec.x + lastRec.width,\n y: lastRec.y + lastRec.height,\n width: lastRec.width,\n height: lastRec.height\n };\n\n recArray.push(fakeRightRec);\n recArray.unshift(fakeLeftRec);\n\n for (let i = 0; i < recArray.length - 1; i++) {\n const recXOrY = isHorizontal ? recArray[i].y : recArray[i].x;\n const recWidthOrHeight = isHorizontal ? recArray[i].height : recArray[i].width;\n\n if (\n location >= recXOrY + recWidthOrHeight / 2 &&\n location <= recArray[i + 1][isHorizontal ? 'y' : 'x'] + recArray[i + 1][isHorizontal ? 'height' : 'width'] / 2\n ) {\n return i - 1;\n }\n }\n return 0;\n}\n\nexport function handleTouchedAbstract(board: PlaitBoard, touchedAbstract: MindElement | undefined, endPoint: Point) {\n let touchedHandle;\n const abstract = (getSelectedElements(board).filter(element => AbstractNode.isAbstract(element)) as MindElement[]).find(element => {\n touchedHandle = getHitAbstractHandle(board, element as MindElement, endPoint);\n return touchedHandle;\n });\n\n if (touchedAbstract === abstract) {\n return touchedAbstract;\n }\n\n if (touchedAbstract) {\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(touchedAbstract);\n const activeGenerator = ref.getGenerator<NodeActiveGenerator>(NodeActiveGenerator.key);\n activeGenerator.updateAbstractOutline(touchedAbstract);\n touchedAbstract = undefined;\n }\n\n if (abstract) {\n touchedAbstract = abstract;\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(touchedAbstract);\n const activeGenerator = ref.getGenerator<NodeActiveGenerator>(NodeActiveGenerator.key);\n activeGenerator.updateAbstractOutline(touchedAbstract, touchedHandle);\n }\n\n return touchedAbstract;\n}\n","import { Path, PlaitBoard, PlaitNode } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { getRootLayout } from '../layout';\nimport { MindLayoutType } from '@plait/layouts';\n\nexport const isInRightBranchOfStandardLayout = (selectedElement: MindElement) => {\n const parentElement = MindElement.findParent(selectedElement);\n if (parentElement) {\n const nodeIndex: number = parentElement.children.findIndex(item => item.id === selectedElement.id);\n if (\n parentElement.isRoot &&\n getRootLayout(parentElement) === MindLayoutType.standard &&\n parentElement.rightNodeCount &&\n nodeIndex <= parentElement.rightNodeCount - 1\n ) {\n return true;\n }\n }\n return false;\n};\n\nexport interface RightNodeCountRef {\n path: Path;\n rightNodeCount: number;\n}\n\nexport const insertElementHandleRightNodeCount = (\n board: PlaitBoard,\n path: Path,\n insertCount: number,\n effectedRightNodeCount: RightNodeCountRef[] = []\n) => {\n let index = effectedRightNodeCount.findIndex(ref => Path.equals(ref.path, path));\n const mind = PlaitNode.get(board, path) as MindElement;\n if (index === -1) {\n effectedRightNodeCount.push({ path, rightNodeCount: mind.rightNodeCount! + insertCount });\n } else {\n effectedRightNodeCount[index].rightNodeCount += insertCount;\n }\n return effectedRightNodeCount;\n};\n\nexport const deleteElementsHandleRightNodeCount = (\n board: PlaitBoard,\n deletableElements: MindElement[],\n effectedRightNodeCount: RightNodeCountRef[] = []\n) => {\n deletableElements.forEach(element => {\n if (isInRightBranchOfStandardLayout(element)) {\n const mind = MindElement.getParent(element);\n const path = PlaitBoard.findPath(board, mind);\n let index = effectedRightNodeCount.findIndex(ref => Path.equals(ref.path, path));\n if (index === -1) {\n effectedRightNodeCount.push({ path, rightNodeCount: mind.rightNodeCount! - 1 });\n } else {\n effectedRightNodeCount[index].rightNodeCount -= 1;\n }\n }\n });\n return effectedRightNodeCount;\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { getNonAbstractChildren } from '@plait/layouts';\nimport { Path } from 'slate';\n\nexport function findNewChildNodePath(board: PlaitBoard, element: PlaitElement) {\n const children = getNonAbstractChildren(element);\n return PlaitBoard.findPath(board, element).concat(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 { PlaitBoard } from '@plait/core';\nimport { MindElement, PlaitMind } from '../interfaces';\nimport { correctLayoutByDirection, getInCorrectLayoutDirection, getRootLayout } from '../utils';\nimport { AbstractNode, MindLayoutType, getAbstractLayout } 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 = (board: PlaitBoard, element: MindElement) => {\n const ancestors = MindElement.getAncestors(board, element) as MindElement[];\n ancestors.unshift(element);\n const root = ancestors[ancestors.length - 1];\n let rootLayout = getRootLayout(root);\n\n if (PlaitMind.isMind(element)) {\n return rootLayout;\n }\n\n const node = MindElement.getNode(element);\n let correctRootLayout = rootLayout;\n if (rootLayout === MindLayoutType.standard) {\n correctRootLayout = node.left ? MindLayoutType.left : MindLayoutType.right;\n }\n\n let layout = null;\n const elementWithLayout = ancestors.find(value => value.layout || AbstractNode.isAbstract(value));\n if (elementWithLayout) {\n if (AbstractNode.isAbstract(elementWithLayout)) {\n const parent = MindElement.getParent(elementWithLayout);\n const parentLayout = getCorrectLayoutByElement(board, parent);\n layout = getAbstractLayout(parentLayout);\n } else {\n layout = elementWithLayout?.layout;\n }\n }\n\n if (layout === MindLayoutType.standard || !layout) {\n return correctRootLayout;\n } else {\n const incorrectDirection = getInCorrectLayoutDirection(correctRootLayout, layout);\n if (incorrectDirection) {\n return correctLayoutByDirection(layout, incorrectDirection);\n } else {\n return layout;\n }\n }\n};\n","import { MindElement } from '../interfaces';\nimport { MindLayoutType } from '@plait/layouts';\nimport { getCorrectLayoutByElement } from './get-correct-layout-by-element';\nimport { PlaitBoard } from '@plait/core';\n\nexport const getBranchLayouts = (board: PlaitBoard, element: MindElement) => {\n const layouts: MindLayoutType[] = [];\n if (element.layout) {\n // TODO: getCorrectLayoutByElement Contains recursive operations. getBranchLayouts itself also has recursive operations and needs to be optimized.\n layouts.unshift(getCorrectLayoutByElement(board, element));\n }\n let parent = MindElement.findParent(element);\n while (parent) {\n if (parent.layout) {\n layouts.unshift(parent.layout);\n }\n parent = MindElement.findParent(parent);\n }\n return layouts;\n};\n","import { MindElement } from '../interfaces';\nimport { getAvailableSubLayoutsByLayoutDirections, getBranchDirectionsByLayouts } from '../utils';\nimport { MindLayoutType } from '@plait/layouts';\nimport { getBranchLayouts } from './get-branch-layouts';\nimport { PlaitBoard } from '@plait/core';\n\nexport const getAvailableSubLayoutsByElement = (board: PlaitBoard, element: MindElement) => {\n const parentElement = MindElement.findParent(element);\n if (parentElement) {\n const branchLayouts = getBranchLayouts(board, parentElement);\n if (branchLayouts[0] === MindLayoutType.standard) {\n const node = MindElement.getNode(element);\n branchLayouts[0] = node.left ? MindLayoutType.left : MindLayoutType.right;\n }\n const currentLayoutDirections = getBranchDirectionsByLayouts(branchLayouts);\n let availableSubLayouts = getAvailableSubLayoutsByLayoutDirections(currentLayoutDirections);\n const parentLayout = [branchLayouts[branchLayouts.length - 1]];\n const parentDirections = getBranchDirectionsByLayouts(parentLayout);\n const parentAvailableSubLayouts = getAvailableSubLayoutsByLayoutDirections(parentDirections);\n\n availableSubLayouts = availableSubLayouts.filter(layout =>\n parentAvailableSubLayouts.some(parentAvailableSubLayout => parentAvailableSubLayout === layout)\n );\n return availableSubLayouts;\n }\n return undefined;\n};\n","import { MindElement, PlaitMind } from '../interfaces';\nimport { AbstractNode, MindLayoutType, getAbstractLayout } from '@plait/layouts';\nimport { getDefaultLayout } from '../utils/layout';\n\nexport const getLayoutByElement = (element: MindElement): MindLayoutType => {\n const layout = element.layout;\n if (layout) {\n return layout;\n }\n\n const parent = !PlaitMind.isMind(element) && MindElement.getParent(element);\n\n if (AbstractNode.isAbstract(element) && parent) {\n return getAbstractLayout(getLayoutByElement(parent));\n }\n\n if (parent) {\n return getLayoutByElement(parent);\n }\n\n return getDefaultLayout();\n};\n","import { getAvailableSubLayoutsByElement } from './get-available-sublayouts-by-element';\nimport { getBranchLayouts } from './get-branch-layouts';\nimport { getCorrectLayoutByElement } from './get-correct-layout-by-element';\nimport { getLayoutByElement } from './get-layout-by-element';\n\nexport const MindQueries = {\n getAvailableSubLayoutsByElement,\n getBranchLayouts,\n getLayoutByElement,\n getCorrectLayoutByElement\n};\n","import { isIndentedLayout, MindLayoutType } from '@plait/layouts';\nimport { isNullOrUndefined, NODE_TO_PARENT, Path, PlaitBoard, PlaitElement, PlaitNode, Point } from '@plait/core';\nimport { MindQueries } from '../queries';\nimport { ELEMENT_TO_NODE } from '../utils';\nimport { BaseData, EmojiData, ImageData } from './element-data';\nimport { StrokeStyle } from '@plait/common';\n\nexport interface MindElement<T = BaseData> extends PlaitElement {\n data: T;\n children: MindElement[];\n rightNodeCount?: number;\n width: number;\n manualWidth?: number;\n height: number;\n isRoot?: boolean;\n\n // node style attributes\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n shape?: MindElementShape;\n\n // link style attributes\n branchColor?: string;\n branchWidth?: number;\n branchShape?: BranchShape;\n\n // layout\n layout?: MindLayoutType;\n isCollapsed?: boolean;\n\n start?: number;\n end?: number;\n}\n\nexport interface PlaitMind extends MindElement {\n type: 'mindmap';\n points: Point[];\n}\n\nexport const PlaitMind = {\n isMind: (value: any): value is PlaitMind => {\n return value.type === 'mindmap';\n }\n};\n\nexport const MindElement = {\n hasLayout(value: MindElement, layout: MindLayoutType) {\n const _layout = MindQueries.getLayoutByElement(value);\n return _layout === layout;\n },\n isIndentedLayout(value: MindElement) {\n const _layout = MindQueries.getLayoutByElement(value) as MindLayoutType;\n return isIndentedLayout(_layout);\n },\n isMindElement(board: PlaitBoard, element: PlaitElement): element is MindElement {\n // Design error: The type of the element should be identified based on type.\n // Now it is very awkward whether it is dynamically calculated(query root node) or using other characteristic attributes(current).\n // Using dynamically calculated will cause more issue like pasting from clipboard, finding elements by id(isRecursion)\n if (element.data && element.data.topic && !isNullOrUndefined(element.width) && !isNullOrUndefined(element.height)) {\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 findParent(node: MindElement) {\n if (PlaitMind.isMind(node)) {\n return undefined;\n }\n const parent = NODE_TO_PARENT.get(node) as MindElement;\n return parent;\n },\n getRoot(board: PlaitBoard, element: MindElement) {\n const path = PlaitBoard.findPath(board, element);\n return PlaitNode.get(board, path.slice(0, 1)) as PlaitMind;\n },\n getAncestors(board: PlaitBoard, element: MindElement) {\n const path = PlaitBoard.findPath(board, element);\n const parents: PlaitElement[] = [];\n for (const p of Path.ancestors(path, { reverse: true })) {\n const n = PlaitNode.get(board, p);\n if (n && !PlaitBoard.isBoard(n)) {\n parents.push(n);\n }\n }\n return parents;\n },\n getNode(element: MindElement) {\n const node = ELEMENT_TO_NODE.get(element);\n if (!node) {\n throw new Error(`can not get node from ${JSON.stringify(element)}`);\n }\n return node;\n },\n findParentNode(element: MindElement) {\n if (PlaitMind.isMind(element)) {\n return undefined;\n }\n const parent = MindElement.getParent(element);\n return MindElement.getNode(parent);\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 hasImage(element: MindElement): element is MindElement<ImageData> {\n if (element.data.image) {\n return true;\n } else {\n return false;\n }\n },\n getEmojis(element: MindElement<EmojiData>) {\n return element.data.emojis;\n }\n};\n\nexport enum MindElementShape {\n roundRectangle = 'round-rectangle',\n underline = 'underline'\n}\n\nexport enum BranchShape {\n bight = 'bight',\n polyline = 'polyline'\n}\n","import { PlaitBoard, createG, drawLinearPath, getRectangleByElements } from '@plait/core';\nimport { MindNode } from '../../../interfaces/node';\nimport { getRectangleByNode } from '../../position/node';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../../interfaces/types';\nimport { getLayoutDirection, getPointByPlacement, getXDistanceBetweenPoint, moveXOfPoint, transformPlacement } from '../../point-placement';\nimport { getAbstractBranchColor, getAbstractBranchWidth, getBranchShapeByMindElement } from '../../node-style/branch';\nimport { BranchShape } from '../../../interfaces/element';\nimport { getStrokeStyleByElement } from '../../node-style';\nimport { getStrokeLineDash } from '@plait/common';\n\nexport function drawAbstractLink(board: PlaitBoard, node: MindNode, isHorizontal: boolean) {\n const linkPadding = 15;\n const branchWidth = getAbstractBranchWidth(board, node.origin);\n const branchColor = getAbstractBranchColor(board, node.origin);\n const strokeStyle = getStrokeStyleByElement(board, node.origin);\n const parent = node.parent;\n const branchShape = getBranchShapeByMindElement(board, node.origin);\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 let curveDistance = getXDistanceBetweenPoint(abstractConnectorPoint, bezierBeginPoint, isHorizontal) - linkPadding * 2;\n bezierBeginPoint = moveXOfPoint(bezierBeginPoint, linkPadding, linkDirection);\n let c1 = moveXOfPoint(bezierBeginPoint, curveDistance, linkDirection);\n bezierEndPoint = moveXOfPoint(bezierEndPoint, linkPadding, linkDirection);\n let c2 = moveXOfPoint(bezierEndPoint, curveDistance, linkDirection);\n let bezierConnectorPoint = moveXOfPoint(abstractConnectorPoint, -linkPadding, linkDirection);\n const strokeLineDash = getStrokeLineDash(strokeStyle, branchWidth);\n if (branchShape === BranchShape.polyline) {\n const g = createG();\n const polyline = drawLinearPath([bezierBeginPoint, c1, bezierConnectorPoint, c2, bezierEndPoint], {\n stroke: branchColor,\n strokeWidth: branchWidth\n });\n const straightLine = drawLinearPath([abstractConnectorPoint, bezierConnectorPoint], {\n stroke: branchColor,\n strokeWidth: branchWidth,\n strokeLineDash\n });\n\n g.appendChild(polyline);\n g.appendChild(straightLine);\n\n return g;\n }\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: branchColor,\n strokeWidth: branchWidth,\n strokeLineDash\n }\n );\n return link;\n}\n","import { Path, PlaitBoard, PlaitElement, Transforms, addSelectedElement, clearSelectedElement } from '@plait/core';\nimport { AbstractRefs } from '../plugins/with-abstract-resize.board';\nimport { MindElement } from '../interfaces/element';\nimport { AbstractNode, isStandardLayout } from '@plait/layouts';\nimport { divideElementByParent, getFirstLevelElement } from '../utils/mind';\nimport { MindQueries } from '../queries';\nimport { DefaultAbstractNodeStyle } from '../constants/node-style';\nimport { createMindElement } from '../utils/node/create-node';\n\nexport const setAbstractsByRefs = (board: PlaitBoard, abstractRefs: AbstractRefs) => {\n abstractRefs.forEach((newProperty, element) => {\n const start = element.start! + newProperty.start;\n const end = element.end! + newProperty.end;\n const path = PlaitBoard.findPath(board, element as MindElement);\n\n if (start > end) {\n Transforms.removeNode(board, path);\n } else {\n Transforms.setNode(board, { start, end }, path);\n }\n });\n};\n\nexport const setAbstractByStandardLayout = (board: PlaitBoard, element: MindElement) => {\n const rightNodeCount = element.rightNodeCount!;\n const abstract = element.children.find(child => {\n return AbstractNode.isAbstract(child) && child.end >= rightNodeCount && child.start < rightNodeCount;\n });\n\n if (abstract) {\n const path = PlaitBoard.findPath(board, abstract);\n Transforms.setNode(board, { end: rightNodeCount - 1 }, path);\n }\n};\n\nexport const insertAbstract = (board: PlaitBoard, elements: PlaitElement[]) => {\n let elementGroup = getFirstLevelElement(elements as MindElement[]);\n const { parentElements, abstractIncludedGroups } = divideElementByParent(elementGroup);\n\n abstractIncludedGroups.forEach((group, index) => {\n const groupParent = parentElements[index];\n setAbstractByElements(board, groupParent, group);\n });\n};\n\nconst setAbstractByElements = (board: PlaitBoard, groupParent: MindElement, group: MindElement[]) => {\n const indexArray = group.map(child => groupParent!.children.indexOf(child)).sort((a, b) => a - b);\n const rightNodeCount = groupParent?.rightNodeCount;\n const start = indexArray[0],\n end = indexArray[indexArray.length - 1];\n\n if (\n isStandardLayout(MindQueries.getLayoutByElement(groupParent)) &&\n rightNodeCount &&\n start < rightNodeCount &&\n end >= rightNodeCount\n ) {\n const childrenLength = groupParent.children.length;\n const path = [...PlaitBoard.findPath(board, groupParent), childrenLength];\n const leftChildren = indexArray.filter(index => index >= rightNodeCount);\n const rightChildren = indexArray.filter(index => index < rightNodeCount);\n insertAbstractNode(board, path, rightChildren[0], rightChildren[rightChildren.length - 1]);\n insertAbstractNode(board, Path.next(path), leftChildren[0], leftChildren[leftChildren.length - 1]);\n } else {\n const path = [...PlaitBoard.findPath(board, groupParent), groupParent.children.length];\n insertAbstractNode(board, path, start, end);\n }\n};\n\nconst insertAbstractNode = (board: PlaitBoard, path: Path, start: number, end: number) => {\n const mindElement = createMindElement('概要', 28, 20, {\n strokeWidth: DefaultAbstractNodeStyle.branch.width,\n branchWidth: DefaultAbstractNodeStyle.branch.width\n });\n\n mindElement.start = start;\n mindElement.end = end;\n\n Transforms.insertNode(board, mindElement, path);\n\n clearSelectedElement(board);\n addSelectedElement(board, mindElement);\n};\n","import { Element, Path } from 'slate';\nimport { MindElement, PlaitMind } from '../interfaces/element';\nimport { PlaitBoard, PlaitHistoryBoard, PlaitNode, Transforms, removeSelectedElement } from '@plait/core';\nimport { AbstractRef, getRelativeStartEndByAbstractRef, insertElementHandleAbstract } from '../utils/abstract/common';\nimport { RightNodeCountRef, insertElementHandleRightNodeCount, isInRightBranchOfStandardLayout } from '../utils/node/right-node-count';\nimport { NodeSpace } from '../utils/space/node-space';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\nimport { findNewChildNodePath, findNewSiblingNodePath, insertMindElement } from '../utils';\nimport { setAbstractsByRefs } from './abstract-node';\nimport { AbstractNode } from '@plait/layouts';\n\nconst normalizeWidthAndHeight = (board: PlaitMindBoard, element: MindElement, width: number, height: number) => {\n const minWidth = NodeSpace.getNodeTopicMinWidth(board, element);\n const newWidth = width < minWidth ? minWidth : width;\n return { width: Math.ceil(newWidth), height };\n};\n\nexport const setTopic = (board: PlaitMindBoard, element: MindElement, topic: Element, width: number, height: number) => {\n const newElement = {\n data: { ...element.data, topic },\n ...normalizeWidthAndHeight(board, element, width, height)\n } as MindElement;\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const setNodeManualWidth = (board: PlaitMindBoard, element: MindElement, width: number, height: number) => {\n const path = PlaitBoard.findPath(board, element);\n const { width: normalizedWidth, height: normalizedHeight } = normalizeWidthAndHeight(board, element, width, height);\n const newElement = { manualWidth: normalizedWidth, height: normalizedHeight } as MindElement;\n Transforms.setNode(board, newElement, path);\n};\n\nexport const setTopicSize = (board: PlaitMindBoard, element: MindElement, width: number, height: number) => {\n const newElement = {\n ...normalizeWidthAndHeight(board, element, width, height)\n };\n let isEqualWidth = Math.ceil(element.width) === Math.ceil(newElement.width);\n let isEqualHeight = Math.ceil(element.height) === Math.ceil(newElement.height);\n if (element.manualWidth) {\n isEqualWidth = true;\n }\n if (!isEqualWidth || !isEqualHeight) {\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n }\n};\n\nexport const insertNodes = (board: PlaitBoard, elements: MindElement[], path: Path) => {\n const pathRef = board.pathRef(path);\n elements.forEach(element => {\n if (pathRef.current) {\n Transforms.insertNode(board, element, pathRef.current);\n }\n });\n pathRef.unref();\n};\n\nexport const insertAbstractNodes = (board: PlaitBoard, validAbstractRefs: AbstractRef[], elements: MindElement[], path: Path) => {\n const parent = PlaitNode.get(board, Path.parent(path));\n const abstractPath = [...Path.parent(path), parent.children?.length!];\n const abstracts = validAbstractRefs.map(refs => {\n const { start, end } = getRelativeStartEndByAbstractRef(refs, elements);\n return {\n ...refs.abstract,\n start: start + path[path.length - 1],\n end: end + path[path.length - 1]\n };\n });\n\n insertNodes(board, abstracts, abstractPath);\n};\n\nexport const setRightNodeCountByRefs = (board: PlaitBoard, refs: RightNodeCountRef[]) => {\n refs.forEach(ref => {\n Transforms.setNode(board, { rightNodeCount: ref.rightNodeCount }, ref.path);\n });\n};\n\nexport const insertChildNode = (board: PlaitMindBoard, element: MindElement) => {\n if (MindElement.isMindElement(board, element)) {\n removeSelectedElement(board, element);\n const targetElementPath = PlaitBoard.findPath(board, element);\n if (element.isCollapsed) {\n const newElement: Partial<MindElement> = { isCollapsed: false };\n PlaitHistoryBoard.withoutSaving(board, () => {\n Transforms.setNode(board, newElement, targetElementPath);\n });\n }\n insertMindElement(board, element, findNewChildNodePath(board, element));\n }\n};\n\nexport const insertSiblingNode = (board: PlaitMindBoard, element: MindElement) => {\n if (MindElement.isMindElement(board, element) && !PlaitMind.isMind(element) && !AbstractNode.isAbstract(element)) {\n const path = PlaitBoard.findPath(board, element);\n if (isInRightBranchOfStandardLayout(element)) {\n const refs = insertElementHandleRightNodeCount(board, path.slice(0, 1), 1);\n setRightNodeCountByRefs(board, refs);\n }\n const abstractRefs = insertElementHandleAbstract(board, Path.next(path));\n setAbstractsByRefs(board, abstractRefs);\n insertMindElement(board, element, findNewSiblingNodePath(board, element));\n }\n};\n\nexport const insertMind = (board: PlaitMindBoard, mind: MindElement) => {\n Transforms.insertNode(board, mind, [board.children.length]);\n Transforms.addSelectionWithTemporaryElements(board, [mind]);\n};\n","import { MindElement } from '../interfaces/element';\nimport { PlaitBoard, Transforms } from '@plait/core';\nimport { EmojiData, EmojiItem } from '../interfaces/element-data';\n\nexport const addEmoji = (board: PlaitBoard, element: MindElement, emojiItem: EmojiItem) => {\n const emojis = element.data.emojis || [];\n const newEmojis = [...emojis];\n newEmojis.push(emojiItem);\n const newElement = {\n data: { ...element.data, emojis: newEmojis }\n } as MindElement;\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const removeEmoji = (board: PlaitBoard, element: MindElement<EmojiData>, emojiItem: EmojiItem) => {\n const emojis = element.data.emojis.filter(value => value !== emojiItem);\n const newElement = {\n data: { topic: element.data.topic }\n } as MindElement;\n\n if (MindElement.hasImage(element)) {\n newElement.data.image = element.data.image;\n }\n\n if (emojis.length > 0) {\n newElement.data.emojis = emojis;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const replaceEmoji = (board: PlaitBoard, element: MindElement<EmojiData>, oldEmoji: EmojiItem, newEmoji: EmojiItem) => {\n const newElement = {\n data: { ...element.data }\n } as MindElement;\n const newEmojis = element.data.emojis.map(value => {\n if (value === oldEmoji) {\n return newEmoji;\n }\n return value;\n });\n newElement.data.emojis = newEmojis;\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n","import { PlaitBoard, Transforms } from '@plait/core';\nimport { ImageData, MindElement } from '../interfaces';\nimport { removeImageFocus } from '../utils/node/image';\nimport { NodeSpace } from '../utils/space/node-space';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\nimport { getNewNodeHeight } from '../utils/node/dynamic-width';\nimport { CommonImageItem } from '@plait/common';\n\nexport const removeImage = (board: PlaitBoard, element: MindElement<ImageData>) => {\n removeImageFocus(board, element);\n const newElement = {\n data: { ...element.data }\n } as MindElement;\n delete newElement.data.image;\n const path = PlaitBoard.findPath(board, element);\n const newDynamicWidth = NodeSpace.getNodeNewDynamicWidth(board as PlaitMindBoard, element, 0);\n const newHeight = getNewNodeHeight(board as PlaitMindBoard, element, newDynamicWidth);\n if (newHeight) {\n newElement.height = newHeight;\n }\n Transforms.setNode(board, newElement, path);\n};\n\nexport const setImage = (board: PlaitBoard, element: MindElement, imageItem: CommonImageItem) => {\n const newElement = {\n data: { ...element.data, image: imageItem }\n };\n const newDynamicWidth = NodeSpace.getNodeNewDynamicWidth(board as PlaitMindBoard, element, imageItem.width);\n const newHeight = getNewNodeHeight(board as PlaitMindBoard, element, newDynamicWidth);\n if (newHeight) {\n (newElement as MindElement).height = newHeight;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n","import { PlaitBoard, Path, PlaitNode, Transforms } from '@plait/core';\nimport { isHorizontalLogicLayout, isVerticalLogicLayout, MindLayoutType } from '@plait/layouts';\n\nexport const correctLogicLayoutNode = (board: PlaitBoard, layout: MindLayoutType, path: Path) => {\n const node = PlaitNode.get(board, path);\n if (node && layout) {\n node.children?.forEach((value: PlaitNode, index) => {\n if (value.layout) {\n if (\n (isHorizontalLogicLayout(layout) && isVerticalLogicLayout(value.layout)) ||\n (isVerticalLogicLayout(layout) && isHorizontalLogicLayout(value.layout))\n ) {\n Transforms.setNode(board, { layout: null }, [...path, index]);\n }\n if (value.children?.length) {\n correctLogicLayoutNode(board, layout, [...path, index]);\n }\n }\n });\n }\n};\n","import { Path, PlaitBoard, PlaitNode, Transforms } from '@plait/core';\nimport { MindLayoutType, isStandardLayout } from '@plait/layouts';\nimport { PropertyTransforms } from '@plait/common';\nimport { BranchShape, MindElementShape, MindElement, PlaitMind } from '../interfaces';\nimport { correctLogicLayoutNode } from './layout';\nimport { setAbstractByStandardLayout } from './abstract-node';\n\nexport const setLayout = (board: PlaitBoard, type: MindLayoutType) => {\n const callback = (element: MindElement, path: Path) => {\n if (MindElement.isMindElement(board, element)) {\n correctLogicLayoutNode(board, type, path);\n const element = PlaitNode.get(board, path) as MindElement;\n if (PlaitMind.isMind(element) && isStandardLayout(type)) {\n let properties = { rightNodeCount: element.children.length / 2 };\n Transforms.setNode(board, properties, path);\n setAbstractByStandardLayout(board, element);\n }\n Transforms.setNode(board, { layout: type }, path);\n }\n };\n PropertyTransforms.setProperty<MindElement>(board, {}, { callback });\n};\n\nexport const setShape = (board: PlaitBoard, shape: MindElementShape) => {\n PropertyTransforms.setProperty(board, { shape });\n};\n\nexport const setBranchShape = (board: PlaitBoard, branchShape: BranchShape) => {\n PropertyTransforms.setProperty(board, { branchShape });\n};\n\nexport const setBranchWidth = (board: PlaitBoard, branchWidth: number) => {\n PropertyTransforms.setProperty(board, { branchWidth });\n};\n\nexport const setBranchColor = (board: PlaitBoard, branchColor: string) => {\n PropertyTransforms.setProperty(board, { branchColor });\n};\n","import { insertAbstract, setAbstractsByRefs, setAbstractByStandardLayout } from './abstract-node';\nimport {\n setTopic,\n setTopicSize,\n insertNodes,\n insertAbstractNodes,\n setRightNodeCountByRefs,\n setNodeManualWidth,\n insertChildNode,\n insertSiblingNode,\n insertMind\n} from './node';\nimport { addEmoji, removeEmoji, replaceEmoji } from './emoji';\nimport { removeImage, setImage } from './image';\nimport { setShape, setBranchShape, setBranchWidth, setLayout, setBranchColor } from './property';\n\nexport const MindTransforms = {\n setLayout,\n setShape,\n setBranchShape,\n setBranchWidth,\n setBranchColor,\n setTopic,\n setTopicSize,\n setNodeManualWidth,\n addEmoji,\n removeEmoji,\n replaceEmoji,\n insertAbstract,\n setAbstractsByRefs,\n setAbstractByStandardLayout,\n insertNodes,\n insertAbstractNodes,\n setRightNodeCountByRefs,\n removeImage,\n setImage,\n insertChildNode,\n insertSiblingNode,\n insertMind\n};\n","import { PlaitBoard, PlaitOptionsBoard, createG, temporaryDisableSelection } from '@plait/core';\nimport { MindElement, BaseData, PlaitMind, MindElementShape, LayoutDirection } from '../interfaces';\nimport { getRectangleByNode } from '../utils/position/node';\nimport { getShapeByElement } from '../utils/node-style/shape';\nimport { EXTEND_DIAMETER, QUICK_INSERT_CIRCLE_COLOR, QUICK_INSERT_INNER_CROSS_COLOR } from '../constants/default';\nimport { MindLayoutType, isHorizontalLayout, isIndentedLayout, isTopLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { fromEvent } from 'rxjs';\nimport { insertMindElement } from '../utils/mind';\nimport { take } from 'rxjs/operators';\nimport { findNewChildNodePath } from '../utils/path';\nimport { getBranchColorByMindElement, getBranchWidthByMindElement, getNextBranchColor } from '../utils/node-style/branch';\nimport { getLayoutDirection, getPointByPlacement, moveXOfPoint, transformPlacement } from '../utils/point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../interfaces/types';\nimport { AfterDraw, Generator } from '@plait/common';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\n\nexport class NodePlusGenerator extends Generator<MindElement> implements AfterDraw {\n canDraw(element: MindElement<BaseData>): boolean {\n if (PlaitBoard.isReadonly(this.board) || element?.isCollapsed) {\n return false;\n }\n return true;\n }\n\n draw(element: MindElement<BaseData>): SVGGElement {\n const plusG = createG();\n plusG.classList.add('plus');\n const node = MindElement.getNode(element);\n const layout = MindQueries.getLayoutByElement(element) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(layout);\n let linkDirection = getLayoutDirection(node, isHorizontal);\n if (isIndentedLayout(layout)) {\n linkDirection = isTopLayout(layout) ? LayoutDirection.top : LayoutDirection.bottom;\n }\n const isUnderlineShape = getShapeByElement(this.board, element) === MindElementShape.underline;\n const nodeClient = getRectangleByNode(node);\n const branchWidth = getBranchWidthByMindElement(this.board, element);\n const branchColor = PlaitMind.isMind(element)\n ? getNextBranchColor(this.board, element)\n : getBranchColorByMindElement(this.board, element);\n let distance = 8;\n\n let placement: PointPlacement = [HorizontalPlacement.right, VerticalPlacement.middle];\n\n transformPlacement(placement, linkDirection);\n\n // underline shape and horizontal\n if (isHorizontal && isUnderlineShape && !element.isRoot) {\n placement[1] = VerticalPlacement.bottom;\n }\n\n let beginPoint = getPointByPlacement(nodeClient, placement);\n\n if (element.children.length > 0 && !element.isRoot) {\n beginPoint = moveXOfPoint(beginPoint, EXTEND_DIAMETER + 8, linkDirection);\n distance = 5;\n }\n\n const endPoint = moveXOfPoint(beginPoint, distance, linkDirection);\n const circleCenter = moveXOfPoint(endPoint, 8, linkDirection);\n\n const line = PlaitBoard.getRoughSVG(this.board).line(beginPoint[0], beginPoint[1], endPoint[0], endPoint[1], {\n stroke: branchColor,\n strokeWidth: branchWidth\n });\n\n const circle = PlaitBoard.getRoughSVG(this.board).circle(circleCenter[0], circleCenter[1], EXTEND_DIAMETER, {\n fill: QUICK_INSERT_CIRCLE_COLOR,\n stroke: QUICK_INSERT_CIRCLE_COLOR,\n fillStyle: 'solid'\n });\n\n const HLineBeginPoint = [circleCenter[0] - 5, circleCenter[1]];\n const HLineEndPoint = [circleCenter[0] + 5, circleCenter[1]];\n const VLineBeginPoint = [circleCenter[0], circleCenter[1] - 5];\n const VLineEndPoint = [circleCenter[0], circleCenter[1] + 5];\n\n const innerCrossHLine = PlaitBoard.getRoughSVG(this.board).line(\n HLineBeginPoint[0],\n HLineBeginPoint[1],\n HLineEndPoint[0],\n HLineEndPoint[1],\n {\n stroke: QUICK_INSERT_INNER_CROSS_COLOR,\n strokeWidth: 2\n }\n );\n\n const innerCrossVLine = PlaitBoard.getRoughSVG(this.board).line(\n VLineBeginPoint[0],\n VLineBeginPoint[1],\n VLineEndPoint[0],\n VLineEndPoint[1],\n {\n stroke: QUICK_INSERT_INNER_CROSS_COLOR,\n strokeWidth: 2\n }\n );\n plusG.appendChild(line);\n plusG.appendChild(circle);\n plusG.appendChild(innerCrossHLine);\n plusG.appendChild(innerCrossVLine);\n return plusG;\n }\n\n afterDraw(element: MindElement): void {\n if (!this.g) {\n throw new Error(`can not find quick insert g`);\n }\n fromEvent<MouseEvent>(this.g, 'pointerdown')\n .pipe(take(1))\n .subscribe(e => {\n e.preventDefault();\n });\n fromEvent<PointerEvent>(this.g, 'pointerup')\n .pipe(take(1))\n .subscribe((event: PointerEvent) => {\n // wait the event period end of pointerup to otherwise the pointerup will cause new element lose selected state\n setTimeout(() => {\n const path = findNewChildNodePath(this.board, element);\n insertMindElement(this.board as PlaitMindBoard, element, path);\n }, 0);\n });\n }\n}\n","import { PlaitBoard, PlaitPointerType, Point, Transforms, createG, createText, drawLinearPath } from '@plait/core';\nimport { MindElement, BaseData, PlaitMind, MindElementShape, LayoutDirection } from '../interfaces';\nimport { getRectangleByNode } from '../utils/position/node';\nimport { getShapeByElement } from '../utils/node-style/shape';\nimport { EXTEND_OFFSET, EXTEND_DIAMETER } from '../constants/default';\nimport { MindLayoutType, isHorizontalLayout, isIndentedLayout, isTopLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { fromEvent } from 'rxjs';\nimport { getChildrenCount } from '../utils/mind';\nimport { filter, take } from 'rxjs/operators';\nimport { getBranchColorByMindElement, getBranchWidthByMindElement } from '../utils/node-style/branch';\nimport { getLayoutDirection, getPointByPlacement, moveXOfPoint, moveYOfPoint, transformPlacement } from '../utils/point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../interfaces/types';\nimport { AfterDraw, Generator } from '@plait/common';\n\nexport class CollapseGenerator extends Generator<MindElement> implements AfterDraw {\n canDraw(element: MindElement<BaseData>): boolean {\n if (element.children.length && !PlaitMind.isMind(element)) {\n return true;\n }\n return false;\n }\n\n draw(element: MindElement<BaseData>): SVGGElement {\n const collapseG = createG();\n collapseG.classList.add('collapse');\n const node = MindElement.getNode(element);\n const stroke = getBranchColorByMindElement(this.board, element);\n const branchWidth = getBranchWidthByMindElement(this.board, element);\n const layout = MindQueries.getLayoutByElement(element) as MindLayoutType;\n const isUnderlineShape = getShapeByElement(this.board, element) === MindElementShape.underline;\n const isHorizontal = isHorizontalLayout(layout);\n const nodeClient = getRectangleByNode(node);\n let linkDirection = getLayoutDirection(node, isHorizontal);\n if (isIndentedLayout(layout)) {\n linkDirection = isTopLayout(layout) ? LayoutDirection.top : LayoutDirection.bottom;\n }\n\n let placement: PointPlacement = [HorizontalPlacement.right, VerticalPlacement.middle];\n\n transformPlacement(placement, linkDirection);\n\n // underline shape and horizontal\n if (isHorizontal && isUnderlineShape && !element.isRoot) {\n placement[1] = VerticalPlacement.bottom;\n }\n\n let startPoint = getPointByPlacement(nodeClient, placement);\n const endPoint = moveXOfPoint(startPoint, EXTEND_OFFSET, linkDirection);\n const circleCenter = moveXOfPoint(endPoint, EXTEND_DIAMETER / 2, linkDirection);\n\n const arrowPoints = this.getArrowPoints(circleCenter, linkDirection);\n\n const arrowLine = drawLinearPath(arrowPoints, {\n stroke,\n strokeWidth: 2\n });\n\n const extendLine = PlaitBoard.getRoughSVG(this.board).line(startPoint[0], startPoint[1], endPoint[0], endPoint[1], {\n strokeWidth: branchWidth,\n stroke\n });\n\n const badge = PlaitBoard.getRoughSVG(this.board).circle(circleCenter[0], circleCenter[1], EXTEND_DIAMETER, {\n fill: stroke,\n stroke,\n fillStyle: 'solid'\n });\n\n const hideCircleG = PlaitBoard.getRoughSVG(this.board).circle(circleCenter[0], circleCenter[1], EXTEND_DIAMETER, {\n fill: '#fff',\n stroke,\n strokeWidth: branchWidth > 3 ? 3 : branchWidth,\n fillStyle: 'solid'\n });\n\n if (element.isCollapsed) {\n let numberOffset = 0;\n if (getChildrenCount(element) >= 10) numberOffset = -2;\n if (getChildrenCount(element) === 1) numberOffset = 1;\n\n const badgeText = createText(circleCenter[0] - 4 + numberOffset, circleCenter[1] + 4, stroke, `${getChildrenCount(element)}`);\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 collapseG.appendChild(hideCircleG);\n collapseG.appendChild(arrowLine);\n }\n\n collapseG.appendChild(extendLine);\n return collapseG;\n }\n\n afterDraw(element: MindElement): void {\n if (!this.g) {\n throw new Error(`can not find quick insert g`);\n }\n\n fromEvent<PointerEvent>(this.g, 'pointerdown')\n .pipe(\n filter(() => !PlaitBoard.isPointer(this.board, PlaitPointerType.hand) || !!PlaitBoard.isReadonly(this.board)),\n take(1)\n )\n .subscribe((event: PointerEvent) => {\n event.preventDefault();\n const isCollapsed = !element.isCollapsed;\n const newElement: Partial<MindElement> = { isCollapsed };\n const path = PlaitBoard.findPath(this.board, element);\n Transforms.setNode(this.board, newElement, path);\n });\n }\n\n private getArrowPoints(circleCenter: Point, linkDirection: LayoutDirection) {\n let arrowTopPoint = moveXOfPoint(circleCenter, 2, linkDirection);\n arrowTopPoint = moveYOfPoint(arrowTopPoint, 4, linkDirection);\n const arrowMiddlePoint = moveXOfPoint(circleCenter, -2, linkDirection);\n let arrowBottomPoint = moveXOfPoint(circleCenter, 2, linkDirection);\n arrowBottomPoint = moveYOfPoint(arrowBottomPoint, -4, linkDirection);\n\n return [arrowTopPoint, arrowMiddlePoint, arrowBottomPoint];\n }\n}\n","import { Generator } from '@plait/common';\nimport { MindElement, MindElementShape } from '../interfaces/element';\nimport { getRectangleByNode } from '../utils/position/node';\nimport { MindNode } from '../interfaces/node';\nimport { drawRoundRectangleByElement } from '../utils/draw/node-shape';\nimport { getShapeByElement } from '../utils/node-style/shape';\nimport { PlaitBoard } from '@plait/core';\n\nexport interface ShapeData {\n node: MindNode;\n}\n\nexport class NodeShapeGenerator extends Generator<MindElement, ShapeData> {\n constructor(board: PlaitBoard) {\n super(board, { prepend: true });\n }\n\n canDraw(element: MindElement, data: ShapeData): boolean {\n const shape = getShapeByElement(this.board, element);\n if (shape === MindElementShape.roundRectangle) {\n return true;\n }\n return false;\n }\n\n draw(element: MindElement, data: ShapeData) {\n const rectangle = getRectangleByNode(data.node);\n return drawRoundRectangleByElement(this.board, rectangle, data.node.origin);\n }\n}\n","import { createG, PlaitBoard, NODE_TO_INDEX, PlaitPluginElementContext, OnContextChanged, RectangleClient } from '@plait/core';\nimport { isHorizontalLayout, AbstractNode, MindLayoutType } from '@plait/layouts';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MindElement, PlaitMind } from './interfaces/element';\nimport { MindNode } from './interfaces/node';\nimport { MindQueries } from './queries';\nimport { ELEMENT_TO_NODE } from './utils/weak-maps';\nimport { drawAbstractLink } from './utils/draw/node-link/abstract-link';\nimport { NodeEmojisGenerator } from './generators/node-emojis.generator';\nimport { MindTransforms } from './transforms';\nimport { NodePlusGenerator } from './generators/node-plus.generator';\nimport { PlaitMindBoard } from './plugins/with-mind.board';\nimport { drawLink } from './utils/draw/node-link/draw-link';\nimport { getTopicRectangleByNode } from './utils/position/topic';\nimport { NodeActiveGenerator } from './generators/node-active.generator';\nimport { CollapseGenerator } from './generators/node-collapse.generator';\nimport { NodeSpace } from './utils/space/node-space';\nimport { NodeTopicThreshold } from './constants/node-topic-style';\nimport {\n CommonElementFlavour,\n ImageGenerator,\n TextManage,\n TextManageChangeData,\n WithTextPluginKey,\n WithTextPluginOptions\n} from '@plait/common';\nimport { NodeShapeGenerator } from './generators/node-shape.generator';\nimport { getImageForeignRectangle } from './utils';\nimport { ImageData } from './interfaces';\n\nexport class MindNodeComponent extends CommonElementFlavour<MindElement, PlaitMindBoard>\n implements OnContextChanged<MindElement, PlaitMindBoard> {\n roughSVG!: RoughSVG;\n\n node!: MindNode;\n\n index!: number;\n\n shapeG: SVGGElement | null = null;\n\n linkG?: SVGGElement;\n\n extendG?: SVGGElement;\n\n nodeEmojisGenerator!: NodeEmojisGenerator;\n\n nodeShapeGenerator!: NodeShapeGenerator;\n\n nodePlusGenerator!: NodePlusGenerator;\n\n imageGenerator!: ImageGenerator<MindElement<ImageData>>;\n\n activeGenerator!: NodeActiveGenerator;\n\n collapseGenerator!: CollapseGenerator;\n\n get textManage() {\n return this.getRef().getTextManages()[0];\n }\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.nodeShapeGenerator = new NodeShapeGenerator(this.board);\n this.nodeEmojisGenerator = new NodeEmojisGenerator(this.board);\n this.activeGenerator = new NodeActiveGenerator(this.board);\n this.nodePlusGenerator = new NodePlusGenerator(this.board);\n this.collapseGenerator = new CollapseGenerator(this.board);\n this.imageGenerator = new ImageGenerator<MindElement<ImageData>>(this.board, {\n getRectangle: (element: MindElement<ImageData>) => {\n return getImageForeignRectangle(this.board as PlaitMindBoard, element);\n },\n getImageItem: (element: MindElement<ImageData>) => {\n return element.data.image;\n }\n });\n const plugins = (this.board.getPluginOptions<WithTextPluginOptions>(WithTextPluginKey) || {}).textPlugins;\n const textManage = new TextManage(this.board, {\n getRectangle: () => {\n const rect = getTopicRectangleByNode(this.board, this.node);\n return rect;\n },\n onChange: (data: TextManageChangeData) => {\n const width = data.width;\n const height = data.height;\n if (data.newText) {\n MindTransforms.setTopic(this.board, this.element, data.newText as MindElement, width, height);\n } else {\n MindTransforms.setTopicSize(this.board, this.element, width, height);\n }\n },\n getMaxWidth: () => {\n if (this.element.manualWidth) {\n return NodeSpace.getNodeDynamicWidth(this.board, this.element);\n } else {\n return Math.max(NodeSpace.getNodeDynamicWidth(this.board, this.element), NodeTopicThreshold.defaultTextMaxWidth);\n }\n },\n textPlugins: plugins || []\n });\n this.getRef().addGenerator(NodeActiveGenerator.key, this.activeGenerator);\n this.getRef().addGenerator(NodeEmojisGenerator.key, this.nodeEmojisGenerator);\n this.getRef().addGenerator(ImageGenerator.key, this.imageGenerator);\n this.getRef().initializeTextManage(textManage);\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n this.node = MindElement.getNode(this.element);\n this.index = NODE_TO_INDEX.get(this.element) || 0;\n this.roughSVG = PlaitBoard.getRoughSVG(this.board);\n this.nodeShapeGenerator.processDrawing(this.element, this.getElementG(), { node: this.node });\n this.drawLink();\n this.drawTopic();\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n this.drawEmojis();\n this.drawExtend();\n this.imageGenerator.processDrawing(this.element as MindElement<ImageData>, this.getElementG());\n if (PlaitMind.isMind(this.context.parent)) {\n this.getElementG().classList.add('branch');\n }\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<MindElement, PlaitMindBoard>,\n previous: PlaitPluginElementContext<MindElement, PlaitMindBoard>\n ) {\n const newNode = MindElement.getNode(value.element);\n const isEqualNode = RectangleClient.isEqual(this.node, newNode);\n this.node = newNode;\n if (!isEqualNode || value.element !== previous.element || value.hasThemeChanged) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n this.nodeShapeGenerator.processDrawing(this.element, this.getElementG(), { node: this.node });\n this.drawLink();\n this.drawEmojis();\n this.drawExtend();\n if (!MindElement.hasImage(previous.element) && MindElement.hasImage(this.element)) {\n this.imageGenerator.processDrawing(this.element, this.getElementG());\n }\n if (MindElement.hasImage(previous.element) && MindElement.hasImage(this.element)) {\n this.imageGenerator.updateImage(\n this.getElementG(),\n previous.element as MindElement<ImageData>,\n value.element as MindElement<ImageData>\n );\n }\n if (MindElement.hasImage(previous.element) && !MindElement.hasImage(this.element)) {\n this.imageGenerator.destroy();\n }\n this.updateTopic();\n } else {\n const hasSameSelected = value.selected === previous.selected;\n const hasSameParent = value.parent === previous.parent;\n if (!hasSameSelected) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n }\n if (!hasSameParent) {\n this.drawLink();\n }\n }\n }\n\n drawEmojis() {\n const g = this.nodeEmojisGenerator.drawEmojis(this.element);\n if (g) {\n this.getElementG().append(g);\n }\n }\n\n drawLink() {\n if (PlaitMind.isMind(this.element)) {\n return;\n }\n\n const parent = MindElement.getParent(this.element);\n const parentNode = MindElement.getNode(parent);\n\n if (this.linkG) {\n this.linkG.remove();\n }\n\n const layout = MindQueries.getLayoutByElement(parent) as MindLayoutType;\n if (AbstractNode.isAbstract(this.node.origin)) {\n this.linkG = drawAbstractLink(this.board, this.node, isHorizontalLayout(layout));\n } else {\n this.linkG = drawLink(this.board, parentNode, this.node, isHorizontalLayout(layout));\n }\n this.getElementG().append(this.linkG);\n }\n\n drawExtend() {\n if (!this.extendG) {\n this.extendG = createG();\n this.extendG.classList.add('extend');\n this.getElementG().append(this.extendG);\n }\n if (this.element.isCollapsed) {\n this.getElementG().classList.add('collapsed');\n } else {\n this.getElementG().classList.remove('collapsed');\n }\n this.nodePlusGenerator.processDrawing(this.element, this.extendG!);\n this.collapseGenerator.processDrawing(this.element, this.extendG!);\n }\n\n drawTopic() {\n this.textManage.draw(this.element.data.topic);\n this.getElementG().append(this.textManage.g);\n }\n\n updateTopic() {\n this.textManage.updateText(this.element.data.topic);\n this.textManage.updateRectangle();\n }\n\n trackBy = (index: number, node: MindNode) => {\n return node.origin.id;\n };\n\n destroy(): void {\n super.destroy();\n this.nodeEmojisGenerator.destroy();\n this.imageGenerator.destroy();\n this.activeGenerator.destroy();\n if (ELEMENT_TO_NODE.get(this.element) === this.node) {\n ELEMENT_TO_NODE.delete(this.element);\n }\n this.getRef().destroyTextManage();\n }\n}\n","import { PlaitMind } from './interfaces/element';\nimport { MindNode } from './interfaces/node';\nimport { BeforeContextChange, PlaitPluginElementContext, depthFirstRecursion } from '@plait/core';\nimport { GlobalLayout, OriginNode } from '@plait/layouts';\nimport { ELEMENT_TO_NODE } from './utils/weak-maps';\nimport { MindNodeComponent } from './mind-node.component';\nimport { getLayoutOptions } from './utils/space/layout-options';\nimport { getDefaultLayout } from './utils/layout';\n\nexport class PlaitMindComponent extends MindNodeComponent implements BeforeContextChange<PlaitMind> {\n root!: MindNode;\n\n initialize(): void {\n this.updateMindLayout();\n super.initialize();\n this.getElementG().classList.add('root');\n }\n\n beforeContextChange(value: PlaitPluginElementContext<PlaitMind>) {\n if (value.element !== this.element && this.initialized) {\n this.updateMindLayout(value.element);\n }\n }\n\n updateMindLayout(element = this.element) {\n const mindLayoutType = element.layout || getDefaultLayout();\n this.root = (GlobalLayout.layout(\n (element as unknown) as OriginNode,\n getLayoutOptions(this.board),\n mindLayoutType\n ) as unknown) as MindNode;\n this.updateMindNodeLocation(element as PlaitMind);\n }\n\n updateMindNodeLocation(element: PlaitMind) {\n const { x, y, hGap, vGap } = this.root;\n const offsetX = x + hGap;\n const offsetY = y + vGap;\n depthFirstRecursion<MindNode>(this.root, node => {\n node.x = node.x - offsetX + element.points[0][0];\n node.y = node.y - offsetY + element.points[0][1];\n ELEMENT_TO_NODE.set(node.origin, node);\n });\n }\n}\n","import {\n distanceBetweenPointAndPoint,\n Path,\n PlaitBoard,\n Point,\n Transforms,\n getSelectedElements,\n depthFirstRecursion,\n createG,\n PlaitNode,\n PlaitPointerType,\n isMainPointer,\n CoreTransforms,\n getHitElementByPoint,\n toHostPoint,\n toViewBoxPoint,\n isDragging\n} from '@plait/core';\nimport { AbstractNode, getNonAbstractChildren } from '@plait/layouts';\nimport { MindElement, PlaitMind } from '../interfaces/element';\nimport { DetectResult } from '../interfaces/node';\nimport {\n deleteElementHandleAbstract,\n deleteElementsHandleRightNodeCount,\n getCorrespondingAbstract,\n getFirstLevelElement,\n getOverallAbstracts,\n getValidAbstractRefs,\n insertElementHandleAbstract,\n insertElementHandleRightNodeCount\n} from '../utils';\nimport { addActiveOnDragOrigin, isDropStandardRight, removeActiveOnDragOrigin, setMindDragging } from '../utils/dnd/common';\nimport { detectDropTarget, getPathByDropTarget } from '../utils/dnd/detector';\nimport { drawFakeDragNode, drawFakeDropNode } from '../utils/draw/node-dnd';\nimport { MindTransforms } from '../transforms';\nimport { adjustAbstractToNode } from '../utils/node/adjust-node';\n\nconst DRAG_MOVE_BUFFER = 5;\n\nexport const withNodeDnd = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n\n let activeElements: MindElement[] = [];\n let correspondingElements: MindElement[] = [];\n let startPoint: Point;\n let dragFakeNodeG: SVGGElement | undefined;\n let fakeDropNodeG: SVGGElement | undefined;\n let dropTarget: { target: MindElement; detectResult: DetectResult } | null = null;\n let targetPath: Path;\n\n board.pointerDown = (event: PointerEvent) => {\n if (\n PlaitBoard.isReadonly(board) ||\n PlaitBoard.hasBeenTextEditing(board) ||\n !PlaitBoard.isPointer(board, PlaitPointerType.selection) ||\n !isMainPointer(event)\n ) {\n pointerDown(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const selectedElements = getSelectedElements(board);\n const hitElement = getHitElementByPoint(board, point);\n if (\n hitElement &&\n MindElement.isMindElement(board, hitElement) &&\n !PlaitMind.isMind(hitElement) &&\n !AbstractNode.isAbstract(hitElement)\n ) {\n const targetElements = selectedElements.filter(\n element => MindElement.isMindElement(board, element) && !element.isRoot && !AbstractNode.isAbstract(element)\n ) as MindElement[];\n const isMultipleSelection = selectedElements.length > 0 && selectedElements.includes(hitElement);\n if (isMultipleSelection) {\n activeElements = targetElements;\n startPoint = point;\n } else {\n activeElements = [hitElement];\n startPoint = point;\n }\n }\n\n if (activeElements.length) {\n correspondingElements = getOverallAbstracts(board, activeElements);\n }\n\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!board.options.readonly && activeElements.length && startPoint) {\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance < DRAG_MOVE_BUFFER) {\n return;\n }\n\n setMindDragging(board, true);\n\n fakeDropNodeG?.remove();\n const detectPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n dropTarget = detectDropTarget(board, detectPoint, dropTarget, [...activeElements, ...correspondingElements]);\n if (dropTarget?.target) {\n targetPath = getPathByDropTarget(board, dropTarget);\n\n fakeDropNodeG = drawFakeDropNode(board, dropTarget, targetPath);\n PlaitBoard.getHost(board).appendChild(fakeDropNodeG);\n }\n\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n dragFakeNodeG?.remove();\n dragFakeNodeG = createG();\n [...activeElements, ...correspondingElements].forEach(element => {\n addActiveOnDragOrigin(element);\n });\n activeElements.forEach(element => {\n const nodeG = drawFakeDragNode(board, element, offsetX, offsetY);\n dragFakeNodeG?.appendChild(nodeG);\n });\n\n PlaitBoard.getHost(board).appendChild(dragFakeNodeG);\n return;\n }\n\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n const firstLevelElements = getFirstLevelElement(activeElements);\n if (!board.options.readonly && firstLevelElements.length) {\n firstLevelElements.push(...correspondingElements);\n if (isDragging(board)) {\n firstLevelElements.forEach(element => {\n removeActiveOnDragOrigin(element);\n });\n }\n if (dropTarget) {\n const targetPathRef = board.pathRef(targetPath);\n const targetPreviousPathRef = Path.hasPrevious(targetPath) && board.pathRef(Path.previous(targetPath));\n const targetElementPathRef = board.pathRef(PlaitBoard.findPath(board, dropTarget.target));\n let abstractRefs = getValidAbstractRefs(board, firstLevelElements);\n const normalElements = firstLevelElements\n .filter(element => !abstractRefs.some(refs => refs.abstract === element))\n .map(element => {\n if (AbstractNode.isAbstract(element)) {\n return adjustAbstractToNode(element);\n }\n return element;\n });\n\n const hasPreviousNode = targetPath[targetPath.length - 1] !== 0;\n if (hasPreviousNode) {\n const previousElement = PlaitNode.get(board, Path.previous(targetPath)) as MindElement;\n const correspondingAbstract = getCorrespondingAbstract(previousElement);\n const targetHasCorrespondAbstract =\n correspondingAbstract && correspondingAbstract.end !== targetPath[targetPath.length - 1] - 1;\n if (targetHasCorrespondAbstract) {\n const adjustedNode = abstractRefs.map(ref => {\n return adjustAbstractToNode(ref.abstract);\n });\n normalElements.push(...adjustedNode);\n abstractRefs = [];\n }\n }\n\n const effectedAbstracts = deleteElementHandleAbstract(board, firstLevelElements);\n insertElementHandleAbstract(board, targetPath, normalElements.length, false, effectedAbstracts);\n MindTransforms.setAbstractsByRefs(board, effectedAbstracts);\n\n let refs = deleteElementsHandleRightNodeCount(board, firstLevelElements);\n const parent = PlaitNode.get(board, Path.parent(targetPath)) as MindElement;\n const shouldChangeRoot = isDropStandardRight(parent, dropTarget);\n if (shouldChangeRoot && targetElementPathRef.current) {\n refs = insertElementHandleRightNodeCount(board, targetElementPathRef.current.slice(0, 1), normalElements.length, refs);\n }\n\n MindTransforms.setRightNodeCountByRefs(board, refs);\n CoreTransforms.removeElements(board, firstLevelElements);\n\n let insertPath = targetPathRef.current;\n const parentPath = Path.parent(targetPathRef.current || targetPath);\n if (!insertPath) {\n // When the insertion position and the selected node position are the same, the recorded previousPath is used\n const previousPath = targetPreviousPathRef && targetPreviousPathRef.unref();\n if (previousPath) {\n insertPath = Path.next(previousPath);\n } else {\n const parent = PlaitNode.get(board, parentPath);\n const children = getNonAbstractChildren(parent);\n insertPath = [...parentPath, children.length || 0];\n }\n }\n\n MindTransforms.insertNodes(board, normalElements, insertPath);\n\n if (abstractRefs.length) {\n MindTransforms.insertAbstractNodes(board, abstractRefs, normalElements, insertPath);\n }\n\n if (\n targetElementPathRef.current &&\n targetPathRef.current &&\n Path.isAncestor(targetElementPathRef.current, targetPathRef.current) &&\n dropTarget.target.isCollapsed\n ) {\n Transforms.setNode(board, { isCollapsed: false }, targetElementPathRef.current);\n }\n targetElementPathRef.unref();\n targetPathRef.unref();\n\n let setActiveElements: MindElement[] = [];\n depthFirstRecursion((board as unknown) as MindElement, node => {\n const isSelected = activeElements.some(element => element.id === node.id);\n if (isSelected) {\n setActiveElements.push(node);\n }\n });\n\n Transforms.addSelectionWithTemporaryElements(board, setActiveElements);\n }\n setMindDragging(board, false);\n activeElements = [];\n dragFakeNodeG?.remove();\n dragFakeNodeG = undefined;\n fakeDropNodeG?.remove();\n fakeDropNodeG = undefined;\n dropTarget = null;\n }\n globalPointerUp(event);\n };\n\n return board;\n};\n","import {\n BOARD_TO_HOST,\n PlaitBoard,\n PlaitElement,\n PlaitPlugin,\n Point,\n Transforms,\n getSelectedElements,\n isMainPointer,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { AbstractNode, LayoutNode, MindLayoutType, isHorizontalLayout, isStandardLayout } from '@plait/layouts';\nimport { MindElement } from '../interfaces';\nimport { findLocationLeftIndex, getHitAbstractHandle, getLocationScope, handleTouchedAbstract } from '../utils/abstract/resize';\nimport { separateChildren } from '../utils/abstract/common';\nimport { AbstractHandlePosition, AbstractResizeState, PlaitAbstractBoard } from './with-abstract-resize.board';\nimport { MindQueries } from '../queries';\nimport { PlaitCommonElementRef } from '@plait/common';\nimport { NodeActiveGenerator } from '../generators/node-active.generator';\n\nexport const withAbstract: PlaitPlugin = (board: PlaitBoard) => {\n const newBoard = board as PlaitBoard & PlaitAbstractBoard;\n\n const { pointerDown, pointerMove, pointerUp } = board;\n let activeAbstractElement: MindElement | undefined;\n let abstractHandlePosition: AbstractHandlePosition | undefined;\n let touchedAbstract: MindElement | undefined;\n let startPoint: Point | undefined;\n let newProperty: { end: number } | { start: number } | undefined;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!isMainPointer(event) || PlaitBoard.isReadonly(board)) {\n pointerDown(event);\n return;\n }\n\n const activeAbstractElements = getSelectedElements(board).filter(element => AbstractNode.isAbstract(element)) as MindElement[];\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n\n activeAbstractElement = activeAbstractElements.find(element => {\n abstractHandlePosition = getHitAbstractHandle(board, element as MindElement, point);\n return abstractHandlePosition;\n });\n\n if (activeAbstractElement) {\n if (newBoard?.onAbstractResize) {\n newBoard.onAbstractResize(AbstractResizeState.start);\n }\n startPoint = point;\n return;\n }\n\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n getSelectedElements(board);\n const host = BOARD_TO_HOST.get(board);\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n\n touchedAbstract = handleTouchedAbstract(board, touchedAbstract, endPoint);\n\n if (abstractHandlePosition && activeAbstractElement) {\n const nodeLayout = MindQueries.getCorrectLayoutByElement(board, activeAbstractElement as MindElement) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n const parentElement = MindElement.getParent(activeAbstractElement);\n\n let children = parentElement.children;\n\n const parentLayout = MindQueries.getLayoutByElement(parentElement);\n if (isStandardLayout(parentLayout)) {\n const rightNodeCount = parentElement.rightNodeCount!;\n const { leftChildren, rightChildren } = separateChildren(parentElement);\n if ((activeAbstractElement as MindElement).end! < rightNodeCount) {\n children = rightChildren;\n }\n if ((activeAbstractElement as MindElement).start! >= rightNodeCount) {\n children = leftChildren;\n }\n }\n\n if (newBoard?.onAbstractResize) {\n newBoard.onAbstractResize(AbstractResizeState.resizing);\n }\n\n const resizingLocation = isHorizontal ? endPoint[1] : endPoint[0];\n const parent = (MindElement.getNode(parentElement) as unknown) as LayoutNode;\n const scope = getLocationScope(board, abstractHandlePosition, children, activeAbstractElement, 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 = activeAbstractElement.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 const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(activeAbstractElement);\n const activeGenerator = ref.getGenerator<NodeActiveGenerator>(NodeActiveGenerator.key);\n activeGenerator.updateAbstractOutline(activeAbstractElement, abstractHandlePosition, location);\n }\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n startPoint = undefined;\n abstractHandlePosition = undefined;\n if (activeAbstractElement) {\n if (newBoard?.onAbstractResize) {\n newBoard.onAbstractResize(AbstractResizeState.end);\n }\n\n if (newProperty) {\n const path = PlaitBoard.findPath(board, activeAbstractElement);\n Transforms.setNode(board, newProperty, path);\n } else {\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(activeAbstractElement);\n const activeGenerator = ref.getGenerator<NodeActiveGenerator>(NodeActiveGenerator.key);\n activeGenerator.updateAbstractOutline(activeAbstractElement);\n }\n activeAbstractElement = undefined;\n }\n pointerUp(event);\n };\n return board;\n};\n","import { PlaitBoard, PlaitOptionsBoard } from '@plait/core';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { WithMindOptions } from '../interfaces/options';\nimport { WithMindPluginKey } from '../constants/default';\n\nexport const withMindExtend = (board: PlaitBoard) => {\n const newBoard = board as PlaitBoard & PlaitMindBoard;\n\n (board as PlaitOptionsBoard).setPluginOptions<WithMindOptions>(WithMindPluginKey, { spaceBetweenEmojis: 4, emojiPadding: 0 });\n\n return newBoard;\n};\n","import {\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n createG,\n getSelectedElements,\n throttleRAF,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { MindPointerType } from '../interfaces/pointer';\nimport { getRectangleByElement, getTopicRectangleByElement } from '../utils';\nimport { drawRoundRectangleByElement } from '../utils/draw/node-shape';\nimport { createEmptyMind } from '../utils/node/create-node';\nimport { MindElement } from '../interfaces';\nimport { BoardCreationMode, TextManage, isDndMode, isDrawingMode, setCreationMode } from '@plait/common';\nimport { MindTransforms } from '../transforms';\n\nconst DefaultHotkey = 'm';\n\nexport interface FakeCreateNodeRef {\n g: SVGGElement;\n nodeG: SVGGElement;\n textManage: TextManage;\n}\n\nexport const withCreateMind = (board: PlaitBoard) => {\n const newBoard = board as PlaitBoard & PlaitMindBoard;\n const { keyDown, pointerDown, pointerMove, pointerUp } = board;\n let fakeCreateNodeRef: FakeCreateNodeRef | null = null;\n let emptyMind: MindElement | null = null;\n\n newBoard.pointerDown = (event: PointerEvent) => {\n const isMindPointer = PlaitBoard.isPointer<MindPointerType | PlaitPointerType>(board, MindPointerType.mind);\n if (!PlaitBoard.isReadonly(board) && isDrawingMode(board) && isMindPointer) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const emptyMind = createEmptyMind(newBoard, point);\n MindTransforms.insertMind(board as PlaitMindBoard, emptyMind);\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n return;\n }\n pointerDown(event);\n };\n\n newBoard.pointerMove = (event: PointerEvent) => {\n if (PlaitBoard.isReadonly(board)) {\n pointerMove(event);\n return;\n }\n const isMindPointer = PlaitBoard.isPointer<MindPointerType | PlaitPointerType>(board, MindPointerType.mind);\n if (isDndMode(board) && isMindPointer) {\n throttleRAF(board, 'with-mind-create', () => {\n let movingPoint = PlaitBoard.getMovingPointInBoard(board);\n\n if (movingPoint) {\n movingPoint = toViewBoxPoint(newBoard, toHostPoint(board, movingPoint[0], movingPoint[1]));\n emptyMind = createEmptyMind(newBoard, movingPoint);\n const nodeRectangle = getRectangleByElement(newBoard, emptyMind);\n const nodeG = drawRoundRectangleByElement(board, nodeRectangle, emptyMind);\n const topicRectangle = getTopicRectangleByElement(newBoard, nodeRectangle, emptyMind);\n if (!fakeCreateNodeRef) {\n const textManage = new TextManage(board, {\n getRectangle: () => {\n return topicRectangle;\n }\n });\n textManage.draw(emptyMind!.data.topic);\n fakeCreateNodeRef = {\n g: createG(),\n nodeG,\n textManage\n };\n fakeCreateNodeRef.g.classList.add('root');\n fakeCreateNodeRef.g.setAttribute('plait-mind-temporary', 'true');\n PlaitBoard.getHost(board).append(fakeCreateNodeRef.g);\n fakeCreateNodeRef.g.append(...[fakeCreateNodeRef.nodeG, textManage.g]);\n } else {\n fakeCreateNodeRef.textManage.updateRectangle(topicRectangle);\n fakeCreateNodeRef.nodeG.remove();\n fakeCreateNodeRef.nodeG = nodeG;\n fakeCreateNodeRef.g.append(nodeG);\n fakeCreateNodeRef.g.append(fakeCreateNodeRef.textManage.g);\n }\n }\n });\n } else {\n destroy();\n }\n pointerMove(event);\n };\n\n newBoard.pointerUp = (event: PointerEvent) => {\n if (emptyMind) {\n MindTransforms.insertMind(board as PlaitMindBoard, emptyMind);\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n emptyMind = null;\n destroy();\n return;\n }\n pointerUp(event);\n };\n\n board.keyDown = (event: KeyboardEvent) => {\n if (PlaitBoard.isReadonly(board) || getSelectedElements(board).length > 0) {\n keyDown(event);\n return;\n }\n if (event.key === DefaultHotkey && !PlaitBoard.isPointer(board, MindPointerType.mind)) {\n BoardTransforms.updatePointerType(board, MindPointerType.mind);\n setCreationMode(board, BoardCreationMode.drawing);\n event.preventDefault();\n return;\n }\n keyDown(event);\n };\n\n function destroy() {\n if (fakeCreateNodeRef) {\n fakeCreateNodeRef.textManage.destroy();\n fakeCreateNodeRef.g.remove();\n fakeCreateNodeRef = null;\n }\n }\n\n return newBoard;\n};\n","import { PlaitBoard, Transforms, getSelectedElements } from '@plait/core';\nimport { MindElement, PlaitMind } from '../interfaces';\nimport { AbstractNode } from '@plait/layouts';\nimport { MindTransforms } from '../transforms';\nimport { editTopic } from '../utils/node/common';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { isSpaceHotkey, isExpandHotkey, isTabHotkey, isEnterHotkey, isVirtualKey, isDelete, getFirstTextManage } from '@plait/common';\nimport { isHotkey } from 'is-hotkey';\n\nexport const withMindHotkey = (baseBoard: PlaitBoard) => {\n const board = baseBoard as PlaitBoard & PlaitMindBoard;\n const { keyDown, globalKeyDown } = board;\n\n board.keyDown = (event: KeyboardEvent) => {\n const selectedElements = getSelectedElements(board);\n const isSingleSelection = selectedElements.length === 1;\n const isSingleMindElement = selectedElements.length === 1 && MindElement.isMindElement(board, selectedElements[0]);\n const targetElement = selectedElements[0] as MindElement;\n\n if (isExpandHotkey(event) && isSingleMindElement && !PlaitMind.isMind(targetElement)) {\n if (targetElement.children && targetElement.children.length > 0) {\n Transforms.setNode(\n board,\n { isCollapsed: targetElement.isCollapsed ? false : true },\n PlaitBoard.findPath(board, targetElement)\n );\n return;\n }\n }\n\n if (!PlaitBoard.isReadonly(board)) {\n if (isTabHotkey(event) && isSingleMindElement) {\n event.preventDefault();\n MindTransforms.insertChildNode(board, targetElement);\n return;\n }\n\n if (\n isEnterHotkey(event) &&\n isSingleMindElement &&\n !PlaitMind.isMind(targetElement) &&\n !AbstractNode.isAbstract(targetElement)\n ) {\n MindTransforms.insertSiblingNode(board, targetElement);\n return;\n }\n\n if (\n !isVirtualKey(event) &&\n !isDelete(event) &&\n !isSpaceHotkey(event) &&\n isSingleSelection &&\n MindElement.isMindElement(board, targetElement)\n ) {\n event.preventDefault();\n editTopic(targetElement);\n return;\n }\n }\n\n keyDown(event);\n };\n\n board.globalKeyDown = (event: KeyboardEvent) => {\n if (PlaitBoard.isFocus(board) && PlaitBoard.hasBeenTextEditing(board)) {\n if (isHotkey('mod+z', event)) {\n const { history } = board;\n const { undos } = history;\n const previousOp = undos.length > 0 ? undos[undos.length - 1][0] : undefined;\n if (previousOp && previousOp.type === 'insert_node' && MindElement.isMindElement(board, previousOp.node) && getFirstTextManage(previousOp.node).isEditing) {\n board.undo();\n }\n }\n }\n globalKeyDown(event);\n };\n\n return board;\n};\n","import { PlaitBoard, PlaitElement, depthFirstRecursion, getIsRecursionFunc, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { isHitMindElement } from '../position/node';\n\nexport interface NodeExtendHoveredRef {\n element: MindElement;\n}\n\nexport const pointerMoveHandle = (board: PlaitBoard, event: PointerEvent, nodeExtendHoveredRef: NodeExtendHoveredRef | null) => {\n let target: MindElement | null = null;\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n depthFirstRecursion(\n (board as unknown) as MindElement,\n element => {\n if (target) {\n return;\n }\n if (!MindElement.isMindElement(board, element)) {\n return;\n }\n const isHitElement = isHitMindElement(board, point, element);\n if (isHitElement) {\n target = element;\n }\n },\n getIsRecursionFunc(board),\n true\n );\n\n if (nodeExtendHoveredRef && target && nodeExtendHoveredRef.element === target) {\n return nodeExtendHoveredRef;\n }\n\n if (nodeExtendHoveredRef) {\n removeHovered(nodeExtendHoveredRef.element);\n }\n\n if (target) {\n addHovered(target);\n if (nodeExtendHoveredRef) {\n nodeExtendHoveredRef.element = target;\n } else {\n nodeExtendHoveredRef = { element: target };\n }\n } else {\n nodeExtendHoveredRef = null;\n }\n return nodeExtendHoveredRef;\n};\n\nexport const pointerLeaveHandle = (board: PlaitBoard, event: PointerEvent, nodeExtendHoveredRef: NodeExtendHoveredRef | null) => {\n if (nodeExtendHoveredRef) {\n removeHovered(nodeExtendHoveredRef.element);\n }\n};\n\nexport const addHovered = (element: MindElement) => {\n PlaitElement.getElementG(element).classList.add('hovered');\n};\n\nexport const removeHovered = (element: MindElement) => {\n PlaitElement.getElementG(element)?.classList?.remove('hovered');\n};\n","import { PlaitBoard, PlaitElement, throttleRAF } from '@plait/core';\nimport { NodeExtendHoveredRef, pointerLeaveHandle, pointerMoveHandle } from '../utils/node-hover/extend';\n\nexport const withNodeHoverHitTest = (board: PlaitBoard) => {\n const { pointerMove, pointerLeave } = board;\n let nodeExtendHoveredRef: NodeExtendHoveredRef | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n throttleRAF(board, 'with-mind-node-hover-hit-test', () => {\n // element has been deleted\n if (nodeExtendHoveredRef && !PlaitElement.hasMounted(nodeExtendHoveredRef.element)) {\n nodeExtendHoveredRef = null;\n }\n nodeExtendHoveredRef = pointerMoveHandle(board, event, nodeExtendHoveredRef);\n });\n pointerMove(event);\n };\n\n board.pointerLeave = (event: PointerEvent) => {\n pointerLeaveHandle(board, event, nodeExtendHoveredRef);\n nodeExtendHoveredRef = null;\n pointerLeave(event);\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n isMainPointer,\n PlaitOptionsBoard,\n hotkeys,\n PlaitPointerType,\n addSelectedElement,\n Point,\n getSelectedElements,\n RectangleClient,\n getHitElementByPoint,\n temporaryDisableSelection,\n WritableClipboardType,\n toHostPoint,\n toViewBoxPoint,\n WritableClipboardContext,\n createClipboardContext,\n ClipboardData,\n isContextmenu,\n PlaitElement,\n WritableClipboardOperationType\n} from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { ImageData } from '../interfaces/element-data';\nimport { addImageFocus, removeImageFocus } from '../utils/node/image';\nimport { isHitImage } from '../utils';\nimport { MindTransforms } from '../transforms';\nimport { acceptImageTypes, buildImage, getElementOfFocusedImage } from '@plait/common';\nimport { DEFAULT_MIND_IMAGE_WIDTH } from '../constants';\n\nexport const withNodeImage = (board: PlaitBoard) => {\n const { keyDown, pointerUp, globalPointerUp, buildFragment, insertFragment, deleteFragment } = board;\n\n board.pointerUp = (event: PointerEvent) => {\n const elementOfFocusedImage = getElementOfFocusedImage(board);\n if (\n elementOfFocusedImage &&\n MindElement.isMindElement(board, elementOfFocusedImage) &&\n !isContextmenu(event) &&\n (PlaitBoard.isReadonly(board) || !isMainPointer(event) || !PlaitBoard.isPointer(board, PlaitPointerType.selection))\n ) {\n removeImageFocus(board, elementOfFocusedImage as MindElement<ImageData>);\n pointerUp(event);\n return;\n }\n if (PlaitBoard.isReadonly(board)) {\n pointerUp(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const hitElement = getHitElementByPoint(board, point);\n const isHitImageResult =\n hitElement &&\n MindElement.isMindElement(board, hitElement) &&\n MindElement.hasImage(hitElement) &&\n isHitImage(board, hitElement as MindElement<ImageData>, point);\n if (isHitImageResult && elementOfFocusedImage && hitElement === elementOfFocusedImage) {\n temporaryDisableSelection(board as PlaitOptionsBoard);\n pointerUp(event);\n return;\n }\n if (elementOfFocusedImage && MindElement.isMindElement(board, elementOfFocusedImage)) {\n removeImageFocus(board, elementOfFocusedImage as MindElement<ImageData>);\n }\n if (isHitImageResult && hitElement) {\n temporaryDisableSelection(board as PlaitOptionsBoard);\n addImageFocus(board, hitElement as MindElement<ImageData>);\n }\n pointerUp(event);\n };\n\n board.keyDown = (event: KeyboardEvent) => {\n const selectedImageElement = getElementOfFocusedImage(board);\n if (!PlaitBoard.isReadonly(board) && selectedImageElement && (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event))) {\n addSelectedElement(board, selectedImageElement);\n MindTransforms.removeImage(board, selectedImageElement as MindElement<ImageData>);\n return;\n }\n keyDown(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (PlaitBoard.isFocus(board)) {\n const isInBoard = event.target instanceof Node && PlaitBoard.getBoardContainer(board).contains(event.target);\n const selectedImageElement = getElementOfFocusedImage(board);\n // Clear image selection when mouse board outside area\n if (selectedImageElement && MindElement.isMindElement(board, selectedImageElement) && !isInBoard) {\n removeImageFocus(board, selectedImageElement as MindElement<ImageData>);\n }\n }\n globalPointerUp(event);\n };\n\n board.buildFragment = (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => {\n const selectedImageElement = getElementOfFocusedImage(board) as MindElement<ImageData>;\n if (selectedImageElement) {\n clipboardContext = createClipboardContext(WritableClipboardType.medias, [selectedImageElement.data.image], '');\n }\n return buildFragment(clipboardContext, rectangle, operationType, originData);\n };\n\n board.deleteFragment = (elements: PlaitElement[]) => {\n const selectedImageElement = getElementOfFocusedImage(board);\n if (selectedImageElement) {\n MindTransforms.removeImage(board, selectedImageElement as MindElement<ImageData>);\n }\n deleteFragment(elements);\n };\n\n board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n const selectedElements = getSelectedElements(board);\n const isSelectedImage = !!getElementOfFocusedImage(board);\n const isSingleSelection = selectedElements.length === 1 && MindElement.isMindElement(board, selectedElements[0]);\n if (isSelectedImage || isSingleSelection) {\n if (clipboardData?.files?.length) {\n const acceptImageArray = acceptImageTypes.map(type => 'image/' + type);\n const selectedElement = (selectedElements[0] || getElementOfFocusedImage(board)) as MindElement;\n if (acceptImageArray.includes(clipboardData.files[0].type)) {\n const imageFile = clipboardData.files[0];\n buildImage(board, imageFile, DEFAULT_MIND_IMAGE_WIDTH, imageItem => {\n MindTransforms.setImage(board, selectedElement, imageItem);\n });\n return;\n }\n }\n if (clipboardData?.medias?.length) {\n const selectedElement = (selectedElements[0] || getElementOfFocusedImage(board)) as MindElement;\n MindTransforms.setImage(board, selectedElement, clipboardData.medias[0]);\n return;\n }\n }\n insertFragment(clipboardData, targetPoint, operationType);\n };\n\n return board;\n};\n","import {\n Path,\n PlaitBoard,\n PlaitNode,\n Point,\n RectangleClient,\n ResizeCursorClass,\n distanceBetweenPointAndRectangle,\n getSelectedElements,\n isDragging\n} from '@plait/core';\nimport { MindElement } from '../interfaces/element';\nimport { getRectangleByNode } from '../utils/position/node';\nimport { NodeSpace } from '../utils/space/node-space';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { MindTransforms } from '../transforms';\nimport { EXTEND_OFFSET } from '../constants/default';\nimport { ResizeRef, ResizeState, TextManage, WithResizeOptions, getFirstTextManage, withResize } from '@plait/common';\n\ninterface TargetElementRef {\n minWidth: number;\n currentWidth: number;\n path: Path;\n textManage: TextManage;\n}\n\nexport const withNodeResize = (board: PlaitBoard) => {\n let targetElementRef: TargetElementRef | null = null;\n const options: WithResizeOptions<MindElement, null> = {\n key: 'mind-node',\n canResize: () => {\n return !isDragging(board);\n },\n hitTest: (point: Point) => {\n const newTargetElement = getSelectedTarget(board as PlaitMindBoard, point);\n if (newTargetElement) {\n return {\n element: newTargetElement,\n handle: null,\n cursorClass: ResizeCursorClass.ew\n };\n }\n return null;\n },\n beforeResize: (resizeRef: ResizeRef<MindElement, null>) => {\n targetElementRef = {\n minWidth: NodeSpace.getNodeResizableMinWidth(board as PlaitMindBoard, resizeRef.element),\n currentWidth: NodeSpace.getNodeDynamicWidth(board as PlaitMindBoard, resizeRef.element),\n path: PlaitBoard.findPath(board, resizeRef.element),\n textManage: getFirstTextManage(resizeRef.element)\n };\n },\n onResize: (resizeRef: ResizeRef<MindElement, null>, resizeState: ResizeState) => {\n let resizedWidth = targetElementRef!.currentWidth + Point.getOffsetX(resizeState.startPoint, resizeState.endPoint);\n if (resizedWidth <= targetElementRef!.minWidth) {\n resizedWidth = targetElementRef!.minWidth;\n }\n const newTarget = PlaitNode.get<MindElement>(board, targetElementRef!.path);\n if (newTarget && NodeSpace.getNodeTopicMinWidth(board as PlaitMindBoard, newTarget) !== resizedWidth) {\n targetElementRef!.textManage.updateRectangleWidth(resizedWidth);\n const { height } = targetElementRef!.textManage.getSize(undefined, resizedWidth);\n MindTransforms.setNodeManualWidth(board as PlaitMindBoard, newTarget, resizedWidth, height);\n }\n },\n afterResize: (resizeRef: ResizeRef<MindElement, null>) => {\n targetElementRef = null;\n }\n };\n withResize<MindElement, null>(board, options);\n return board;\n};\n\nexport const getSelectedTarget = (board: PlaitMindBoard, point: Point) => {\n const selectedElements = getSelectedElements(board).filter(value => MindElement.isMindElement(board, value)) as MindElement[];\n if (selectedElements.length > 0) {\n const target = selectedElements.find(value => {\n const rectangle = getResizeActiveRectangle(board, value);\n return distanceBetweenPointAndRectangle(point[0], point[1], rectangle) <= 0;\n });\n return target ? target : null;\n }\n return null;\n};\n\nexport const getResizeActiveRectangle = (board: PlaitBoard, element: MindElement): RectangleClient => {\n const node = MindElement.getNode(element);\n const rectangle = getRectangleByNode(node);\n return { x: rectangle.x + rectangle.width - EXTEND_OFFSET, y: rectangle.y, width: EXTEND_OFFSET * 2, height: rectangle.height };\n};\n","import { PlaitBoard, Point, PlaitNode, Path } from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { ImageData } from '../interfaces/element-data';\nimport { getHitImageResizeHandleDirection } from '../utils';\nimport {\n ResizeHandle,\n ResizeRef,\n ResizeState,\n WithResizeOptions,\n addElementOfFocusedImage,\n getElementOfFocusedImage,\n withResize\n} from '@plait/common';\nimport { MindTransforms } from '../transforms';\n\nexport const withNodeImageResize = (board: PlaitBoard) => {\n const options: WithResizeOptions<MindElement<ImageData>> = {\n key: 'mind-node-image',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n const elementOfFocusedImage = getElementOfFocusedImage(board);\n const selectedMindElement =\n elementOfFocusedImage && MindElement.isMindElement(board, elementOfFocusedImage) ? elementOfFocusedImage : undefined;\n if (selectedMindElement) {\n const result = getHitImageResizeHandleDirection(board, selectedMindElement as MindElement<ImageData>, point);\n if (result) {\n return {\n element: selectedMindElement as MindElement<ImageData>,\n handle: result.handle as ResizeHandle,\n cursorClass: result.cursorClass\n };\n }\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<MindElement<ImageData>>, resizeState: ResizeState) => {\n const offsetX = Point.getOffsetX(resizeState.startPoint, resizeState.endPoint);\n const originWidth = resizeRef.element.data.image.width;\n const originHeight = resizeRef.element.data.image.height;\n const path = resizeRef.path as Path;\n let width = originWidth + offsetX;\n if (width <= 100) {\n width = 100;\n }\n const ratio = originWidth / originHeight;\n const height = width / ratio;\n const imageItem = { ...resizeRef.element.data.image, width, height };\n MindTransforms.setImage(board, PlaitNode.get(board, path), imageItem);\n addElementOfFocusedImage(board, PlaitNode.get(board, path));\n }\n };\n\n withResize<MindElement<ImageData>>(board, options);\n\n return board;\n};\n","import { getSelectedElements, Path, PlaitBoard, PlaitElement, Point, Transforms, WritableClipboardOperationType } from '@plait/core';\nimport { MindElement, PlaitMind } from '../interfaces';\nimport { copyNewNode } from './mind';\nimport { getRectangleByNode } from './position/node';\nimport { AbstractNode, getNonAbstractChildren } from '@plait/layouts';\nimport { getRelativeStartEndByAbstractRef, getOverallAbstracts, getValidAbstractRefs } from './abstract/common';\nimport { createMindElement } from './node/create-node';\nimport { adjustAbstractToNode, adjustNodeToRoot, adjustRootToNode } from './node/adjust-node';\nimport { Element } from 'slate';\nimport {\n BRANCH_FONT_FAMILY,\n DEFAULT_FONT_FAMILY,\n ROOT_TOPIC_FONT_SIZE,\n TOPIC_DEFAULT_MAX_WORD_COUNT,\n TOPIC_FONT_SIZE\n} from '../constants/node-topic-style';\nimport { findNewChildNodePath } from './path';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\nimport { getFontSizeBySlateElement } from './space/node-space';\nimport { buildText, measureElement, ParagraphElement } from '@plait/common';\n\nexport const buildClipboardData = (board: PlaitBoard, selectedElements: MindElement[], startPoint: Point) => {\n let result: MindElement[] = [];\n\n // get overall abstract\n const overallAbstracts = getOverallAbstracts(board, selectedElements) as MindElement[];\n // get valid abstract refs\n const validAbstractRefs = getValidAbstractRefs(board, [...selectedElements, ...overallAbstracts]);\n\n // keep correct order\n const newSelectedElements = selectedElements.filter(value => !validAbstractRefs.find(ref => ref.abstract === value));\n newSelectedElements.push(...validAbstractRefs.map(value => value.abstract));\n\n const selectedMindNodes = newSelectedElements.map(value => MindElement.getNode(value));\n newSelectedElements.forEach((element, index) => {\n // handle relative location\n const nodeRectangle = getRectangleByNode(selectedMindNodes[index]);\n const points = [[nodeRectangle.x - startPoint[0], nodeRectangle.y - startPoint[1]]] as Point[];\n\n // handle invalid abstract\n const abstractRef = validAbstractRefs.find(ref => ref.abstract === element);\n if (AbstractNode.isAbstract(element) && abstractRef) {\n const { start, end } = getRelativeStartEndByAbstractRef(abstractRef, newSelectedElements);\n result.push({\n ...element,\n points,\n start,\n end\n });\n } else {\n if (AbstractNode.isAbstract(element)) {\n let newElement = { ...element, points } as MindElement;\n delete newElement.start;\n delete newElement.end;\n result.push(newElement);\n } else {\n result.push({\n ...element,\n points: points\n });\n }\n }\n });\n return result;\n};\n\nexport const insertClipboardData = (\n board: PlaitMindBoard,\n elements: PlaitElement[],\n targetPoint: Point,\n operationType?: WritableClipboardOperationType\n) => {\n let newElement: MindElement, path: Path;\n const selectedElements = getSelectedElements(board);\n let newELements: PlaitElement[] = [];\n\n const hasTargetParent = selectedElements.length === 1;\n const targetParent = selectedElements[0];\n const targetParentPath = targetParent && PlaitBoard.findPath(board, targetParent);\n const nonAbstractChildrenLength = targetParent && getNonAbstractChildren(targetParent).length;\n\n elements.forEach((item: PlaitElement, index: number) => {\n newElement = copyNewNode(item as MindElement);\n if (hasTargetParent && operationType !== WritableClipboardOperationType.duplicate) {\n if (item.isRoot) {\n newElement = adjustRootToNode(board, newElement);\n const { width, height } = getTopicSizeByElement(newElement, targetParent as MindElement);\n newElement.width = width;\n newElement.height = height;\n }\n // handle abstract start and end\n if (AbstractNode.isAbstract(newElement)) {\n newElement.start = newElement.start + nonAbstractChildrenLength;\n newElement.end = newElement.end + nonAbstractChildrenLength;\n }\n path = [...targetParentPath, nonAbstractChildrenLength + 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 (AbstractNode.isAbstract(item)) {\n newElement = adjustAbstractToNode(newElement);\n }\n if (!item.isRoot) {\n newElement = adjustNodeToRoot(board, newElement);\n const { width, height } = getTopicSizeByElement(newElement);\n newElement.width = width;\n newElement.height = height;\n }\n path = [board.children.length];\n }\n newELements.push(newElement);\n Transforms.insertNode(board, newElement, path);\n return;\n });\n Transforms.addSelectionWithTemporaryElements(board, newELements);\n};\n\nexport const insertClipboardText = (board: PlaitMindBoard, targetParent: PlaitElement, text: string | Element) => {\n const { width, height } = getTopicSize(false, PlaitMind.isMind(targetParent), buildText(text));\n const newElement = createMindElement(text, Math.max(width, getFontSizeBySlateElement(text)), height, {});\n Transforms.insertNode(board, newElement, findNewChildNodePath(board, targetParent));\n Transforms.addSelectionWithTemporaryElements(board, [newElement]);\n};\n\nexport const getTopicSizeByElement = (element: MindElement, parentElement?: MindElement) => {\n return getTopicSize(\n PlaitMind.isMind(element),\n (parentElement && PlaitMind.isMind(parentElement)) || false,\n element.data.topic,\n element.manualWidth\n );\n};\n\nexport const getTopicSize = (isRoot: boolean, isBranch: boolean, topic: ParagraphElement, manualWidth?: number) => {\n let fontFamily = DEFAULT_FONT_FAMILY;\n let fontSize = TOPIC_FONT_SIZE;\n if (isRoot) {\n fontFamily = BRANCH_FONT_FAMILY;\n fontSize = ROOT_TOPIC_FONT_SIZE;\n } else if (isBranch) {\n fontFamily = BRANCH_FONT_FAMILY;\n }\n const maxWidth = fontSize * TOPIC_DEFAULT_MAX_WORD_COUNT;\n return measureElement(\n topic,\n { fontSize, fontFamily },\n manualWidth ? manualWidth : maxWidth\n );\n};\n","import {\n ClipboardData,\n Path,\n PlaitBoard,\n PlaitElement,\n PlaitNode,\n Point,\n RectangleClient,\n WritableClipboardContext,\n WritableClipboardOperationType,\n WritableClipboardType,\n addOrCreateClipboardContext,\n addSelectedElement\n} from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { AbstractNode } from '@plait/layouts';\nimport { getFirstLevelElement } from '../utils/mind';\nimport { deleteElementsHandleRightNodeCount } from '../utils/node/right-node-count';\nimport { MindTransforms } from '../transforms';\nimport { deleteElementHandleAbstract } from '../utils/abstract/common';\nimport { getSelectedMindElements } from '../utils/node/common';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { buildClipboardData, insertClipboardData, insertClipboardText } from '../utils/clipboard';\nimport { buildText, getElementsText } from '@plait/common';\n\nexport const withMindFragment = (baseBoard: PlaitBoard) => {\n const board = baseBoard as PlaitBoard & PlaitMindBoard;\n let firstLevelElements: MindElement[] | null;\n const { getDeletedFragment, insertFragment, buildFragment, deleteFragment } = board;\n\n board.getDeletedFragment = (data: PlaitElement[]) => {\n const targetMindElements = getSelectedMindElements(board);\n if (targetMindElements.length) {\n firstLevelElements = getFirstLevelElement(targetMindElements).reverse();\n const abstractRefs = deleteElementHandleAbstract(board, firstLevelElements);\n MindTransforms.setAbstractsByRefs(board, abstractRefs);\n const refs = deleteElementsHandleRightNodeCount(board, targetMindElements);\n MindTransforms.setRightNodeCountByRefs(board, refs);\n const deletableElements = getFirstLevelElement(targetMindElements);\n data.push(...deletableElements);\n }\n return getDeletedFragment(data);\n };\n\n board.deleteFragment = (elements: PlaitElement[]) => {\n deleteFragment(elements);\n if (firstLevelElements) {\n const nextSelected = getNextSelectedElement(board, firstLevelElements);\n if (nextSelected) {\n addSelectedElement(board, nextSelected);\n }\n firstLevelElements = null;\n }\n };\n\n board.buildFragment = (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => {\n const targetMindElements = getSelectedMindElements(board, originData);\n const firstLevelElements = getFirstLevelElement(targetMindElements);\n if (firstLevelElements.length) {\n const elements = buildClipboardData(board, firstLevelElements, rectangle ? [rectangle.x, rectangle.y] : [0, 0]);\n const text = getElementsText(targetMindElements);\n const addition: WritableClipboardContext = {\n text,\n type: WritableClipboardType.elements,\n elements: elements\n };\n clipboardContext = addOrCreateClipboardContext(clipboardContext, addition);\n }\n return buildFragment(clipboardContext, rectangle, operationType, originData);\n };\n\n board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n if (clipboardData?.elements?.length) {\n const mindElements = clipboardData.elements?.filter(value => MindElement.isMindElement(board, value));\n if (mindElements && mindElements.length > 0) {\n insertClipboardData(board, mindElements, targetPoint, operationType);\n }\n }\n if (clipboardData?.text) {\n const mindElements = getSelectedMindElements(board);\n if (mindElements.length === 1) {\n insertClipboardText(board, mindElements[0], buildText(clipboardData.text));\n return;\n }\n }\n\n insertFragment(clipboardData, targetPoint, operationType);\n };\n\n return board;\n};\n\nexport const getNextSelectedElement = (board: PlaitBoard, firstLevelElements: MindElement[]) => {\n let activeElement: MindElement | undefined;\n const firstLevelElement = firstLevelElements[0];\n const firstLevelElementPath = PlaitBoard.findPath(board, firstLevelElement);\n\n let nextSelectedPath = firstLevelElementPath;\n if (Path.hasPrevious(firstLevelElementPath)) {\n nextSelectedPath = Path.previous(firstLevelElementPath);\n }\n\n if (AbstractNode.isAbstract(firstLevelElement)) {\n const parent = MindElement.getParent(firstLevelElement);\n if (!firstLevelElements.includes(parent.children[firstLevelElement.start])) {\n activeElement = parent.children[firstLevelElement.start];\n }\n }\n\n try {\n if (!activeElement) {\n activeElement = PlaitNode.get<MindElement>(board, nextSelectedPath);\n }\n } catch (error) {}\n\n const firstElement = firstLevelElements[0];\n const firstElementParent = MindElement.findParent(firstElement);\n const hasSameParent = firstLevelElements.every(element => {\n return MindElement.findParent(element) === firstElementParent;\n });\n if (firstElementParent && hasSameParent && !activeElement) {\n activeElement = firstElementParent;\n }\n return activeElement;\n};\n","import { PlaitBoard } from '@plait/core';\nimport { RenderComponentRef } from '@plait/common';\nimport { EmojiData, EmojiItem } from '../interfaces/element-data';\nimport { MindElement } from '../interfaces/element';\n\nexport interface PlaitMindEmojiBoard {\n renderEmoji: (container: Element | DocumentFragment, props: EmojiProps) => EmojiComponentRef;\n}\n\nexport const withEmoji = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & PlaitMindEmojiBoard;\n\n newBoard.renderEmoji = (container: Element | DocumentFragment, props: EmojiProps) => {\n throw new Error('No implementation for renderEmoji method.');\n };\n return newBoard;\n};\n\nexport type EmojiComponentRef = RenderComponentRef<EmojiProps>;\n\nexport interface EmojiProps {\n board: PlaitBoard;\n emojiItem: EmojiItem;\n element: MindElement<EmojiData>;\n fontSize: number;\n}\n","import {\n PlaitBoard,\n PlaitPluginElementContext,\n RectangleClient,\n Transforms,\n Selection,\n depthFirstRecursion,\n PlaitElement,\n getIsRecursionFunc,\n Point,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { MindElement, PlaitMind } from '../interfaces';\nimport { PlaitMindComponent } from '../mind.component';\nimport { MindNodeComponent } from '../mind-node.component';\nimport { getRectangleByNode, isHitMindElement } from '../utils/position/node';\nimport { withNodeDnd } from './with-node-dnd';\nimport { editTopic } from '../utils/node/common';\nimport { withAbstract } from './with-abstract-resize';\nimport { withMindExtend } from './with-mind-extend';\nimport { withCreateMind } from './with-mind-create';\nimport { withMindHotkey } from './with-mind-hotkey';\nimport { withNodeHoverHitTest } from './with-node-hover-hit-test';\nimport { withNodeImage } from './with-node-image';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { withNodeResize } from './with-node-resize';\nimport { withNodeImageResize } from './with-node-image-resize';\nimport { withMindFragment } from './with-mind-fragment';\nimport { withEmoji } from '../emoji/with-emoji';\n\nexport const withMind = (baseBoard: PlaitBoard) => {\n const board = baseBoard as PlaitBoard & PlaitMindBoard;\n const {\n drawElement,\n dblClick,\n isRectangleHit,\n isHit,\n getRectangle,\n isMovable,\n isRecursion,\n isAlign,\n isImageBindingAllowed,\n canAddToGroup,\n canSetZIndex,\n isExpanded,\n getOneHitElement\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.applyTheme = (element: PlaitElement) => {\n const mindElement = element as MindElement;\n const shouldClearProperty =\n !PlaitBoard.isBoard(element) && (mindElement?.branchColor || mindElement?.fill || mindElement?.strokeColor);\n if (PlaitMind.isMind(element) && shouldClearProperty) {\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, { fill: null, strokeColor: null, branchColor: null }, path);\n }\n };\n\n board.getRectangle = element => {\n if (MindElement.isMindElement(board, element)) {\n if (!PlaitElement.hasMounted(element)) {\n console.error('mind element has not been mounted');\n }\n return getRectangleByNode(MindElement.getNode(element));\n }\n return getRectangle(element);\n };\n\n board.canAddToGroup = (element: PlaitElement) => {\n if (MindElement.isMindElement(board, element) && !element.isRoot) {\n return false;\n }\n return canAddToGroup(element);\n };\n\n board.canSetZIndex = (element: PlaitElement) => {\n if (MindElement.isMindElement(board, element) && !element.isRoot) {\n return false;\n }\n return canSetZIndex(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.isRectangleHit = (element, selection: Selection) => {\n if (MindElement.isMindElement(board, element)) {\n const client = getRectangleByNode(MindElement.getNode(element));\n const isHit = RectangleClient.isHit(RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]), client);\n return isHit;\n }\n return isRectangleHit(element, selection);\n };\n\n board.isHit = (element, point: Point) => {\n if (MindElement.isMindElement(board, element)) {\n const client = getRectangleByNode(MindElement.getNode(element));\n const isHit = RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), client);\n return isHit;\n }\n return isHit(element, point);\n };\n\n board.getOneHitElement = elements => {\n const isAllMindElements = elements.every(item => MindElement.isMindElement(board, item));\n if (isAllMindElements) {\n return elements[0];\n }\n return getOneHitElement(elements);\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.isImageBindingAllowed = element => {\n if (MindElement.isMindElement(board, element)) {\n return true;\n }\n return isImageBindingAllowed(element);\n };\n\n board.isAlign = (element: PlaitElement) => {\n if (PlaitMind.isMind(element) && element.isRoot) {\n return true;\n }\n return isAlign(element);\n };\n\n board.isExpanded = (element: PlaitElement) => {\n if (MindElement.isMindElement(board, element) && !PlaitMind.isMind(element)) {\n return !element.isCollapsed;\n }\n return isExpanded(element);\n };\n\n board.dblClick = (event: MouseEvent) => {\n if (PlaitBoard.isReadonly(board)) {\n dblClick(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n board.children\n .filter(value => PlaitMind.isMind(value))\n .forEach(mindMap => {\n depthFirstRecursion<MindElement>(\n mindMap as MindElement,\n node => {\n if (!PlaitBoard.hasBeenTextEditing(board) && isHitMindElement(board, point, node)) {\n editTopic(node);\n }\n },\n getIsRecursionFunc(board)\n );\n });\n if (PlaitBoard.hasBeenTextEditing(board)) {\n return;\n }\n dblClick(event);\n };\n\n return withEmoji(\n withNodeResize(\n withNodeImageResize(\n withNodeImage(\n withNodeHoverHitTest(withMindFragment(withMindHotkey(withMindExtend(withCreateMind(withAbstract(withNodeDnd(board)))))))\n )\n )\n )\n );\n};\n","import { EmojiData, EmojiItem } from '../interfaces/element-data';\nimport { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../interfaces';\n\nexport abstract class MindEmojiBaseComponent {\n fontSize: number = 14;\n\n emojiItem!: EmojiItem;\n\n board!: PlaitBoard;\n\n element!: MindElement<EmojiData>;\n\n abstract nativeElement(): HTMLElement;\n}\n","/*\n * Public API Surface of mind\n */\n\nexport * from './mind.component';\nexport * from './mind-node.component';\nexport * from './utils';\nexport * from './interfaces';\nexport * from './plugins/with-mind';\nexport * from './plugins/with-mind-extend';\nexport * from './constants';\nexport * from './queries/index';\nexport * from './transforms/index';\nexport * from './emoji';\nexport * from './plugins/with-mind.board';\nexport * from './plugins/with-abstract-resize.board';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getLayoutDirection","Node","Path"],"mappings":"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"}
1
+ {"version":3,"file":"plait-mind.mjs","sources":["../../../packages/mind/src/utils/weak-maps.ts","../../../packages/mind/src/interfaces/node.ts","../../../packages/mind/src/interfaces/layout.ts","../../../packages/mind/src/interfaces/pointer.ts","../../../packages/mind/src/constants/theme.ts","../../../packages/mind/src/interfaces/theme-color.ts","../../../packages/mind/src/constants/default.ts","../../../packages/mind/src/utils/space/emoji.ts","../../../packages/mind/src/utils/node-style/common.ts","../../../packages/mind/src/constants/node-style.ts","../../../packages/mind/src/utils/abstract/common.ts","../../../packages/mind/src/utils/node-style/branch.ts","../../../packages/mind/src/utils/node-style/shape.ts","../../../packages/mind/src/utils/node/common.ts","../../../packages/mind/src/constants/node-topic-style.ts","../../../packages/mind/src/utils/layout.ts","../../../packages/mind/src/utils/space/layout-options.ts","../../../packages/mind/src/utils/node/create-node.ts","../../../packages/mind/src/utils/mind.ts","../../../packages/mind/src/utils/space/node-space.ts","../../../packages/mind/src/utils/position/node.ts","../../../packages/mind/src/utils/position/emoji.ts","../../../packages/mind/src/utils/position/topic.ts","../../../packages/mind/src/utils/position/image.ts","../../../packages/mind/src/utils/node/adjust-node.ts","../../../packages/mind/src/utils/node/image.ts","../../../packages/mind/src/utils/node/dynamic-width.ts","../../../packages/mind/src/utils/dnd/common.ts","../../../packages/mind/src/utils/dnd/detector.ts","../../../packages/mind/src/utils/draw/node-shape.ts","../../../packages/mind/src/constants/abstract-node.ts","../../../packages/mind/src/interfaces/types.ts","../../../packages/mind/src/utils/point-placement.ts","../../../packages/mind/src/utils/draw/node-link/indented-link.ts","../../../packages/mind/src/utils/draw/node-link/logic-link.ts","../../../packages/mind/src/utils/draw/node-link/draw-link.ts","../../../packages/mind/src/generators/node-emojis.generator.ts","../../../packages/mind/src/utils/draw/node-dnd.ts","../../../packages/mind/src/plugins/with-abstract-resize.board.ts","../../../packages/mind/src/utils/draw/abstract-outline.ts","../../../packages/mind/src/generators/node-active.generator.ts","../../../packages/mind/src/utils/abstract/resize.ts","../../../packages/mind/src/utils/node/right-node-count.ts","../../../packages/mind/src/utils/path.ts","../../../packages/mind/src/queries/get-correct-layout-by-element.ts","../../../packages/mind/src/queries/get-branch-layouts.ts","../../../packages/mind/src/queries/get-available-sublayouts-by-element.ts","../../../packages/mind/src/queries/get-layout-by-element.ts","../../../packages/mind/src/queries/index.ts","../../../packages/mind/src/interfaces/element.ts","../../../packages/mind/src/utils/draw/node-link/abstract-link.ts","../../../packages/mind/src/transforms/abstract-node.ts","../../../packages/mind/src/transforms/node.ts","../../../packages/mind/src/transforms/emoji.ts","../../../packages/mind/src/transforms/image.ts","../../../packages/mind/src/transforms/layout.ts","../../../packages/mind/src/transforms/property.ts","../../../packages/mind/src/transforms/index.ts","../../../packages/mind/src/generators/node-plus.generator.ts","../../../packages/mind/src/generators/node-collapse.generator.ts","../../../packages/mind/src/generators/node-shape.generator.ts","../../../packages/mind/src/mind-node.component.ts","../../../packages/mind/src/mind.component.ts","../../../packages/mind/src/plugins/with-node-dnd.ts","../../../packages/mind/src/plugins/with-abstract-resize.ts","../../../packages/mind/src/plugins/with-mind-extend.ts","../../../packages/mind/src/plugins/with-mind-create.ts","../../../packages/mind/src/plugins/with-mind-hotkey.ts","../../../packages/mind/src/utils/node-hover/extend.ts","../../../packages/mind/src/plugins/with-node-hover-hit-test.ts","../../../packages/mind/src/plugins/with-node-image.ts","../../../packages/mind/src/plugins/with-node-resize.ts","../../../packages/mind/src/plugins/with-node-image-resize.ts","../../../packages/mind/src/utils/clipboard.ts","../../../packages/mind/src/plugins/with-mind-fragment.ts","../../../packages/mind/src/emoji/with-emoji.ts","../../../packages/mind/src/plugins/with-mind.ts","../../../packages/mind/src/emoji/emoji-base.component.ts","../../../packages/mind/src/public-api.ts","../../../packages/mind/src/plait-mind.ts"],"sourcesContent":["import { MindElement } from '../interfaces/element';\nimport { MindNode } from '../interfaces/node';\n\nexport const ELEMENT_TO_NODE = new WeakMap<MindElement, MindNode>();\n","import { MindLayoutType } from '@plait/layouts';\nimport { Path } from '@plait/core';\nimport { MindElement } from './element';\n\nexport interface MindNode {\n depth: number;\n x: number;\n y: number;\n width: number;\n height: number;\n hGap: number;\n vGap: number;\n children: MindNode[];\n origin: MindElement;\n parent: MindNode;\n left: boolean;\n up: boolean;\n}\n\nexport const MindNode = {\n get(root: MindNode, path: Path) {\n let node = root;\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n node = node.children[p];\n }\n return node;\n }\n};\n\nexport type ExtendLayoutType = Exclude<MindLayoutType, MindLayoutType.standard>;\n\nexport type CoordinateType = {\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n};\n\nexport type ExtendUnderlineCoordinateType = {\n [key in ExtendLayoutType]: CoordinateType;\n};\n\nexport type DetectResult = 'top' | 'bottom' | 'right' | 'left' | null;\n\nexport type RootBaseDirection = 'right' | 'left' | null;\n","import { MindLayoutType } from '@plait/layouts';\n\nexport enum LayoutDirection {\n 'top' = 'top',\n 'right' = 'right',\n 'bottom' = 'bottom',\n 'left' = 'left'\n}\n\nexport const LayoutDirectionsMap: LayoutDirectionMapType = {\n [MindLayoutType.right]: [LayoutDirection.right],\n [MindLayoutType.left]: [LayoutDirection.left],\n [MindLayoutType.upward]: [LayoutDirection.top],\n [MindLayoutType.downward]: [LayoutDirection.bottom],\n [MindLayoutType.rightBottomIndented]: [LayoutDirection.right, LayoutDirection.bottom],\n [MindLayoutType.rightTopIndented]: [LayoutDirection.right, LayoutDirection.top],\n [MindLayoutType.leftBottomIndented]: [LayoutDirection.left, LayoutDirection.bottom],\n [MindLayoutType.leftTopIndented]: [LayoutDirection.left, LayoutDirection.top]\n};\n\nexport type LayoutDirectionMapType = { [key: string]: LayoutDirection[] };\n","export enum MindPointerType {\n 'mind' = 'mind'\n}\n","export const DEFAULT_BRANCH_COLORS = [\n '#A287E0',\n '#6E80DB',\n '#6DC4C4',\n '#E0B75E',\n '#B1C675',\n '#77C386',\n '#C18976',\n '#E48484',\n '#E582D4',\n '#6AB1E4'\n];\n\nexport const COLORFUL_BRANCH_COLORS = [\n '#F94239',\n '#FF8612',\n '#F3D222',\n '#B3D431',\n '#00BC7B',\n '#06ADBF',\n '#476BFF',\n '#4E49BE',\n '#8957E5',\n '#FE5DA1'\n];\n\nexport const SOFT_BRANCH_COLORS = [\n '#6D89C1',\n '#F2BDC7',\n '#B796D9',\n '#5BA683',\n '#B3D431 ',\n '#F2DC6C',\n '#F7C98D',\n '#60B4D1',\n '#838F9E',\n '#C1A381'\n];\n\nexport const RETRO_BRANCH_COLORS = [\n '#459476',\n '#9A894F',\n '#D48444',\n '#E9C358 ',\n '#4B9D9D',\n '#C14C41',\n '#827086 ',\n '#60718D',\n '#D38183',\n '#9DC19D'\n];\n\nexport const DARK_BRANCH_COLORS = [\n '#3DD1AE',\n '#F6C659',\n '#A9E072',\n '#FF877B ',\n '#F693E7',\n '#5DCFFF',\n '#868AF6',\n '#4C6DC7',\n '#D97C26',\n '#268FAC'\n];\n\nexport const STARRY_BRANCH_COLORS = [\n '#E46C57',\n '#579360',\n '#B98339',\n '#3A62D1 ',\n '#B883B7',\n '#42ABE5',\n '#2B9D8F',\n '#A4705E',\n '#265833',\n '#787865'\n];\n","import {\n DefaultThemeColor,\n StarryThemeColor,\n ThemeColor,\n ThemeColorMode,\n DarkThemeColor,\n ColorfulThemeColor,\n SoftThemeColor,\n RetroThemeColor,\n DEFAULT_COLOR\n} from '@plait/core';\nimport {\n COLORFUL_BRANCH_COLORS,\n DARK_BRANCH_COLORS,\n DEFAULT_BRANCH_COLORS,\n RETRO_BRANCH_COLORS,\n SOFT_BRANCH_COLORS,\n STARRY_BRANCH_COLORS\n} from '../constants/theme';\n\nexport interface MindThemeColor extends ThemeColor {\n mode: ThemeColorMode | string;\n branchColors: string[];\n rootFill: string;\n rootTextColor: string;\n}\n\nexport const MindDefaultThemeColor: MindThemeColor = {\n ...DefaultThemeColor,\n branchColors: DEFAULT_BRANCH_COLORS,\n rootFill: '#f5f5f5',\n rootTextColor: DEFAULT_COLOR\n};\n\nexport const MindColorfulThemeColor: MindThemeColor = {\n ...ColorfulThemeColor,\n branchColors: COLORFUL_BRANCH_COLORS,\n rootFill: DEFAULT_COLOR,\n rootTextColor: '#FFFFFF'\n};\n\nexport const MindSoftThemeColor: MindThemeColor = {\n ...SoftThemeColor,\n branchColors: SOFT_BRANCH_COLORS,\n rootFill: '#FFFFFF',\n rootTextColor: DEFAULT_COLOR\n};\n\nexport const MindRetroThemeColor: MindThemeColor = {\n ...RetroThemeColor,\n branchColors: RETRO_BRANCH_COLORS,\n rootFill: '#153D5D',\n rootTextColor: '#FFFFFF'\n};\n\nexport const MindDarkThemeColor: MindThemeColor = {\n ...DarkThemeColor,\n branchColors: DARK_BRANCH_COLORS,\n rootFill: '#FFFFFF',\n rootTextColor: DEFAULT_COLOR\n};\n\nexport const MindStarryThemeColor: MindThemeColor = {\n ...StarryThemeColor,\n branchColors: STARRY_BRANCH_COLORS,\n rootFill: '#FFFFFF',\n rootTextColor: DEFAULT_COLOR\n};\n\nexport const MindThemeColors: MindThemeColor[] = [\n MindDefaultThemeColor,\n MindColorfulThemeColor,\n MindSoftThemeColor,\n MindRetroThemeColor,\n MindDarkThemeColor,\n MindStarryThemeColor\n];\n\nexport const MindThemeColor = {\n isMindThemeColor(value: any): value is MindThemeColor {\n if (value.branchColors && value.rootFill && value.rootTextColor) {\n return true;\n } else {\n return false;\n }\n }\n};\n","export const WithMindPluginKey = 'plait-mind-plugin-key';\n\nexport const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const GRAY_COLOR = '#AAAAAA';\nexport const STROKE_WIDTH = 3;\n\nexport const EXTEND_OFFSET = 8;\nexport const EXTEND_DIAMETER = 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\nexport const DEFAULT_MIND_IMAGE_WIDTH = 240;\n","import { WithMindPluginKey } from '../../constants/default';\nimport { EmojiData, MindElement, PlaitMind } from '../../interfaces';\nimport { WithMindOptions } from '../../interfaces/options';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\n\nexport function getEmojisWidthHeight(board: PlaitMindBoard, element: MindElement<EmojiData>) {\n const options = board.getPluginOptions<WithMindOptions>(WithMindPluginKey);\n const count = element.data.emojis.length;\n const fontSize = getEmojiFontSize(element);\n return {\n width: fontSize * count + count * 2 * options.emojiPadding + (count - 1) * options.spaceBetweenEmojis,\n height: element.height\n };\n}\n\nexport function getEmojiFontSize(element: MindElement<EmojiData>) {\n if (PlaitMind.isMind(element)) {\n return 18 + 2;\n } else {\n return 14 + 2;\n }\n}\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\n\nexport const getAvailableProperty = (board: PlaitBoard, element: MindElement, propertyKey: keyof MindElement) => {\n return element[propertyKey];\n};\n","import { GRAY_COLOR } from './default';\n\nexport const DefaultAbstractNodeStyle = {\n branch: { color: GRAY_COLOR, width: 2 },\n shape: {\n strokeColor: GRAY_COLOR,\n strokeWidth: 2\n }\n};\n\nexport const DefaultNodeStyle = {\n branch: {\n width: 3\n },\n shape: {\n rectangleRadius: 4,\n strokeWidth: 3,\n fill: 'none'\n }\n};\n","import { AbstractNode } from '@plait/layouts';\nimport { MindElement, PlaitMind } from '../../interfaces/element';\nimport { Path, PlaitBoard, PlaitElement, PlaitNode } from '@plait/core';\n\nexport const separateChildren = (parentElement: MindElement) => {\n const rightNodeCount = parentElement.rightNodeCount!;\n const children = parentElement.children;\n let rightChildren = [],\n leftChildren = [];\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (AbstractNode.isAbstract(child) && child.end < rightNodeCount) {\n rightChildren.push(child);\n continue;\n }\n if (AbstractNode.isAbstract(child) && child.start >= rightNodeCount) {\n leftChildren.push(child);\n continue;\n }\n\n if (i < rightNodeCount) {\n rightChildren.push(child);\n } else {\n leftChildren.push(child);\n }\n }\n\n return { leftChildren, rightChildren };\n};\n\nexport const isSetAbstract = (element: PlaitElement) => {\n return !!getCorrespondingAbstract(element as MindElement);\n};\n\nexport const canSetAbstract = (element: PlaitElement) => {\n return !PlaitElement.isRootElement(element) && !AbstractNode.isAbstract(element) && !isSetAbstract(element);\n};\n\nexport const getCorrespondingAbstract = (element: MindElement) => {\n const parent = MindElement.findParent(element as MindElement);\n if (!parent) return undefined;\n\n const elementIndex = parent.children.indexOf(element);\n return parent.children.find(child => {\n return AbstractNode.isAbstract(child) && elementIndex >= child.start! && elementIndex <= child.end!;\n });\n};\n\nexport const getBehindAbstracts = (element: MindElement) => {\n const parent = MindElement.findParent(element as MindElement);\n if (!parent) return [];\n const index = parent.children.indexOf(element);\n return parent.children.filter(child => AbstractNode.isAbstract(child) && child.start! > index);\n};\n\n/**\n * return corresponding abstract that is not child of elements\n */\nexport const getOverallAbstracts = (board: PlaitBoard, elements: MindElement[]) => {\n const overallAbstracts: MindElement[] = [];\n elements\n .filter(value => !AbstractNode.isAbstract(value) && !PlaitMind.isMind(value))\n .forEach(value => {\n const abstract = getCorrespondingAbstract(value);\n if (abstract && elements.indexOf(abstract) === -1 && overallAbstracts.indexOf(abstract) === -1) {\n const { start, end } = abstract;\n const parent = MindElement.getParent(value);\n const isOverall = parent.children.slice(start!, end! + 1).every(includedElement => elements.indexOf(includedElement) > -1);\n if (isOverall) {\n overallAbstracts.push(abstract);\n }\n }\n });\n return overallAbstracts as (MindElement & AbstractNode)[];\n};\n\nexport interface AbstractRef {\n abstract: MindElement & AbstractNode;\n references: MindElement[];\n}\n\n/**\n * abstract node is valid when elements contains at least one element it is referenced with\n */\nexport const getValidAbstractRefs = (board: PlaitBoard, elements: MindElement[]) => {\n const validAbstractRefs: AbstractRef[] = [];\n elements\n .filter(value => !AbstractNode.isAbstract(value) && !PlaitMind.isMind(value))\n .forEach(value => {\n const abstract = getCorrespondingAbstract(value);\n if (abstract && elements.indexOf(abstract) > 0) {\n const index = validAbstractRefs.findIndex(value => value.abstract === abstract);\n if (index === -1) {\n validAbstractRefs.push({\n abstract: abstract as MindElement & AbstractNode,\n references: [value]\n });\n } else {\n validAbstractRefs[index].references.push(value);\n }\n }\n });\n return validAbstractRefs;\n};\n\nexport function getRelativeStartEndByAbstractRef(abstractRef: AbstractRef, elements: MindElement[]) {\n const start = elements.indexOf(abstractRef.references[0]);\n const end = elements.indexOf(abstractRef.references[abstractRef.references.length - 1]);\n return { start, end };\n}\n\nexport const insertElementHandleAbstract = (\n board: PlaitBoard,\n path: Path,\n step = 1,\n // This distinguishes between dragging and adding to the last node summarized in the abstract node\n isExtendPreviousNode: boolean = true,\n effectedAbstracts = new Map<MindElement, Pick<AbstractNode, 'start' | 'end'>>()\n) => {\n const parent = PlaitNode.parent(board, path) as MindElement;\n const hasPreviousNode = path[path.length - 1] !== 0;\n let behindAbstracts: MindElement[];\n\n if (!hasPreviousNode) {\n behindAbstracts = parent.children.filter(child => AbstractNode.isAbstract(child));\n } else {\n const selectedElement = PlaitNode.get(board, Path.previous(path)) as MindElement;\n behindAbstracts = getBehindAbstracts(selectedElement);\n }\n\n if (behindAbstracts.length) {\n behindAbstracts.forEach(abstract => {\n let newProperties = effectedAbstracts.get(abstract);\n if (!newProperties) {\n newProperties = { start: 0, end: 0 };\n effectedAbstracts.set(abstract, newProperties);\n }\n newProperties.start = newProperties.start + step;\n newProperties.end = newProperties.end + step;\n });\n }\n\n if (!hasPreviousNode) {\n return effectedAbstracts;\n }\n\n const selectedElement = PlaitNode.get(board, Path.previous(path)) as MindElement;\n const correspondingAbstract = getCorrespondingAbstract(selectedElement);\n const isDragToLast = !isExtendPreviousNode && correspondingAbstract && correspondingAbstract.end === path[path.length - 1] - 1;\n\n if (correspondingAbstract && !isDragToLast) {\n let newProperties = effectedAbstracts.get(correspondingAbstract);\n if (!newProperties) {\n newProperties = { start: 0, end: 0 };\n effectedAbstracts.set(correspondingAbstract, newProperties);\n }\n newProperties.end = newProperties.end + step;\n }\n\n return effectedAbstracts;\n};\n\nexport const deleteElementHandleAbstract = (\n board: PlaitBoard,\n deletableElements: MindElement[],\n effectedAbstracts = new Map<MindElement, Pick<AbstractNode, 'start' | 'end'>>()\n) => {\n deletableElements.forEach(node => {\n if (!PlaitMind.isMind(node)) {\n const behindAbstracts = getBehindAbstracts(node).filter(abstract => !deletableElements.includes(abstract));\n if (behindAbstracts.length) {\n behindAbstracts.forEach(abstract => {\n let newProperties = effectedAbstracts.get(abstract);\n if (!newProperties) {\n newProperties = { start: 0, end: 0 };\n effectedAbstracts.set(abstract, newProperties);\n }\n newProperties.start = newProperties.start - 1;\n newProperties.end = newProperties.end - 1;\n });\n }\n\n const correspondingAbstract = getCorrespondingAbstract(node);\n if (correspondingAbstract && !deletableElements.includes(correspondingAbstract)) {\n let newProperties = effectedAbstracts.get(correspondingAbstract);\n if (!newProperties) {\n newProperties = { start: 0, end: 0 };\n\n effectedAbstracts.set(correspondingAbstract, newProperties);\n }\n newProperties.end = newProperties.end - 1;\n }\n }\n });\n return effectedAbstracts;\n};\n\nexport const isChildOfAbstract = (board: PlaitBoard, element: MindElement) => {\n const ancestors = MindElement.getAncestors(board, element) as MindElement[];\n return !!ancestors.find(value => AbstractNode.isAbstract(value));\n};\n","/**\n * Processing of branch color, width, style, etc. of the mind node\n */\nimport { PlaitBoard, isNullOrUndefined } from '@plait/core';\nimport { BranchShape, MindElement } from '../../interfaces/element';\nimport { STROKE_WIDTH } from '../../constants/default';\nimport { DefaultAbstractNodeStyle } from '../../constants/node-style';\nimport { getAvailableProperty } from './common';\nimport { MindDefaultThemeColor, MindThemeColor } from '../../interfaces/theme-color';\nimport { AbstractNode } from '@plait/layouts';\nimport { isChildOfAbstract } from '../abstract/common';\n\nexport const getBranchColorByMindElement = (board: PlaitBoard, element: MindElement) => {\n if (AbstractNode.isAbstract(element) || isChildOfAbstract(board, element)) {\n return getAbstractBranchColor(board, element);\n }\n\n const branchColor = getAvailableProperty(board, element, 'branchColor') || getAvailableProperty(board, element, 'strokeColor');\n return branchColor || getDefaultBranchColor(board, element);\n};\n\nexport const getBranchShapeByMindElement = (board: PlaitBoard, element: MindElement) => {\n const branchShape = getAvailableProperty(board, element, 'branchShape');\n return branchShape || BranchShape.bight;\n};\n\nexport const getBranchWidthByMindElement = (board: PlaitBoard, element: MindElement) => {\n const branchWidth = getAvailableProperty(board, element, 'branchWidth') || getAvailableProperty(board, element, 'strokeWidth');\n return branchWidth || STROKE_WIDTH;\n};\n\nexport const getAbstractBranchWidth = (board: PlaitBoard, element: MindElement) => {\n if (!isNullOrUndefined(element.branchWidth)) {\n return element.branchWidth as number;\n }\n return DefaultAbstractNodeStyle.branch.width;\n};\n\nexport const getAbstractBranchColor = (board: PlaitBoard, element: MindElement) => {\n if (element.branchColor || element.strokeColor) {\n return element.branchColor || element.strokeColor;\n }\n return DefaultAbstractNodeStyle.branch.color;\n};\n\nexport const getNextBranchColor = (board: PlaitBoard, root: MindElement) => {\n const index = root.children.length;\n return getDefaultBranchColorByIndex(board, index);\n};\n\nexport const getDefaultBranchColor = (board: PlaitBoard, element: MindElement) => {\n const path = PlaitBoard.findPath(board, element);\n return getDefaultBranchColorByIndex(board, path[1]);\n};\n\nexport const getDefaultBranchColorByIndex = (board: PlaitBoard, index: number) => {\n const themeColor = getMindThemeColor(board);\n const length = themeColor.branchColors.length;\n const remainder = index % length;\n return themeColor.branchColors[remainder];\n};\n\nexport const getMindThemeColor = (board: PlaitBoard) => {\n const themeColors = PlaitBoard.getThemeColors(board);\n const themeColor = themeColors.find(val => val.mode === board.theme.themeColorMode);\n if (themeColor && MindThemeColor.isMindThemeColor(themeColor)) {\n return themeColor;\n } else {\n return MindDefaultThemeColor;\n }\n};\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement, MindElementShape, PlaitMind } from '../../interfaces/element';\nimport { getAvailableProperty } from './common';\nimport { getDefaultBranchColor, getMindThemeColor } from './branch';\nimport { AbstractNode } from '@plait/layouts';\nimport { isChildOfAbstract } from '../abstract/common';\nimport { DefaultAbstractNodeStyle, DefaultNodeStyle } from '../../constants/node-style';\nimport { StrokeStyle } from '@plait/common';\n\nexport const getStrokeColorByElement = (board: PlaitBoard, element: MindElement) => {\n if (PlaitMind.isMind(element)) {\n const defaultRootStroke = getMindThemeColor(board).rootFill;\n return element.strokeColor || defaultRootStroke;\n }\n\n if (AbstractNode.isAbstract(element) || isChildOfAbstract(board, element)) {\n return element.strokeColor || DefaultAbstractNodeStyle.shape.strokeColor;\n }\n\n return getAvailableProperty(board, element, 'strokeColor') || getDefaultBranchColor(board, element);\n};\n\nexport const getStrokeStyleByElement = (board: PlaitBoard, element: MindElement) => {\n return element.strokeStyle || StrokeStyle.solid;\n};\n\nexport const getStrokeWidthByElement = (board: PlaitBoard, element: MindElement) => {\n const strokeWidth =\n element.strokeWidth ||\n (AbstractNode.isAbstract(element) ? DefaultAbstractNodeStyle.shape.strokeWidth : DefaultNodeStyle.shape.strokeWidth);\n return strokeWidth;\n};\n\nexport const getFillByElement = (board: PlaitBoard, element: MindElement) => {\n if (element.fill) {\n return element.fill;\n }\n const defaultRootFill = getMindThemeColor(board).rootFill;\n return element.isRoot ? defaultRootFill : DefaultNodeStyle.shape.fill;\n};\n\nexport const getShapeByElement = (board: PlaitBoard, element: MindElement): MindElementShape => {\n const shape = getAvailableProperty(board, element, 'shape');\n return shape || MindElementShape.roundRectangle;\n};\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { getFirstTextManage } from '@plait/common';\n\nexport function editTopic(element: MindElement) {\n const textManage = getFirstTextManage(element);\n textManage?.edit(\n () => {},\n event => {\n const keyboardEvent = event as KeyboardEvent;\n return keyboardEvent.key === 'Enter' && !keyboardEvent.shiftKey;\n }\n );\n}\n\nexport const getSelectedMindElements = (board: PlaitBoard, elements?: PlaitElement[]) => {\n const selectedElements = elements?.length ? elements : getSelectedElements(board);\n return selectedElements.filter(value => MindElement.isMindElement(board, value)) as MindElement[];\n};\n","export const TOPIC_FONT_SIZE = 14;\n\nexport const ROOT_TOPIC_FONT_SIZE = 18;\n\nexport const ROOT_TOPIC_HEIGHT = 25;\n\nexport const ROOT_TOPIC_WIDTH = 72;\n\nexport const TOPIC_DEFAULT_MAX_WORD_COUNT = 34;\n\nexport const DEFAULT_FONT_FAMILY = 'PingFangSC-Regular, \"PingFang SC\"';\n\nexport const BRANCH_FONT_FAMILY = 'PingFangSC-Medium, \"PingFang SC\"';\n\nexport const NodeTopicThreshold = {\n defaultTextMaxWidth: 34 * 14\n};\n","import { LayoutDirection, LayoutDirectionsMap, MindElement, PlaitMind } from '../interfaces';\nimport { isIndentedLayout, MindLayoutType } from '@plait/layouts';\n\nexport const getBranchDirectionsByLayouts = (branchLayouts: MindLayoutType[]) => {\n const branchDirections: LayoutDirection[] = [];\n branchLayouts.forEach(l => {\n const directions = LayoutDirectionsMap[l];\n directions.forEach(d => {\n if (!branchDirections.includes(d) && !branchDirections.includes(getLayoutReverseDirection(d))) {\n branchDirections.push(d);\n }\n });\n });\n return branchDirections;\n};\n\nexport const isCorrectLayout = (root: MindElement, layout: MindLayoutType) => {\n const rootLayout = root.layout || getDefaultLayout();\n return !getInCorrectLayoutDirection(rootLayout, layout);\n};\n\nexport const isMixedLayout = (parentLayout: MindLayoutType, layout: MindLayoutType) => {\n return (!isIndentedLayout(parentLayout) && isIndentedLayout(layout)) || (isIndentedLayout(parentLayout) && !isIndentedLayout(layout));\n};\n\nexport const getInCorrectLayoutDirection = (rootLayout: MindLayoutType, layout: MindLayoutType) => {\n const directions = LayoutDirectionsMap[rootLayout];\n const subLayoutDirections = LayoutDirectionsMap[layout];\n if (!subLayoutDirections) {\n throw new Error(`unexpected layout: ${layout} on correct layout`);\n }\n return subLayoutDirections.find(d => directions.includes(getLayoutReverseDirection(d)));\n};\n\nexport const correctLayoutByDirection = (layout: MindLayoutType, direction: LayoutDirection) => {\n const isHorizontal = direction === LayoutDirection.left || direction === LayoutDirection.right ? true : false;\n let inverseDirectionLayout = MindLayoutType.standard;\n switch (layout) {\n case MindLayoutType.left:\n inverseDirectionLayout = MindLayoutType.right;\n break;\n case MindLayoutType.right:\n inverseDirectionLayout = MindLayoutType.left;\n break;\n case MindLayoutType.downward:\n inverseDirectionLayout = MindLayoutType.upward;\n break;\n case MindLayoutType.upward:\n inverseDirectionLayout = MindLayoutType.downward;\n break;\n case MindLayoutType.rightBottomIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.leftBottomIndented : MindLayoutType.rightTopIndented;\n break;\n case MindLayoutType.leftBottomIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.rightBottomIndented : MindLayoutType.leftTopIndented;\n break;\n case MindLayoutType.rightTopIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.leftTopIndented : MindLayoutType.rightBottomIndented;\n break;\n case MindLayoutType.leftTopIndented:\n inverseDirectionLayout = isHorizontal ? MindLayoutType.rightTopIndented : MindLayoutType.leftBottomIndented;\n break;\n }\n return inverseDirectionLayout;\n};\n\nexport const getLayoutDirection = (root: MindElement) => {\n const layout = root.layout || getDefaultLayout();\n return LayoutDirectionsMap[layout];\n};\n\nexport const getDefaultLayout = () => {\n return MindLayoutType.standard;\n};\n\nexport const getAvailableSubLayoutsByLayoutDirections = (directions: LayoutDirection[]): MindLayoutType[] => {\n const result: MindLayoutType[] = [];\n const reverseDirections = directions.map(getLayoutReverseDirection);\n for (const key in MindLayoutType) {\n const layout = MindLayoutType[key as keyof typeof MindLayoutType];\n const layoutDirections = LayoutDirectionsMap[layout];\n if (layoutDirections) {\n const hasSameDirection = layoutDirections.some(d => directions.includes(d));\n const hasReverseDirection = layoutDirections.some(r => reverseDirections.includes(r));\n if (hasSameDirection && !hasReverseDirection) {\n result.push(layout);\n }\n }\n }\n return result;\n};\n\nexport const getLayoutReverseDirection = (layoutDirection: LayoutDirection) => {\n let reverseDirection = LayoutDirection.right;\n switch (layoutDirection) {\n case LayoutDirection.top:\n reverseDirection = LayoutDirection.bottom;\n break;\n case LayoutDirection.bottom:\n reverseDirection = LayoutDirection.top;\n break;\n case LayoutDirection.right:\n reverseDirection = LayoutDirection.left;\n break;\n case LayoutDirection.left:\n reverseDirection = LayoutDirection.right;\n break;\n }\n return reverseDirection;\n};\n\nexport const getRootLayout = (root: MindElement) => {\n return root.layout || getDefaultLayout();\n};\n","import {\n ConnectingPosition,\n LayoutNode,\n LayoutOptions,\n OriginNode,\n isHorizontalLayout,\n isHorizontalLogicLayout,\n isIndentedLayout\n} from '@plait/layouts';\nimport { MindElement, MindElementShape } from '../../interfaces/element';\nimport { BASE, STROKE_WIDTH } from '../../constants/default';\nimport { getRootLayout } from '../layout';\nimport { NodeSpace } from './node-space';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\n\nexport const getLayoutOptions = (board: PlaitMindBoard) => {\n function getMainAxle(element: MindElement, parent?: LayoutNode) {\n if (element.isRoot) {\n return BASE * 12;\n }\n if (parent && parent.isRoot()) {\n return BASE * 3;\n }\n return BASE * 3;\n }\n\n function getSecondAxle(element: MindElement, parent?: LayoutNode) {\n if (element.isRoot) {\n return BASE * 10;\n }\n return BASE * 6;\n }\n\n return {\n getHeight(element: MindElement) {\n return NodeSpace.getNodeHeight(board, element);\n },\n getWidth(element: MindElement) {\n return NodeSpace.getNodeWidth(board, element);\n },\n getHorizontalGap(element: MindElement, parent?: LayoutNode) {\n const _layout = (parent && parent.layout) || getRootLayout(element);\n const isHorizontal = isHorizontalLayout(_layout);\n if (isIndentedLayout(_layout)) {\n return BASE * 4;\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 === MindElementShape.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};\n","import { PlaitBoard, Point, idCreator, isNullOrUndefined } from '@plait/core';\nimport { MindLayoutType } from '@plait/layouts';\nimport { BranchShape, MindElement, MindElementShape } from '../../interfaces/element';\nimport { ROOT_TOPIC_HEIGHT, ROOT_TOPIC_WIDTH } from '../../constants/node-topic-style';\nimport { Element } from 'slate';\nimport { NodeSpace } from '../space';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\nimport { buildText } from '@plait/common';\nimport { TEXT_DEFAULT_HEIGHT } from '@plait/text-plugins';\n\nexport const createEmptyMind = (board: PlaitBoard, point: Point) => {\n const element = createMindElement('思维导图', ROOT_TOPIC_WIDTH, ROOT_TOPIC_HEIGHT, { layout: MindLayoutType.right });\n element.isRoot = true;\n element.type = 'mindmap';\n const width = NodeSpace.getNodeWidth(board as PlaitMindBoard, element);\n const height = NodeSpace.getNodeHeight(board as PlaitMindBoard, element);\n element.points = [[point[0] - width / 2, point[1] - height / 2]];\n return element;\n};\n\nexport const createDefaultMind = (point: Point, rightNodeCount: number, layout: MindLayoutType) => {\n const root = createMindElement('思维导图', ROOT_TOPIC_WIDTH, ROOT_TOPIC_HEIGHT, { layout });\n root.rightNodeCount = rightNodeCount;\n root.isRoot = true;\n root.type = 'mindmap';\n root.points = [point];\n const children = [1, 1, 1].map(() => {\n return createMindElement('新建节点', 56, TEXT_DEFAULT_HEIGHT, {});\n });\n root.children = children;\n return root;\n};\n\nexport const createMindElement = (text: string | Element, width: number, height: number, options: InheritAttribute) => {\n const newElement: MindElement = {\n id: idCreator(),\n data: {\n topic: buildText(text)\n },\n children: [],\n width,\n height\n };\n\n let key: keyof typeof options;\n for (key in options) {\n if (!isNullOrUndefined(options[key])) {\n (newElement as any)[key] = options[key];\n }\n }\n\n return newElement;\n};\n\nexport interface InheritAttribute {\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: number;\n shape?: MindElementShape;\n layout?: MindLayoutType;\n branchColor?: string;\n branchWidth?: number;\n branchShape?: BranchShape;\n}\n\nexport const INHERIT_ATTRIBUTE_KEYS = [\n 'fill',\n 'strokeColor',\n 'strokeWidth',\n 'strokeStyle',\n 'shape',\n 'layout',\n 'branchColor',\n 'branchWidth',\n 'branchShape'\n];\n","import { addSelectedElement, clearSelectedElement, idCreator, Path, PlaitBoard, Transforms } from '@plait/core';\nimport { MindElement, PlaitMind } from '../interfaces/element';\nimport { editTopic } from './node/common';\nimport { createMindElement, INHERIT_ATTRIBUTE_KEYS, InheritAttribute } from './node/create-node';\nimport { MindNode } from '../interfaces/node';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\nimport { ROOT_TOPIC_FONT_SIZE, TOPIC_FONT_SIZE } from '../constants/node-topic-style';\nimport { TEXT_DEFAULT_HEIGHT } from '@plait/text-plugins';\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 = MindElement.findParent(child);\n while (parent) {\n if (parent === origin) {\n return true;\n }\n parent = MindElement.findParent(parent);\n }\n return false;\n};\n\nexport const getFirstLevelElement = (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 = (parent: MindNode, child: MindNode) => {\n return parent.x < child.x;\n};\n\nexport const isChildUp = (parent: MindNode, child: MindNode) => {\n return parent.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 insertMindElement = (board: PlaitMindBoard, inheritNode: MindElement, path: Path) => {\n const newNode: InheritAttribute = {};\n if (!inheritNode.isRoot) {\n INHERIT_ATTRIBUTE_KEYS.forEach(attr => {\n (newNode as any)[attr] = inheritNode[attr];\n });\n delete newNode.layout;\n }\n const newElement = createMindElement('', TOPIC_FONT_SIZE, TEXT_DEFAULT_HEIGHT, newNode);\n Transforms.insertNode(board, newElement, path);\n clearSelectedElement(board);\n addSelectedElement(board, newElement);\n setTimeout(() => {\n editTopic(newElement);\n });\n};\n\nexport const findLastChild = (child: MindNode) => {\n let result = child;\n while (result.children.length !== 0) {\n result = result.children[result.children.length - 1];\n }\n return result;\n};\n\nexport const divideElementByParent = (elements: MindElement[]) => {\n const abstractIncludedGroups = [];\n const parentElements: MindElement[] = [];\n\n for (let i = 0; i < elements.length; i++) {\n const parent = MindElement.getParent(elements[i]);\n const parentIndex = parentElements.indexOf(parent);\n if (parentIndex === -1) {\n parentElements.push(parent);\n abstractIncludedGroups.push([elements[i]]);\n } else {\n abstractIncludedGroups[parentIndex].push(elements[i]);\n }\n }\n return { parentElements, abstractIncludedGroups };\n};\n\nexport const getDefaultMindElementFontSize = (board: PlaitBoard, element: MindElement) => {\n if (PlaitMind.isMind(element)) {\n return ROOT_TOPIC_FONT_SIZE;\n }\n if (MindElement.isMindElement(board, element)) {\n return TOPIC_FONT_SIZE;\n }\n throw new Error('can not find default font-size');\n};\n","import { BASE, WithMindPluginKey } from '../../constants/default';\nimport { PlaitMind } from '../../interfaces/element';\nimport { MindElement } from '../../interfaces/element';\nimport { EmojiData } from '../../interfaces/element-data';\nimport { WithMindOptions } from '../../interfaces/options';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\nimport { getEmojisWidthHeight } from './emoji';\nimport { Element } from 'slate';\nimport { getStrokeWidthByElement } from '../node-style/shape';\nimport { getDefaultMindElementFontSize } from '../mind';\nimport { DEFAULT_FONT_SIZE, MarkTypes, PlaitMarkEditor } from '@plait/text-plugins';\nimport { getFirstTextEditor } from '@plait/common';\n\nconst NodeDefaultSpace = {\n horizontal: {\n nodeAndText: BASE * 2.5,\n emojiAndText: BASE * 1.5\n },\n vertical: {\n nodeAndText: BASE,\n nodeAndImage: BASE,\n imageAndText: 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 = (board: PlaitMindBoard, element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const nodeAndText = isMind ? RootDefaultSpace.horizontal.nodeAndText : NodeDefaultSpace.horizontal.nodeAndText;\n const strokeWidth = getStrokeWidthByElement(board, element);\n return nodeAndText + strokeWidth;\n};\n\nconst getVerticalSpaceBetweenNodeAndText = (board: PlaitMindBoard, element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const strokeWidth = getStrokeWidthByElement(board, element);\n const nodeAndText = isMind ? RootDefaultSpace.vertical.nodeAndText : NodeDefaultSpace.vertical.nodeAndText;\n return nodeAndText + strokeWidth;\n};\n\nconst getSpaceEmojiAndText = (element: MindElement) => {\n const isMind = PlaitMind.isMind(element);\n const emojiAndText = isMind ? RootDefaultSpace.horizontal.emojiAndText : NodeDefaultSpace.horizontal.emojiAndText;\n return emojiAndText;\n};\n\nexport const NodeSpace = {\n getNodeWidth(board: PlaitMindBoard, element: MindElement) {\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);\n if (MindElement.hasEmojis(element)) {\n return (\n NodeSpace.getEmojiLeftSpace(board, element) +\n getEmojisWidthHeight(board, element).width +\n getSpaceEmojiAndText(element) +\n NodeSpace.getNodeDynamicWidth(board, element) +\n nodeAndText\n );\n }\n return nodeAndText + NodeSpace.getNodeDynamicWidth(board, element) + nodeAndText;\n },\n getNodeHeight(board: PlaitMindBoard, element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);\n if (MindElement.hasImage(element)) {\n return NodeSpace.getTextTopSpace(board, element) + element.height + nodeAndText;\n }\n return nodeAndText + element.height + nodeAndText;\n },\n getNodeDynamicWidth(board: PlaitMindBoard, element: MindElement) {\n const width = element.manualWidth || element.width;\n const imageWidth = MindElement.hasImage(element) ? element.data.image?.width : 0;\n return Math.max(width, imageWidth);\n },\n /**\n * use it when upload image first or resize image\n */\n getNodeNewDynamicWidth(board: PlaitMindBoard, element: MindElement, imageWidth: number) {\n const width = element.manualWidth || element.width;\n return Math.max(width, imageWidth);\n },\n getNodeResizableMinWidth(board: PlaitMindBoard, element: MindElement) {\n const minTopicWidth = NodeSpace.getNodeTopicMinWidth(board, element);\n if (MindElement.hasImage(element) && element.data.image.width > minTopicWidth) {\n return element.data.image.width;\n } else {\n return minTopicWidth;\n }\n },\n getNodeTopicMinWidth(board: PlaitMindBoard, element: MindElement) {\n const defaultFontSize = getDefaultMindElementFontSize(board, element);\n const editor = getFirstTextEditor(element);\n const marks = PlaitMarkEditor.getMarks(editor);\n const fontSize = (marks[MarkTypes.fontSize] as number) || defaultFontSize;\n return fontSize;\n },\n getTextLeftSpace(board: PlaitMindBoard, element: MindElement) {\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);\n if (MindElement.hasEmojis(element)) {\n return NodeSpace.getEmojiLeftSpace(board, element) + getEmojisWidthHeight(board, element).width + getSpaceEmojiAndText(element);\n } else {\n return nodeAndText;\n }\n },\n getTextTopSpace(board: PlaitMindBoard, element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);\n if (MindElement.hasImage(element)) {\n return NodeSpace.getImageTopSpace(board, element) + element.data.image.height + NodeDefaultSpace.vertical.imageAndText;\n } else {\n return nodeAndText;\n }\n },\n getImageTopSpace(board: PlaitMindBoard, element: MindElement) {\n const strokeWidth = getStrokeWidthByElement(board, element);\n return strokeWidth + NodeDefaultSpace.vertical.nodeAndImage;\n },\n getEmojiLeftSpace(board: PlaitMindBoard, element: MindElement<EmojiData>) {\n const options = board.getPluginOptions<WithMindOptions>(WithMindPluginKey);\n const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);\n return nodeAndText - options.emojiPadding;\n },\n getEmojiTopSpace(board: PlaitMindBoard, element: MindElement) {\n const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);\n return nodeAndText;\n }\n};\n\nexport const getFontSizeBySlateElement = (text: string | Element) => {\n const defaultFontSize = DEFAULT_FONT_SIZE;\n if (typeof text === 'string') {\n return defaultFontSize;\n }\n const marks = PlaitMarkEditor.getMarksByElement(text);\n const fontSize = (marks[MarkTypes.fontSize] as number) || defaultFontSize;\n return fontSize;\n};\n","import { PlaitBoard, Point, RectangleClient, distanceBetweenPointAndRectangle } from '@plait/core';\nimport { MindNode } from '../../interfaces/node';\nimport { MindElement } from '../../interfaces/element';\nimport { NodeSpace } from '../space/node-space';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\n\nexport function getRectangleByNode(node: MindNode): RectangleClient {\n const x = node.x + node.hGap;\n let y = node.y + node.vGap;\n const width = node.width - node.hGap * 2;\n const height = node.height - node.vGap * 2;\n return {\n x,\n y,\n width,\n height\n };\n}\n\nexport function getRectangleByElement(board: PlaitMindBoard, element: MindElement) {\n const width = NodeSpace.getNodeWidth(board, element);\n const height = NodeSpace.getNodeHeight(board, element);\n const nodeRectangle = {\n x: element.points![0][0],\n y: element.points![0][1],\n width,\n height\n };\n return nodeRectangle;\n}\n\nexport function isHitMindElement(board: PlaitBoard, point: Point, element: MindElement) {\n const node = MindElement.getNode(element);\n if (node && distanceBetweenPointAndRectangle(point[0], point[1], getRectangleByNode(node)) === 0) {\n return true;\n } else {\n return false;\n }\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { EmojiData } from '../../interfaces/element-data';\nimport { getRectangleByNode } from './node';\nimport { NodeSpace } from '../space/node-space';\nimport { getEmojisWidthHeight } from '../space/emoji';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\n\nexport function getEmojiRectangle(board: PlaitMindBoard, element: MindElement<EmojiData>): RectangleClient {\n let { x, y } = getRectangleByNode(MindElement.getNode(element));\n x = x + NodeSpace.getEmojiLeftSpace(board, element);\n const { width, height } = getEmojisWidthHeight(board, element);\n return {\n x,\n y,\n width,\n height\n };\n}\n\nexport function getEmojiForeignRectangle(board: PlaitMindBoard, element: MindElement<EmojiData>): RectangleClient {\n let { x, y } = getRectangleByNode(MindElement.getNode(element));\n x = x + NodeSpace.getEmojiLeftSpace(board, element);\n const { width } = getEmojisWidthHeight(board, element);\n return {\n x,\n y,\n width,\n height: NodeSpace.getNodeHeight(board, element)\n };\n}\n\nexport const isHitEmojis = (board: PlaitBoard, element: MindElement<EmojiData>, point: Point) => {\n return RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), getEmojiRectangle(board as PlaitMindBoard, element));\n};\n","import { MindElement } from '../../interfaces/element';\nimport { MindNode } from '../../interfaces/node';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\nimport { NodeSpace } from '../space/node-space';\nimport { getRectangleByNode } from './node';\nimport { RectangleClient } from '@plait/core';\n\nexport function getTopicRectangleByNode(board: PlaitMindBoard, node: MindNode) {\n let nodeRectangle = getRectangleByNode(node);\n const result = getTopicRectangleByElement(board, nodeRectangle, node.origin);\n result.width = result.width;\n return result;\n}\n\nexport function getTopicRectangleByElement(board: PlaitMindBoard, nodeRectangle: RectangleClient, element: MindElement) {\n const x = nodeRectangle.x + NodeSpace.getTextLeftSpace(board, element);\n const y = nodeRectangle.y + NodeSpace.getTextTopSpace(board, element);\n const width = NodeSpace.getNodeDynamicWidth(board, element);\n const height = Math.ceil(element.height);\n return { height, width, x, y };\n}\n","import { PlaitBoard, Point, RectangleClient } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { ImageData } from '../../interfaces/element-data';\nimport { getRectangleByNode } from './node';\nimport { NodeSpace } from '../space/node-space';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\nimport { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs } from '@plait/common';\n\nexport function getImageForeignRectangle(board: PlaitMindBoard, element: MindElement<ImageData>): RectangleClient {\n let { x, y } = getRectangleByNode(MindElement.getNode(element));\n const elementWidth = element.manualWidth || element.width;\n\n x =\n elementWidth > element.data.image.width\n ? x + NodeSpace.getTextLeftSpace(board, element) + (elementWidth - element.data.image.width) / 2\n : x + NodeSpace.getTextLeftSpace(board, element);\n y = NodeSpace.getImageTopSpace(board, element) + y;\n const { width, height } = element.data.image!;\n const rectangle = {\n x,\n y,\n width,\n height\n };\n return rectangle;\n}\n\nexport const isHitImage = (board: PlaitBoard, element: MindElement<ImageData>, point: Point) => {\n const imageRectangle = getImageForeignRectangle(board as PlaitMindBoard, element);\n const imageOutlineRectangle = RectangleClient.getOutlineRectangle(imageRectangle, -RESIZE_HANDLE_DIAMETER / 2);\n return RectangleClient.isPointInRectangle(imageOutlineRectangle, point);\n};\n\nexport const getHitImageResizeHandleDirection = (board: PlaitBoard, element: MindElement<ImageData>, point: Point) => {\n const imageRectangle = getImageForeignRectangle(board as PlaitMindBoard, element);\n const resizeHandleRefs = getRectangleResizeHandleRefs(imageRectangle, RESIZE_HANDLE_DIAMETER);\n const result = resizeHandleRefs.find(resizeHandleRef => {\n return RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), resizeHandleRef.rectangle);\n });\n return result;\n};\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { Node } from 'slate';\nimport { MindLayoutType } from '@plait/layouts';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\n\nexport const adjustRootToNode = (board: PlaitBoard, node: MindElement) => {\n const newNode: MindElement = { ...node };\n delete newNode.isRoot;\n delete newNode.rightNodeCount;\n delete newNode.type;\n if (newNode.layout === MindLayoutType.standard) {\n delete newNode.layout;\n }\n return newNode;\n};\n\nexport const adjustAbstractToNode = (node: MindElement) => {\n const newNode: MindElement = { ...node };\n delete newNode.start;\n delete newNode.end;\n\n return newNode;\n};\n\nexport const adjustNodeToRoot = (board: PlaitMindBoard, node: MindElement): MindElement => {\n const newElement = { ...node };\n if (!Node.string(newElement.data.topic)) {\n newElement.data.topic = { children: [{ text: '思维导图' }] };\n }\n delete newElement?.strokeColor;\n delete newElement?.fill;\n delete newElement?.shape;\n delete newElement?.strokeWidth;\n delete newElement?.isCollapsed;\n return {\n ...newElement,\n layout: newElement.layout ?? MindLayoutType.right,\n isRoot: true,\n type: 'mindmap'\n };\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { ImageData } from '../../interfaces/element-data';\nimport { ImageGenerator, PlaitCommonElementRef, addElementOfFocusedImage, removeElementOfFocusedImage } from '@plait/common';\n\nexport const addImageFocus = (board: PlaitBoard, element: MindElement<ImageData>) => {\n addElementOfFocusedImage(board, element);\n const commonElementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n const imageGenerator = commonElementRef.getGenerator<ImageGenerator>(ImageGenerator.key);\n imageGenerator.setFocus(element, true);\n};\n\nexport const removeImageFocus = (board: PlaitBoard, element: MindElement<ImageData>) => {\n removeElementOfFocusedImage(board);\n const commonElementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n const imageGenerator = commonElementRef.getGenerator<ImageGenerator>(ImageGenerator.key);\n imageGenerator.setFocus(element, false);\n};\n","import { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { getFirstTextManage } from '@plait/common';\n\n/**\n * 1. return new node height if height changed\n * 2. new height is effected by zoom\n */\nexport const getNewNodeHeight = (board: PlaitBoard, element: MindElement, newNodeDynamicWidth: number) => {\n const textManage = getFirstTextManage(element);\n const { height } = textManage.getSize(undefined, newNodeDynamicWidth);\n if (Math.abs(height - element.height) > 2) {\n return height;\n }\n return undefined;\n};\n","import { getNonAbstractChildren, isStandardLayout } from '@plait/layouts';\nimport { MindElement, PlaitMind } from '../../interfaces/element';\nimport { Path, PlaitBoard, PlaitElement, setDragging } from '@plait/core';\nimport { getRootLayout } from '../layout';\nimport { DetectResult } from '../../interfaces/node';\n\nexport const addActiveOnDragOrigin = (activeElement: MindElement) => {\n PlaitElement.getElementG(activeElement).classList.add('dragging-node');\n\n !activeElement.isCollapsed &&\n activeElement.children.forEach(child => {\n addActiveOnDragOrigin(child);\n });\n};\n\nexport const removeActiveOnDragOrigin = (activeElement: MindElement) => {\n PlaitElement.getElementG(activeElement).classList.remove('dragging-node');\n !activeElement.isCollapsed &&\n activeElement.children.forEach(child => {\n removeActiveOnDragOrigin(child);\n });\n};\n\nexport const setMindDragging = (board: PlaitBoard, state: boolean) => {\n setDragging(board, state);\n if (state) {\n PlaitBoard.getBoardContainer(board).classList.add('mind-node-dragging');\n } else {\n PlaitBoard.getBoardContainer(board).classList.remove('mind-node-dragging');\n }\n};\n\nexport const hasPreviousOrNextOfDropPath = (\n parent: MindElement,\n dropTarget: {\n target: MindElement;\n detectResult: DetectResult;\n },\n dropPath: Path\n) => {\n let children = getNonAbstractChildren(parent);\n\n if (PlaitMind.isMind(parent) && isStandardLayout(getRootLayout(parent))) {\n const isDropRight = isDropStandardRight(parent, dropTarget);\n\n if (isDropRight) {\n children = children.slice(0, parent.rightNodeCount!);\n }\n if (!isDropRight) {\n children = children.slice(parent.rightNodeCount!, children.length);\n dropPath = [...dropPath, dropPath[dropPath.length - 1] - parent.rightNodeCount!];\n }\n }\n\n let hasPreviousNode = dropPath[dropPath.length - 1] !== 0;\n let hasNextNode = dropPath[dropPath.length - 1] !== (children?.length || 0);\n\n if (parent.isCollapsed) {\n hasNextNode = false;\n hasPreviousNode = false;\n }\n\n return {\n hasPreviousNode,\n hasNextNode\n };\n};\n\nexport const isDropStandardRight = (\n parent: MindElement,\n dropTarget: {\n target: MindElement;\n detectResult: DetectResult;\n }\n) => {\n const target = dropTarget.target;\n\n return (\n (PlaitMind.isMind(parent) &&\n isStandardLayout(getRootLayout(parent)) &&\n parent.children.indexOf(target) !== -1 &&\n parent.children.indexOf(target) < parent.rightNodeCount!) ||\n (PlaitMind.isMind(target) && isStandardLayout(getRootLayout(target)) && dropTarget.detectResult === 'right')\n );\n};\n","import { MindElement, PlaitMind } from '../../interfaces/element';\nimport { PlaitBoard, Point, depthFirstRecursion, Path, getIsRecursionFunc } from '@plait/core';\nimport { DetectResult, MindNode } from '../../interfaces/node';\nimport { getRectangleByNode } from '../position/node';\nimport { MindQueries } from '../../queries';\nimport { getRootLayout } from '../layout';\nimport {\n MindLayoutType,\n getNonAbstractChildren,\n isHorizontalLogicLayout,\n isIndentedLayout,\n isStandardLayout,\n isTopLayout,\n isVerticalLogicLayout\n} from '@plait/layouts';\nimport { isBottomLayout, isRightLayout, isLeftLayout, AbstractNode } from '@plait/layouts';\nimport { isChildElement } from '../mind';\n\nexport const directionCorrector = (board: PlaitBoard, node: MindNode, detectResults: DetectResult[]): DetectResult[] | null => {\n if (!node.origin.isRoot && !AbstractNode.isAbstract(node.origin)) {\n const parentLayout = MindQueries.getCorrectLayoutByElement(board, node?.parent.origin as MindElement);\n if (isStandardLayout(parentLayout)) {\n const idx = node.parent.children.findIndex(x => x === node);\n const isLeft = idx >= (node.parent.origin.rightNodeCount || 0);\n return getAllowedDirection(detectResults, [isLeft ? 'right' : 'left']);\n }\n\n if (isLeftLayout(parentLayout)) {\n return getAllowedDirection(detectResults, ['right']);\n }\n\n if (isRightLayout(parentLayout)) {\n return getAllowedDirection(detectResults, ['left']);\n }\n\n if (parentLayout === MindLayoutType.upward) {\n return getAllowedDirection(detectResults, ['bottom']);\n }\n\n if (parentLayout === MindLayoutType.downward) {\n return getAllowedDirection(detectResults, ['top']);\n }\n } else {\n const layout = MindQueries.getCorrectLayoutByElement(board, node?.origin as MindElement);\n if (isStandardLayout(layout)) {\n return getAllowedDirection(detectResults, ['top', 'bottom']);\n }\n\n if (layout === MindLayoutType.upward) {\n return getAllowedDirection(detectResults, ['left', 'right', 'bottom']);\n }\n\n if (layout === MindLayoutType.downward) {\n return getAllowedDirection(detectResults, ['left', 'right', 'top']);\n }\n\n if (isLeftLayout(layout)) {\n return getAllowedDirection(detectResults, ['right', 'top', 'bottom']);\n }\n\n if (isRightLayout(layout)) {\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\nexport const detectDropTarget = (\n board: PlaitBoard,\n detectPoint: Point,\n dropTarget: { target: MindElement; detectResult: DetectResult } | null,\n activeElements: MindElement[]\n) => {\n let detectResult: DetectResult[] | null = null;\n depthFirstRecursion(\n (board as unknown) as MindElement,\n element => {\n if (!MindElement.isMindElement(board, element) || detectResult) {\n return;\n }\n const node = MindElement.getNode(element);\n const directions = directionDetector(node, detectPoint);\n if (directions) {\n detectResult = directionCorrector(board, node, directions);\n }\n dropTarget = null;\n const isValid = activeElements.every(element => isValidTarget(element, node.origin));\n if (detectResult && isValid) {\n dropTarget = { target: node.origin, detectResult: detectResult[0] };\n }\n },\n getIsRecursionFunc(board)\n );\n return dropTarget;\n};\n\nexport const directionDetector = (targetNode: MindNode, centerPoint: Point): DetectResult[] | null => {\n const { x, y, width, height } = getRectangleByNode(targetNode);\n const yCenter = y + height / 2;\n const xCenter = x + width / 2;\n\n const top = targetNode.y;\n const bottom = targetNode.y + targetNode.height;\n const left = targetNode.x;\n const right = targetNode.x + targetNode.width;\n const direction: DetectResult[] = [];\n\n // x-axis\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 // Overlapping area, return in both directions\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-axis\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\nexport const isValidTarget = (origin: MindElement, target: MindElement) => {\n return origin !== target && !isChildElement(origin, target);\n};\n\nexport const getPathByDropTarget = (board: PlaitBoard, dropTarget: { target: MindElement; detectResult: DetectResult }) => {\n let targetPath = PlaitBoard.findPath(board, dropTarget?.target);\n const layout = PlaitMind.isMind(dropTarget?.target)\n ? getRootLayout(dropTarget?.target)\n : MindQueries.getCorrectLayoutByElement(board, MindElement.getParent(dropTarget?.target));\n const children = getNonAbstractChildren(dropTarget.target);\n if (isVerticalLogicLayout(layout)) {\n if (dropTarget.detectResult === 'top' || dropTarget.detectResult === 'bottom') {\n targetPath.push(children.length);\n }\n if (dropTarget.detectResult === 'right') {\n targetPath = Path.next(targetPath);\n }\n }\n if (isHorizontalLogicLayout(layout)) {\n if (dropTarget.detectResult === 'right') {\n if (PlaitMind.isMind(dropTarget?.target) && isStandardLayout(layout)) {\n targetPath.push(dropTarget?.target.rightNodeCount!);\n } else {\n targetPath.push(children.length);\n }\n }\n if (dropTarget.detectResult === 'left') {\n targetPath.push(children.length);\n }\n if (dropTarget.detectResult === 'bottom') {\n targetPath = Path.next(targetPath);\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(children.length);\n }\n if (isRightLayout(layout) && dropTarget.detectResult === 'right') {\n targetPath.push(children.length);\n }\n }\n return targetPath;\n};\n","import { MindNode } from '../../interfaces/node';\nimport { getRectangleByNode } from '../position/node';\nimport { PlaitBoard, RectangleClient, drawRoundRectangle } from '@plait/core';\nimport { getFillByElement, getStrokeColorByElement, getStrokeStyleByElement, getStrokeWidthByElement } from '../node-style/shape';\nimport { DefaultNodeStyle } from '../../constants/node-style';\nimport { MindElement } from '../../interfaces';\nimport { getStrokeLineDash } from '@plait/common';\n\nexport function drawRoundRectangleByNode(board: PlaitBoard, node: MindNode) {\n const rectangle = getRectangleByNode(node);\n return drawRoundRectangleByElement(board, rectangle, node.origin);\n}\n\nexport function drawRoundRectangleByElement(board: PlaitBoard, nodeRectangle: RectangleClient, element: MindElement) {\n const fill = getFillByElement(board, element);\n const stroke = getStrokeColorByElement(board, element);\n const strokeWidth = getStrokeWidthByElement(board, element);\n const strokeStyle = getStrokeStyleByElement(board, element);\n const strokeLineDash = getStrokeLineDash(strokeStyle, strokeWidth);\n const newNodeRectangle = RectangleClient.inflate(nodeRectangle, -strokeWidth);\n const nodeG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n newNodeRectangle.x,\n newNodeRectangle.y,\n newNodeRectangle.x + newNodeRectangle.width,\n newNodeRectangle.y + newNodeRectangle.height,\n {\n stroke,\n strokeWidth,\n fill,\n fillStyle: 'solid',\n strokeLineDash\n },\n false,\n DefaultNodeStyle.shape.rectangleRadius\n );\n\n return nodeG;\n}\n","export const ABSTRACT_HANDLE_COLOR = '#6698FF80'; //primary color 50% opacity\nexport const ABSTRACT_INCLUDED_OUTLINE_OFFSET = 3.5;\nexport const ABSTRACT_HANDLE_LENGTH = 10;\n\nexport const ABSTRACT_HANDLE_MASK_WIDTH = 8;\n","export enum HorizontalPlacement {\n left = 'left',\n center = 'center',\n right = 'right'\n}\n\nexport enum VerticalPlacement {\n top = 'top',\n middle = 'middle',\n bottom = 'bottom'\n}\n\nexport type PointPlacement = [HorizontalPlacement, VerticalPlacement];\n","import { Point, RectangleClient } from '@plait/core';\nimport { MindNode } from '../interfaces/node';\nimport { LayoutDirection } from '../interfaces/layout';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../interfaces/types';\n\nexport const getPointByPlacement = (client: RectangleClient, placement: PointPlacement): Point => {\n let x = client.x;\n let y = client.y;\n if (placement[0] === HorizontalPlacement.center) {\n x = client.x + client.width / 2;\n }\n if (placement[0] === HorizontalPlacement.right) {\n x = client.x + client.width;\n }\n if (placement[1] === VerticalPlacement.middle) {\n y = client.y + client.height / 2;\n }\n if (placement[1] === VerticalPlacement.bottom) {\n y = client.y + client.height;\n }\n return [x, y];\n};\n\nexport interface PlacementRef {\n placement: PointPlacement;\n client: RectangleClient;\n}\n\nexport const getXDistanceBetweenPoint = (point1: Point, point2: Point, isHorizontalLayout: boolean) => {\n if (isHorizontalLayout) {\n return Math.abs(point1[0] - point2[0]);\n } else {\n return Math.abs(point1[1] - point2[1]);\n }\n};\n\nexport const getYDistanceBetweenPoint = (point1: Point, point2: Point, isHorizontalLayout: boolean) => {\n getXDistanceBetweenPoint(point1, point2, !isHorizontalLayout);\n};\n\nexport const getLayoutDirection = (node: MindNode, isHorizontal: boolean) => {\n if (isHorizontal) {\n if (node.left) {\n return LayoutDirection.left;\n } else {\n return LayoutDirection.right;\n }\n } else {\n if (node.up) {\n return LayoutDirection.top;\n } else {\n return LayoutDirection.bottom;\n }\n }\n};\n\n// Based on right\n// Right -> Left:\n// 1. End point -> starting point/start point -> end point\n// 2. Add -> Subtract\n\n// Horizontal -> Vertical:\n// 1. Starting point/end point -> vertical axis\n// 2. Addition and subtraction -> vertical axis\n\n// Bottom -> Top:\n// 1. End point -> starting point/end point -> starting point\n// 2. Add -> Subtract\nexport const moveXOfPoint = (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 moveYOfPoint = (point: Point, distance: number, direction: LayoutDirection = LayoutDirection.right): Point => {\n if (direction === LayoutDirection.bottom) {\n return [point[0] + distance, point[1]];\n }\n if (direction === LayoutDirection.top) {\n return [point[0] + distance, point[1]];\n }\n return [point[0], point[1] + distance];\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 { MindNode } from '../../../interfaces/node';\nimport { PlaitBoard, Point, drawBezierPath, drawLinearPath } from '@plait/core';\nimport { getShapeByElement, getRectangleByNode, isChildUp, getStrokeStyleByElement } from '../..';\nimport { getBranchColorByMindElement, getBranchShapeByMindElement, getBranchWidthByMindElement } from '../../node-style/branch';\nimport { BranchShape, MindElementShape } from '../../../interfaces/element';\nimport { getStrokeLineDash, StrokeStyle } from '@plait/common';\n\nexport function drawIndentedLink(\n board: PlaitBoard,\n parent: MindNode,\n child: MindNode,\n needDrawUnderline = true,\n defaultStrokeColor: string | null = null,\n defaultStrokeWidth?: number,\n defaultStrokeStyle?: StrokeStyle\n) {\n const branchShape = getBranchShapeByMindElement(board, parent.origin);\n const branchWidth = defaultStrokeWidth || getBranchWidthByMindElement(board, child.origin);\n const branchColor = defaultStrokeColor || getBranchColorByMindElement(board, child.origin);\n const strokeStyle = defaultStrokeStyle || getStrokeStyleByElement(board, child.origin);\n\n const isUnderlineShape = (getShapeByElement(board, child.origin) as MindElementShape) === MindElementShape.underline;\n let beginX,\n beginY,\n endX,\n endY,\n beginNode = parent,\n endNode = child;\n const beginRectangle = getRectangleByNode(beginNode);\n const endRectangle = getRectangleByNode(endNode);\n\n beginX = beginNode.x + beginNode.width / 2;\n beginY = isChildUp(parent, child) ? beginRectangle.y : beginRectangle.y + beginRectangle.height;\n endX = parent.left ? endNode.x + endNode.hGap + endRectangle.width : endNode.x + endNode.hGap;\n endY = isUnderlineShape ? endNode.y + endNode.height - endNode.vGap : endNode.y + endNode.height / 2;\n\n let plusMinus = isChildUp(parent, child) ? (parent.left ? [-1, -1] : [1, -1]) : parent.left ? [-1, 1] : [1, 1];\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 isUnderlineShape && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY],\n isUnderlineShape && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY],\n isUnderlineShape && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY]\n ];\n const strokeLineDash = getStrokeLineDash(strokeStyle, branchWidth);\n if (branchShape === BranchShape.polyline) {\n const polylinePoints = [\n [beginX, beginY],\n [beginX, endY],\n [endX, endY],\n isUnderlineShape && needDrawUnderline ? [endX + (endNode.width - endNode.hGap * 2) * plusMinus[0], endY] : [endX, endY]\n ];\n\n return drawLinearPath(polylinePoints as Point[], { stroke: branchColor, strokeWidth: branchWidth, strokeLineDash });\n }\n\n const points = pointsOnBezierCurves(curve, 0.001);\n return drawBezierPath(points as Point[], { stroke: branchColor, strokeWidth: branchWidth, strokeLineDash });\n}\n","import { pointsOnBezierCurves } from 'points-on-curve';\nimport { MindNode } from '../../../interfaces/node';\nimport { PlaitBoard, Point, drawLinearPath, setStrokeLinecap } from '@plait/core';\nimport { getRectangleByNode, getShapeByElement, getStrokeStyleByElement } from '../..';\nimport { getLayoutDirection, getPointByPlacement, moveXOfPoint, transformPlacement } from '../../point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../../interfaces/types';\nimport { getBranchColorByMindElement, getBranchShapeByMindElement, getBranchWidthByMindElement } from '../../node-style/branch';\nimport { BranchShape, MindElementShape } from '../../../interfaces/element';\nimport { getStrokeLineDash, StrokeStyle } from '@plait/common';\n\nexport function drawLogicLink(\n board: PlaitBoard,\n parent: MindNode,\n node: MindNode,\n isHorizontal: boolean,\n defaultStrokeColor: string | null = null,\n defaultStrokeWidth?: number,\n defaultStrokeStyle?: StrokeStyle\n) {\n const branchShape = getBranchShapeByMindElement(board, parent.origin);\n const branchColor = defaultStrokeColor || getBranchColorByMindElement(board, node.origin);\n const branchWidth = defaultStrokeWidth || getBranchWidthByMindElement(board, node.origin);\n const strokeStyle = defaultStrokeStyle || getStrokeStyleByElement(board, node.origin);\n const hasStraightLine = branchShape === BranchShape.polyline ? true : !parent.origin.isRoot;\n const parentShape = getShapeByElement(board, parent.origin);\n const shape = getShapeByElement(board, node.origin);\n const hasUnderlineShape = shape === MindElementShape.underline;\n const hasUnderlineShapeOfParent = parentShape === MindElementShape.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 // ② Determine the convex straight line\n const straightLineDistance = 8;\n const beginPoint2 = hasStraightLine ? moveXOfPoint(beginPoint, straightLineDistance, linkDirection) : beginPoint;\n let straightLine: Point[] = hasStraightLine ? [beginPoint, beginPoint2, beginPoint2] : [];\n\n // ③ Determine the curve\n const beginBufferDistance = (parent.hGap + node.hGap) / 3;\n const endBufferDistance = -(parent.hGap + node.hGap) / 2.4;\n let curve: Point[] = [\n beginPoint2,\n moveXOfPoint(beginPoint2, beginBufferDistance, linkDirection),\n moveXOfPoint(endPoint, endBufferDistance, linkDirection),\n endPoint\n ];\n\n // ④ underline shape and horizontal\n const underlineEnd = moveXOfPoint(endPoint, nodeClient.width, linkDirection);\n const underline: Point[] = hasUnderlineShape && isHorizontal ? [underlineEnd, underlineEnd, underlineEnd] : [];\n const points = pointsOnBezierCurves([...straightLine, ...curve, ...underline]);\n const strokeLineDash = getStrokeLineDash(strokeStyle, branchWidth);\n let linkG: SVGGElement;\n if (branchShape === BranchShape.polyline) {\n const buffer = 8;\n const movePoint = moveXOfPoint(beginPoint2, buffer, linkDirection);\n const polylinePoints = [\n ...straightLine,\n movePoint,\n isHorizontal ? [movePoint[0], endPoint[1]] : [endPoint[0], movePoint[1]],\n endPoint,\n ...underline\n ];\n linkG = drawLinearPath(polylinePoints as Point[], { stroke: branchColor, strokeWidth: branchWidth, strokeLineDash });\n } else {\n linkG = PlaitBoard.getRoughSVG(board).curve(points as any, { stroke: branchColor, strokeWidth: branchWidth, strokeLineDash });\n }\n if (strokeStyle === StrokeStyle.dotted) {\n setStrokeLinecap(linkG, 'round');\n }\n return linkG;\n}\n","import { PlaitBoard } from '@plait/core';\nimport { drawIndentedLink } from './indented-link';\nimport { drawLogicLink } from './logic-link';\nimport { MindElement } from '../../../interfaces/element';\nimport { MindNode } from '../../../interfaces/node';\nimport { StrokeStyle } from '@plait/common';\n\nexport function drawLink(\n board: PlaitBoard,\n parentNode: MindNode,\n node: MindNode,\n isHorizontal: boolean,\n needDrawUnderline?: boolean,\n defaultStrokeColor?: string,\n defaultStrokeWidth?: number,\n defaultStrokeStyle?: StrokeStyle\n) {\n return MindElement.isIndentedLayout(parentNode.origin)\n ? drawIndentedLink(board, parentNode, node, needDrawUnderline, defaultStrokeColor, defaultStrokeWidth, defaultStrokeStyle)\n : drawLogicLink(board, parentNode, node, isHorizontal, defaultStrokeColor, defaultStrokeWidth, defaultStrokeStyle);\n}\n","import { EmojiData, EmojiItem, MindElement } from '../interfaces';\nimport { PlaitBoard, createForeignObject, createG } from '@plait/core';\nimport { getEmojiFontSize } from '../utils/space/emoji';\nimport { getEmojiForeignRectangle } from '../utils/position/emoji';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\nimport { EmojiComponentRef, EmojiProps, PlaitMindEmojiBoard } from '../emoji/with-emoji';\n\nexport const FOREIGN_OBJECT_EMOJI_CLASS_NAME = 'foreign-object-emoji';\n\nclass EmojiGenerator {\n emojiComponentRef: EmojiComponentRef | null = null;\n\n constructor(private board: PlaitMindEmojiBoard & PlaitBoard) {}\n\n draw(container: Element | DocumentFragment, emoji: EmojiItem, element: MindElement<EmojiData>) {\n this.destroy();\n const props: EmojiProps = {\n board: this.board,\n emojiItem: emoji,\n element,\n fontSize: getEmojiFontSize(element)\n };\n this.emojiComponentRef = this.board.renderEmoji(container, props);\n }\n\n destroy() {\n if (this.emojiComponentRef) {\n this.emojiComponentRef.destroy();\n this.emojiComponentRef = null;\n }\n }\n}\n\nexport class NodeEmojisGenerator {\n static key = 'node-emojis-generator';\n\n emojiGenerators: EmojiGenerator[] = [];\n\n g?: SVGGElement;\n\n constructor(private board: PlaitMindBoard) {}\n\n drawEmojis(element: MindElement) {\n this.destroy();\n if (MindElement.hasEmojis(element)) {\n this.g = createG();\n this.g.classList.add('emojis');\n const foreignRectangle = getEmojiForeignRectangle(this.board, element);\n const foreignObject = createForeignObject(\n foreignRectangle.x,\n foreignRectangle.y,\n foreignRectangle.width,\n foreignRectangle.height\n );\n foreignObject.classList.add(FOREIGN_OBJECT_EMOJI_CLASS_NAME);\n this.g.append(foreignObject);\n const container = document.createElement('div');\n container.classList.add('node-emojis-container');\n foreignObject.append(container);\n this.emojiGenerators = element.data.emojis.map(emojiItem => {\n const drawer = new EmojiGenerator((this.board as unknown) as PlaitBoard & PlaitMindEmojiBoard);\n drawer.draw(container, emojiItem, element);\n return drawer;\n });\n return this.g;\n }\n return undefined;\n }\n\n destroy() {\n if (this.g) {\n this.g.remove();\n }\n this.emojiGenerators.forEach(drawer => drawer.destroy());\n this.emojiGenerators = [];\n }\n}\n","import { drawRoundRectangleByNode } from './node-shape';\nimport { BASE, PRIMARY_COLOR, STROKE_WIDTH } from '../../constants';\nimport { DetectResult, LayoutDirection, MindElement, MindNode, PlaitMind } from '../../interfaces';\nimport { getRectangleByNode } from '../position/node';\nimport { PlaitBoard, Point, drawRoundRectangle, createG, Path, PlaitNode, PlaitElement, updateForeignObject } from '@plait/core';\nimport { MindQueries } from '../../queries';\nimport { isHorizontalLayout, isIndentedLayout, isStandardLayout, isTopLayout, MindLayoutType } from '@plait/layouts';\nimport { getTopicRectangleByNode } from '../position/topic';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../interfaces/types';\nimport { getLayoutDirection, getPointByPlacement, moveXOfPoint, moveYOfPoint, transformPlacement } from '../point-placement';\nimport { PlaitMindBoard } from '../../plugins/with-mind.board';\nimport { hasPreviousOrNextOfDropPath } from '../dnd/common';\nimport { drawLink } from './node-link/draw-link';\nimport { getEmojiForeignRectangle } from '../position/emoji';\nimport { getImageForeignRectangle } from '../position';\nimport { ImageGenerator, PlaitCommonElementRef, getFirstTextManage } from '@plait/common';\nimport { NodeEmojisGenerator } from '../../generators/node-emojis.generator';\n\nexport const drawFakeDragNode = (board: PlaitBoard, element: MindElement, offsetX: number, offsetY: number) => {\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n const mindNode = MindElement.getNode(element);\n const dragFakeNodeG = createG();\n dragFakeNodeG.classList.add('dragging', 'fake-node', 'plait-board-attached');\n\n const fakeDraggingNode: MindNode = {\n ...mindNode,\n children: [],\n x: mindNode.x + offsetX,\n y: mindNode.y + offsetY\n };\n const textRectangle = getTopicRectangleByNode(board as PlaitMindBoard, mindNode);\n const fakeNodeG = drawRoundRectangleByNode(board, fakeDraggingNode);\n\n const richtextG = getFirstTextManage(element).g.cloneNode(true) as SVGGElement;\n updateForeignObject(richtextG, textRectangle.width, textRectangle.height, textRectangle.x + offsetX, textRectangle.y + offsetY);\n\n dragFakeNodeG?.append(fakeNodeG);\n dragFakeNodeG?.append(richtextG);\n\n // draw emojis\n if (MindElement.hasEmojis(element)) {\n const nodeEmojisGenerator = ref.getGenerator<NodeEmojisGenerator>(NodeEmojisGenerator.key);\n const fakeEmojisG = (nodeEmojisGenerator.g as SVGGElement).cloneNode(true) as SVGGElement;\n const foreignRectangle = getEmojiForeignRectangle(board as PlaitMindBoard, element);\n updateForeignObject(\n fakeEmojisG,\n foreignRectangle.width,\n foreignRectangle.height,\n foreignRectangle.x + offsetX,\n foreignRectangle.y + offsetY\n );\n dragFakeNodeG?.append(fakeEmojisG);\n }\n\n if (MindElement.hasImage(element)) {\n const imageGenerator = ref.getGenerator<ImageGenerator>(ImageGenerator.key);\n const fakeImageG = (imageGenerator.g as SVGGElement).cloneNode(true) as SVGGElement;\n const foreignRectangle = getImageForeignRectangle(board as PlaitMindBoard, element);\n updateForeignObject(\n fakeImageG,\n foreignRectangle.width,\n foreignRectangle.height,\n foreignRectangle.x + offsetX,\n foreignRectangle.y + offsetY\n );\n dragFakeNodeG?.append(fakeImageG);\n }\n return dragFakeNodeG;\n};\n\nexport const drawFakeDropNode = (\n board: PlaitBoard,\n dropTarget: {\n target: MindElement;\n detectResult: DetectResult;\n },\n path: Path\n) => {\n const target = dropTarget.target;\n const fakeDropNodeG = createG();\n const parent = PlaitNode.get(board, Path.parent(path)) as MindElement;\n const layout = MindQueries.getLayoutByElement(parent) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(layout);\n const { hasNextNode, hasPreviousNode } = hasPreviousOrNextOfDropPath(parent, dropTarget, path);\n\n const width = 30;\n const height = 12;\n let fakeNode: MindNode, centerPoint: Point, basicNode: MindNode, linkDirection: LayoutDirection;\n\n if (!hasPreviousNode && !hasNextNode) {\n const parentNode = MindElement.getNode(parent);\n const parentRect = getRectangleByNode(parentNode);\n\n linkDirection = getLayoutDirection(parentNode, isHorizontal);\n basicNode = parentNode;\n\n if (PlaitMind.isMind(target) && isStandardLayout(layout)) {\n if (dropTarget.detectResult === 'left') {\n linkDirection = LayoutDirection.left;\n basicNode.left = true;\n } else {\n linkDirection = LayoutDirection.right;\n basicNode.left = false;\n }\n }\n\n const placement: PointPlacement = [HorizontalPlacement.right, VerticalPlacement.middle];\n transformPlacement(placement, linkDirection);\n const parentCenterPoint = getPointByPlacement(parentRect, placement);\n\n if (isIndentedLayout(layout)) {\n const placement: PointPlacement = [\n HorizontalPlacement.center,\n isTopLayout(layout) ? VerticalPlacement.top : VerticalPlacement.bottom\n ];\n const parentCenterPoint = getPointByPlacement(parentRect, placement);\n\n centerPoint = moveXOfPoint(parentCenterPoint, height, linkDirection);\n centerPoint[1] = isTopLayout(layout) ? centerPoint[1] - height : centerPoint[1] + height;\n } else {\n centerPoint = moveXOfPoint(parentCenterPoint, width, linkDirection);\n }\n } else if (!hasPreviousNode && hasNextNode) {\n const nextElement = PlaitNode.get(board, path) as MindElement;\n basicNode = MindElement.getNode(nextElement);\n const nextRect = getRectangleByNode(basicNode);\n linkDirection = getLayoutDirection(basicNode, isHorizontal);\n\n const placement: PointPlacement = [HorizontalPlacement.left, VerticalPlacement.top];\n\n transformPlacement(placement, linkDirection);\n\n let offset = -height;\n if (MindElement.isIndentedLayout(parent)) {\n offset = isTopLayout(layout) ? offset / 2 + basicNode.height - basicNode.vGap : 0;\n }\n\n centerPoint = getPointByPlacement(nextRect, placement);\n centerPoint = moveYOfPoint(centerPoint, offset, linkDirection);\n } else if (hasPreviousNode && !hasNextNode) {\n const previousElement = PlaitNode.get(board, Path.previous(path)) as MindElement;\n basicNode = MindElement.getNode(previousElement);\n const previousRect = getRectangleByNode(basicNode);\n linkDirection = getLayoutDirection(basicNode, isHorizontal);\n\n const placement: PointPlacement = [HorizontalPlacement.left, VerticalPlacement.bottom];\n\n transformPlacement(placement, linkDirection);\n\n let offset = height;\n if (MindElement.isIndentedLayout(parent)) {\n offset = isTopLayout(layout) ? -offset - (basicNode.height - basicNode.vGap) : offset;\n }\n centerPoint = getPointByPlacement(previousRect, placement);\n centerPoint = moveYOfPoint(centerPoint, offset, linkDirection);\n } else {\n const previousElement = PlaitNode.get(board, Path.previous(path)) as MindElement;\n basicNode = MindElement.getNode(previousElement);\n const previousRect = getRectangleByNode(basicNode);\n\n const nextElement = PlaitNode.get(board, path) as MindElement;\n const nextNode = MindElement.getNode(nextElement);\n const nextRect = getRectangleByNode(nextNode);\n\n const beginPlacement: PointPlacement = [HorizontalPlacement.left, VerticalPlacement.bottom];\n const endPlacement: PointPlacement = [HorizontalPlacement.left, VerticalPlacement.top];\n linkDirection = getLayoutDirection(basicNode, isHorizontal);\n\n transformPlacement(beginPlacement, linkDirection);\n transformPlacement(endPlacement, linkDirection);\n\n const previousPoint = getPointByPlacement(previousRect, beginPlacement);\n const nextPoint = getPointByPlacement(nextRect, endPlacement);\n\n centerPoint = [(previousPoint[0] + nextPoint[0]) / 2, (previousPoint[1] + nextPoint[1]) / 2];\n }\n\n let cornerPoint = centerPoint,\n oppositePoint = centerPoint;\n\n const offsetY = isHorizontal ? height : width;\n const offsetX = isHorizontal ? width : height;\n\n cornerPoint = moveYOfPoint(cornerPoint, -offsetY / 2, linkDirection!);\n\n oppositePoint = moveYOfPoint(oppositePoint, offsetY / 2, linkDirection!);\n oppositePoint = moveXOfPoint(oppositePoint, offsetX, linkDirection!);\n\n const x = Math.min(cornerPoint[0], oppositePoint[0]);\n const y = Math.min(cornerPoint[1], oppositePoint[1]);\n\n fakeNode = {\n ...basicNode!,\n x,\n y,\n width,\n height,\n hGap: MindElement.isIndentedLayout(parent) ? BASE * 4 + (basicNode.origin.strokeWidth || STROKE_WIDTH) : 0,\n vGap: MindElement.isIndentedLayout(parent) ? BASE : 0\n };\n\n const fakeRectangleG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(board),\n fakeNode!.x,\n fakeNode!.y,\n fakeNode!.x + width,\n fakeNode!.y + height,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 2,\n fill: PRIMARY_COLOR,\n fillStyle: 'solid'\n }\n );\n\n const link = drawLink(board, MindElement.getNode(parent), fakeNode, isHorizontal, false, PRIMARY_COLOR, STROKE_WIDTH);\n fakeDropNodeG?.appendChild(link);\n fakeDropNodeG?.appendChild(fakeRectangleG);\n\n return fakeDropNodeG;\n};\n","import { PlaitOptionsBoard } from '@plait/core';\nimport { MindElement } from '../interfaces/element';\nimport { AbstractNode } from '@plait/layouts';\n\nexport enum AbstractHandlePosition {\n start = 'start',\n end = 'end'\n}\n\nexport enum AbstractResizeState {\n start = 'start',\n resizing = 'resizing',\n end = 'end'\n}\n\nexport interface PlaitAbstractBoard extends PlaitOptionsBoard {\n onAbstractResize?: (state: AbstractResizeState) => void;\n}\n\nexport type AbstractRefs = Map<MindElement, Pick<AbstractNode, 'start' | 'end'>>;\n","import { createG, getRectangleByElements, PlaitBoard, RectangleClient, setStrokeLinecap } from '@plait/core';\nimport { PRIMARY_COLOR } from '../../constants';\nimport { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants/abstract-node';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MindElement } from '../../interfaces';\nimport { MindLayoutType, isHorizontalLayout } from '@plait/layouts';\nimport { MindQueries } from '../../queries';\nimport { getLayoutDirection, getPointByPlacement, moveXOfPoint, transformPlacement } from '../point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../interfaces/types';\nimport { getRectangleByResizingLocation } from '../abstract/resize';\nimport { AbstractHandlePosition } from '../../plugins/with-abstract-resize.board';\nimport { Options } from 'roughjs/bin/core';\n\nexport function drawAbstractIncludedOutline(\n board: PlaitBoard,\n roughSVG: RoughSVG,\n element: MindElement,\n activeHandlePosition?: AbstractHandlePosition,\n resizingLocation?: number\n) {\n const abstractIncludedG = createG();\n\n const parentElement = MindElement.getParent(element);\n const nodeLayout = MindQueries.getCorrectLayoutByElement(board, element) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n\n const includedElements = parentElement.children.slice(element.start!, element.end! + 1);\n let abstractRectangle = getRectangleByElements(board, includedElements, true);\n abstractRectangle = RectangleClient.getOutlineRectangle(abstractRectangle, -ABSTRACT_INCLUDED_OUTLINE_OFFSET);\n\n if (resizingLocation) {\n abstractRectangle = getRectangleByResizingLocation(abstractRectangle, resizingLocation, activeHandlePosition!, isHorizontal);\n }\n\n const rectangle = drawAbstractRoundRectangle(\n roughSVG,\n abstractRectangle.x,\n abstractRectangle.y,\n abstractRectangle.x + abstractRectangle.width,\n abstractRectangle.y + abstractRectangle.height,\n isHorizontal,\n {\n stroke: PRIMARY_COLOR,\n strokeWidth: 1,\n fillStyle: 'solid'\n }\n );\n\n const startPlacement = [HorizontalPlacement.center, VerticalPlacement.top] as PointPlacement;\n const endPlacement = [HorizontalPlacement.center, VerticalPlacement.bottom] as PointPlacement;\n\n const linkDirection = getLayoutDirection(MindElement.getNode(element), isHorizontal);\n\n transformPlacement(startPlacement, linkDirection);\n transformPlacement(endPlacement, linkDirection);\n\n let startCenterPoint = getPointByPlacement(abstractRectangle, startPlacement);\n let endCenterPoint = getPointByPlacement(abstractRectangle, endPlacement);\n\n const startPoint1 = moveXOfPoint(startCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n const startPoint2 = moveXOfPoint(startCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n\n const endPoint1 = moveXOfPoint(endCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n const endPoint2 = moveXOfPoint(endCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);\n\n const startHandle = roughSVG.line(\n startPoint1[0],\n startPoint1[1],\n startPoint2[0],\n startPoint2[1],\n getHandleOption(activeHandlePosition === AbstractHandlePosition.start)\n );\n\n const endHandle = roughSVG.line(\n endPoint1[0],\n endPoint1[1],\n endPoint2[0],\n endPoint2[1],\n getHandleOption(activeHandlePosition === AbstractHandlePosition.end)\n );\n\n handleBoardClass(board, activeHandlePosition, isHorizontal);\n\n setStrokeLinecap(startHandle, 'round');\n setStrokeLinecap(endHandle, 'round');\n\n abstractIncludedG.append(startHandle);\n abstractIncludedG.append(endHandle);\n abstractIncludedG.append(rectangle);\n\n return abstractIncludedG;\n}\n\nexport function getHandleOption(isHover: boolean) {\n return isHover\n ? {\n stroke: PRIMARY_COLOR,\n strokeWidth: 4,\n fillStyle: 'solid'\n }\n : {\n stroke: ABSTRACT_HANDLE_COLOR,\n strokeWidth: 3,\n fillStyle: 'solid'\n };\n}\n\nfunction handleBoardClass(board: PlaitBoard, activeHandlePosition: AbstractHandlePosition | undefined, isHorizontal: boolean) {\n if (activeHandlePosition) {\n if (isHorizontal) {\n PlaitBoard.getBoardContainer(board).classList.add('abstract-resizing-horizontal');\n } else {\n PlaitBoard.getBoardContainer(board).classList.add('abstract-resizing-vertical');\n }\n } else {\n PlaitBoard.getBoardContainer(board).classList.remove('abstract-resizing-horizontal');\n PlaitBoard.getBoardContainer(board).classList.remove('abstract-resizing-vertical');\n }\n}\n\nexport function drawAbstractRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n isHorizontal: boolean,\n options: Options\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n const radius = 5;\n const handleGap = 4;\n const handleLength = 10;\n\n const handleSpace = handleLength + handleGap * 2;\n\n if (isHorizontal) {\n const handleSideLine = (width - handleSpace - radius * 2) / 2;\n const sideLine = height - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${handleSideLine},0\n m${handleSpace},0\n l${handleSideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${sideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${handleSideLine},0\n m-${handleSpace},0\n l-${handleSideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${sideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n } else {\n const handleSideLine = (height - handleSpace - radius * 2) / 2;\n const sideLine = width - radius * 2;\n return rs.path(\n `M${x1 + radius},${y1}\n l${sideLine},0\n a${radius},${radius},0,0,1,${radius},${radius}\n l0,${handleSideLine}\n m0,${handleSpace}\n l0,${handleSideLine}\n a${radius},${radius},0,0,1,-${radius},${radius}\n l-${sideLine},0\n a${radius},${radius},0,0,1,-${radius},-${radius}\n l0,-${handleSideLine}\n m0,-${handleSpace}\n l0,-${handleSideLine}\n a${radius},${radius},0,0,1,${radius},-${radius}`,\n options\n );\n }\n}\n","import { ACTIVE_STROKE_WIDTH, PlaitBoard, RectangleClient, SELECTION_RECTANGLE_CLASS_NAME, createG, drawRoundRectangle } from '@plait/core';\nimport { MindElement, BaseData } from '../interfaces';\nimport { getRectangleByNode } from '../utils/position/node';\nimport { PRIMARY_COLOR } from '../constants/default';\nimport { AbstractNode } from '@plait/layouts';\nimport { drawAbstractIncludedOutline } from '../utils/draw/abstract-outline';\nimport { AbstractHandlePosition } from '../plugins/with-abstract-resize.board';\nimport { DefaultNodeStyle } from '../constants/node-style';\nimport { getStrokeWidthByElement } from '../utils/node-style/shape';\nimport { Generator } from '@plait/common';\n\nexport interface ActiveData {\n selected: boolean;\n}\n\nexport class NodeActiveGenerator extends Generator<MindElement, ActiveData> {\n static key = 'mind-node-active';\n\n abstractOutlineG?: SVGGElement;\n\n canDraw(element: MindElement<BaseData>, data: ActiveData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: MindElement<BaseData>, data: ActiveData): SVGGElement {\n const activeG = createG();\n const node = MindElement.getNode(element);\n const rectangle = getRectangleByNode(node);\n const strokeWidth = getStrokeWidthByElement(this.board, element);\n const activeStrokeWidth = ACTIVE_STROKE_WIDTH;\n const activeRectangle = RectangleClient.inflate(rectangle, activeStrokeWidth);\n const strokeG = drawRoundRectangle(\n PlaitBoard.getRoughSVG(this.board),\n activeRectangle.x,\n activeRectangle.y,\n activeRectangle.x + activeRectangle.width,\n activeRectangle.y + activeRectangle.height,\n { stroke: PRIMARY_COLOR, strokeWidth: activeStrokeWidth, fill: '' },\n true,\n DefaultNodeStyle.shape.rectangleRadius + (activeStrokeWidth + strokeWidth) / 2\n );\n if (AbstractNode.isAbstract(element)) {\n this.abstractOutlineG = drawAbstractIncludedOutline(this.board, PlaitBoard.getRoughSVG(this.board), element);\n activeG.append(this.abstractOutlineG);\n strokeG.classList.add('abstract-element');\n }\n activeG.appendChild(strokeG);\n activeG.classList.add(SELECTION_RECTANGLE_CLASS_NAME)\n return activeG;\n }\n\n updateAbstractOutline(element: MindElement, activeHandlePosition?: AbstractHandlePosition, resizingLocation?: number) {\n const abstractOutlineG = drawAbstractIncludedOutline(\n this.board,\n PlaitBoard.getRoughSVG(this.board),\n element,\n activeHandlePosition,\n resizingLocation\n );\n if (this.abstractOutlineG) {\n this.abstractOutlineG.replaceWith(abstractOutlineG);\n this.abstractOutlineG = abstractOutlineG;\n }\n }\n}\n","import { PlaitBoard, PlaitElement, Point, RectangleClient, getRectangleByElements, getSelectedElements } from '@plait/core';\nimport { MindElement } from '../../interfaces';\nimport { AbstractNode, LayoutNode, MindLayoutType, isHorizontalLayout } from '@plait/layouts';\nimport { ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants/abstract-node';\nimport { MindQueries } from '../../queries';\nimport { getCorrectStartEnd } from '@plait/layouts';\nimport { MindNodeComponent } from '../../mind-node.component';\nimport { AbstractHandlePosition } from '../../plugins/with-abstract-resize.board';\nimport { PlaitCommonElementRef } from '@plait/common';\nimport { NodeActiveGenerator } from '../../generators/node-active.generator';\n\nexport const getRectangleByResizingLocation = (\n abstractRectangle: RectangleClient,\n location: number,\n activeHandlePosition: AbstractHandlePosition,\n isHorizontal: boolean\n) => {\n if (isHorizontal) {\n if (activeHandlePosition === AbstractHandlePosition.start) {\n return {\n ...abstractRectangle,\n y: location,\n height: abstractRectangle.height + abstractRectangle.y - location\n };\n } else {\n return {\n ...abstractRectangle,\n height: location - abstractRectangle.y\n };\n }\n } else {\n if (activeHandlePosition === AbstractHandlePosition.start) {\n return {\n ...abstractRectangle,\n x: location,\n width: abstractRectangle.width + abstractRectangle.x - location\n };\n } else {\n return {\n ...abstractRectangle,\n width: location - abstractRectangle.x\n };\n }\n }\n};\n\nexport const getLocationScope = (\n board: PlaitBoard,\n handlePosition: AbstractHandlePosition,\n parentChildren: MindElement[],\n element: MindElement,\n parent: LayoutNode,\n isHorizontal: boolean\n) => {\n const node = (MindElement.getNode(element) as unknown) as LayoutNode;\n const { start, end } = getCorrectStartEnd(node.origin as AbstractNode, parent);\n\n const startNode = parentChildren[start];\n const endNode = parentChildren[end];\n\n if (handlePosition === AbstractHandlePosition.start) {\n const abstractNode = parentChildren.filter(child => AbstractNode.isAbstract(child) && child.end < element.start!);\n let minNode;\n\n if (abstractNode.length) {\n const index = abstractNode\n .map(node => {\n const { end } = getCorrectStartEnd(node as AbstractNode, parent);\n return end;\n })\n .sort((a, b) => b - a)[0];\n minNode = parentChildren[index + 1];\n } else {\n minNode = parentChildren[0];\n }\n\n const minNodeRectangle = getRectangleByElements(board, [minNode], true);\n const endNodeRectangle = getRectangleByElements(board, [endNode], false);\n\n if (isHorizontal) {\n return {\n max: endNodeRectangle.y - ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: minNodeRectangle.y - ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n } else {\n return {\n max: endNodeRectangle.x - ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: minNodeRectangle.x - ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n }\n } else {\n const abstractNode = parentChildren.filter(child => AbstractNode.isAbstract(child) && child.start > element.end!);\n let maxNode;\n\n if (abstractNode.length) {\n const index = abstractNode\n .map(node => {\n const { start } = getCorrectStartEnd(node as AbstractNode, parent);\n return start;\n })\n .sort((a, b) => a - b)[0];\n maxNode = parentChildren[index - 1];\n } else {\n const children = parentChildren.filter(child => !AbstractNode.isAbstract(child));\n maxNode = parentChildren[children.length - 1];\n }\n\n const maxNodeRectangle = getRectangleByElements(board, [maxNode], true);\n const startNodeRectangle = getRectangleByElements(board, [startNode], false);\n\n if (isHorizontal) {\n return {\n max: maxNodeRectangle.y + maxNodeRectangle.height + ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: startNodeRectangle.y + startNodeRectangle.height + ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n } else {\n return {\n max: maxNodeRectangle.x + maxNodeRectangle.width + ABSTRACT_INCLUDED_OUTLINE_OFFSET,\n min: startNodeRectangle.x + startNodeRectangle.width + ABSTRACT_INCLUDED_OUTLINE_OFFSET\n };\n }\n }\n};\n\nexport const getHitAbstractHandle = (board: PlaitBoard, element: MindElement, point: Point) => {\n const nodeLayout = MindQueries.getCorrectLayoutByElement(board, element) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n\n const parentElement = MindElement.getParent(element);\n const includedElements = parentElement.children.slice(element.start!, element.end! + 1);\n let abstractRectangle = getRectangleByElements(board, includedElements, true);\n abstractRectangle = RectangleClient.getOutlineRectangle(abstractRectangle, -ABSTRACT_INCLUDED_OUTLINE_OFFSET);\n\n const startHandleRec = getAbstractHandleRectangle(abstractRectangle, isHorizontal, AbstractHandlePosition.start);\n const endHandleRec = getAbstractHandleRectangle(abstractRectangle, isHorizontal, AbstractHandlePosition.end);\n\n const pointRec = RectangleClient.getRectangleByPoints([point, point]);\n if (RectangleClient.isHit(pointRec, startHandleRec)) return AbstractHandlePosition.start;\n if (RectangleClient.isHit(pointRec, endHandleRec)) return AbstractHandlePosition.end;\n return undefined;\n};\n\nexport const getAbstractHandleRectangle = (rectangle: RectangleClient, isHorizontal: boolean, position: AbstractHandlePosition) => {\n let result;\n if (position === AbstractHandlePosition.start) {\n const location = isHorizontal ? rectangle.y : rectangle.x;\n\n result = getRectangleByResizingLocation(\n rectangle,\n location + ABSTRACT_HANDLE_MASK_WIDTH / 2,\n AbstractHandlePosition.end,\n isHorizontal\n );\n result = getRectangleByResizingLocation(result, location - ABSTRACT_HANDLE_MASK_WIDTH / 2, position, isHorizontal);\n } else {\n const location = isHorizontal ? rectangle.y + rectangle.height : rectangle.x + rectangle.width;\n\n result = getRectangleByResizingLocation(\n rectangle,\n location - ABSTRACT_HANDLE_MASK_WIDTH / 2,\n AbstractHandlePosition.start,\n isHorizontal\n );\n result = getRectangleByResizingLocation(result, location + ABSTRACT_HANDLE_MASK_WIDTH / 2, position, isHorizontal);\n }\n return result;\n};\n\nexport function findLocationLeftIndex(board: PlaitBoard, parentChildren: MindElement[], location: number, isHorizontal: boolean) {\n const children = parentChildren.filter(child => {\n return !AbstractNode.isAbstract(child);\n });\n const recArray = children.map(child => {\n return getRectangleByElements(board, [child], false);\n });\n\n const firstRec = getRectangleByElements(board, [children[0]], true);\n const fakeLeftRec = {\n x: firstRec.x - firstRec.width,\n y: firstRec.y - firstRec.height,\n width: firstRec.width,\n height: firstRec.height\n };\n const lastRec = getRectangleByElements(board, [children[children.length - 1]], true);\n const fakeRightRec = {\n x: lastRec.x + lastRec.width,\n y: lastRec.y + lastRec.height,\n width: lastRec.width,\n height: lastRec.height\n };\n\n recArray.push(fakeRightRec);\n recArray.unshift(fakeLeftRec);\n\n for (let i = 0; i < recArray.length - 1; i++) {\n const recXOrY = isHorizontal ? recArray[i].y : recArray[i].x;\n const recWidthOrHeight = isHorizontal ? recArray[i].height : recArray[i].width;\n\n if (\n location >= recXOrY + recWidthOrHeight / 2 &&\n location <= recArray[i + 1][isHorizontal ? 'y' : 'x'] + recArray[i + 1][isHorizontal ? 'height' : 'width'] / 2\n ) {\n return i - 1;\n }\n }\n return 0;\n}\n\nexport function handleTouchedAbstract(board: PlaitBoard, touchedAbstract: MindElement | undefined, endPoint: Point) {\n let touchedHandle;\n const abstract = (getSelectedElements(board).filter(element => AbstractNode.isAbstract(element)) as MindElement[]).find(element => {\n touchedHandle = getHitAbstractHandle(board, element as MindElement, endPoint);\n return touchedHandle;\n });\n\n if (touchedAbstract === abstract) {\n return touchedAbstract;\n }\n\n if (touchedAbstract) {\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(touchedAbstract);\n const activeGenerator = ref.getGenerator<NodeActiveGenerator>(NodeActiveGenerator.key);\n activeGenerator.updateAbstractOutline(touchedAbstract);\n touchedAbstract = undefined;\n }\n\n if (abstract) {\n touchedAbstract = abstract;\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(touchedAbstract);\n const activeGenerator = ref.getGenerator<NodeActiveGenerator>(NodeActiveGenerator.key);\n activeGenerator.updateAbstractOutline(touchedAbstract, touchedHandle);\n }\n\n return touchedAbstract;\n}\n","import { Path, PlaitBoard, PlaitNode } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { getRootLayout } from '../layout';\nimport { MindLayoutType } from '@plait/layouts';\n\nexport const isInRightBranchOfStandardLayout = (selectedElement: MindElement) => {\n const parentElement = MindElement.findParent(selectedElement);\n if (parentElement) {\n const nodeIndex: number = parentElement.children.findIndex(item => item.id === selectedElement.id);\n if (\n parentElement.isRoot &&\n getRootLayout(parentElement) === MindLayoutType.standard &&\n parentElement.rightNodeCount &&\n nodeIndex <= parentElement.rightNodeCount - 1\n ) {\n return true;\n }\n }\n return false;\n};\n\nexport interface RightNodeCountRef {\n path: Path;\n rightNodeCount: number;\n}\n\nexport const insertElementHandleRightNodeCount = (\n board: PlaitBoard,\n path: Path,\n insertCount: number,\n effectedRightNodeCount: RightNodeCountRef[] = []\n) => {\n let index = effectedRightNodeCount.findIndex(ref => Path.equals(ref.path, path));\n const mind = PlaitNode.get(board, path) as MindElement;\n if (index === -1) {\n effectedRightNodeCount.push({ path, rightNodeCount: mind.rightNodeCount! + insertCount });\n } else {\n effectedRightNodeCount[index].rightNodeCount += insertCount;\n }\n return effectedRightNodeCount;\n};\n\nexport const deleteElementsHandleRightNodeCount = (\n board: PlaitBoard,\n deletableElements: MindElement[],\n effectedRightNodeCount: RightNodeCountRef[] = []\n) => {\n deletableElements.forEach(element => {\n if (isInRightBranchOfStandardLayout(element)) {\n const mind = MindElement.getParent(element);\n const path = PlaitBoard.findPath(board, mind);\n let index = effectedRightNodeCount.findIndex(ref => Path.equals(ref.path, path));\n if (index === -1) {\n effectedRightNodeCount.push({ path, rightNodeCount: mind.rightNodeCount! - 1 });\n } else {\n effectedRightNodeCount[index].rightNodeCount -= 1;\n }\n }\n });\n return effectedRightNodeCount;\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { getNonAbstractChildren } from '@plait/layouts';\nimport { Path } from 'slate';\n\nexport function findNewChildNodePath(board: PlaitBoard, element: PlaitElement) {\n const children = getNonAbstractChildren(element);\n return PlaitBoard.findPath(board, element).concat(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 { PlaitBoard } from '@plait/core';\nimport { MindElement, PlaitMind } from '../interfaces';\nimport { correctLayoutByDirection, getInCorrectLayoutDirection, getRootLayout } from '../utils';\nimport { AbstractNode, MindLayoutType, getAbstractLayout } 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 = (board: PlaitBoard, element: MindElement) => {\n const ancestors = MindElement.getAncestors(board, element) as MindElement[];\n ancestors.unshift(element);\n const root = ancestors[ancestors.length - 1];\n let rootLayout = getRootLayout(root);\n\n if (PlaitMind.isMind(element)) {\n return rootLayout;\n }\n\n const node = MindElement.getNode(element);\n let correctRootLayout = rootLayout;\n if (rootLayout === MindLayoutType.standard) {\n correctRootLayout = node.left ? MindLayoutType.left : MindLayoutType.right;\n }\n\n let layout = null;\n const elementWithLayout = ancestors.find(value => value.layout || AbstractNode.isAbstract(value));\n if (elementWithLayout) {\n if (AbstractNode.isAbstract(elementWithLayout)) {\n const parent = MindElement.getParent(elementWithLayout);\n const parentLayout = getCorrectLayoutByElement(board, parent);\n layout = getAbstractLayout(parentLayout);\n } else {\n layout = elementWithLayout?.layout;\n }\n }\n\n if (layout === MindLayoutType.standard || !layout) {\n return correctRootLayout;\n } else {\n const incorrectDirection = getInCorrectLayoutDirection(correctRootLayout, layout);\n if (incorrectDirection) {\n return correctLayoutByDirection(layout, incorrectDirection);\n } else {\n return layout;\n }\n }\n};\n","import { MindElement } from '../interfaces';\nimport { MindLayoutType } from '@plait/layouts';\nimport { getCorrectLayoutByElement } from './get-correct-layout-by-element';\nimport { PlaitBoard } from '@plait/core';\n\nexport const getBranchLayouts = (board: PlaitBoard, element: MindElement) => {\n const layouts: MindLayoutType[] = [];\n if (element.layout) {\n // TODO: getCorrectLayoutByElement Contains recursive operations. getBranchLayouts itself also has recursive operations and needs to be optimized.\n layouts.unshift(getCorrectLayoutByElement(board, element));\n }\n let parent = MindElement.findParent(element);\n while (parent) {\n if (parent.layout) {\n layouts.unshift(parent.layout);\n }\n parent = MindElement.findParent(parent);\n }\n return layouts;\n};\n","import { MindElement } from '../interfaces';\nimport { getAvailableSubLayoutsByLayoutDirections, getBranchDirectionsByLayouts } from '../utils';\nimport { MindLayoutType } from '@plait/layouts';\nimport { getBranchLayouts } from './get-branch-layouts';\nimport { PlaitBoard } from '@plait/core';\n\nexport const getAvailableSubLayoutsByElement = (board: PlaitBoard, element: MindElement) => {\n const parentElement = MindElement.findParent(element);\n if (parentElement) {\n const branchLayouts = getBranchLayouts(board, parentElement);\n if (branchLayouts[0] === MindLayoutType.standard) {\n const node = MindElement.getNode(element);\n branchLayouts[0] = node.left ? MindLayoutType.left : MindLayoutType.right;\n }\n const currentLayoutDirections = getBranchDirectionsByLayouts(branchLayouts);\n let availableSubLayouts = getAvailableSubLayoutsByLayoutDirections(currentLayoutDirections);\n const parentLayout = [branchLayouts[branchLayouts.length - 1]];\n const parentDirections = getBranchDirectionsByLayouts(parentLayout);\n const parentAvailableSubLayouts = getAvailableSubLayoutsByLayoutDirections(parentDirections);\n\n availableSubLayouts = availableSubLayouts.filter(layout =>\n parentAvailableSubLayouts.some(parentAvailableSubLayout => parentAvailableSubLayout === layout)\n );\n return availableSubLayouts;\n }\n return undefined;\n};\n","import { MindElement, PlaitMind } from '../interfaces';\nimport { AbstractNode, MindLayoutType, getAbstractLayout } from '@plait/layouts';\nimport { getDefaultLayout } from '../utils/layout';\n\nexport const getLayoutByElement = (element: MindElement): MindLayoutType => {\n const layout = element.layout;\n if (layout) {\n return layout;\n }\n\n const parent = !PlaitMind.isMind(element) && MindElement.getParent(element);\n\n if (AbstractNode.isAbstract(element) && parent) {\n return getAbstractLayout(getLayoutByElement(parent));\n }\n\n if (parent) {\n return getLayoutByElement(parent);\n }\n\n return getDefaultLayout();\n};\n","import { getAvailableSubLayoutsByElement } from './get-available-sublayouts-by-element';\nimport { getBranchLayouts } from './get-branch-layouts';\nimport { getCorrectLayoutByElement } from './get-correct-layout-by-element';\nimport { getLayoutByElement } from './get-layout-by-element';\n\nexport const MindQueries = {\n getAvailableSubLayoutsByElement,\n getBranchLayouts,\n getLayoutByElement,\n getCorrectLayoutByElement\n};\n","import { isIndentedLayout, MindLayoutType } from '@plait/layouts';\nimport { isNullOrUndefined, NODE_TO_PARENT, Path, PlaitBoard, PlaitElement, PlaitNode, Point } from '@plait/core';\nimport { MindQueries } from '../queries';\nimport { ELEMENT_TO_NODE } from '../utils';\nimport { BaseData, EmojiData, ImageData } from './element-data';\nimport { StrokeStyle } from '@plait/common';\n\nexport interface MindElement<T = BaseData> extends PlaitElement {\n data: T;\n children: MindElement[];\n rightNodeCount?: number;\n width: number;\n manualWidth?: number;\n height: number;\n isRoot?: boolean;\n\n // node style attributes\n fill?: string;\n strokeColor?: string;\n strokeWidth?: number;\n strokeStyle?: StrokeStyle;\n shape?: MindElementShape;\n\n // link style attributes\n branchColor?: string;\n branchWidth?: number;\n branchShape?: BranchShape;\n\n // layout\n layout?: MindLayoutType;\n isCollapsed?: boolean;\n\n start?: number;\n end?: number;\n}\n\nexport interface PlaitMind extends MindElement {\n type: 'mindmap';\n points: Point[];\n}\n\nexport const PlaitMind = {\n isMind: (value: any): value is PlaitMind => {\n return value.type === 'mindmap';\n }\n};\n\nexport const MindElement = {\n hasLayout(value: MindElement, layout: MindLayoutType) {\n const _layout = MindQueries.getLayoutByElement(value);\n return _layout === layout;\n },\n isIndentedLayout(value: MindElement) {\n const _layout = MindQueries.getLayoutByElement(value) as MindLayoutType;\n return isIndentedLayout(_layout);\n },\n isMindElement(board: PlaitBoard, element: PlaitElement): element is MindElement {\n // Design error: The type of the element should be identified based on type.\n // Now it is very awkward whether it is dynamically calculated(query root node) or using other characteristic attributes(current).\n // Using dynamically calculated will cause more issue like pasting from clipboard, finding elements by id(isRecursion)\n if (element.data && element.data.topic && !isNullOrUndefined(element.width) && !isNullOrUndefined(element.height)) {\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 findParent(node: MindElement) {\n if (PlaitMind.isMind(node)) {\n return undefined;\n }\n const parent = NODE_TO_PARENT.get(node) as MindElement;\n return parent;\n },\n getRoot(board: PlaitBoard, element: MindElement) {\n const path = PlaitBoard.findPath(board, element);\n return PlaitNode.get(board, path.slice(0, 1)) as PlaitMind;\n },\n getAncestors(board: PlaitBoard, element: MindElement) {\n const path = PlaitBoard.findPath(board, element);\n const parents: PlaitElement[] = [];\n for (const p of Path.ancestors(path, { reverse: true })) {\n const n = PlaitNode.get(board, p);\n if (n && !PlaitBoard.isBoard(n)) {\n parents.push(n);\n }\n }\n return parents;\n },\n getNode(element: MindElement) {\n const node = ELEMENT_TO_NODE.get(element);\n if (!node) {\n throw new Error(`can not get node from ${JSON.stringify(element)}`);\n }\n return node;\n },\n findParentNode(element: MindElement) {\n if (PlaitMind.isMind(element)) {\n return undefined;\n }\n const parent = MindElement.getParent(element);\n return MindElement.getNode(parent);\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 hasImage(element: MindElement): element is MindElement<ImageData> {\n if (element.data.image) {\n return true;\n } else {\n return false;\n }\n },\n getEmojis(element: MindElement<EmojiData>) {\n return element.data.emojis;\n }\n};\n\nexport enum MindElementShape {\n roundRectangle = 'round-rectangle',\n underline = 'underline'\n}\n\nexport enum BranchShape {\n bight = 'bight',\n polyline = 'polyline'\n}\n","import { PlaitBoard, createG, drawLinearPath, getRectangleByElements } from '@plait/core';\nimport { MindNode } from '../../../interfaces/node';\nimport { getRectangleByNode } from '../../position/node';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../../../interfaces/types';\nimport { getLayoutDirection, getPointByPlacement, getXDistanceBetweenPoint, moveXOfPoint, transformPlacement } from '../../point-placement';\nimport { getAbstractBranchColor, getAbstractBranchWidth, getBranchShapeByMindElement } from '../../node-style/branch';\nimport { BranchShape } from '../../../interfaces/element';\nimport { getStrokeStyleByElement } from '../../node-style';\nimport { getStrokeLineDash } from '@plait/common';\n\nexport function drawAbstractLink(board: PlaitBoard, node: MindNode, isHorizontal: boolean) {\n const linkPadding = 15;\n const branchWidth = getAbstractBranchWidth(board, node.origin);\n const branchColor = getAbstractBranchColor(board, node.origin);\n const strokeStyle = getStrokeStyleByElement(board, node.origin);\n const parent = node.parent;\n const branchShape = getBranchShapeByMindElement(board, node.origin);\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 let curveDistance = getXDistanceBetweenPoint(abstractConnectorPoint, bezierBeginPoint, isHorizontal) - linkPadding * 2;\n bezierBeginPoint = moveXOfPoint(bezierBeginPoint, linkPadding, linkDirection);\n let c1 = moveXOfPoint(bezierBeginPoint, curveDistance, linkDirection);\n bezierEndPoint = moveXOfPoint(bezierEndPoint, linkPadding, linkDirection);\n let c2 = moveXOfPoint(bezierEndPoint, curveDistance, linkDirection);\n let bezierConnectorPoint = moveXOfPoint(abstractConnectorPoint, -linkPadding, linkDirection);\n const strokeLineDash = getStrokeLineDash(strokeStyle, branchWidth);\n if (branchShape === BranchShape.polyline) {\n const g = createG();\n const polyline = drawLinearPath([bezierBeginPoint, c1, bezierConnectorPoint, c2, bezierEndPoint], {\n stroke: branchColor,\n strokeWidth: branchWidth\n });\n const straightLine = drawLinearPath([abstractConnectorPoint, bezierConnectorPoint], {\n stroke: branchColor,\n strokeWidth: branchWidth,\n strokeLineDash\n });\n\n g.appendChild(polyline);\n g.appendChild(straightLine);\n\n return g;\n }\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: branchColor,\n strokeWidth: branchWidth,\n strokeLineDash\n }\n );\n return link;\n}\n","import { Path, PlaitBoard, PlaitElement, Transforms, addSelectedElement, clearSelectedElement } from '@plait/core';\nimport { AbstractRefs } from '../plugins/with-abstract-resize.board';\nimport { MindElement } from '../interfaces/element';\nimport { AbstractNode, isStandardLayout } from '@plait/layouts';\nimport { divideElementByParent, getFirstLevelElement } from '../utils/mind';\nimport { MindQueries } from '../queries';\nimport { DefaultAbstractNodeStyle } from '../constants/node-style';\nimport { createMindElement } from '../utils/node/create-node';\n\nexport const setAbstractsByRefs = (board: PlaitBoard, abstractRefs: AbstractRefs) => {\n abstractRefs.forEach((newProperty, element) => {\n const start = element.start! + newProperty.start;\n const end = element.end! + newProperty.end;\n const path = PlaitBoard.findPath(board, element as MindElement);\n\n if (start > end) {\n Transforms.removeNode(board, path);\n } else {\n Transforms.setNode(board, { start, end }, path);\n }\n });\n};\n\nexport const setAbstractByStandardLayout = (board: PlaitBoard, element: MindElement) => {\n const rightNodeCount = element.rightNodeCount!;\n const abstract = element.children.find(child => {\n return AbstractNode.isAbstract(child) && child.end >= rightNodeCount && child.start < rightNodeCount;\n });\n\n if (abstract) {\n const path = PlaitBoard.findPath(board, abstract);\n Transforms.setNode(board, { end: rightNodeCount - 1 }, path);\n }\n};\n\nexport const insertAbstract = (board: PlaitBoard, elements: PlaitElement[]) => {\n let elementGroup = getFirstLevelElement(elements as MindElement[]);\n const { parentElements, abstractIncludedGroups } = divideElementByParent(elementGroup);\n\n abstractIncludedGroups.forEach((group, index) => {\n const groupParent = parentElements[index];\n setAbstractByElements(board, groupParent, group);\n });\n};\n\nconst setAbstractByElements = (board: PlaitBoard, groupParent: MindElement, group: MindElement[]) => {\n const indexArray = group.map(child => groupParent!.children.indexOf(child)).sort((a, b) => a - b);\n const rightNodeCount = groupParent?.rightNodeCount;\n const start = indexArray[0],\n end = indexArray[indexArray.length - 1];\n\n if (\n isStandardLayout(MindQueries.getLayoutByElement(groupParent)) &&\n rightNodeCount &&\n start < rightNodeCount &&\n end >= rightNodeCount\n ) {\n const childrenLength = groupParent.children.length;\n const path = [...PlaitBoard.findPath(board, groupParent), childrenLength];\n const leftChildren = indexArray.filter(index => index >= rightNodeCount);\n const rightChildren = indexArray.filter(index => index < rightNodeCount);\n insertAbstractNode(board, path, rightChildren[0], rightChildren[rightChildren.length - 1]);\n insertAbstractNode(board, Path.next(path), leftChildren[0], leftChildren[leftChildren.length - 1]);\n } else {\n const path = [...PlaitBoard.findPath(board, groupParent), groupParent.children.length];\n insertAbstractNode(board, path, start, end);\n }\n};\n\nconst insertAbstractNode = (board: PlaitBoard, path: Path, start: number, end: number) => {\n const mindElement = createMindElement('概要', 28, 20, {\n strokeWidth: DefaultAbstractNodeStyle.branch.width,\n branchWidth: DefaultAbstractNodeStyle.branch.width\n });\n\n mindElement.start = start;\n mindElement.end = end;\n\n Transforms.insertNode(board, mindElement, path);\n\n clearSelectedElement(board);\n addSelectedElement(board, mindElement);\n};\n","import { Element, Path } from 'slate';\nimport { MindElement, PlaitMind } from '../interfaces/element';\nimport { PlaitBoard, PlaitHistoryBoard, PlaitNode, Transforms, removeSelectedElement } from '@plait/core';\nimport { AbstractRef, getRelativeStartEndByAbstractRef, insertElementHandleAbstract } from '../utils/abstract/common';\nimport { RightNodeCountRef, insertElementHandleRightNodeCount, isInRightBranchOfStandardLayout } from '../utils/node/right-node-count';\nimport { NodeSpace } from '../utils/space/node-space';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\nimport { findNewChildNodePath, findNewSiblingNodePath, insertMindElement } from '../utils';\nimport { setAbstractsByRefs } from './abstract-node';\nimport { AbstractNode } from '@plait/layouts';\n\nconst normalizeWidthAndHeight = (board: PlaitMindBoard, element: MindElement, width: number, height: number) => {\n const minWidth = NodeSpace.getNodeTopicMinWidth(board, element);\n const newWidth = width < minWidth ? minWidth : width;\n return { width: Math.ceil(newWidth), height };\n};\n\nexport const setTopic = (board: PlaitMindBoard, element: MindElement, topic: Element, width: number, height: number) => {\n const newElement = {\n data: { ...element.data, topic },\n ...normalizeWidthAndHeight(board, element, width, height)\n } as MindElement;\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const setNodeManualWidth = (board: PlaitMindBoard, element: MindElement, width: number, height: number) => {\n const path = PlaitBoard.findPath(board, element);\n const { width: normalizedWidth, height: normalizedHeight } = normalizeWidthAndHeight(board, element, width, height);\n const newElement = { manualWidth: normalizedWidth, height: normalizedHeight } as MindElement;\n Transforms.setNode(board, newElement, path);\n};\n\nexport const setTopicSize = (board: PlaitMindBoard, element: MindElement, width: number, height: number) => {\n const newElement = {\n ...normalizeWidthAndHeight(board, element, width, height)\n };\n let isEqualWidth = Math.ceil(element.width) === Math.ceil(newElement.width);\n let isEqualHeight = Math.ceil(element.height) === Math.ceil(newElement.height);\n if (element.manualWidth) {\n isEqualWidth = true;\n }\n if (!isEqualWidth || !isEqualHeight) {\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n }\n};\n\nexport const insertNodes = (board: PlaitBoard, elements: MindElement[], path: Path) => {\n const pathRef = board.pathRef(path);\n elements.forEach(element => {\n if (pathRef.current) {\n Transforms.insertNode(board, element, pathRef.current);\n }\n });\n pathRef.unref();\n};\n\nexport const insertAbstractNodes = (board: PlaitBoard, validAbstractRefs: AbstractRef[], elements: MindElement[], path: Path) => {\n const parent = PlaitNode.get(board, Path.parent(path));\n const abstractPath = [...Path.parent(path), parent.children?.length!];\n const abstracts = validAbstractRefs.map(refs => {\n const { start, end } = getRelativeStartEndByAbstractRef(refs, elements);\n return {\n ...refs.abstract,\n start: start + path[path.length - 1],\n end: end + path[path.length - 1]\n };\n });\n\n insertNodes(board, abstracts, abstractPath);\n};\n\nexport const setRightNodeCountByRefs = (board: PlaitBoard, refs: RightNodeCountRef[]) => {\n refs.forEach(ref => {\n Transforms.setNode(board, { rightNodeCount: ref.rightNodeCount }, ref.path);\n });\n};\n\nexport const insertChildNode = (board: PlaitMindBoard, element: MindElement) => {\n if (MindElement.isMindElement(board, element)) {\n removeSelectedElement(board, element);\n const targetElementPath = PlaitBoard.findPath(board, element);\n if (element.isCollapsed) {\n const newElement: Partial<MindElement> = { isCollapsed: false };\n PlaitHistoryBoard.withoutSaving(board, () => {\n Transforms.setNode(board, newElement, targetElementPath);\n });\n }\n insertMindElement(board, element, findNewChildNodePath(board, element));\n }\n};\n\nexport const insertSiblingNode = (board: PlaitMindBoard, element: MindElement) => {\n if (MindElement.isMindElement(board, element) && !PlaitMind.isMind(element) && !AbstractNode.isAbstract(element)) {\n const path = PlaitBoard.findPath(board, element);\n if (isInRightBranchOfStandardLayout(element)) {\n const refs = insertElementHandleRightNodeCount(board, path.slice(0, 1), 1);\n setRightNodeCountByRefs(board, refs);\n }\n const abstractRefs = insertElementHandleAbstract(board, Path.next(path));\n setAbstractsByRefs(board, abstractRefs);\n insertMindElement(board, element, findNewSiblingNodePath(board, element));\n }\n};\n\nexport const insertMind = (board: PlaitMindBoard, mind: MindElement) => {\n Transforms.insertNode(board, mind, [board.children.length]);\n Transforms.addSelectionWithTemporaryElements(board, [mind]);\n};\n","import { MindElement } from '../interfaces/element';\nimport { PlaitBoard, Transforms } from '@plait/core';\nimport { EmojiData, EmojiItem } from '../interfaces/element-data';\n\nexport const addEmoji = (board: PlaitBoard, element: MindElement, emojiItem: EmojiItem) => {\n const emojis = element.data.emojis || [];\n const newEmojis = [...emojis];\n newEmojis.push(emojiItem);\n const newElement = {\n data: { ...element.data, emojis: newEmojis }\n } as MindElement;\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const removeEmoji = (board: PlaitBoard, element: MindElement<EmojiData>, emojiItem: EmojiItem) => {\n const emojis = element.data.emojis.filter(value => value !== emojiItem);\n const newElement = {\n data: { topic: element.data.topic }\n } as MindElement;\n\n if (MindElement.hasImage(element)) {\n newElement.data.image = element.data.image;\n }\n\n if (emojis.length > 0) {\n newElement.data.emojis = emojis;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n\nexport const replaceEmoji = (board: PlaitBoard, element: MindElement<EmojiData>, oldEmoji: EmojiItem, newEmoji: EmojiItem) => {\n const newElement = {\n data: { ...element.data }\n } as MindElement;\n const newEmojis = element.data.emojis.map(value => {\n if (value === oldEmoji) {\n return newEmoji;\n }\n return value;\n });\n newElement.data.emojis = newEmojis;\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n","import { PlaitBoard, Transforms } from '@plait/core';\nimport { ImageData, MindElement } from '../interfaces';\nimport { removeImageFocus } from '../utils/node/image';\nimport { NodeSpace } from '../utils/space/node-space';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\nimport { getNewNodeHeight } from '../utils/node/dynamic-width';\nimport { CommonImageItem } from '@plait/common';\n\nexport const removeImage = (board: PlaitBoard, element: MindElement<ImageData>) => {\n removeImageFocus(board, element);\n const newElement = {\n data: { ...element.data }\n } as MindElement;\n delete newElement.data.image;\n const path = PlaitBoard.findPath(board, element);\n const newDynamicWidth = NodeSpace.getNodeNewDynamicWidth(board as PlaitMindBoard, element, 0);\n const newHeight = getNewNodeHeight(board as PlaitMindBoard, element, newDynamicWidth);\n if (newHeight) {\n newElement.height = newHeight;\n }\n Transforms.setNode(board, newElement, path);\n};\n\nexport const setImage = (board: PlaitBoard, element: MindElement, imageItem: CommonImageItem) => {\n const newElement = {\n data: { ...element.data, image: imageItem }\n };\n const newDynamicWidth = NodeSpace.getNodeNewDynamicWidth(board as PlaitMindBoard, element, imageItem.width);\n const newHeight = getNewNodeHeight(board as PlaitMindBoard, element, newDynamicWidth);\n if (newHeight) {\n (newElement as MindElement).height = newHeight;\n }\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, newElement, path);\n};\n","import { PlaitBoard, Path, PlaitNode, Transforms } from '@plait/core';\nimport { isHorizontalLogicLayout, isVerticalLogicLayout, MindLayoutType } from '@plait/layouts';\n\nexport const correctLogicLayoutNode = (board: PlaitBoard, layout: MindLayoutType, path: Path) => {\n const node = PlaitNode.get(board, path);\n if (node && layout) {\n node.children?.forEach((value: PlaitNode, index) => {\n if (value.layout) {\n if (\n (isHorizontalLogicLayout(layout) && isVerticalLogicLayout(value.layout)) ||\n (isVerticalLogicLayout(layout) && isHorizontalLogicLayout(value.layout))\n ) {\n Transforms.setNode(board, { layout: null }, [...path, index]);\n }\n if (value.children?.length) {\n correctLogicLayoutNode(board, layout, [...path, index]);\n }\n }\n });\n }\n};\n","import { Path, PlaitBoard, PlaitNode, Transforms } from '@plait/core';\nimport { MindLayoutType, isStandardLayout } from '@plait/layouts';\nimport { PropertyTransforms } from '@plait/common';\nimport { BranchShape, MindElementShape, MindElement, PlaitMind } from '../interfaces';\nimport { correctLogicLayoutNode } from './layout';\nimport { setAbstractByStandardLayout } from './abstract-node';\n\nexport const setLayout = (board: PlaitBoard, type: MindLayoutType) => {\n const callback = (element: MindElement, path: Path) => {\n if (MindElement.isMindElement(board, element)) {\n correctLogicLayoutNode(board, type, path);\n const element = PlaitNode.get(board, path) as MindElement;\n if (PlaitMind.isMind(element) && isStandardLayout(type)) {\n let properties = { rightNodeCount: element.children.length / 2 };\n Transforms.setNode(board, properties, path);\n setAbstractByStandardLayout(board, element);\n }\n Transforms.setNode(board, { layout: type }, path);\n }\n };\n PropertyTransforms.setProperty<MindElement>(board, {}, { callback });\n};\n\nexport const setShape = (board: PlaitBoard, shape: MindElementShape) => {\n PropertyTransforms.setProperty(board, { shape });\n};\n\nexport const setBranchShape = (board: PlaitBoard, branchShape: BranchShape) => {\n PropertyTransforms.setProperty(board, { branchShape });\n};\n\nexport const setBranchWidth = (board: PlaitBoard, branchWidth: number) => {\n PropertyTransforms.setProperty(board, { branchWidth });\n};\n\nexport const setBranchColor = (board: PlaitBoard, branchColor: string) => {\n PropertyTransforms.setProperty(board, { branchColor });\n};\n","import { insertAbstract, setAbstractsByRefs, setAbstractByStandardLayout } from './abstract-node';\nimport {\n setTopic,\n setTopicSize,\n insertNodes,\n insertAbstractNodes,\n setRightNodeCountByRefs,\n setNodeManualWidth,\n insertChildNode,\n insertSiblingNode,\n insertMind\n} from './node';\nimport { addEmoji, removeEmoji, replaceEmoji } from './emoji';\nimport { removeImage, setImage } from './image';\nimport { setShape, setBranchShape, setBranchWidth, setLayout, setBranchColor } from './property';\n\nexport const MindTransforms = {\n setLayout,\n setShape,\n setBranchShape,\n setBranchWidth,\n setBranchColor,\n setTopic,\n setTopicSize,\n setNodeManualWidth,\n addEmoji,\n removeEmoji,\n replaceEmoji,\n insertAbstract,\n setAbstractsByRefs,\n setAbstractByStandardLayout,\n insertNodes,\n insertAbstractNodes,\n setRightNodeCountByRefs,\n removeImage,\n setImage,\n insertChildNode,\n insertSiblingNode,\n insertMind\n};\n","import { PlaitBoard, PlaitOptionsBoard, createG, temporaryDisableSelection } from '@plait/core';\nimport { MindElement, BaseData, PlaitMind, MindElementShape, LayoutDirection } from '../interfaces';\nimport { getRectangleByNode } from '../utils/position/node';\nimport { getShapeByElement } from '../utils/node-style/shape';\nimport { EXTEND_DIAMETER, QUICK_INSERT_CIRCLE_COLOR, QUICK_INSERT_INNER_CROSS_COLOR } from '../constants/default';\nimport { MindLayoutType, isHorizontalLayout, isIndentedLayout, isTopLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { fromEvent } from 'rxjs';\nimport { insertMindElement } from '../utils/mind';\nimport { take } from 'rxjs/operators';\nimport { findNewChildNodePath } from '../utils/path';\nimport { getBranchColorByMindElement, getBranchWidthByMindElement, getNextBranchColor } from '../utils/node-style/branch';\nimport { getLayoutDirection, getPointByPlacement, moveXOfPoint, transformPlacement } from '../utils/point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../interfaces/types';\nimport { AfterDraw, Generator } from '@plait/common';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\n\nexport class NodePlusGenerator extends Generator<MindElement> implements AfterDraw {\n canDraw(element: MindElement<BaseData>): boolean {\n if (PlaitBoard.isReadonly(this.board) || element?.isCollapsed) {\n return false;\n }\n return true;\n }\n\n draw(element: MindElement<BaseData>): SVGGElement {\n const plusG = createG();\n plusG.classList.add('plus');\n const node = MindElement.getNode(element);\n const layout = MindQueries.getLayoutByElement(element) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(layout);\n let linkDirection = getLayoutDirection(node, isHorizontal);\n if (isIndentedLayout(layout)) {\n linkDirection = isTopLayout(layout) ? LayoutDirection.top : LayoutDirection.bottom;\n }\n const isUnderlineShape = getShapeByElement(this.board, element) === MindElementShape.underline;\n const nodeClient = getRectangleByNode(node);\n const branchWidth = getBranchWidthByMindElement(this.board, element);\n const branchColor = PlaitMind.isMind(element)\n ? getNextBranchColor(this.board, element)\n : getBranchColorByMindElement(this.board, element);\n let distance = 8;\n\n let placement: PointPlacement = [HorizontalPlacement.right, VerticalPlacement.middle];\n\n transformPlacement(placement, linkDirection);\n\n // underline shape and horizontal\n if (isHorizontal && isUnderlineShape && !element.isRoot) {\n placement[1] = VerticalPlacement.bottom;\n }\n\n let beginPoint = getPointByPlacement(nodeClient, placement);\n\n if (element.children.length > 0 && !element.isRoot) {\n beginPoint = moveXOfPoint(beginPoint, EXTEND_DIAMETER + 8, linkDirection);\n distance = 5;\n }\n\n const endPoint = moveXOfPoint(beginPoint, distance, linkDirection);\n const circleCenter = moveXOfPoint(endPoint, 8, linkDirection);\n\n const line = PlaitBoard.getRoughSVG(this.board).line(beginPoint[0], beginPoint[1], endPoint[0], endPoint[1], {\n stroke: branchColor,\n strokeWidth: branchWidth\n });\n\n const circle = PlaitBoard.getRoughSVG(this.board).circle(circleCenter[0], circleCenter[1], EXTEND_DIAMETER, {\n fill: QUICK_INSERT_CIRCLE_COLOR,\n stroke: QUICK_INSERT_CIRCLE_COLOR,\n fillStyle: 'solid'\n });\n\n const HLineBeginPoint = [circleCenter[0] - 5, circleCenter[1]];\n const HLineEndPoint = [circleCenter[0] + 5, circleCenter[1]];\n const VLineBeginPoint = [circleCenter[0], circleCenter[1] - 5];\n const VLineEndPoint = [circleCenter[0], circleCenter[1] + 5];\n\n const innerCrossHLine = PlaitBoard.getRoughSVG(this.board).line(\n HLineBeginPoint[0],\n HLineBeginPoint[1],\n HLineEndPoint[0],\n HLineEndPoint[1],\n {\n stroke: QUICK_INSERT_INNER_CROSS_COLOR,\n strokeWidth: 2\n }\n );\n\n const innerCrossVLine = PlaitBoard.getRoughSVG(this.board).line(\n VLineBeginPoint[0],\n VLineBeginPoint[1],\n VLineEndPoint[0],\n VLineEndPoint[1],\n {\n stroke: QUICK_INSERT_INNER_CROSS_COLOR,\n strokeWidth: 2\n }\n );\n plusG.appendChild(line);\n plusG.appendChild(circle);\n plusG.appendChild(innerCrossHLine);\n plusG.appendChild(innerCrossVLine);\n return plusG;\n }\n\n afterDraw(element: MindElement): void {\n if (!this.g) {\n throw new Error(`can not find quick insert g`);\n }\n fromEvent<MouseEvent>(this.g, 'pointerdown')\n .pipe(take(1))\n .subscribe(e => {\n e.preventDefault();\n });\n fromEvent<PointerEvent>(this.g, 'pointerup')\n .pipe(take(1))\n .subscribe((event: PointerEvent) => {\n // wait the event period end of pointerup to otherwise the pointerup will cause new element lose selected state\n setTimeout(() => {\n const path = findNewChildNodePath(this.board, element);\n insertMindElement(this.board as PlaitMindBoard, element, path);\n }, 0);\n });\n }\n}\n","import { PlaitBoard, PlaitPointerType, Point, Transforms, createG, createText, drawLinearPath } from '@plait/core';\nimport { MindElement, BaseData, PlaitMind, MindElementShape, LayoutDirection } from '../interfaces';\nimport { getRectangleByNode } from '../utils/position/node';\nimport { getShapeByElement } from '../utils/node-style/shape';\nimport { EXTEND_OFFSET, EXTEND_DIAMETER } from '../constants/default';\nimport { MindLayoutType, isHorizontalLayout, isIndentedLayout, isTopLayout } from '@plait/layouts';\nimport { MindQueries } from '../queries';\nimport { fromEvent } from 'rxjs';\nimport { getChildrenCount } from '../utils/mind';\nimport { filter, take } from 'rxjs/operators';\nimport { getBranchColorByMindElement, getBranchWidthByMindElement } from '../utils/node-style/branch';\nimport { getLayoutDirection, getPointByPlacement, moveXOfPoint, moveYOfPoint, transformPlacement } from '../utils/point-placement';\nimport { HorizontalPlacement, PointPlacement, VerticalPlacement } from '../interfaces/types';\nimport { AfterDraw, Generator } from '@plait/common';\n\nexport class CollapseGenerator extends Generator<MindElement> implements AfterDraw {\n canDraw(element: MindElement<BaseData>): boolean {\n if (element.children.length && !PlaitMind.isMind(element)) {\n return true;\n }\n return false;\n }\n\n draw(element: MindElement<BaseData>): SVGGElement {\n const collapseG = createG();\n collapseG.classList.add('collapse');\n const node = MindElement.getNode(element);\n const stroke = getBranchColorByMindElement(this.board, element);\n const branchWidth = getBranchWidthByMindElement(this.board, element);\n const layout = MindQueries.getLayoutByElement(element) as MindLayoutType;\n const isUnderlineShape = getShapeByElement(this.board, element) === MindElementShape.underline;\n const isHorizontal = isHorizontalLayout(layout);\n const nodeClient = getRectangleByNode(node);\n let linkDirection = getLayoutDirection(node, isHorizontal);\n if (isIndentedLayout(layout)) {\n linkDirection = isTopLayout(layout) ? LayoutDirection.top : LayoutDirection.bottom;\n }\n\n let placement: PointPlacement = [HorizontalPlacement.right, VerticalPlacement.middle];\n\n transformPlacement(placement, linkDirection);\n\n // underline shape and horizontal\n if (isHorizontal && isUnderlineShape && !element.isRoot) {\n placement[1] = VerticalPlacement.bottom;\n }\n\n let startPoint = getPointByPlacement(nodeClient, placement);\n const endPoint = moveXOfPoint(startPoint, EXTEND_OFFSET, linkDirection);\n const circleCenter = moveXOfPoint(endPoint, EXTEND_DIAMETER / 2, linkDirection);\n\n const arrowPoints = this.getArrowPoints(circleCenter, linkDirection);\n\n const arrowLine = drawLinearPath(arrowPoints, {\n stroke,\n strokeWidth: 2\n });\n\n const extendLine = PlaitBoard.getRoughSVG(this.board).line(startPoint[0], startPoint[1], endPoint[0], endPoint[1], {\n strokeWidth: branchWidth,\n stroke\n });\n\n const badge = PlaitBoard.getRoughSVG(this.board).circle(circleCenter[0], circleCenter[1], EXTEND_DIAMETER, {\n fill: stroke,\n stroke,\n fillStyle: 'solid'\n });\n\n const hideCircleG = PlaitBoard.getRoughSVG(this.board).circle(circleCenter[0], circleCenter[1], EXTEND_DIAMETER, {\n fill: '#fff',\n stroke,\n strokeWidth: branchWidth > 3 ? 3 : branchWidth,\n fillStyle: 'solid'\n });\n\n if (element.isCollapsed) {\n let numberOffset = 0;\n if (getChildrenCount(element) >= 10) numberOffset = -2;\n if (getChildrenCount(element) === 1) numberOffset = 1;\n\n const badgeText = createText(circleCenter[0] - 4 + numberOffset, circleCenter[1] + 4, stroke, `${getChildrenCount(element)}`);\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 collapseG.appendChild(hideCircleG);\n collapseG.appendChild(arrowLine);\n }\n\n collapseG.appendChild(extendLine);\n return collapseG;\n }\n\n afterDraw(element: MindElement): void {\n if (!this.g) {\n throw new Error(`can not find quick insert g`);\n }\n\n fromEvent<PointerEvent>(this.g, 'pointerdown')\n .pipe(\n filter(() => !PlaitBoard.isPointer(this.board, PlaitPointerType.hand) || !!PlaitBoard.isReadonly(this.board)),\n take(1)\n )\n .subscribe((event: PointerEvent) => {\n event.preventDefault();\n const isCollapsed = !element.isCollapsed;\n const newElement: Partial<MindElement> = { isCollapsed };\n const path = PlaitBoard.findPath(this.board, element);\n Transforms.setNode(this.board, newElement, path);\n });\n }\n\n private getArrowPoints(circleCenter: Point, linkDirection: LayoutDirection) {\n let arrowTopPoint = moveXOfPoint(circleCenter, 2, linkDirection);\n arrowTopPoint = moveYOfPoint(arrowTopPoint, 4, linkDirection);\n const arrowMiddlePoint = moveXOfPoint(circleCenter, -2, linkDirection);\n let arrowBottomPoint = moveXOfPoint(circleCenter, 2, linkDirection);\n arrowBottomPoint = moveYOfPoint(arrowBottomPoint, -4, linkDirection);\n\n return [arrowTopPoint, arrowMiddlePoint, arrowBottomPoint];\n }\n}\n","import { Generator } from '@plait/common';\nimport { MindElement, MindElementShape } from '../interfaces/element';\nimport { getRectangleByNode } from '../utils/position/node';\nimport { MindNode } from '../interfaces/node';\nimport { drawRoundRectangleByElement } from '../utils/draw/node-shape';\nimport { getShapeByElement } from '../utils/node-style/shape';\nimport { PlaitBoard } from '@plait/core';\n\nexport interface ShapeData {\n node: MindNode;\n}\n\nexport class NodeShapeGenerator extends Generator<MindElement, ShapeData> {\n constructor(board: PlaitBoard) {\n super(board, { prepend: true });\n }\n\n canDraw(element: MindElement, data: ShapeData): boolean {\n const shape = getShapeByElement(this.board, element);\n if (shape === MindElementShape.roundRectangle) {\n return true;\n }\n return false;\n }\n\n draw(element: MindElement, data: ShapeData) {\n const rectangle = getRectangleByNode(data.node);\n return drawRoundRectangleByElement(this.board, rectangle, data.node.origin);\n }\n}\n","import { createG, PlaitBoard, NODE_TO_INDEX, PlaitPluginElementContext, OnContextChanged, RectangleClient } from '@plait/core';\nimport { isHorizontalLayout, AbstractNode, MindLayoutType } from '@plait/layouts';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MindElement, PlaitMind } from './interfaces/element';\nimport { MindNode } from './interfaces/node';\nimport { MindQueries } from './queries';\nimport { ELEMENT_TO_NODE } from './utils/weak-maps';\nimport { drawAbstractLink } from './utils/draw/node-link/abstract-link';\nimport { NodeEmojisGenerator } from './generators/node-emojis.generator';\nimport { MindTransforms } from './transforms';\nimport { NodePlusGenerator } from './generators/node-plus.generator';\nimport { PlaitMindBoard } from './plugins/with-mind.board';\nimport { drawLink } from './utils/draw/node-link/draw-link';\nimport { getTopicRectangleByNode } from './utils/position/topic';\nimport { NodeActiveGenerator } from './generators/node-active.generator';\nimport { CollapseGenerator } from './generators/node-collapse.generator';\nimport { NodeSpace } from './utils/space/node-space';\nimport { NodeTopicThreshold } from './constants/node-topic-style';\nimport {\n CommonElementFlavour,\n ImageGenerator,\n TextManage,\n TextManageChangeData,\n WithTextPluginKey,\n WithTextPluginOptions\n} from '@plait/common';\nimport { NodeShapeGenerator } from './generators/node-shape.generator';\nimport { getImageForeignRectangle } from './utils';\nimport { ImageData } from './interfaces';\n\nexport class MindNodeComponent extends CommonElementFlavour<MindElement, PlaitMindBoard>\n implements OnContextChanged<MindElement, PlaitMindBoard> {\n roughSVG!: RoughSVG;\n\n node!: MindNode;\n\n index!: number;\n\n shapeG: SVGGElement | null = null;\n\n linkG?: SVGGElement;\n\n extendG?: SVGGElement;\n\n nodeEmojisGenerator!: NodeEmojisGenerator;\n\n nodeShapeGenerator!: NodeShapeGenerator;\n\n nodePlusGenerator!: NodePlusGenerator;\n\n imageGenerator!: ImageGenerator<MindElement<ImageData>>;\n\n activeGenerator!: NodeActiveGenerator;\n\n collapseGenerator!: CollapseGenerator;\n\n get textManage() {\n return this.getRef().getTextManages()[0];\n }\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.nodeShapeGenerator = new NodeShapeGenerator(this.board);\n this.nodeEmojisGenerator = new NodeEmojisGenerator(this.board);\n this.activeGenerator = new NodeActiveGenerator(this.board);\n this.nodePlusGenerator = new NodePlusGenerator(this.board);\n this.collapseGenerator = new CollapseGenerator(this.board);\n this.imageGenerator = new ImageGenerator<MindElement<ImageData>>(this.board, {\n getRectangle: (element: MindElement<ImageData>) => {\n return getImageForeignRectangle(this.board as PlaitMindBoard, element);\n },\n getImageItem: (element: MindElement<ImageData>) => {\n return element.data.image;\n }\n });\n const plugins = (this.board.getPluginOptions<WithTextPluginOptions>(WithTextPluginKey) || {}).textPlugins;\n const textManage = new TextManage(this.board, {\n getRectangle: () => {\n const rect = getTopicRectangleByNode(this.board, this.node);\n return rect;\n },\n onChange: (data: TextManageChangeData) => {\n const width = data.width;\n const height = data.height;\n if (data.newText) {\n MindTransforms.setTopic(this.board, this.element, data.newText as MindElement, width, height);\n } else {\n MindTransforms.setTopicSize(this.board, this.element, width, height);\n }\n },\n getMaxWidth: () => {\n if (this.element.manualWidth) {\n return NodeSpace.getNodeDynamicWidth(this.board, this.element);\n } else {\n return Math.max(NodeSpace.getNodeDynamicWidth(this.board, this.element), NodeTopicThreshold.defaultTextMaxWidth);\n }\n },\n textPlugins: plugins || []\n });\n this.getRef().addGenerator(NodeActiveGenerator.key, this.activeGenerator);\n this.getRef().addGenerator(NodeEmojisGenerator.key, this.nodeEmojisGenerator);\n this.getRef().addGenerator(ImageGenerator.key, this.imageGenerator);\n this.getRef().initializeTextManage(textManage);\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n this.node = MindElement.getNode(this.element);\n this.index = NODE_TO_INDEX.get(this.element) || 0;\n this.roughSVG = PlaitBoard.getRoughSVG(this.board);\n this.nodeShapeGenerator.processDrawing(this.element, this.getElementG(), { node: this.node });\n this.drawLink();\n this.drawTopic();\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n this.drawEmojis();\n this.drawExtend();\n this.imageGenerator.processDrawing(this.element as MindElement<ImageData>, this.getElementG());\n if (PlaitMind.isMind(this.context.parent)) {\n this.getElementG().classList.add('branch');\n }\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<MindElement, PlaitMindBoard>,\n previous: PlaitPluginElementContext<MindElement, PlaitMindBoard>\n ) {\n const newNode = MindElement.getNode(value.element);\n const isEqualNode = RectangleClient.isEqual(this.node, newNode);\n this.node = newNode;\n if (!isEqualNode || value.element !== previous.element || value.hasThemeChanged) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n this.nodeShapeGenerator.processDrawing(this.element, this.getElementG(), { node: this.node });\n this.drawLink();\n this.drawEmojis();\n this.drawExtend();\n if (!MindElement.hasImage(previous.element) && MindElement.hasImage(this.element)) {\n this.imageGenerator.processDrawing(this.element, this.getElementG());\n }\n if (MindElement.hasImage(previous.element) && MindElement.hasImage(this.element)) {\n this.imageGenerator.updateImage(\n this.getElementG(),\n previous.element as MindElement<ImageData>,\n value.element as MindElement<ImageData>\n );\n }\n if (MindElement.hasImage(previous.element) && !MindElement.hasImage(this.element)) {\n this.imageGenerator.destroy();\n }\n this.updateTopic();\n } else {\n const hasSameSelected = value.selected === previous.selected;\n const hasSameParent = value.parent === previous.parent;\n if (!hasSameSelected) {\n this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {\n selected: this.selected\n });\n }\n if (!hasSameParent) {\n this.drawLink();\n }\n }\n }\n\n drawEmojis() {\n const g = this.nodeEmojisGenerator.drawEmojis(this.element);\n if (g) {\n this.getElementG().append(g);\n }\n }\n\n drawLink() {\n if (PlaitMind.isMind(this.element)) {\n return;\n }\n\n const parent = MindElement.getParent(this.element);\n const parentNode = MindElement.getNode(parent);\n\n if (this.linkG) {\n this.linkG.remove();\n }\n\n const layout = MindQueries.getLayoutByElement(parent) as MindLayoutType;\n if (AbstractNode.isAbstract(this.node.origin)) {\n this.linkG = drawAbstractLink(this.board, this.node, isHorizontalLayout(layout));\n } else {\n this.linkG = drawLink(this.board, parentNode, this.node, isHorizontalLayout(layout));\n }\n this.getElementG().append(this.linkG);\n }\n\n drawExtend() {\n if (!this.extendG) {\n this.extendG = createG();\n this.extendG.classList.add('extend');\n this.getElementG().append(this.extendG);\n }\n if (this.element.isCollapsed) {\n this.getElementG().classList.add('collapsed');\n } else {\n this.getElementG().classList.remove('collapsed');\n }\n this.nodePlusGenerator.processDrawing(this.element, this.extendG!);\n this.collapseGenerator.processDrawing(this.element, this.extendG!);\n }\n\n drawTopic() {\n this.textManage.draw(this.element.data.topic);\n this.getElementG().append(this.textManage.g);\n }\n\n updateTopic() {\n this.textManage.updateText(this.element.data.topic);\n this.textManage.updateRectangle();\n }\n\n trackBy = (index: number, node: MindNode) => {\n return node.origin.id;\n };\n\n destroy(): void {\n super.destroy();\n this.nodeEmojisGenerator.destroy();\n this.imageGenerator.destroy();\n this.activeGenerator.destroy();\n if (ELEMENT_TO_NODE.get(this.element) === this.node) {\n ELEMENT_TO_NODE.delete(this.element);\n }\n this.getRef().destroyTextManage();\n }\n}\n","import { PlaitMind } from './interfaces/element';\nimport { MindNode } from './interfaces/node';\nimport { BeforeContextChange, PlaitPluginElementContext, depthFirstRecursion } from '@plait/core';\nimport { GlobalLayout, OriginNode } from '@plait/layouts';\nimport { ELEMENT_TO_NODE } from './utils/weak-maps';\nimport { MindNodeComponent } from './mind-node.component';\nimport { getLayoutOptions } from './utils/space/layout-options';\nimport { getDefaultLayout } from './utils/layout';\n\nexport class PlaitMindComponent extends MindNodeComponent implements BeforeContextChange<PlaitMind> {\n root!: MindNode;\n\n initialize(): void {\n this.updateMindLayout();\n super.initialize();\n this.getElementG().classList.add('root');\n }\n\n beforeContextChange(value: PlaitPluginElementContext<PlaitMind>) {\n if (value.element !== this.element && this.initialized) {\n this.updateMindLayout(value.element);\n }\n }\n\n updateMindLayout(element = this.element) {\n const mindLayoutType = element.layout || getDefaultLayout();\n this.root = (GlobalLayout.layout(\n (element as unknown) as OriginNode,\n getLayoutOptions(this.board),\n mindLayoutType\n ) as unknown) as MindNode;\n this.updateMindNodeLocation(element as PlaitMind);\n }\n\n updateMindNodeLocation(element: PlaitMind) {\n const { x, y, hGap, vGap } = this.root;\n const offsetX = x + hGap;\n const offsetY = y + vGap;\n depthFirstRecursion<MindNode>(this.root, node => {\n node.x = node.x - offsetX + element.points[0][0];\n node.y = node.y - offsetY + element.points[0][1];\n ELEMENT_TO_NODE.set(node.origin, node);\n });\n }\n}\n","import {\n distanceBetweenPointAndPoint,\n Path,\n PlaitBoard,\n Point,\n Transforms,\n getSelectedElements,\n depthFirstRecursion,\n createG,\n PlaitNode,\n PlaitPointerType,\n isMainPointer,\n CoreTransforms,\n getHitElementByPoint,\n toHostPoint,\n toViewBoxPoint,\n isDragging\n} from '@plait/core';\nimport { AbstractNode, getNonAbstractChildren } from '@plait/layouts';\nimport { MindElement, PlaitMind } from '../interfaces/element';\nimport { DetectResult } from '../interfaces/node';\nimport {\n deleteElementHandleAbstract,\n deleteElementsHandleRightNodeCount,\n getCorrespondingAbstract,\n getFirstLevelElement,\n getOverallAbstracts,\n getValidAbstractRefs,\n insertElementHandleAbstract,\n insertElementHandleRightNodeCount\n} from '../utils';\nimport { addActiveOnDragOrigin, isDropStandardRight, removeActiveOnDragOrigin, setMindDragging } from '../utils/dnd/common';\nimport { detectDropTarget, getPathByDropTarget } from '../utils/dnd/detector';\nimport { drawFakeDragNode, drawFakeDropNode } from '../utils/draw/node-dnd';\nimport { MindTransforms } from '../transforms';\nimport { adjustAbstractToNode } from '../utils/node/adjust-node';\n\nconst DRAG_MOVE_BUFFER = 5;\n\nexport const withNodeDnd = (board: PlaitBoard) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n\n let activeElements: MindElement[] = [];\n let correspondingElements: MindElement[] = [];\n let startPoint: Point;\n let dragFakeNodeG: SVGGElement | undefined;\n let fakeDropNodeG: SVGGElement | undefined;\n let dropTarget: { target: MindElement; detectResult: DetectResult } | null = null;\n let targetPath: Path;\n\n board.pointerDown = (event: PointerEvent) => {\n if (\n PlaitBoard.isReadonly(board) ||\n PlaitBoard.hasBeenTextEditing(board) ||\n !PlaitBoard.isPointer(board, PlaitPointerType.selection) ||\n !isMainPointer(event)\n ) {\n pointerDown(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const selectedElements = getSelectedElements(board);\n const hitElement = getHitElementByPoint(board, point);\n if (\n hitElement &&\n MindElement.isMindElement(board, hitElement) &&\n !PlaitMind.isMind(hitElement) &&\n !AbstractNode.isAbstract(hitElement)\n ) {\n const targetElements = selectedElements.filter(\n element => MindElement.isMindElement(board, element) && !element.isRoot && !AbstractNode.isAbstract(element)\n ) as MindElement[];\n const isMultipleSelection = selectedElements.length > 0 && selectedElements.includes(hitElement);\n if (isMultipleSelection) {\n activeElements = targetElements;\n startPoint = point;\n } else {\n activeElements = [hitElement];\n startPoint = point;\n }\n }\n\n if (activeElements.length) {\n correspondingElements = getOverallAbstracts(board, activeElements);\n }\n\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!board.options.readonly && activeElements.length && startPoint) {\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance < DRAG_MOVE_BUFFER) {\n return;\n }\n\n setMindDragging(board, true);\n\n fakeDropNodeG?.remove();\n const detectPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n dropTarget = detectDropTarget(board, detectPoint, dropTarget, [...activeElements, ...correspondingElements]);\n if (dropTarget?.target) {\n targetPath = getPathByDropTarget(board, dropTarget);\n\n fakeDropNodeG = drawFakeDropNode(board, dropTarget, targetPath);\n PlaitBoard.getHost(board).appendChild(fakeDropNodeG);\n }\n\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n dragFakeNodeG?.remove();\n dragFakeNodeG = createG();\n [...activeElements, ...correspondingElements].forEach(element => {\n addActiveOnDragOrigin(element);\n });\n activeElements.forEach(element => {\n const nodeG = drawFakeDragNode(board, element, offsetX, offsetY);\n dragFakeNodeG?.appendChild(nodeG);\n });\n\n PlaitBoard.getHost(board).appendChild(dragFakeNodeG);\n return;\n }\n\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n const firstLevelElements = getFirstLevelElement(activeElements);\n if (!board.options.readonly && firstLevelElements.length) {\n firstLevelElements.push(...correspondingElements);\n if (isDragging(board)) {\n firstLevelElements.forEach(element => {\n removeActiveOnDragOrigin(element);\n });\n }\n if (dropTarget) {\n const targetPathRef = board.pathRef(targetPath);\n const targetPreviousPathRef = Path.hasPrevious(targetPath) && board.pathRef(Path.previous(targetPath));\n const targetElementPathRef = board.pathRef(PlaitBoard.findPath(board, dropTarget.target));\n let abstractRefs = getValidAbstractRefs(board, firstLevelElements);\n const normalElements = firstLevelElements\n .filter(element => !abstractRefs.some(refs => refs.abstract === element))\n .map(element => {\n if (AbstractNode.isAbstract(element)) {\n return adjustAbstractToNode(element);\n }\n return element;\n });\n\n const hasPreviousNode = targetPath[targetPath.length - 1] !== 0;\n if (hasPreviousNode) {\n const previousElement = PlaitNode.get(board, Path.previous(targetPath)) as MindElement;\n const correspondingAbstract = getCorrespondingAbstract(previousElement);\n const targetHasCorrespondAbstract =\n correspondingAbstract && correspondingAbstract.end !== targetPath[targetPath.length - 1] - 1;\n if (targetHasCorrespondAbstract) {\n const adjustedNode = abstractRefs.map(ref => {\n return adjustAbstractToNode(ref.abstract);\n });\n normalElements.push(...adjustedNode);\n abstractRefs = [];\n }\n }\n\n const effectedAbstracts = deleteElementHandleAbstract(board, firstLevelElements);\n insertElementHandleAbstract(board, targetPath, normalElements.length, false, effectedAbstracts);\n MindTransforms.setAbstractsByRefs(board, effectedAbstracts);\n\n let refs = deleteElementsHandleRightNodeCount(board, firstLevelElements);\n const parent = PlaitNode.get(board, Path.parent(targetPath)) as MindElement;\n const shouldChangeRoot = isDropStandardRight(parent, dropTarget);\n if (shouldChangeRoot && targetElementPathRef.current) {\n refs = insertElementHandleRightNodeCount(board, targetElementPathRef.current.slice(0, 1), normalElements.length, refs);\n }\n\n MindTransforms.setRightNodeCountByRefs(board, refs);\n CoreTransforms.removeElements(board, firstLevelElements);\n\n let insertPath = targetPathRef.current;\n const parentPath = Path.parent(targetPathRef.current || targetPath);\n if (!insertPath) {\n // When the insertion position and the selected node position are the same, the recorded previousPath is used\n const previousPath = targetPreviousPathRef && targetPreviousPathRef.unref();\n if (previousPath) {\n insertPath = Path.next(previousPath);\n } else {\n const parent = PlaitNode.get(board, parentPath);\n const children = getNonAbstractChildren(parent);\n insertPath = [...parentPath, children.length || 0];\n }\n }\n\n MindTransforms.insertNodes(board, normalElements, insertPath);\n\n if (abstractRefs.length) {\n MindTransforms.insertAbstractNodes(board, abstractRefs, normalElements, insertPath);\n }\n\n if (\n targetElementPathRef.current &&\n targetPathRef.current &&\n Path.isAncestor(targetElementPathRef.current, targetPathRef.current) &&\n dropTarget.target.isCollapsed\n ) {\n Transforms.setNode(board, { isCollapsed: false }, targetElementPathRef.current);\n }\n targetElementPathRef.unref();\n targetPathRef.unref();\n\n let setActiveElements: MindElement[] = [];\n depthFirstRecursion((board as unknown) as MindElement, node => {\n const isSelected = activeElements.some(element => element.id === node.id);\n if (isSelected) {\n setActiveElements.push(node);\n }\n });\n\n Transforms.addSelectionWithTemporaryElements(board, setActiveElements);\n }\n setMindDragging(board, false);\n activeElements = [];\n dragFakeNodeG?.remove();\n dragFakeNodeG = undefined;\n fakeDropNodeG?.remove();\n fakeDropNodeG = undefined;\n dropTarget = null;\n }\n globalPointerUp(event);\n };\n\n return board;\n};\n","import {\n BOARD_TO_HOST,\n PlaitBoard,\n PlaitElement,\n PlaitPlugin,\n Point,\n Transforms,\n getSelectedElements,\n isMainPointer,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { AbstractNode, LayoutNode, MindLayoutType, isHorizontalLayout, isStandardLayout } from '@plait/layouts';\nimport { MindElement } from '../interfaces';\nimport { findLocationLeftIndex, getHitAbstractHandle, getLocationScope, handleTouchedAbstract } from '../utils/abstract/resize';\nimport { separateChildren } from '../utils/abstract/common';\nimport { AbstractHandlePosition, AbstractResizeState, PlaitAbstractBoard } from './with-abstract-resize.board';\nimport { MindQueries } from '../queries';\nimport { PlaitCommonElementRef } from '@plait/common';\nimport { NodeActiveGenerator } from '../generators/node-active.generator';\n\nexport const withAbstract: PlaitPlugin = (board: PlaitBoard) => {\n const newBoard = board as PlaitBoard & PlaitAbstractBoard;\n\n const { pointerDown, pointerMove, pointerUp } = board;\n let activeAbstractElement: MindElement | undefined;\n let abstractHandlePosition: AbstractHandlePosition | undefined;\n let touchedAbstract: MindElement | undefined;\n let startPoint: Point | undefined;\n let newProperty: { end: number } | { start: number } | undefined;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!isMainPointer(event) || PlaitBoard.isReadonly(board)) {\n pointerDown(event);\n return;\n }\n\n const activeAbstractElements = getSelectedElements(board).filter(element => AbstractNode.isAbstract(element)) as MindElement[];\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n\n activeAbstractElement = activeAbstractElements.find(element => {\n abstractHandlePosition = getHitAbstractHandle(board, element as MindElement, point);\n return abstractHandlePosition;\n });\n\n if (activeAbstractElement) {\n if (newBoard?.onAbstractResize) {\n newBoard.onAbstractResize(AbstractResizeState.start);\n }\n startPoint = point;\n return;\n }\n\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n getSelectedElements(board);\n const host = BOARD_TO_HOST.get(board);\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n\n touchedAbstract = handleTouchedAbstract(board, touchedAbstract, endPoint);\n\n if (abstractHandlePosition && activeAbstractElement) {\n const nodeLayout = MindQueries.getCorrectLayoutByElement(board, activeAbstractElement as MindElement) as MindLayoutType;\n const isHorizontal = isHorizontalLayout(nodeLayout);\n const parentElement = MindElement.getParent(activeAbstractElement);\n\n let children = parentElement.children;\n\n const parentLayout = MindQueries.getLayoutByElement(parentElement);\n if (isStandardLayout(parentLayout)) {\n const rightNodeCount = parentElement.rightNodeCount!;\n const { leftChildren, rightChildren } = separateChildren(parentElement);\n if ((activeAbstractElement as MindElement).end! < rightNodeCount) {\n children = rightChildren;\n }\n if ((activeAbstractElement as MindElement).start! >= rightNodeCount) {\n children = leftChildren;\n }\n }\n\n if (newBoard?.onAbstractResize) {\n newBoard.onAbstractResize(AbstractResizeState.resizing);\n }\n\n const resizingLocation = isHorizontal ? endPoint[1] : endPoint[0];\n const parent = (MindElement.getNode(parentElement) as unknown) as LayoutNode;\n const scope = getLocationScope(board, abstractHandlePosition, children, activeAbstractElement, 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 = activeAbstractElement.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 const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(activeAbstractElement);\n const activeGenerator = ref.getGenerator<NodeActiveGenerator>(NodeActiveGenerator.key);\n activeGenerator.updateAbstractOutline(activeAbstractElement, abstractHandlePosition, location);\n }\n pointerMove(event);\n };\n\n board.pointerUp = (event: PointerEvent) => {\n startPoint = undefined;\n abstractHandlePosition = undefined;\n if (activeAbstractElement) {\n if (newBoard?.onAbstractResize) {\n newBoard.onAbstractResize(AbstractResizeState.end);\n }\n\n if (newProperty) {\n const path = PlaitBoard.findPath(board, activeAbstractElement);\n Transforms.setNode(board, newProperty, path);\n } else {\n const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(activeAbstractElement);\n const activeGenerator = ref.getGenerator<NodeActiveGenerator>(NodeActiveGenerator.key);\n activeGenerator.updateAbstractOutline(activeAbstractElement);\n }\n activeAbstractElement = undefined;\n }\n pointerUp(event);\n };\n return board;\n};\n","import { PlaitBoard, PlaitOptionsBoard } from '@plait/core';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { WithMindOptions } from '../interfaces/options';\nimport { WithMindPluginKey } from '../constants/default';\n\nexport const withMindExtend = (board: PlaitBoard) => {\n const newBoard = board as PlaitBoard & PlaitMindBoard;\n\n (board as PlaitOptionsBoard).setPluginOptions<WithMindOptions>(WithMindPluginKey, { spaceBetweenEmojis: 4, emojiPadding: 0 });\n\n return newBoard;\n};\n","import {\n BoardTransforms,\n PlaitBoard,\n PlaitPointerType,\n createG,\n getSelectedElements,\n throttleRAF,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { MindPointerType } from '../interfaces/pointer';\nimport { getRectangleByElement, getTopicRectangleByElement } from '../utils';\nimport { drawRoundRectangleByElement } from '../utils/draw/node-shape';\nimport { createEmptyMind } from '../utils/node/create-node';\nimport { MindElement } from '../interfaces';\nimport { BoardCreationMode, TextManage, isDndMode, isDrawingMode, setCreationMode } from '@plait/common';\nimport { MindTransforms } from '../transforms';\n\nconst DefaultHotkey = 'm';\n\nexport interface FakeCreateNodeRef {\n g: SVGGElement;\n nodeG: SVGGElement;\n textManage: TextManage;\n}\n\nexport const withCreateMind = (board: PlaitBoard) => {\n const newBoard = board as PlaitBoard & PlaitMindBoard;\n const { keyDown, pointerDown, pointerMove, pointerUp } = board;\n let fakeCreateNodeRef: FakeCreateNodeRef | null = null;\n let emptyMind: MindElement | null = null;\n\n newBoard.pointerDown = (event: PointerEvent) => {\n const isMindPointer = PlaitBoard.isPointer<MindPointerType | PlaitPointerType>(board, MindPointerType.mind);\n if (!PlaitBoard.isReadonly(board) && isDrawingMode(board) && isMindPointer) {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const emptyMind = createEmptyMind(newBoard, point);\n MindTransforms.insertMind(board as PlaitMindBoard, emptyMind);\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n return;\n }\n pointerDown(event);\n };\n\n newBoard.pointerMove = (event: PointerEvent) => {\n if (PlaitBoard.isReadonly(board)) {\n pointerMove(event);\n return;\n }\n const isMindPointer = PlaitBoard.isPointer<MindPointerType | PlaitPointerType>(board, MindPointerType.mind);\n if (isDndMode(board) && isMindPointer) {\n throttleRAF(board, 'with-mind-create', () => {\n let movingPoint = PlaitBoard.getMovingPointInBoard(board);\n\n if (movingPoint) {\n movingPoint = toViewBoxPoint(newBoard, toHostPoint(board, movingPoint[0], movingPoint[1]));\n emptyMind = createEmptyMind(newBoard, movingPoint);\n const nodeRectangle = getRectangleByElement(newBoard, emptyMind);\n const nodeG = drawRoundRectangleByElement(board, nodeRectangle, emptyMind);\n const topicRectangle = getTopicRectangleByElement(newBoard, nodeRectangle, emptyMind);\n if (!fakeCreateNodeRef) {\n const textManage = new TextManage(board, {\n getRectangle: () => {\n return topicRectangle;\n }\n });\n textManage.draw(emptyMind!.data.topic);\n fakeCreateNodeRef = {\n g: createG(),\n nodeG,\n textManage\n };\n fakeCreateNodeRef.g.classList.add('root');\n fakeCreateNodeRef.g.setAttribute('plait-mind-temporary', 'true');\n PlaitBoard.getHost(board).append(fakeCreateNodeRef.g);\n fakeCreateNodeRef.g.append(...[fakeCreateNodeRef.nodeG, textManage.g]);\n } else {\n fakeCreateNodeRef.textManage.updateRectangle(topicRectangle);\n fakeCreateNodeRef.nodeG.remove();\n fakeCreateNodeRef.nodeG = nodeG;\n fakeCreateNodeRef.g.append(nodeG);\n fakeCreateNodeRef.g.append(fakeCreateNodeRef.textManage.g);\n }\n }\n });\n } else {\n destroy();\n }\n pointerMove(event);\n };\n\n newBoard.pointerUp = (event: PointerEvent) => {\n if (emptyMind) {\n MindTransforms.insertMind(board as PlaitMindBoard, emptyMind);\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n emptyMind = null;\n destroy();\n return;\n }\n pointerUp(event);\n };\n\n board.keyDown = (event: KeyboardEvent) => {\n if (PlaitBoard.isReadonly(board) || getSelectedElements(board).length > 0) {\n keyDown(event);\n return;\n }\n if (event.key === DefaultHotkey && !PlaitBoard.isPointer(board, MindPointerType.mind)) {\n BoardTransforms.updatePointerType(board, MindPointerType.mind);\n setCreationMode(board, BoardCreationMode.drawing);\n event.preventDefault();\n return;\n }\n keyDown(event);\n };\n\n function destroy() {\n if (fakeCreateNodeRef) {\n fakeCreateNodeRef.textManage.destroy();\n fakeCreateNodeRef.g.remove();\n fakeCreateNodeRef = null;\n }\n }\n\n return newBoard;\n};\n","import { PlaitBoard, Transforms, getSelectedElements } from '@plait/core';\nimport { MindElement, PlaitMind } from '../interfaces';\nimport { AbstractNode } from '@plait/layouts';\nimport { MindTransforms } from '../transforms';\nimport { editTopic } from '../utils/node/common';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { isSpaceHotkey, isExpandHotkey, isTabHotkey, isEnterHotkey, isVirtualKey, isDelete, getFirstTextManage } from '@plait/common';\nimport { isHotkey } from 'is-hotkey';\n\nexport const withMindHotkey = (baseBoard: PlaitBoard) => {\n const board = baseBoard as PlaitBoard & PlaitMindBoard;\n const { keyDown, globalKeyDown } = board;\n\n board.keyDown = (event: KeyboardEvent) => {\n const selectedElements = getSelectedElements(board);\n const isSingleSelection = selectedElements.length === 1;\n const isSingleMindElement = selectedElements.length === 1 && MindElement.isMindElement(board, selectedElements[0]);\n const targetElement = selectedElements[0] as MindElement;\n\n if (isExpandHotkey(event) && isSingleMindElement && !PlaitMind.isMind(targetElement)) {\n if (targetElement.children && targetElement.children.length > 0) {\n Transforms.setNode(\n board,\n { isCollapsed: targetElement.isCollapsed ? false : true },\n PlaitBoard.findPath(board, targetElement)\n );\n return;\n }\n }\n\n if (!PlaitBoard.isReadonly(board)) {\n if (isTabHotkey(event) && isSingleMindElement) {\n event.preventDefault();\n MindTransforms.insertChildNode(board, targetElement);\n return;\n }\n\n if (\n isEnterHotkey(event) &&\n isSingleMindElement &&\n !PlaitMind.isMind(targetElement) &&\n !AbstractNode.isAbstract(targetElement)\n ) {\n MindTransforms.insertSiblingNode(board, targetElement);\n return;\n }\n\n if (\n !isVirtualKey(event) &&\n !isDelete(event) &&\n !isSpaceHotkey(event) &&\n isSingleSelection &&\n MindElement.isMindElement(board, targetElement)\n ) {\n event.preventDefault();\n editTopic(targetElement);\n return;\n }\n }\n\n keyDown(event);\n };\n\n board.globalKeyDown = (event: KeyboardEvent) => {\n if (PlaitBoard.isFocus(board) && PlaitBoard.hasBeenTextEditing(board)) {\n if (isHotkey('mod+z', event)) {\n const { history } = board;\n const { undos } = history;\n const previousOp = undos.length > 0 ? undos[undos.length - 1][0] : undefined;\n if (previousOp && previousOp.type === 'insert_node' && MindElement.isMindElement(board, previousOp.node) && getFirstTextManage(previousOp.node).isEditing) {\n board.undo();\n }\n }\n }\n globalKeyDown(event);\n };\n\n return board;\n};\n","import { PlaitBoard, PlaitElement, depthFirstRecursion, getIsRecursionFunc, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { MindElement } from '../../interfaces/element';\nimport { isHitMindElement } from '../position/node';\n\nexport interface NodeExtendHoveredRef {\n element: MindElement;\n}\n\nexport const pointerMoveHandle = (board: PlaitBoard, event: PointerEvent, nodeExtendHoveredRef: NodeExtendHoveredRef | null) => {\n let target: MindElement | null = null;\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n depthFirstRecursion(\n (board as unknown) as MindElement,\n element => {\n if (target) {\n return;\n }\n if (!MindElement.isMindElement(board, element)) {\n return;\n }\n const isHitElement = isHitMindElement(board, point, element);\n if (isHitElement) {\n target = element;\n }\n },\n getIsRecursionFunc(board),\n true\n );\n\n if (nodeExtendHoveredRef && target && nodeExtendHoveredRef.element === target) {\n return nodeExtendHoveredRef;\n }\n\n if (nodeExtendHoveredRef) {\n removeHovered(nodeExtendHoveredRef.element);\n }\n\n if (target) {\n addHovered(target);\n if (nodeExtendHoveredRef) {\n nodeExtendHoveredRef.element = target;\n } else {\n nodeExtendHoveredRef = { element: target };\n }\n } else {\n nodeExtendHoveredRef = null;\n }\n return nodeExtendHoveredRef;\n};\n\nexport const pointerLeaveHandle = (board: PlaitBoard, event: PointerEvent, nodeExtendHoveredRef: NodeExtendHoveredRef | null) => {\n if (nodeExtendHoveredRef) {\n removeHovered(nodeExtendHoveredRef.element);\n }\n};\n\nexport const addHovered = (element: MindElement) => {\n PlaitElement.getElementG(element).classList.add('hovered');\n};\n\nexport const removeHovered = (element: MindElement) => {\n PlaitElement.getElementG(element)?.classList?.remove('hovered');\n};\n","import { PlaitBoard, PlaitElement, throttleRAF } from '@plait/core';\nimport { NodeExtendHoveredRef, pointerLeaveHandle, pointerMoveHandle } from '../utils/node-hover/extend';\n\nexport const withNodeHoverHitTest = (board: PlaitBoard) => {\n const { pointerMove, pointerLeave } = board;\n let nodeExtendHoveredRef: NodeExtendHoveredRef | null = null;\n\n board.pointerMove = (event: PointerEvent) => {\n throttleRAF(board, 'with-mind-node-hover-hit-test', () => {\n // element has been deleted\n if (nodeExtendHoveredRef && !PlaitElement.hasMounted(nodeExtendHoveredRef.element)) {\n nodeExtendHoveredRef = null;\n }\n nodeExtendHoveredRef = pointerMoveHandle(board, event, nodeExtendHoveredRef);\n });\n pointerMove(event);\n };\n\n board.pointerLeave = (event: PointerEvent) => {\n pointerLeaveHandle(board, event, nodeExtendHoveredRef);\n nodeExtendHoveredRef = null;\n pointerLeave(event);\n };\n\n return board;\n};\n","import {\n PlaitBoard,\n isMainPointer,\n PlaitOptionsBoard,\n hotkeys,\n PlaitPointerType,\n addSelectedElement,\n Point,\n getSelectedElements,\n RectangleClient,\n getHitElementByPoint,\n temporaryDisableSelection,\n WritableClipboardType,\n toHostPoint,\n toViewBoxPoint,\n WritableClipboardContext,\n createClipboardContext,\n ClipboardData,\n isContextmenu,\n PlaitElement,\n WritableClipboardOperationType\n} from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { ImageData } from '../interfaces/element-data';\nimport { addImageFocus, removeImageFocus } from '../utils/node/image';\nimport { isHitImage } from '../utils';\nimport { MindTransforms } from '../transforms';\nimport { acceptImageTypes, buildImage, getElementOfFocusedImage } from '@plait/common';\nimport { DEFAULT_MIND_IMAGE_WIDTH } from '../constants';\n\nexport const withNodeImage = (board: PlaitBoard) => {\n const { keyDown, pointerUp, globalPointerUp, buildFragment, insertFragment, deleteFragment } = board;\n\n board.pointerUp = (event: PointerEvent) => {\n const elementOfFocusedImage = getElementOfFocusedImage(board);\n if (\n elementOfFocusedImage &&\n MindElement.isMindElement(board, elementOfFocusedImage) &&\n !isContextmenu(event) &&\n (PlaitBoard.isReadonly(board) || !isMainPointer(event) || !PlaitBoard.isPointer(board, PlaitPointerType.selection))\n ) {\n removeImageFocus(board, elementOfFocusedImage as MindElement<ImageData>);\n pointerUp(event);\n return;\n }\n if (PlaitBoard.isReadonly(board)) {\n pointerUp(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const hitElement = getHitElementByPoint(board, point);\n const isHitImageResult =\n hitElement &&\n MindElement.isMindElement(board, hitElement) &&\n MindElement.hasImage(hitElement) &&\n isHitImage(board, hitElement as MindElement<ImageData>, point);\n if (isHitImageResult && elementOfFocusedImage && hitElement === elementOfFocusedImage) {\n temporaryDisableSelection(board as PlaitOptionsBoard);\n pointerUp(event);\n return;\n }\n if (elementOfFocusedImage && MindElement.isMindElement(board, elementOfFocusedImage)) {\n removeImageFocus(board, elementOfFocusedImage as MindElement<ImageData>);\n }\n if (isHitImageResult && hitElement) {\n temporaryDisableSelection(board as PlaitOptionsBoard);\n addImageFocus(board, hitElement as MindElement<ImageData>);\n }\n pointerUp(event);\n };\n\n board.keyDown = (event: KeyboardEvent) => {\n const selectedImageElement = getElementOfFocusedImage(board);\n if (!PlaitBoard.isReadonly(board) && selectedImageElement && (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event))) {\n addSelectedElement(board, selectedImageElement);\n MindTransforms.removeImage(board, selectedImageElement as MindElement<ImageData>);\n return;\n }\n keyDown(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (PlaitBoard.isFocus(board)) {\n const isInBoard = event.target instanceof Node && PlaitBoard.getBoardContainer(board).contains(event.target);\n const selectedImageElement = getElementOfFocusedImage(board);\n // Clear image selection when mouse board outside area\n if (selectedImageElement && MindElement.isMindElement(board, selectedImageElement) && !isInBoard) {\n removeImageFocus(board, selectedImageElement as MindElement<ImageData>);\n }\n }\n globalPointerUp(event);\n };\n\n board.buildFragment = (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => {\n const selectedImageElement = getElementOfFocusedImage(board) as MindElement<ImageData>;\n if (selectedImageElement) {\n clipboardContext = createClipboardContext(WritableClipboardType.medias, [selectedImageElement.data.image], '');\n }\n return buildFragment(clipboardContext, rectangle, operationType, originData);\n };\n\n board.deleteFragment = (elements: PlaitElement[]) => {\n const selectedImageElement = getElementOfFocusedImage(board);\n if (selectedImageElement) {\n MindTransforms.removeImage(board, selectedImageElement as MindElement<ImageData>);\n }\n deleteFragment(elements);\n };\n\n board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n const selectedElements = getSelectedElements(board);\n const isSelectedImage = !!getElementOfFocusedImage(board);\n const isSingleSelection = selectedElements.length === 1 && MindElement.isMindElement(board, selectedElements[0]);\n if (isSelectedImage || isSingleSelection) {\n if (clipboardData?.files?.length) {\n const acceptImageArray = acceptImageTypes.map(type => 'image/' + type);\n const selectedElement = (selectedElements[0] || getElementOfFocusedImage(board)) as MindElement;\n if (acceptImageArray.includes(clipboardData.files[0].type)) {\n const imageFile = clipboardData.files[0];\n buildImage(board, imageFile, DEFAULT_MIND_IMAGE_WIDTH, imageItem => {\n MindTransforms.setImage(board, selectedElement, imageItem);\n });\n return;\n }\n }\n if (clipboardData?.medias?.length) {\n const selectedElement = (selectedElements[0] || getElementOfFocusedImage(board)) as MindElement;\n MindTransforms.setImage(board, selectedElement, clipboardData.medias[0]);\n return;\n }\n }\n insertFragment(clipboardData, targetPoint, operationType);\n };\n\n return board;\n};\n","import {\n Path,\n PlaitBoard,\n PlaitNode,\n Point,\n RectangleClient,\n ResizeCursorClass,\n distanceBetweenPointAndRectangle,\n getSelectedElements,\n isDragging\n} from '@plait/core';\nimport { MindElement } from '../interfaces/element';\nimport { getRectangleByNode } from '../utils/position/node';\nimport { NodeSpace } from '../utils/space/node-space';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { MindTransforms } from '../transforms';\nimport { EXTEND_OFFSET } from '../constants/default';\nimport { ResizeRef, ResizeState, TextManage, WithResizeOptions, getFirstTextManage, withResize } from '@plait/common';\n\ninterface TargetElementRef {\n minWidth: number;\n currentWidth: number;\n path: Path;\n textManage: TextManage;\n}\n\nexport const withNodeResize = (board: PlaitBoard) => {\n let targetElementRef: TargetElementRef | null = null;\n const options: WithResizeOptions<MindElement, null> = {\n key: 'mind-node',\n canResize: () => {\n return !isDragging(board);\n },\n hitTest: (point: Point) => {\n const newTargetElement = getSelectedTarget(board as PlaitMindBoard, point);\n if (newTargetElement) {\n return {\n element: newTargetElement,\n handle: null,\n cursorClass: ResizeCursorClass.ew\n };\n }\n return null;\n },\n beforeResize: (resizeRef: ResizeRef<MindElement, null>) => {\n targetElementRef = {\n minWidth: NodeSpace.getNodeResizableMinWidth(board as PlaitMindBoard, resizeRef.element),\n currentWidth: NodeSpace.getNodeDynamicWidth(board as PlaitMindBoard, resizeRef.element),\n path: PlaitBoard.findPath(board, resizeRef.element),\n textManage: getFirstTextManage(resizeRef.element)\n };\n },\n onResize: (resizeRef: ResizeRef<MindElement, null>, resizeState: ResizeState) => {\n let resizedWidth = targetElementRef!.currentWidth + Point.getOffsetX(resizeState.startPoint, resizeState.endPoint);\n if (resizedWidth <= targetElementRef!.minWidth) {\n resizedWidth = targetElementRef!.minWidth;\n }\n const newTarget = PlaitNode.get<MindElement>(board, targetElementRef!.path);\n if (newTarget && NodeSpace.getNodeTopicMinWidth(board as PlaitMindBoard, newTarget) !== resizedWidth) {\n targetElementRef!.textManage.updateRectangleWidth(resizedWidth);\n const { height } = targetElementRef!.textManage.getSize(undefined, resizedWidth);\n MindTransforms.setNodeManualWidth(board as PlaitMindBoard, newTarget, resizedWidth, height);\n }\n },\n afterResize: (resizeRef: ResizeRef<MindElement, null>) => {\n targetElementRef = null;\n }\n };\n withResize<MindElement, null>(board, options);\n return board;\n};\n\nexport const getSelectedTarget = (board: PlaitMindBoard, point: Point) => {\n const selectedElements = getSelectedElements(board).filter(value => MindElement.isMindElement(board, value)) as MindElement[];\n if (selectedElements.length > 0) {\n const target = selectedElements.find(value => {\n const rectangle = getResizeActiveRectangle(board, value);\n return distanceBetweenPointAndRectangle(point[0], point[1], rectangle) <= 0;\n });\n return target ? target : null;\n }\n return null;\n};\n\nexport const getResizeActiveRectangle = (board: PlaitBoard, element: MindElement): RectangleClient => {\n const node = MindElement.getNode(element);\n const rectangle = getRectangleByNode(node);\n return { x: rectangle.x + rectangle.width - EXTEND_OFFSET, y: rectangle.y, width: EXTEND_OFFSET * 2, height: rectangle.height };\n};\n","import { PlaitBoard, Point, PlaitNode, Path } from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { ImageData } from '../interfaces/element-data';\nimport { getHitImageResizeHandleDirection } from '../utils';\nimport {\n ResizeHandle,\n ResizeRef,\n ResizeState,\n WithResizeOptions,\n addElementOfFocusedImage,\n getElementOfFocusedImage,\n withResize\n} from '@plait/common';\nimport { MindTransforms } from '../transforms';\n\nexport const withNodeImageResize = (board: PlaitBoard) => {\n const options: WithResizeOptions<MindElement<ImageData>> = {\n key: 'mind-node-image',\n canResize: () => {\n return true;\n },\n hitTest: (point: Point) => {\n const elementOfFocusedImage = getElementOfFocusedImage(board);\n const selectedMindElement =\n elementOfFocusedImage && MindElement.isMindElement(board, elementOfFocusedImage) ? elementOfFocusedImage : undefined;\n if (selectedMindElement) {\n const result = getHitImageResizeHandleDirection(board, selectedMindElement as MindElement<ImageData>, point);\n if (result) {\n return {\n element: selectedMindElement as MindElement<ImageData>,\n handle: result.handle as ResizeHandle,\n cursorClass: result.cursorClass\n };\n }\n }\n return null;\n },\n onResize: (resizeRef: ResizeRef<MindElement<ImageData>>, resizeState: ResizeState) => {\n const offsetX = Point.getOffsetX(resizeState.startPoint, resizeState.endPoint);\n const originWidth = resizeRef.element.data.image.width;\n const originHeight = resizeRef.element.data.image.height;\n const path = resizeRef.path as Path;\n let width = originWidth + offsetX;\n if (width <= 100) {\n width = 100;\n }\n const ratio = originWidth / originHeight;\n const height = width / ratio;\n const imageItem = { ...resizeRef.element.data.image, width, height };\n MindTransforms.setImage(board, PlaitNode.get(board, path), imageItem);\n addElementOfFocusedImage(board, PlaitNode.get(board, path));\n }\n };\n\n withResize<MindElement<ImageData>>(board, options);\n\n return board;\n};\n","import { getSelectedElements, Path, PlaitBoard, PlaitElement, Point, Transforms, WritableClipboardOperationType } from '@plait/core';\nimport { MindElement, PlaitMind } from '../interfaces';\nimport { copyNewNode } from './mind';\nimport { getRectangleByNode } from './position/node';\nimport { AbstractNode, getNonAbstractChildren } from '@plait/layouts';\nimport { getRelativeStartEndByAbstractRef, getOverallAbstracts, getValidAbstractRefs } from './abstract/common';\nimport { createMindElement } from './node/create-node';\nimport { adjustAbstractToNode, adjustNodeToRoot, adjustRootToNode } from './node/adjust-node';\nimport { Element } from 'slate';\nimport {\n BRANCH_FONT_FAMILY,\n DEFAULT_FONT_FAMILY,\n ROOT_TOPIC_FONT_SIZE,\n TOPIC_DEFAULT_MAX_WORD_COUNT,\n TOPIC_FONT_SIZE\n} from '../constants/node-topic-style';\nimport { findNewChildNodePath } from './path';\nimport { PlaitMindBoard } from '../plugins/with-mind.board';\nimport { getFontSizeBySlateElement } from './space/node-space';\nimport { buildText, measureElement, ParagraphElement } from '@plait/common';\n\nexport const buildClipboardData = (board: PlaitBoard, selectedElements: MindElement[], startPoint: Point) => {\n let result: MindElement[] = [];\n\n // get overall abstract\n const overallAbstracts = getOverallAbstracts(board, selectedElements) as MindElement[];\n // get valid abstract refs\n const validAbstractRefs = getValidAbstractRefs(board, [...selectedElements, ...overallAbstracts]);\n\n // keep correct order\n const newSelectedElements = selectedElements.filter(value => !validAbstractRefs.find(ref => ref.abstract === value));\n newSelectedElements.push(...validAbstractRefs.map(value => value.abstract));\n\n const selectedMindNodes = newSelectedElements.map(value => MindElement.getNode(value));\n newSelectedElements.forEach((element, index) => {\n // handle relative location\n const nodeRectangle = getRectangleByNode(selectedMindNodes[index]);\n const points = [[nodeRectangle.x - startPoint[0], nodeRectangle.y - startPoint[1]]] as Point[];\n\n // handle invalid abstract\n const abstractRef = validAbstractRefs.find(ref => ref.abstract === element);\n if (AbstractNode.isAbstract(element) && abstractRef) {\n const { start, end } = getRelativeStartEndByAbstractRef(abstractRef, newSelectedElements);\n result.push({\n ...element,\n points,\n start,\n end\n });\n } else {\n if (AbstractNode.isAbstract(element)) {\n let newElement = { ...element, points } as MindElement;\n delete newElement.start;\n delete newElement.end;\n result.push(newElement);\n } else {\n result.push({\n ...element,\n points: points\n });\n }\n }\n });\n return result;\n};\n\nexport const insertClipboardData = (\n board: PlaitMindBoard,\n elements: PlaitElement[],\n targetPoint: Point,\n operationType?: WritableClipboardOperationType\n) => {\n let newElement: MindElement, path: Path;\n const selectedElements = getSelectedElements(board);\n let newELements: PlaitElement[] = [];\n\n const hasTargetParent = selectedElements.length === 1;\n const targetParent = selectedElements[0];\n const targetParentPath = targetParent && PlaitBoard.findPath(board, targetParent);\n const nonAbstractChildrenLength = targetParent && getNonAbstractChildren(targetParent).length;\n\n elements.forEach((item: PlaitElement, index: number) => {\n newElement = copyNewNode(item as MindElement);\n if (hasTargetParent && operationType !== WritableClipboardOperationType.duplicate) {\n if (item.isRoot) {\n newElement = adjustRootToNode(board, newElement);\n const { width, height } = getTopicSizeByElement(newElement, targetParent as MindElement);\n newElement.width = width;\n newElement.height = height;\n }\n // handle abstract start and end\n if (AbstractNode.isAbstract(newElement)) {\n newElement.start = newElement.start + nonAbstractChildrenLength;\n newElement.end = newElement.end + nonAbstractChildrenLength;\n }\n path = [...targetParentPath, nonAbstractChildrenLength + 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 (AbstractNode.isAbstract(item)) {\n newElement = adjustAbstractToNode(newElement);\n }\n if (!item.isRoot) {\n newElement = adjustNodeToRoot(board, newElement);\n const { width, height } = getTopicSizeByElement(newElement);\n newElement.width = width;\n newElement.height = height;\n }\n path = [board.children.length];\n }\n newELements.push(newElement);\n Transforms.insertNode(board, newElement, path);\n return;\n });\n Transforms.addSelectionWithTemporaryElements(board, newELements);\n};\n\nexport const insertClipboardText = (board: PlaitMindBoard, targetParent: PlaitElement, text: string | Element) => {\n const { width, height } = getTopicSize(false, PlaitMind.isMind(targetParent), buildText(text));\n const newElement = createMindElement(text, Math.max(width, getFontSizeBySlateElement(text)), height, {});\n Transforms.insertNode(board, newElement, findNewChildNodePath(board, targetParent));\n Transforms.addSelectionWithTemporaryElements(board, [newElement]);\n};\n\nexport const getTopicSizeByElement = (element: MindElement, parentElement?: MindElement) => {\n return getTopicSize(\n PlaitMind.isMind(element),\n (parentElement && PlaitMind.isMind(parentElement)) || false,\n element.data.topic,\n element.manualWidth\n );\n};\n\nexport const getTopicSize = (isRoot: boolean, isBranch: boolean, topic: ParagraphElement, manualWidth?: number) => {\n let fontFamily = DEFAULT_FONT_FAMILY;\n let fontSize = TOPIC_FONT_SIZE;\n if (isRoot) {\n fontFamily = BRANCH_FONT_FAMILY;\n fontSize = ROOT_TOPIC_FONT_SIZE;\n } else if (isBranch) {\n fontFamily = BRANCH_FONT_FAMILY;\n }\n const maxWidth = fontSize * TOPIC_DEFAULT_MAX_WORD_COUNT;\n return measureElement(\n topic,\n { fontSize, fontFamily },\n manualWidth ? manualWidth : maxWidth\n );\n};\n","import {\n ClipboardData,\n Path,\n PlaitBoard,\n PlaitElement,\n PlaitNode,\n Point,\n RectangleClient,\n WritableClipboardContext,\n WritableClipboardOperationType,\n WritableClipboardType,\n addOrCreateClipboardContext,\n addSelectedElement\n} from '@plait/core';\nimport { MindElement } from '../interfaces';\nimport { AbstractNode } from '@plait/layouts';\nimport { getFirstLevelElement } from '../utils/mind';\nimport { deleteElementsHandleRightNodeCount } from '../utils/node/right-node-count';\nimport { MindTransforms } from '../transforms';\nimport { deleteElementHandleAbstract } from '../utils/abstract/common';\nimport { getSelectedMindElements } from '../utils/node/common';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { buildClipboardData, insertClipboardData, insertClipboardText } from '../utils/clipboard';\nimport { buildText, getElementsText } from '@plait/common';\n\nexport const withMindFragment = (baseBoard: PlaitBoard) => {\n const board = baseBoard as PlaitBoard & PlaitMindBoard;\n let firstLevelElements: MindElement[] | null;\n const { getDeletedFragment, insertFragment, buildFragment, deleteFragment } = board;\n\n board.getDeletedFragment = (data: PlaitElement[]) => {\n const targetMindElements = getSelectedMindElements(board);\n if (targetMindElements.length) {\n firstLevelElements = getFirstLevelElement(targetMindElements).reverse();\n const abstractRefs = deleteElementHandleAbstract(board, firstLevelElements);\n MindTransforms.setAbstractsByRefs(board, abstractRefs);\n const refs = deleteElementsHandleRightNodeCount(board, targetMindElements);\n MindTransforms.setRightNodeCountByRefs(board, refs);\n const deletableElements = getFirstLevelElement(targetMindElements);\n data.push(...deletableElements);\n }\n return getDeletedFragment(data);\n };\n\n board.deleteFragment = (elements: PlaitElement[]) => {\n deleteFragment(elements);\n if (firstLevelElements) {\n const nextSelected = getNextSelectedElement(board, firstLevelElements);\n if (nextSelected) {\n addSelectedElement(board, nextSelected);\n }\n firstLevelElements = null;\n }\n };\n\n board.buildFragment = (\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n operationType: WritableClipboardOperationType,\n originData?: PlaitElement[]\n ) => {\n const targetMindElements = getSelectedMindElements(board, originData);\n const firstLevelElements = getFirstLevelElement(targetMindElements);\n if (firstLevelElements.length) {\n const elements = buildClipboardData(board, firstLevelElements, rectangle ? [rectangle.x, rectangle.y] : [0, 0]);\n const text = getElementsText(targetMindElements);\n const addition: WritableClipboardContext = {\n text,\n type: WritableClipboardType.elements,\n elements: elements\n };\n clipboardContext = addOrCreateClipboardContext(clipboardContext, addition);\n }\n return buildFragment(clipboardContext, rectangle, operationType, originData);\n };\n\n board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n if (clipboardData?.elements?.length) {\n const mindElements = clipboardData.elements?.filter(value => MindElement.isMindElement(board, value));\n if (mindElements && mindElements.length > 0) {\n insertClipboardData(board, mindElements, targetPoint, operationType);\n }\n }\n if (clipboardData?.text) {\n const mindElements = getSelectedMindElements(board);\n if (mindElements.length === 1) {\n insertClipboardText(board, mindElements[0], buildText(clipboardData.text));\n return;\n }\n }\n\n insertFragment(clipboardData, targetPoint, operationType);\n };\n\n return board;\n};\n\nexport const getNextSelectedElement = (board: PlaitBoard, firstLevelElements: MindElement[]) => {\n let activeElement: MindElement | undefined;\n const firstLevelElement = firstLevelElements[0];\n const firstLevelElementPath = PlaitBoard.findPath(board, firstLevelElement);\n\n let nextSelectedPath = firstLevelElementPath;\n if (Path.hasPrevious(firstLevelElementPath)) {\n nextSelectedPath = Path.previous(firstLevelElementPath);\n }\n\n if (AbstractNode.isAbstract(firstLevelElement)) {\n const parent = MindElement.getParent(firstLevelElement);\n if (!firstLevelElements.includes(parent.children[firstLevelElement.start])) {\n activeElement = parent.children[firstLevelElement.start];\n }\n }\n\n try {\n if (!activeElement) {\n activeElement = PlaitNode.get<MindElement>(board, nextSelectedPath);\n }\n } catch (error) {}\n\n const firstElement = firstLevelElements[0];\n const firstElementParent = MindElement.findParent(firstElement);\n const hasSameParent = firstLevelElements.every(element => {\n return MindElement.findParent(element) === firstElementParent;\n });\n if (firstElementParent && hasSameParent && !activeElement) {\n activeElement = firstElementParent;\n }\n return activeElement;\n};\n","import { PlaitBoard } from '@plait/core';\nimport { RenderComponentRef } from '@plait/common';\nimport { EmojiData, EmojiItem } from '../interfaces/element-data';\nimport { MindElement } from '../interfaces/element';\n\nexport interface PlaitMindEmojiBoard {\n renderEmoji: (container: Element | DocumentFragment, props: EmojiProps) => EmojiComponentRef;\n}\n\nexport const withEmoji = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & PlaitMindEmojiBoard;\n\n newBoard.renderEmoji = (container: Element | DocumentFragment, props: EmojiProps) => {\n throw new Error('No implementation for renderEmoji method.');\n };\n return newBoard;\n};\n\nexport type EmojiComponentRef = RenderComponentRef<EmojiProps>;\n\nexport interface EmojiProps {\n board: PlaitBoard;\n emojiItem: EmojiItem;\n element: MindElement<EmojiData>;\n fontSize: number;\n}\n","import {\n PlaitBoard,\n PlaitPluginElementContext,\n RectangleClient,\n Transforms,\n Selection,\n depthFirstRecursion,\n PlaitElement,\n getIsRecursionFunc,\n Point,\n toHostPoint,\n toViewBoxPoint\n} from '@plait/core';\nimport { MindElement, PlaitMind } from '../interfaces';\nimport { PlaitMindComponent } from '../mind.component';\nimport { MindNodeComponent } from '../mind-node.component';\nimport { getRectangleByNode, isHitMindElement } from '../utils/position/node';\nimport { withNodeDnd } from './with-node-dnd';\nimport { editTopic } from '../utils/node/common';\nimport { withAbstract } from './with-abstract-resize';\nimport { withMindExtend } from './with-mind-extend';\nimport { withCreateMind } from './with-mind-create';\nimport { withMindHotkey } from './with-mind-hotkey';\nimport { withNodeHoverHitTest } from './with-node-hover-hit-test';\nimport { withNodeImage } from './with-node-image';\nimport { PlaitMindBoard } from './with-mind.board';\nimport { withNodeResize } from './with-node-resize';\nimport { withNodeImageResize } from './with-node-image-resize';\nimport { withMindFragment } from './with-mind-fragment';\nimport { withEmoji } from '../emoji/with-emoji';\n\nexport const withMind = (baseBoard: PlaitBoard) => {\n const board = baseBoard as PlaitBoard & PlaitMindBoard;\n const {\n drawElement,\n dblClick,\n isRectangleHit,\n isHit,\n getRectangle,\n isMovable,\n isRecursion,\n isAlign,\n isImageBindingAllowed,\n canAddToGroup,\n canSetZIndex,\n isExpanded,\n getOneHitElement\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.applyTheme = (element: PlaitElement) => {\n const mindElement = element as MindElement;\n const shouldClearProperty =\n !PlaitBoard.isBoard(element) && (mindElement?.branchColor || mindElement?.fill || mindElement?.strokeColor);\n if (PlaitMind.isMind(element) && shouldClearProperty) {\n const path = PlaitBoard.findPath(board, element);\n Transforms.setNode(board, { fill: null, strokeColor: null, branchColor: null }, path);\n }\n };\n\n board.getRectangle = element => {\n if (MindElement.isMindElement(board, element)) {\n if (!PlaitElement.hasMounted(element)) {\n console.error('mind element has not been mounted');\n }\n return getRectangleByNode(MindElement.getNode(element));\n }\n return getRectangle(element);\n };\n\n board.canAddToGroup = (element: PlaitElement) => {\n if (MindElement.isMindElement(board, element) && !element.isRoot) {\n return false;\n }\n return canAddToGroup(element);\n };\n\n board.canSetZIndex = (element: PlaitElement) => {\n if (MindElement.isMindElement(board, element) && !element.isRoot) {\n return false;\n }\n return canSetZIndex(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.isRectangleHit = (element, selection: Selection) => {\n if (MindElement.isMindElement(board, element)) {\n const client = getRectangleByNode(MindElement.getNode(element));\n const isHit = RectangleClient.isHit(RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]), client);\n return isHit;\n }\n return isRectangleHit(element, selection);\n };\n\n board.isHit = (element, point: Point, isStrict?: boolean) => {\n if (MindElement.isMindElement(board, element)) {\n const client = getRectangleByNode(MindElement.getNode(element));\n const isHit = RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), client);\n return isHit;\n }\n return isHit(element, point, isStrict);\n };\n\n board.getOneHitElement = elements => {\n const isAllMindElements = elements.every(item => MindElement.isMindElement(board, item));\n if (isAllMindElements) {\n return elements[0];\n }\n return getOneHitElement(elements);\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.isImageBindingAllowed = element => {\n if (MindElement.isMindElement(board, element)) {\n return true;\n }\n return isImageBindingAllowed(element);\n };\n\n board.isAlign = (element: PlaitElement) => {\n if (PlaitMind.isMind(element) && element.isRoot) {\n return true;\n }\n return isAlign(element);\n };\n\n board.isExpanded = (element: PlaitElement) => {\n if (MindElement.isMindElement(board, element) && !PlaitMind.isMind(element)) {\n return !element.isCollapsed;\n }\n return isExpanded(element);\n };\n\n board.dblClick = (event: MouseEvent) => {\n if (PlaitBoard.isReadonly(board)) {\n dblClick(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n board.children\n .filter(value => PlaitMind.isMind(value))\n .forEach(mindMap => {\n depthFirstRecursion<MindElement>(\n mindMap as MindElement,\n node => {\n if (!PlaitBoard.hasBeenTextEditing(board) && isHitMindElement(board, point, node)) {\n editTopic(node);\n }\n },\n getIsRecursionFunc(board)\n );\n });\n if (PlaitBoard.hasBeenTextEditing(board)) {\n return;\n }\n dblClick(event);\n };\n\n return withEmoji(\n withNodeResize(\n withNodeImageResize(\n withNodeImage(\n withNodeHoverHitTest(withMindFragment(withMindHotkey(withMindExtend(withCreateMind(withAbstract(withNodeDnd(board)))))))\n )\n )\n )\n );\n};\n","import { EmojiData, EmojiItem } from '../interfaces/element-data';\nimport { PlaitBoard } from '@plait/core';\nimport { MindElement } from '../interfaces';\n\nexport abstract class MindEmojiBaseComponent {\n fontSize: number = 14;\n\n emojiItem!: EmojiItem;\n\n board!: PlaitBoard;\n\n element!: MindElement<EmojiData>;\n\n abstract nativeElement(): HTMLElement;\n}\n","/*\n * Public API Surface of mind\n */\n\nexport * from './mind.component';\nexport * from './mind-node.component';\nexport * from './utils';\nexport * from './interfaces';\nexport * from './plugins/with-mind';\nexport * from './plugins/with-mind-extend';\nexport * from './constants';\nexport * from './queries/index';\nexport * from './transforms/index';\nexport * from './emoji';\nexport * from './plugins/with-mind.board';\nexport * from './plugins/with-abstract-resize.board';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getLayoutDirection","Node","Path"],"mappings":"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"}