@plait/mind 0.27.0-next.1 → 0.27.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/base/emoji-base.component.d.ts +1 -1
- package/base/image-base.component.d.ts +1 -1
- package/constants/node-topic-style.d.ts +4 -0
- package/{esm2020 → esm2022}/base/emoji-base.component.mjs +4 -4
- package/esm2022/base/image-base.component.mjs +75 -0
- package/esm2022/constants/node-topic-style.mjs +12 -0
- package/esm2022/interfaces/element-data.mjs +2 -0
- package/{esm2020 → esm2022}/mind.component.mjs +6 -6
- package/{esm2020 → esm2022}/mind.module.mjs +5 -5
- package/esm2022/node.component.mjs +251 -0
- package/esm2022/plugins/with-mind-create.mjs +112 -0
- package/esm2022/utils/draw/abstract-outline.mjs +117 -0
- package/esm2022/utils/node/create-node.mjs +55 -0
- package/esm2022/utils/position/node.mjs +36 -0
- package/{fesm2020 → fesm2022}/plait-mind.mjs +241 -225
- package/fesm2022/plait-mind.mjs.map +1 -0
- package/interfaces/element-data.d.ts +2 -2
- package/package.json +7 -13
- package/utils/abstract/common.d.ts +2 -2
- package/utils/node/create-node.d.ts +4 -4
- package/utils/position/node.d.ts +1 -1
- package/esm2020/base/image-base.component.mjs +0 -72
- package/esm2020/constants/node-topic-style.mjs +0 -8
- package/esm2020/interfaces/element-data.mjs +0 -2
- package/esm2020/node.component.mjs +0 -248
- package/esm2020/plugins/with-mind-create.mjs +0 -109
- package/esm2020/utils/draw/abstract-outline.mjs +0 -117
- package/esm2020/utils/node/create-node.mjs +0 -52
- package/esm2020/utils/position/node.mjs +0 -34
- package/fesm2015/plait-mind.mjs +0 -4382
- package/fesm2015/plait-mind.mjs.map +0 -1
- package/fesm2020/plait-mind.mjs.map +0 -1
- /package/{esm2020 → esm2022}/base/base.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/base/index.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/abstract-node.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/default.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/image.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/index.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/node-style.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/theme.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/node-active.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/node-collapse.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/node-emojis.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/node-image.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/node-insert.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/element.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/index.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/layout.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/node.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/options.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/pointer.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/theme-color.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/types.mjs +0 -0
- /package/{esm2020 → esm2022}/plait-mind.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-abstract-resize.board.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-abstract-resize.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-mind-extend.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-mind-hotkey.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-mind.board.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-mind.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-node-dnd.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-node-hover-detect.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-node-image-resize.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-node-image.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-node-resize.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-available-sublayouts-by-element.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-branch-layouts.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-correct-layout-by-element.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-layout-by-element.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/index.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/abstract-node.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/emoji.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/image.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/index.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/layout.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/node.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/abstract/common.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/abstract/resize.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/clipboard.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/dnd/common.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/dnd/detector.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-dnd.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-link/abstract-link.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-link/draw-link.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-link/indented-link.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-link/logic-link.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-shape.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/layout.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/mind.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/adjust-node.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/common.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/dynamic-width.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/image.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/right-node-count.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node-hover/extend.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node-style/branch.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node-style/common.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node-style/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node-style/shape.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/path.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/point-placement.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/position/emoji.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/position/image.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/position/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/position/topic.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/space/emoji.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/space/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/space/layout-options.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/space/node-space.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/weak-maps.mjs +0 -0
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { createG, getRectangleByElements, PlaitBoard, RectangleClient } from '@plait/core';
|
|
2
|
-
import { PRIMARY_COLOR } from '../../constants';
|
|
3
|
-
import { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants/abstract-node';
|
|
4
|
-
import { MindElement } from '../../interfaces';
|
|
5
|
-
import { isHorizontalLayout } from '@plait/layouts';
|
|
6
|
-
import { MindQueries } from '../../queries';
|
|
7
|
-
import { getLayoutDirection, getPointByPlacement, moveXOfPoint, transformPlacement } from '../point-placement';
|
|
8
|
-
import { HorizontalPlacement, VerticalPlacement } from '../../interfaces/types';
|
|
9
|
-
import { getRectangleByResizingLocation } from '../abstract/resize';
|
|
10
|
-
import { AbstractHandlePosition } from '../../plugins/with-abstract-resize.board';
|
|
11
|
-
export function drawAbstractIncludedOutline(board, roughSVG, element, activeHandlePosition, resizingLocation) {
|
|
12
|
-
const abstractIncludedG = createG();
|
|
13
|
-
const parentElement = MindElement.getParent(element);
|
|
14
|
-
const nodeLayout = MindQueries.getCorrectLayoutByElement(board, element);
|
|
15
|
-
const isHorizontal = isHorizontalLayout(nodeLayout);
|
|
16
|
-
const includedElements = parentElement.children.slice(element.start, element.end + 1);
|
|
17
|
-
let abstractRectangle = getRectangleByElements(board, includedElements, true);
|
|
18
|
-
abstractRectangle = RectangleClient.getOutlineRectangle(abstractRectangle, -ABSTRACT_INCLUDED_OUTLINE_OFFSET);
|
|
19
|
-
if (resizingLocation) {
|
|
20
|
-
abstractRectangle = getRectangleByResizingLocation(abstractRectangle, resizingLocation, activeHandlePosition, isHorizontal);
|
|
21
|
-
}
|
|
22
|
-
const rectangle = drawAbstractRoundRectangle(roughSVG, abstractRectangle.x, abstractRectangle.y, abstractRectangle.x + abstractRectangle.width, abstractRectangle.y + abstractRectangle.height, isHorizontal, {
|
|
23
|
-
stroke: PRIMARY_COLOR,
|
|
24
|
-
strokeWidth: 1,
|
|
25
|
-
fillStyle: 'solid'
|
|
26
|
-
});
|
|
27
|
-
const startPlacement = [HorizontalPlacement.center, VerticalPlacement.top];
|
|
28
|
-
const endPlacement = [HorizontalPlacement.center, VerticalPlacement.bottom];
|
|
29
|
-
const linkDirection = getLayoutDirection(MindElement.getNode(element), isHorizontal);
|
|
30
|
-
transformPlacement(startPlacement, linkDirection);
|
|
31
|
-
transformPlacement(endPlacement, linkDirection);
|
|
32
|
-
let startCenterPoint = getPointByPlacement(abstractRectangle, startPlacement);
|
|
33
|
-
let endCenterPoint = getPointByPlacement(abstractRectangle, endPlacement);
|
|
34
|
-
const startPoint1 = moveXOfPoint(startCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);
|
|
35
|
-
const startPoint2 = moveXOfPoint(startCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);
|
|
36
|
-
const endPoint1 = moveXOfPoint(endCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);
|
|
37
|
-
const endPoint2 = moveXOfPoint(endCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);
|
|
38
|
-
const startHandle = roughSVG.line(startPoint1[0], startPoint1[1], startPoint2[0], startPoint2[1], getHandleOption(activeHandlePosition === AbstractHandlePosition.start));
|
|
39
|
-
const endHandle = roughSVG.line(endPoint1[0], endPoint1[1], endPoint2[0], endPoint2[1], getHandleOption(activeHandlePosition === AbstractHandlePosition.end));
|
|
40
|
-
handleBoardClass(board, activeHandlePosition, isHorizontal);
|
|
41
|
-
startHandle.setAttribute('stroke-linecap', 'round');
|
|
42
|
-
endHandle.setAttribute('stroke-linecap', 'round');
|
|
43
|
-
abstractIncludedG.append(startHandle);
|
|
44
|
-
abstractIncludedG.append(endHandle);
|
|
45
|
-
abstractIncludedG.append(rectangle);
|
|
46
|
-
return abstractIncludedG;
|
|
47
|
-
}
|
|
48
|
-
export function getHandleOption(isHover) {
|
|
49
|
-
return isHover
|
|
50
|
-
? {
|
|
51
|
-
stroke: PRIMARY_COLOR,
|
|
52
|
-
strokeWidth: 4,
|
|
53
|
-
fillStyle: 'solid'
|
|
54
|
-
}
|
|
55
|
-
: {
|
|
56
|
-
stroke: ABSTRACT_HANDLE_COLOR,
|
|
57
|
-
strokeWidth: 3,
|
|
58
|
-
fillStyle: 'solid'
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
function handleBoardClass(board, activeHandlePosition, isHorizontal) {
|
|
62
|
-
if (activeHandlePosition) {
|
|
63
|
-
if (isHorizontal) {
|
|
64
|
-
PlaitBoard.getBoardContainer(board).classList.add('abstract-resizing-horizontal');
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
PlaitBoard.getBoardContainer(board).classList.add('abstract-resizing-vertical');
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
PlaitBoard.getBoardContainer(board).classList.remove('abstract-resizing-horizontal');
|
|
72
|
-
PlaitBoard.getBoardContainer(board).classList.remove('abstract-resizing-vertical');
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
export function drawAbstractRoundRectangle(rs, x1, y1, x2, y2, isHorizontal, options) {
|
|
76
|
-
const width = Math.abs(x1 - x2);
|
|
77
|
-
const height = Math.abs(y1 - y2);
|
|
78
|
-
const radius = 5;
|
|
79
|
-
const handleGap = 4;
|
|
80
|
-
const handleLength = 10;
|
|
81
|
-
const handleSpace = handleLength + handleGap * 2;
|
|
82
|
-
if (isHorizontal) {
|
|
83
|
-
const handleSideLine = (width - handleSpace - radius * 2) / 2;
|
|
84
|
-
const sideLine = height - radius * 2;
|
|
85
|
-
return rs.path(`M${x1 + radius},${y1}
|
|
86
|
-
l${handleSideLine},0
|
|
87
|
-
m${handleSpace},0
|
|
88
|
-
l${handleSideLine},0
|
|
89
|
-
a${radius},${radius},0,0,1,${radius},${radius}
|
|
90
|
-
l0,${sideLine}
|
|
91
|
-
a${radius},${radius},0,0,1,-${radius},${radius}
|
|
92
|
-
l-${handleSideLine},0
|
|
93
|
-
m-${handleSpace},0
|
|
94
|
-
l-${handleSideLine},0
|
|
95
|
-
a${radius},${radius},0,0,1,-${radius},-${radius}
|
|
96
|
-
l0,-${sideLine}
|
|
97
|
-
a${radius},${radius},0,0,1,${radius},-${radius}`, options);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
const handleSideLine = (height - handleSpace - radius * 2) / 2;
|
|
101
|
-
const sideLine = width - radius * 2;
|
|
102
|
-
return rs.path(`M${x1 + radius},${y1}
|
|
103
|
-
l${sideLine},0
|
|
104
|
-
a${radius},${radius},0,0,1,${radius},${radius}
|
|
105
|
-
l0,${handleSideLine}
|
|
106
|
-
m0,${handleSpace}
|
|
107
|
-
l0,${handleSideLine}
|
|
108
|
-
a${radius},${radius},0,0,1,-${radius},${radius}
|
|
109
|
-
l-${sideLine},0
|
|
110
|
-
a${radius},${radius},0,0,1,-${radius},-${radius}
|
|
111
|
-
l0,-${handleSideLine}
|
|
112
|
-
m0,-${handleSpace}
|
|
113
|
-
l0,-${handleSideLine}
|
|
114
|
-
a${radius},${radius},0,0,1,${radius},-${radius}`, options);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtb3V0bGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL2RyYXcvYWJzdHJhY3Qtb3V0bGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWhJLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQWtCLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0csT0FBTyxFQUFFLG1CQUFtQixFQUFrQixpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBR2xGLE1BQU0sVUFBVSwyQkFBMkIsQ0FDdkMsS0FBaUIsRUFDakIsUUFBa0IsRUFDbEIsT0FBb0IsRUFDcEIsb0JBQTZDLEVBQzdDLGdCQUF5QjtJQUV6QixNQUFNLGlCQUFpQixHQUFHLE9BQU8sRUFBRSxDQUFDO0lBRXBDLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsTUFBTSxVQUFVLEdBQUcs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O2dCQUMxQyxjQUFjO2dCQUNkLFdBQVc7Z0JBQ1gsY0FBYztlQUNmLE1BQU0sSUFBSSxNQUFNLFdBQVcsTUFBTSxLQUFLLE1BQU07a0JBQ3pDLFFBQVE7ZUFDWCxNQUFNLElBQUksTUFBTSxVQUFVLE1BQU0sS0FBSyxNQUFNLEVBQUUsRUFDaEQsT0FBTyxDQUNWLENBQUM7S0FDTDtTQUFNO1FBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDcEMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUNWLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFO2VBQ2xCLFFBQVE7ZUFDUixNQUFNLElBQUksTUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNO2lCQUN4QyxjQUFjO2lCQUNkLFdBQVc7aUJBQ1gsY0FBYztlQUNoQixNQUFNLElBQUksTUFBTSxXQUFXLE1BQU0sSUFBSSxNQUFNO2dCQUMxQyxRQUFRO2VBQ1QsTUFBTSxJQUFJLE1BQU0sV0FBVyxNQUFNLEtBQUssTUFBTTtrQkFDekMsY0FBYztrQkFDZCxXQUFXO2tCQUNYLGNBQWM7ZUFDakIsTUFBTSxJQUFJLE1BQU0sVUFBVSxNQUFNLEtBQUssTUFBTSxFQUFFLEVBQ2hELE9BQU8sQ0FDVixDQUFDO0tBQ0w7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRywgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cywgUGxhaXRCb2FyZCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUFJJTUFSWV9DT0xPUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBQlNUUkFDVF9IQU5ETEVfQ09MT1IsIEFCU1RSQUNUX0hBTkRMRV9MRU5HVEgsIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VUIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fic3RyYWN0LW5vZGUnO1xuaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1pbmRMYXlvdXRUeXBlLCBpc0hvcml6b250YWxMYXlvdXQgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBNaW5kUXVlcmllcyB9IGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgZ2V0TGF5b3V0RGlyZWN0aW9uLCBnZXRQb2ludEJ5UGxhY2VtZW50LCBtb3ZlWE9mUG9pbnQsIHRyYW5zZm9ybVBsYWNlbWVudCB9IGZyb20gJy4uL3BvaW50LXBsYWNlbWVudCc7XG5pbXBvcnQgeyBIb3Jpem9udGFsUGxhY2VtZW50LCBQb2ludFBsYWNlbWVudCwgVmVydGljYWxQbGFjZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3R5cGVzJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5UmVzaXppbmdMb2NhdGlvbiB9IGZyb20gJy4uL2Fic3RyYWN0L3Jlc2l6ZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vcGx1Z2lucy93aXRoLWFic3RyYWN0LXJlc2l6ZS5ib2FyZCc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3QWJzdHJhY3RJbmNsdWRlZE91dGxpbmUoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgcm91Z2hTVkc6IFJvdWdoU1ZHLFxuICAgIGVsZW1lbnQ6IE1pbmRFbGVtZW50LFxuICAgIGFjdGl2ZUhhbmRsZVBvc2l0aW9uPzogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbixcbiAgICByZXNpemluZ0xvY2F0aW9uPzogbnVtYmVyXG4pIHtcbiAgICBjb25zdCBhYnN0cmFjdEluY2x1ZGVkRyA9IGNyZWF0ZUcoKTtcblxuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBNaW5kRWxlbWVudC5nZXRQYXJlbnQoZWxlbWVudCk7XG4gICAgY29uc3Qgbm9kZUxheW91dCA9IE1pbmRRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpIGFzIE1pbmRMYXlvdXRUeXBlO1xuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbExheW91dChub2RlTGF5b3V0KTtcblxuICAgIGNvbnN0IGluY2x1ZGVkRWxlbWVudHMgPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuLnNsaWNlKGVsZW1lbnQuc3RhcnQhLCBlbGVtZW50LmVuZCEgKyAxKTtcbiAgICBsZXQgYWJzdHJhY3RSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBpbmNsdWRlZEVsZW1lbnRzLCB0cnVlKTtcbiAgICBhYnN0cmFjdFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRPdXRsaW5lUmVjdGFuZ2xlKGFic3RyYWN0UmVjdGFuZ2xlLCAtQUJTVFJBQ1RfSU5DTFVERURfT1VUTElORV9PRkZTRVQpO1xuXG4gICAgaWYgKHJlc2l6aW5nTG9jYXRpb24pIHtcbiAgICAgICAgYWJzdHJhY3RSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeVJlc2l6aW5nTG9jYXRpb24oYWJzdHJhY3RSZWN0YW5nbGUsIHJlc2l6aW5nTG9jYXRpb24sIGFjdGl2ZUhhbmRsZVBvc2l0aW9uISwgaXNIb3Jpem9udGFsKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWN0YW5nbGUgPSBkcmF3QWJzdHJhY3RSb3VuZFJlY3RhbmdsZShcbiAgICAgICAgcm91Z2hTVkcsXG4gICAgICAgIGFic3RyYWN0UmVjdGFuZ2xlLngsXG4gICAgICAgIGFic3RyYWN0UmVjdGFuZ2xlLnksXG4gICAgICAgIGFic3RyYWN0UmVjdGFuZ2xlLnggKyBhYnN0cmFjdFJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgYWJzdHJhY3RSZWN0YW5nbGUueSArIGFic3RyYWN0UmVjdGFuZ2xlLmhlaWdodCxcbiAgICAgICAgaXNIb3Jpem9udGFsLFxuICAgICAgICB7XG4gICAgICAgICAgICBzdHJva2U6IFBSSU1BUllfQ09MT1IsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHN0YXJ0UGxhY2VtZW50ID0gW0hvcml6b250YWxQbGFjZW1lbnQuY2VudGVyLCBWZXJ0aWNhbFBsYWNlbWVudC50b3BdIGFzIFBvaW50UGxhY2VtZW50O1xuICAgIGNvbnN0IGVuZFBsYWNlbWVudCA9IFtIb3Jpem9udGFsUGxhY2VtZW50LmNlbnRlciwgVmVydGljYWxQbGFjZW1lbnQuYm90dG9tXSBhcyBQb2ludFBsYWNlbWVudDtcblxuICAgIGNvbnN0IGxpbmtEaXJlY3Rpb24gPSBnZXRMYXlvdXREaXJlY3Rpb24oTWluZEVsZW1lbnQuZ2V0Tm9kZShlbGVtZW50KSwgaXNIb3Jpem9udGFsKTtcblxuICAgIHRyYW5zZm9ybVBsYWNlbWVudChzdGFydFBsYWNlbWVudCwgbGlua0RpcmVjdGlvbik7XG4gICAgdHJhbnNmb3JtUGxhY2VtZW50KGVuZFBsYWNlbWVudCwgbGlua0RpcmVjdGlvbik7XG5cbiAgICBsZXQgc3RhcnRDZW50ZXJQb2ludCA9IGdldFBvaW50QnlQbGFjZW1lbnQoYWJzdHJhY3RSZWN0YW5nbGUsIHN0YXJ0UGxhY2VtZW50KTtcbiAgICBsZXQgZW5kQ2VudGVyUG9pbnQgPSBnZXRQb2ludEJ5UGxhY2VtZW50KGFic3RyYWN0UmVjdGFuZ2xlLCBlbmRQbGFjZW1lbnQpO1xuXG4gICAgY29uc3Qgc3RhcnRQb2ludDEgPSBtb3ZlWE9mUG9pbnQoc3RhcnRDZW50ZXJQb2ludCwgLUFCU1RSQUNUX0hBTkRMRV9MRU5HVEggLyAyLCBsaW5rRGlyZWN0aW9uKTtcbiAgICBjb25zdCBzdGFydFBvaW50MiA9IG1vdmVYT2ZQb2ludChzdGFydENlbnRlclBvaW50LCBBQlNUUkFDVF9IQU5ETEVfTEVOR1RIIC8gMiwgbGlua0RpcmVjdGlvbik7XG5cbiAgICBjb25zdCBlbmRQb2ludDEgPSBtb3ZlWE9mUG9pbnQoZW5kQ2VudGVyUG9pbnQsIC1BQlNUUkFDVF9IQU5ETEVfTEVOR1RIIC8gMiwgbGlua0RpcmVjdGlvbik7XG4gICAgY29uc3QgZW5kUG9pbnQyID0gbW92ZVhPZlBvaW50KGVuZENlbnRlclBvaW50LCBBQlNUUkFDVF9IQU5ETEVfTEVOR1RIIC8gMiwgbGlua0RpcmVjdGlvbik7XG5cbiAgICBjb25zdCBzdGFydEhhbmRsZSA9IHJvdWdoU1ZHLmxpbmUoXG4gICAgICAgIHN0YXJ0UG9pbnQxWzBdLFxuICAgICAgICBzdGFydFBvaW50MVsxXSxcbiAgICAgICAgc3RhcnRQb2ludDJbMF0sXG4gICAgICAgIHN0YXJ0UG9pbnQyWzFdLFxuICAgICAgICBnZXRIYW5kbGVPcHRpb24oYWN0aXZlSGFuZGxlUG9zaXRpb24gPT09IEFic3RyYWN0SGFuZGxlUG9zaXRpb24uc3RhcnQpXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZEhhbmRsZSA9IHJvdWdoU1ZHLmxpbmUoXG4gICAgICAgIGVuZFBvaW50MVswXSxcbiAgICAgICAgZW5kUG9pbnQxWzFdLFxuICAgICAgICBlbmRQb2ludDJbMF0sXG4gICAgICAgIGVuZFBvaW50MlsxXSxcbiAgICAgICAgZ2V0SGFuZGxlT3B0aW9uKGFjdGl2ZUhhbmRsZVBvc2l0aW9uID09PSBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLmVuZClcbiAgICApO1xuXG4gICAgaGFuZGxlQm9hcmRDbGFzcyhib2FyZCwgYWN0aXZlSGFuZGxlUG9zaXRpb24sIGlzSG9yaXpvbnRhbCk7XG5cbiAgICBzdGFydEhhbmRsZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1saW5lY2FwJywgJ3JvdW5kJyk7XG4gICAgZW5kSGFuZGxlLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWxpbmVjYXAnLCAncm91bmQnKTtcblxuICAgIGFic3RyYWN0SW5jbHVkZWRHLmFwcGVuZChzdGFydEhhbmRsZSk7XG4gICAgYWJzdHJhY3RJbmNsdWRlZEcuYXBwZW5kKGVuZEhhbmRsZSk7XG4gICAgYWJzdHJhY3RJbmNsdWRlZEcuYXBwZW5kKHJlY3RhbmdsZSk7XG5cbiAgICByZXR1cm4gYWJzdHJhY3RJbmNsdWRlZEc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIYW5kbGVPcHRpb24oaXNIb3ZlcjogYm9vbGVhbikge1xuICAgIHJldHVybiBpc0hvdmVyXG4gICAgICAgID8ge1xuICAgICAgICAgICAgICBzdHJva2U6IFBSSU1BUllfQ09MT1IsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiA0LFxuICAgICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgICBzdHJva2U6IEFCU1RSQUNUX0hBTkRMRV9DT0xPUixcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDMsXG4gICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgIH07XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUJvYXJkQ2xhc3MoYm9hcmQ6IFBsYWl0Qm9hcmQsIGFjdGl2ZUhhbmRsZVBvc2l0aW9uOiBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uIHwgdW5kZWZpbmVkLCBpc0hvcml6b250YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAoYWN0aXZlSGFuZGxlUG9zaXRpb24pIHtcbiAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZCgnYWJzdHJhY3QtcmVzaXppbmctaG9yaXpvbnRhbCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZCgnYWJzdHJhY3QtcmVzaXppbmctdmVydGljYWwnKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5yZW1vdmUoJ2Fic3RyYWN0LXJlc2l6aW5nLWhvcml6b250YWwnKTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZSgnYWJzdHJhY3QtcmVzaXppbmctdmVydGljYWwnKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3QWJzdHJhY3RSb3VuZFJlY3RhbmdsZShcbiAgICByczogUm91Z2hTVkcsXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICBpc0hvcml6b250YWw6IGJvb2xlYW4sXG4gICAgb3B0aW9uczogT3B0aW9uc1xuKSB7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLmFicyh4MSAtIHgyKTtcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLmFicyh5MSAtIHkyKTtcblxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XG4gICAgY29uc3QgaGFuZGxlR2FwID0gNDtcbiAgICBjb25zdCBoYW5kbGVMZW5ndGggPSAxMDtcblxuICAgIGNvbnN0IGhhbmRsZVNwYWNlID0gaGFuZGxlTGVuZ3RoICsgaGFuZGxlR2FwICogMjtcblxuICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlU2lkZUxpbmUgPSAod2lkdGggLSBoYW5kbGVTcGFjZSAtIHJhZGl1cyAqIDIpIC8gMjtcbiAgICAgICAgY29uc3Qgc2lkZUxpbmUgPSBoZWlnaHQgLSByYWRpdXMgKiAyO1xuICAgICAgICByZXR1cm4gcnMucGF0aChcbiAgICAgICAgICAgIGBNJHt4MSArIHJhZGl1c30sJHt5MX1cbiAgICAgICAgICAgIGwke2hhbmRsZVNpZGVMaW5lfSwwXG4gICAgICAgICAgICBtJHtoYW5kbGVTcGFjZX0sMFxuICAgICAgICAgICAgbCR7aGFuZGxlU2lkZUxpbmV9LDBcbiAgICAgICAgICAgIGEke3JhZGl1c30sJHtyYWRpdXN9LDAsMCwxLCR7cmFkaXVzfSwke3JhZGl1c31cbiAgICAgICAgICAgIGwwLCR7c2lkZUxpbmV9XG4gICAgICAgICAgICBhJHtyYWRpdXN9LCR7cmFkaXVzfSwwLDAsMSwtJHtyYWRpdXN9LCR7cmFkaXVzfVxuICAgICAgICAgICAgbC0ke2hhbmRsZVNpZGVMaW5lfSwwXG4gICAgICAgICAgICBtLSR7aGFuZGxlU3BhY2V9LDBcbiAgICAgICAgICAgIGwtJHtoYW5kbGVTaWRlTGluZX0sMFxuICAgICAgICAgICAgYSR7cmFkaXVzfSwke3JhZGl1c30sMCwwLDEsLSR7cmFkaXVzfSwtJHtyYWRpdXN9XG4gICAgICAgICAgICBsMCwtJHtzaWRlTGluZX1cbiAgICAgICAgICAgIGEke3JhZGl1c30sJHtyYWRpdXN9LDAsMCwxLCR7cmFkaXVzfSwtJHtyYWRpdXN9YCxcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBoYW5kbGVTaWRlTGluZSA9IChoZWlnaHQgLSBoYW5kbGVTcGFjZSAtIHJhZGl1cyAqIDIpIC8gMjtcbiAgICAgICAgY29uc3Qgc2lkZUxpbmUgPSB3aWR0aCAtIHJhZGl1cyAqIDI7XG4gICAgICAgIHJldHVybiBycy5wYXRoKFxuICAgICAgICAgICAgYE0ke3gxICsgcmFkaXVzfSwke3kxfVxuICAgICAgICAgICAgbCR7c2lkZUxpbmV9LDBcbiAgICAgICAgICAgIGEke3JhZGl1c30sJHtyYWRpdXN9LDAsMCwxLCR7cmFkaXVzfSwke3JhZGl1c31cbiAgICAgICAgICAgIGwwLCR7aGFuZGxlU2lkZUxpbmV9XG4gICAgICAgICAgICBtMCwke2hhbmRsZVNwYWNlfVxuICAgICAgICAgICAgbDAsJHtoYW5kbGVTaWRlTGluZX1cbiAgICAgICAgICAgIGEke3JhZGl1c30sJHtyYWRpdXN9LDAsMCwxLC0ke3JhZGl1c30sJHtyYWRpdXN9XG4gICAgICAgICAgICBsLSR7c2lkZUxpbmV9LDBcbiAgICAgICAgICAgIGEke3JhZGl1c30sJHtyYWRpdXN9LDAsMCwxLC0ke3JhZGl1c30sLSR7cmFkaXVzfVxuICAgICAgICAgICAgbDAsLSR7aGFuZGxlU2lkZUxpbmV9XG4gICAgICAgICAgICBtMCwtJHtoYW5kbGVTcGFjZX1cbiAgICAgICAgICAgIGwwLC0ke2hhbmRsZVNpZGVMaW5lfVxuICAgICAgICAgICAgYSR7cmFkaXVzfSwke3JhZGl1c30sMCwwLDEsJHtyYWRpdXN9LC0ke3JhZGl1c31gLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { idCreator, isNullOrUndefined } from '@plait/core';
|
|
2
|
-
import { TEXT_DEFAULT_HEIGHT, buildText } from '@plait/text';
|
|
3
|
-
import { MindLayoutType } from '@plait/layouts';
|
|
4
|
-
import { ROOT_TOPIC_HEIGHT } from '../../constants/node-topic-style';
|
|
5
|
-
export const createEmptyMind = (point) => {
|
|
6
|
-
const element = createMindElement('思维导图', 72, ROOT_TOPIC_HEIGHT, { layout: MindLayoutType.right });
|
|
7
|
-
element.isRoot = true;
|
|
8
|
-
element.points = [point];
|
|
9
|
-
element.type = 'mindmap';
|
|
10
|
-
return element;
|
|
11
|
-
};
|
|
12
|
-
export const createDefaultMind = (point, rightNodeCount, layout) => {
|
|
13
|
-
const root = createMindElement('思维导图', 72, ROOT_TOPIC_HEIGHT, { layout });
|
|
14
|
-
root.rightNodeCount = rightNodeCount;
|
|
15
|
-
root.isRoot = true;
|
|
16
|
-
root.type = 'mindmap';
|
|
17
|
-
root.points = [point];
|
|
18
|
-
const children = [1, 1, 1].map(() => {
|
|
19
|
-
return createMindElement('新建节点', 56, TEXT_DEFAULT_HEIGHT, {});
|
|
20
|
-
});
|
|
21
|
-
root.children = children;
|
|
22
|
-
return root;
|
|
23
|
-
};
|
|
24
|
-
export const createMindElement = (text, width, height, options) => {
|
|
25
|
-
const newElement = {
|
|
26
|
-
id: idCreator(),
|
|
27
|
-
data: {
|
|
28
|
-
topic: buildText(text)
|
|
29
|
-
},
|
|
30
|
-
children: [],
|
|
31
|
-
width,
|
|
32
|
-
height
|
|
33
|
-
};
|
|
34
|
-
let key;
|
|
35
|
-
for (key in options) {
|
|
36
|
-
if (!isNullOrUndefined(options[key])) {
|
|
37
|
-
newElement[key] = options[key];
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return newElement;
|
|
41
|
-
};
|
|
42
|
-
export const INHERIT_ATTRIBUTE_KEYS = [
|
|
43
|
-
'fill',
|
|
44
|
-
'strokeColor',
|
|
45
|
-
'strokeWidth',
|
|
46
|
-
'shape',
|
|
47
|
-
'layout',
|
|
48
|
-
'branchColor',
|
|
49
|
-
'branchWidth',
|
|
50
|
-
'branchShape'
|
|
51
|
-
];
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9ub2RlL2NyZWF0ZS1ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHckUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7SUFDNUMsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuRyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUN0QixPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7SUFDekIsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFZLEVBQUUsY0FBc0IsRUFBRSxNQUFzQixFQUFFLEVBQUU7SUFDOUYsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDMUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7SUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ2hDLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ3pCLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBc0IsRUFBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLE9BQXlCLEVBQUUsRUFBRTtJQUNsSCxNQUFNLFVBQVUsR0FBZ0I7UUFDNUIsRUFBRSxFQUFFLFNBQVMsRUFBRTtRQUNmLElBQUksRUFBRTtZQUNGLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQ3pCO1FBQ0QsUUFBUSxFQUFFLEVBQUU7UUFDWixLQUFLO1FBQ0wsTUFBTTtLQUNULENBQUM7SUFFRixJQUFJLEdBQXlCLENBQUM7SUFDOUIsS0FBSyxHQUFHLElBQUksT0FBTyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNqQyxVQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQztLQUNKO0lBRUQsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBYUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUc7SUFDbEMsTUFBTTtJQUNOLGFBQWE7SUFDYixhQUFhO0lBQ2IsT0FBTztJQUNQLFFBQVE7SUFDUixhQUFhO0lBQ2IsYUFBYTtJQUNiLGFBQWE7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvaW50LCBpZENyZWF0b3IsIGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgVEVYVF9ERUZBVUxUX0hFSUdIVCwgYnVpbGRUZXh0IH0gZnJvbSAnQHBsYWl0L3RleHQnO1xuaW1wb3J0IHsgTWluZExheW91dFR5cGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBCcmFuY2hTaGFwZSwgTWluZEVsZW1lbnQsIE1pbmRFbGVtZW50U2hhcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgUk9PVF9UT1BJQ19IRUlHSFQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbm9kZS10b3BpYy1zdHlsZSc7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRW1wdHlNaW5kID0gKHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBjcmVhdGVNaW5kRWxlbWVudCgn5oCd57u05a+85Zu+JywgNzIsIFJPT1RfVE9QSUNfSEVJR0hULCB7IGxheW91dDogTWluZExheW91dFR5cGUucmlnaHQgfSk7XG4gICAgZWxlbWVudC5pc1Jvb3QgPSB0cnVlO1xuICAgIGVsZW1lbnQucG9pbnRzID0gW3BvaW50XTtcbiAgICBlbGVtZW50LnR5cGUgPSAnbWluZG1hcCc7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRGVmYXVsdE1pbmQgPSAocG9pbnQ6IFBvaW50LCByaWdodE5vZGVDb3VudDogbnVtYmVyLCBsYXlvdXQ6IE1pbmRMYXlvdXRUeXBlKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGNyZWF0ZU1pbmRFbGVtZW50KCfmgJ3nu7Tlr7zlm74nLCA3MiwgUk9PVF9UT1BJQ19IRUlHSFQsIHsgbGF5b3V0IH0pO1xuICAgIHJvb3QucmlnaHROb2RlQ291bnQgPSByaWdodE5vZGVDb3VudDtcbiAgICByb290LmlzUm9vdCA9IHRydWU7XG4gICAgcm9vdC50eXBlID0gJ21pbmRtYXAnO1xuICAgIHJvb3QucG9pbnRzID0gW3BvaW50XTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFsxLCAxLCAxXS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWluZEVsZW1lbnQoJ+aWsOW7uuiKgueCuScsIDU2LCBURVhUX0RFRkFVTFRfSEVJR0hULCB7fSk7XG4gICAgfSk7XG4gICAgcm9vdC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHJldHVybiByb290O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1pbmRFbGVtZW50ID0gKHRleHQ6IHN0cmluZyB8IEVsZW1lbnQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvcHRpb25zOiBJbmhlcml0QXR0cmlidXRlKSA9PiB7XG4gICAgY29uc3QgbmV3RWxlbWVudDogTWluZEVsZW1lbnQgPSB7XG4gICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdG9waWM6IGJ1aWxkVGV4dCh0ZXh0KVxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICB9O1xuXG4gICAgbGV0IGtleToga2V5b2YgdHlwZW9mIG9wdGlvbnM7XG4gICAgZm9yIChrZXkgaW4gb3B0aW9ucykge1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG9wdGlvbnNba2V5XSkpIHtcbiAgICAgICAgICAgIChuZXdFbGVtZW50IGFzIGFueSlba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdFbGVtZW50O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJbmhlcml0QXR0cmlidXRlIHtcbiAgICBmaWxsPzogc3RyaW5nO1xuICAgIHN0cm9rZUNvbG9yPzogc3RyaW5nO1xuICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyO1xuICAgIHNoYXBlPzogTWluZEVsZW1lbnRTaGFwZTtcbiAgICBsYXlvdXQ/OiBNaW5kTGF5b3V0VHlwZTtcbiAgICBicmFuY2hDb2xvcj86IHN0cmluZztcbiAgICBicmFuY2hXaWR0aD86IG51bWJlcjtcbiAgICBicmFuY2hTaGFwZT86IEJyYW5jaFNoYXBlO1xufVxuXG5leHBvcnQgY29uc3QgSU5IRVJJVF9BVFRSSUJVVEVfS0VZUyA9IFtcbiAgICAnZmlsbCcsXG4gICAgJ3N0cm9rZUNvbG9yJyxcbiAgICAnc3Ryb2tlV2lkdGgnLFxuICAgICdzaGFwZScsXG4gICAgJ2xheW91dCcsXG4gICAgJ2JyYW5jaENvbG9yJyxcbiAgICAnYnJhbmNoV2lkdGgnLFxuICAgICdicmFuY2hTaGFwZSdcbl07XG4iXX0=
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { distanceBetweenPointAndRectangle } from '@plait/core';
|
|
2
|
-
import { MindElement } from '../../interfaces/element';
|
|
3
|
-
import { NodeSpace } from '../space/node-space';
|
|
4
|
-
export function getRectangleByNode(node) {
|
|
5
|
-
const x = node.x + node.hGap;
|
|
6
|
-
let y = node.y + node.vGap;
|
|
7
|
-
const width = node.width - node.hGap * 2;
|
|
8
|
-
const height = node.height - node.vGap * 2;
|
|
9
|
-
return {
|
|
10
|
-
x,
|
|
11
|
-
y,
|
|
12
|
-
width,
|
|
13
|
-
height
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
export function getRectangleByElement(board, originPoint, element) {
|
|
17
|
-
const nodeRectangle = {
|
|
18
|
-
x: originPoint[0],
|
|
19
|
-
y: originPoint[1],
|
|
20
|
-
width: NodeSpace.getNodeWidth(board, element),
|
|
21
|
-
height: NodeSpace.getNodeHeight(board, element)
|
|
22
|
-
};
|
|
23
|
-
return nodeRectangle;
|
|
24
|
-
}
|
|
25
|
-
export function isHitMindElement(board, point, element) {
|
|
26
|
-
const node = MindElement.getNode(element);
|
|
27
|
-
if (node && distanceBetweenPointAndRectangle(point[0], point[1], getRectangleByNode(node)) === 0) {
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL3Bvc2l0aW9uL25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyxnQ0FBZ0MsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2hELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFjO0lBQzdDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM3QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE9BQU87UUFDSCxDQUFDO1FBQ0QsQ0FBQztRQUNELEtBQUs7UUFDTCxNQUFNO0tBQ1QsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBcUIsRUFBRSxXQUFrQixFQUFFLE9BQW9CO0lBQ2pHLE1BQU0sYUFBYSxHQUFHO1FBQ2xCLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLEtBQUssRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7UUFDN0MsTUFBTSxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztLQUNsRCxDQUFDO0lBQ0YsT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFpQixFQUFFLEtBQVksRUFBRSxPQUFvQjtJQUNsRixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLElBQUksSUFBSSxJQUFJLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDOUYsT0FBTyxJQUFJLENBQUM7S0FDZjtTQUFNO1FBQ0gsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCwgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRSZWN0YW5nbGUgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kTm9kZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBOb2RlU3BhY2UgfSBmcm9tICcuLi9zcGFjZS9ub2RlLXNwYWNlJztcbmltcG9ydCB7IFBsYWl0TWluZEJvYXJkIH0gZnJvbSAnLi4vLi4vcGx1Z2lucy93aXRoLW1pbmQuYm9hcmQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVjdGFuZ2xlQnlOb2RlKG5vZGU6IE1pbmROb2RlKTogUmVjdGFuZ2xlQ2xpZW50IHtcbiAgICBjb25zdCB4ID0gbm9kZS54ICsgbm9kZS5oR2FwO1xuICAgIGxldCB5ID0gbm9kZS55ICsgbm9kZS52R2FwO1xuICAgIGNvbnN0IHdpZHRoID0gbm9kZS53aWR0aCAtIG5vZGUuaEdhcCAqIDI7XG4gICAgY29uc3QgaGVpZ2h0ID0gbm9kZS5oZWlnaHQgLSBub2RlLnZHYXAgKiAyO1xuICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50KGJvYXJkOiBQbGFpdE1pbmRCb2FyZCwgb3JpZ2luUG9pbnQ6IFBvaW50LCBlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgIGNvbnN0IG5vZGVSZWN0YW5nbGUgPSB7XG4gICAgICAgIHg6IG9yaWdpblBvaW50WzBdLFxuICAgICAgICB5OiBvcmlnaW5Qb2ludFsxXSxcbiAgICAgICAgd2lkdGg6IE5vZGVTcGFjZS5nZXROb2RlV2lkdGgoYm9hcmQsIGVsZW1lbnQpLFxuICAgICAgICBoZWlnaHQ6IE5vZGVTcGFjZS5nZXROb2RlSGVpZ2h0KGJvYXJkLCBlbGVtZW50KVxuICAgIH07XG4gICAgcmV0dXJuIG5vZGVSZWN0YW5nbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hpdE1pbmRFbGVtZW50KGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgY29uc3Qgbm9kZSA9IE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCk7XG4gICAgaWYgKG5vZGUgJiYgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRSZWN0YW5nbGUocG9pbnRbMF0sIHBvaW50WzFdLCBnZXRSZWN0YW5nbGVCeU5vZGUobm9kZSkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=
|