@plait/mind 0.2.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/constants/default.d.ts +12 -0
- package/constants/index.d.ts +2 -0
- package/constants/node.d.ts +17 -0
- package/draw/abstract.d.ts +4 -0
- package/draw/indented-link.d.ts +3 -0
- package/draw/link/abstract-link.d.ts +3 -0
- package/draw/link/logic-link.d.ts +3 -0
- package/draw/link.d.ts +3 -0
- package/draw/richtext.d.ts +14 -0
- package/draw/shape.d.ts +3 -0
- package/esm2020/constants/default.mjs +13 -0
- package/esm2020/constants/index.mjs +3 -0
- package/esm2020/constants/node.mjs +19 -0
- package/esm2020/draw/abstract.mjs +48 -0
- package/esm2020/draw/indented-link.mjs +44 -0
- package/esm2020/draw/link/abstract-link.mjs +42 -0
- package/esm2020/draw/link/logic-link.mjs +51 -0
- package/esm2020/draw/link.mjs +158 -0
- package/esm2020/draw/richtext.mjs +35 -0
- package/esm2020/draw/shape.mjs +18 -0
- package/esm2020/interfaces/abstract.mjs +6 -0
- package/esm2020/interfaces/element-data.mjs +2 -0
- package/esm2020/interfaces/element.mjs +59 -0
- package/esm2020/interfaces/index.mjs +6 -0
- package/esm2020/interfaces/layout.mjs +19 -0
- package/esm2020/interfaces/node.mjs +23 -0
- package/esm2020/interfaces/types.mjs +13 -0
- package/esm2020/layout-option.mjs +72 -0
- package/esm2020/mind.component.mjs +50 -0
- package/esm2020/mind.module.mjs +21 -0
- package/esm2020/node.component.mjs +742 -0
- package/esm2020/plait-mind.mjs +5 -0
- package/esm2020/plugins/emoji/emoji-base.component.mjs +21 -0
- package/esm2020/plugins/emoji/emoji.drawer.mjs +79 -0
- package/esm2020/plugins/emoji/emoji.mjs +15 -0
- package/esm2020/plugins/emoji/index.mjs +4 -0
- package/esm2020/plugins/emoji/with-mind-emoji.mjs +8 -0
- package/esm2020/plugins/with-abstract.mjs +92 -0
- package/esm2020/plugins/with-dnd.mjs +276 -0
- package/esm2020/plugins/with-mind.mjs +183 -0
- package/esm2020/public-api.mjs +14 -0
- package/esm2020/queries/get-available-sublayouts-by-element.mjs +29 -0
- package/esm2020/queries/get-branch-mindmap-layouts-by-element.mjs +18 -0
- package/esm2020/queries/get-correct-layout-by-element.mjs +50 -0
- package/esm2020/queries/get-layout-by-element.mjs +16 -0
- package/esm2020/queries/get-layout-parent-by-element.mjs +17 -0
- package/esm2020/queries/index.mjs +13 -0
- package/esm2020/transforms/index.mjs +10 -0
- package/esm2020/transforms/layout.mjs +23 -0
- package/esm2020/transforms/node.mjs +44 -0
- package/esm2020/utils/abstract/common.mjs +25 -0
- package/esm2020/utils/abstract/resize.mjs +169 -0
- package/esm2020/utils/clipboard.mjs +71 -0
- package/esm2020/utils/colors.mjs +41 -0
- package/esm2020/utils/direction-corrector.mjs +54 -0
- package/esm2020/utils/direction-detector.mjs +56 -0
- package/esm2020/utils/draw-placeholder.mjs +311 -0
- package/esm2020/utils/drop-target-corrector.mjs +86 -0
- package/esm2020/utils/graph.mjs +24 -0
- package/esm2020/utils/index.mjs +14 -0
- package/esm2020/utils/is-virtual-key.mjs +13 -0
- package/esm2020/utils/layout.mjs +105 -0
- package/esm2020/utils/mindmap.mjs +295 -0
- package/esm2020/utils/node-space.mjs +72 -0
- package/esm2020/utils/node.mjs +6 -0
- package/esm2020/utils/path.mjs +11 -0
- package/esm2020/utils/point-placement.mjs +99 -0
- package/esm2020/utils/shape.mjs +17 -0
- package/esm2020/utils/weak-maps.mjs +3 -0
- package/fesm2015/plait-mind.mjs +3583 -0
- package/fesm2015/plait-mind.mjs.map +1 -0
- package/fesm2020/plait-mind.mjs +3595 -0
- package/fesm2020/plait-mind.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/interfaces/abstract.d.ts +4 -0
- package/interfaces/element-data.d.ts +11 -0
- package/interfaces/element.d.ts +39 -0
- package/interfaces/index.d.ts +5 -0
- package/interfaces/layout.d.ts +10 -0
- package/interfaces/node.d.ts +33 -0
- package/interfaces/types.d.ts +11 -0
- package/layout-option.d.ts +2 -0
- package/mind.component.d.ts +16 -0
- package/mind.module.d.ts +11 -0
- package/node.component.d.ts +60 -0
- package/package.json +31 -0
- package/plugins/emoji/emoji-base.component.d.ts +12 -0
- package/plugins/emoji/emoji.d.ts +6 -0
- package/plugins/emoji/emoji.drawer.d.ts +22 -0
- package/plugins/emoji/index.d.ts +3 -0
- package/plugins/emoji/with-mind-emoji.d.ts +8 -0
- package/plugins/with-abstract.d.ts +2 -0
- package/plugins/with-dnd.d.ts +11 -0
- package/plugins/with-mind.d.ts +2 -0
- package/public-api.d.ts +10 -0
- package/queries/get-available-sublayouts-by-element.d.ts +8 -0
- package/queries/get-branch-mindmap-layouts-by-element.d.ts +3 -0
- package/queries/get-correct-layout-by-element.d.ts +9 -0
- package/queries/get-layout-by-element.d.ts +3 -0
- package/queries/get-layout-parent-by-element.d.ts +8 -0
- package/queries/index.d.ts +7 -0
- package/styles/styles.scss +99 -0
- package/transforms/index.d.ts +7 -0
- package/transforms/layout.d.ts +3 -0
- package/transforms/node.d.ts +8 -0
- package/utils/abstract/common.d.ts +5 -0
- package/utils/abstract/resize.d.ts +21 -0
- package/utils/clipboard.d.ts +7 -0
- package/utils/colors.d.ts +4 -0
- package/utils/direction-corrector.d.ts +3 -0
- package/utils/direction-detector.d.ts +9 -0
- package/utils/draw-placeholder.d.ts +42 -0
- package/utils/drop-target-corrector.d.ts +8 -0
- package/utils/graph.d.ts +5 -0
- package/utils/index.d.ts +13 -0
- package/utils/is-virtual-key.d.ts +1 -0
- package/utils/layout.d.ts +12 -0
- package/utils/mindmap.d.ts +33 -0
- package/utils/node-space.d.ts +9 -0
- package/utils/node.d.ts +2 -0
- package/utils/path.d.ts +4 -0
- package/utils/point-placement.d.ts +8 -0
- package/utils/shape.d.ts +3 -0
- package/utils/weak-maps.d.ts +5 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { BASE, PRIMARY_COLOR, STROKE_WIDTH } from '../constants';
|
|
2
|
+
import { drawLink } from '../draw/link';
|
|
3
|
+
import { getRectangleByNode } from './graph';
|
|
4
|
+
import { MINDMAP_ELEMENT_TO_COMPONENT } from './weak-maps';
|
|
5
|
+
import { drawRoundRectangle } from '@plait/core';
|
|
6
|
+
import { MindmapQueries } from '../queries';
|
|
7
|
+
import { isBottomLayout, isHorizontalLayout, isHorizontalLogicLayout, isIndentedLayout, isRightLayout, isVerticalLogicLayout } from '@plait/layouts';
|
|
8
|
+
import { drawIndentedLink } from '../draw/indented-link';
|
|
9
|
+
import { isLeftLayout, isTopLayout } from '@plait/layouts';
|
|
10
|
+
import { isStandardLayout } from '@plait/layouts';
|
|
11
|
+
import { isMixedLayout } from './layout';
|
|
12
|
+
export const drawPlaceholderDropNodeG = (dropTarget, roughSVG, fakeDropNodeG) => {
|
|
13
|
+
const targetComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(dropTarget.target);
|
|
14
|
+
const targetRect = getRectangleByNode(targetComponent.node);
|
|
15
|
+
if (dropTarget.detectResult && ['right', 'left'].includes(dropTarget.detectResult)) {
|
|
16
|
+
drawStraightDropNodeG(targetRect, dropTarget.detectResult, targetComponent, roughSVG, fakeDropNodeG);
|
|
17
|
+
}
|
|
18
|
+
if (targetComponent.parent && dropTarget.detectResult && ['top', 'bottom'].includes(dropTarget.detectResult)) {
|
|
19
|
+
const parentComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(targetComponent.parent.origin);
|
|
20
|
+
const targetIndex = parentComponent.node.origin.children.indexOf(targetComponent.node.origin);
|
|
21
|
+
drawCurvePlaceholderDropNodeG(targetRect, dropTarget.detectResult, targetIndex, targetComponent, roughSVG, parentComponent, fakeDropNodeG);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export const drawCurvePlaceholderDropNodeG = (targetRect, detectResult, targetIndex, targetComponent, roughSVG, parentComponent, fakeDropNodeG) => {
|
|
25
|
+
const parentNodeLayout = MindmapQueries.getCorrectLayoutByElement(parentComponent.node.origin);
|
|
26
|
+
const layout = MindmapQueries.getCorrectLayoutByElement(targetComponent.node.parent.origin);
|
|
27
|
+
const strokeWidth = targetComponent.node.origin.linkLineWidth ? targetComponent.node.origin.linkLineWidth : STROKE_WIDTH;
|
|
28
|
+
let fakeX = targetComponent.node.x, fakeY = targetRect.y - 30, fakeRectangleStartX = targetRect.x, fakeRectangleEndX = targetRect.x + 30, fakeRectangleStartY = fakeY, fakeRectangleEndY = fakeRectangleStartY + 12, width = 30;
|
|
29
|
+
if (isLeftLayout(layout)) {
|
|
30
|
+
fakeX = targetComponent.node.x + targetComponent.node.width - 30;
|
|
31
|
+
fakeRectangleStartX = targetRect.x + targetRect.width - 30;
|
|
32
|
+
fakeRectangleEndX = targetRect.x + targetRect.width;
|
|
33
|
+
}
|
|
34
|
+
if (isHorizontalLogicLayout(parentNodeLayout)) {
|
|
35
|
+
fakeY = getHorizontalFakeY(detectResult, targetIndex, parentComponent.node, targetRect, layout, fakeY);
|
|
36
|
+
if (isStandardLayout(parentNodeLayout)) {
|
|
37
|
+
const rightNodeCount = parentComponent.node.origin.rightNodeCount || 0;
|
|
38
|
+
const idx = parentComponent.node.children.findIndex(x => x === targetComponent.node);
|
|
39
|
+
const isLeft = idx >= rightNodeCount;
|
|
40
|
+
// 标准布局的左,需要调整 x
|
|
41
|
+
if (isLeft) {
|
|
42
|
+
fakeX = targetComponent.node.x + targetComponent.node.width - 30;
|
|
43
|
+
fakeRectangleStartX = targetRect.x + targetRect.width - 30;
|
|
44
|
+
fakeRectangleEndX = targetRect.x + targetRect.width;
|
|
45
|
+
}
|
|
46
|
+
const isLeftFirst = idx === rightNodeCount;
|
|
47
|
+
const isRightLast = idx === rightNodeCount - 1;
|
|
48
|
+
// 拖拽至左第一个节点的情况
|
|
49
|
+
if (detectResult === 'top' && isLeftFirst) {
|
|
50
|
+
fakeY = targetRect.y - targetRect.height;
|
|
51
|
+
}
|
|
52
|
+
if (detectResult === 'bottom' && isRightLast) {
|
|
53
|
+
fakeY = targetRect.y + targetRect.height + 30;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
fakeRectangleStartY = fakeY;
|
|
57
|
+
fakeRectangleEndY = fakeRectangleStartY + 12;
|
|
58
|
+
}
|
|
59
|
+
if (isVerticalLogicLayout(layout)) {
|
|
60
|
+
parentComponent = targetComponent;
|
|
61
|
+
targetComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(targetComponent.parent.origin);
|
|
62
|
+
fakeX = parentComponent.node.x;
|
|
63
|
+
width = parentComponent.node.width;
|
|
64
|
+
const vGap = BASE * 6 + strokeWidth;
|
|
65
|
+
if (isTopLayout(layout) && detectResult === 'top') {
|
|
66
|
+
fakeY = targetRect.y - vGap;
|
|
67
|
+
fakeRectangleStartY = fakeY - vGap + strokeWidth;
|
|
68
|
+
}
|
|
69
|
+
if (isBottomLayout(layout) && detectResult === 'bottom') {
|
|
70
|
+
fakeY = targetRect.y + targetRect.height + vGap;
|
|
71
|
+
fakeRectangleStartY = fakeY + vGap - strokeWidth;
|
|
72
|
+
}
|
|
73
|
+
fakeRectangleStartX = fakeX + Math.ceil(parentComponent.node.width / 2) - parentComponent.node.hGap - Math.ceil(strokeWidth / 2);
|
|
74
|
+
fakeRectangleEndX = fakeRectangleStartX + 30;
|
|
75
|
+
fakeRectangleEndY = fakeRectangleStartY + 12;
|
|
76
|
+
}
|
|
77
|
+
if (isIndentedLayout(layout)) {
|
|
78
|
+
// 偏移一个 Gap
|
|
79
|
+
if (isLeftLayout(layout)) {
|
|
80
|
+
fakeX -= BASE * 4;
|
|
81
|
+
}
|
|
82
|
+
if (isRightLayout(layout)) {
|
|
83
|
+
fakeX += BASE * 4;
|
|
84
|
+
}
|
|
85
|
+
if (isTopLayout(layout)) {
|
|
86
|
+
if (detectResult === 'top') {
|
|
87
|
+
const isLastNode = targetIndex === parentComponent.node.origin.children.length - 1;
|
|
88
|
+
if (isLastNode) {
|
|
89
|
+
fakeY = targetRect.y - targetRect.height - BASE;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const nextComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(parentComponent.node.origin.children[targetIndex + 1]);
|
|
93
|
+
const nextRect = getRectangleByNode(nextComponent.node);
|
|
94
|
+
fakeY = targetRect.y - Math.abs((nextRect.y + nextRect.height - targetRect.y) / 2);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (detectResult === 'bottom') {
|
|
98
|
+
const isFirstNode = targetIndex === 0;
|
|
99
|
+
if (isFirstNode) {
|
|
100
|
+
const parentRect = getRectangleByNode(parentComponent.node);
|
|
101
|
+
fakeY = parentRect.y - parentRect.height / 2 - BASE;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
const previousComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(parentComponent.node.origin.children[targetIndex - 1]);
|
|
105
|
+
const previousRect = getRectangleByNode(previousComponent.node);
|
|
106
|
+
fakeY = previousRect.y - Math.abs((targetRect.y + targetRect.height - previousRect.y) / 2);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
fakeRectangleStartX = fakeX;
|
|
111
|
+
fakeRectangleEndX = fakeRectangleStartX + 30;
|
|
112
|
+
fakeRectangleStartY = fakeY;
|
|
113
|
+
fakeRectangleEndY = fakeRectangleStartY + 12;
|
|
114
|
+
}
|
|
115
|
+
// 构造一条曲线
|
|
116
|
+
const fakeNode = { ...targetComponent.node, x: fakeX, y: fakeY, width, height: 12 };
|
|
117
|
+
const linkSVGG = isIndentedLayout(layout)
|
|
118
|
+
? drawIndentedLink(roughSVG, parentComponent.node, fakeNode, PRIMARY_COLOR, false)
|
|
119
|
+
: drawLink(roughSVG, parentComponent.node, fakeNode, PRIMARY_COLOR, isHorizontalLayout(layout), false);
|
|
120
|
+
// 构造一个矩形框坐标
|
|
121
|
+
const fakeRectangleG = drawRoundRectangle(roughSVG, fakeRectangleStartX, fakeRectangleStartY, fakeRectangleEndX, fakeRectangleEndY, {
|
|
122
|
+
stroke: PRIMARY_COLOR,
|
|
123
|
+
strokeWidth: 2,
|
|
124
|
+
fill: PRIMARY_COLOR,
|
|
125
|
+
fillStyle: 'solid'
|
|
126
|
+
});
|
|
127
|
+
fakeDropNodeG?.appendChild(linkSVGG);
|
|
128
|
+
fakeDropNodeG?.appendChild(fakeRectangleG);
|
|
129
|
+
};
|
|
130
|
+
export const drawStraightDropNodeG = (targetRect, detectResult, targetComponent, roughSVG, fakeDropNodeG) => {
|
|
131
|
+
const { x, y, width, height } = targetRect;
|
|
132
|
+
const lineLength = 40;
|
|
133
|
+
let startLinePoint = x + width;
|
|
134
|
+
let endLinePoint = x + width + lineLength;
|
|
135
|
+
let startRectanglePointX = x + width + lineLength;
|
|
136
|
+
let endRectanglePointX = x + lineLength + width + 30;
|
|
137
|
+
let startRectanglePointY = y + height / 2 - 6;
|
|
138
|
+
let endRectanglePointY = y + height / 2 - 6 + 12;
|
|
139
|
+
if (detectResult === 'left') {
|
|
140
|
+
startLinePoint = x - lineLength;
|
|
141
|
+
endLinePoint = x;
|
|
142
|
+
startRectanglePointX = x - lineLength - 30;
|
|
143
|
+
endRectanglePointX = x - lineLength;
|
|
144
|
+
}
|
|
145
|
+
let fakeY = targetComponent.node.y;
|
|
146
|
+
let fakeX = targetRect.x;
|
|
147
|
+
const strokeWidth = targetComponent.node.origin.linkLineWidth ? targetComponent.node.origin.linkLineWidth : STROKE_WIDTH;
|
|
148
|
+
const pointOptions = {
|
|
149
|
+
fakeX,
|
|
150
|
+
fakeY,
|
|
151
|
+
x,
|
|
152
|
+
y,
|
|
153
|
+
width,
|
|
154
|
+
height,
|
|
155
|
+
strokeWidth
|
|
156
|
+
};
|
|
157
|
+
const parentLayout = MindmapQueries.getCorrectLayoutByElement(targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin);
|
|
158
|
+
const layout = MindmapQueries.getCorrectLayoutByElement(targetComponent.node.origin);
|
|
159
|
+
if (!isMixedLayout(parentLayout, layout)) {
|
|
160
|
+
// 构造一条直线
|
|
161
|
+
let linePoints = [
|
|
162
|
+
[startLinePoint, y + height / 2],
|
|
163
|
+
[endLinePoint, y + height / 2]
|
|
164
|
+
];
|
|
165
|
+
if (isIndentedLayout(parentLayout)) {
|
|
166
|
+
const fakePoint = getIndentedFakePoint(parentLayout, pointOptions);
|
|
167
|
+
drawIndentNodeG(fakeDropNodeG, roughSVG, fakePoint, targetComponent.node);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
else if (isVerticalLogicLayout(parentLayout)) {
|
|
171
|
+
if (!targetComponent.node.origin.isRoot) {
|
|
172
|
+
/**
|
|
173
|
+
* 计算逻辑:
|
|
174
|
+
* 1. 移动到左侧:当前节点 startX - 偏移值,偏移值计算如下:
|
|
175
|
+
* a. 第一个节点: 固定值(来源于 getMainAxle,第二级节点:BASE * 8,其他 BASE * 3 + strokeWidth / 2);
|
|
176
|
+
* b. 第二个节点到最后一个节点之间:上一个节点到当前节点间距的一半((当前节点 startX - 上一个节点的 endX) / 2),endX = 当前节点的 startX + width;
|
|
177
|
+
* 2. 移动到右侧:当前节点 x + width + 偏移值,偏移值计算如下:
|
|
178
|
+
* a. 第二个节点到最后一个节点之间的右侧:当前节点到下一个节点间距的一半((下一个节点 startX - 当前节点的 endX) / 2),endX = 当前节点的 startX + width;
|
|
179
|
+
* b. 最后一个节点的右侧:固定值(来源于 getMainAxle,第二级节点:BASE * 8,其他 BASE * 3 + strokeWidth / 2);
|
|
180
|
+
*/
|
|
181
|
+
fakeY = targetComponent.node.y;
|
|
182
|
+
const parentComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(targetComponent.parent.origin);
|
|
183
|
+
const targetIndex = parentComponent.node.origin.children.indexOf(targetComponent.node.origin);
|
|
184
|
+
if (detectResult === 'left') {
|
|
185
|
+
let offsetX = 0;
|
|
186
|
+
const isFirstNode = targetIndex === 0;
|
|
187
|
+
if (isFirstNode) {
|
|
188
|
+
offsetX = parentComponent.node.origin.isRoot ? BASE * 8 : BASE * 3 + strokeWidth / 2;
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
const previousComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(parentComponent.node.origin.children[targetIndex - 1]);
|
|
192
|
+
const previousRect = getRectangleByNode(previousComponent.node);
|
|
193
|
+
const space = targetRect.x - (previousRect.x + previousRect.width);
|
|
194
|
+
offsetX = space / 2;
|
|
195
|
+
}
|
|
196
|
+
fakeX = targetRect.x - offsetX - width / 2 - Math.ceil(strokeWidth / 2);
|
|
197
|
+
}
|
|
198
|
+
if (detectResult === 'right') {
|
|
199
|
+
let offsetX = 0;
|
|
200
|
+
const isLastNode = targetIndex === parentComponent.node.origin.children.length - 1;
|
|
201
|
+
if (isLastNode) {
|
|
202
|
+
offsetX = parentComponent.node.origin.isRoot ? BASE * 8 : BASE * 3 + strokeWidth / 2;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
const nextComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(parentComponent.node.origin.children[targetIndex + 1]);
|
|
206
|
+
const nextRect = getRectangleByNode(nextComponent.node);
|
|
207
|
+
const space = nextRect.x - (targetRect.x + targetRect.width);
|
|
208
|
+
offsetX = space / 2;
|
|
209
|
+
}
|
|
210
|
+
fakeX = targetRect.x + width + offsetX - width / 2 - Math.ceil(strokeWidth / 2);
|
|
211
|
+
}
|
|
212
|
+
startRectanglePointX = fakeX;
|
|
213
|
+
if (isTopLayout(parentLayout)) {
|
|
214
|
+
// 因为矩形是从左上角为起点向下画的,所以需要向上偏移一个矩形的高度(-12)
|
|
215
|
+
startRectanglePointY = fakeY + height + targetComponent.node.vGap - 12;
|
|
216
|
+
}
|
|
217
|
+
if (isBottomLayout(parentLayout)) {
|
|
218
|
+
startRectanglePointY = fakeY + targetComponent.node.vGap;
|
|
219
|
+
}
|
|
220
|
+
endRectanglePointX = startRectanglePointX + 30;
|
|
221
|
+
endRectanglePointY = startRectanglePointY + 12;
|
|
222
|
+
const fakeNode = { ...targetComponent.node, x: fakeX, y: fakeY, width: 30 };
|
|
223
|
+
const linkSVGG = drawLink(roughSVG, parentComponent.node, fakeNode, PRIMARY_COLOR, false, false);
|
|
224
|
+
fakeDropNodeG?.appendChild(linkSVGG);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
let linkSVGG = roughSVG.linearPath(linePoints, { stroke: PRIMARY_COLOR, strokeWidth });
|
|
229
|
+
fakeDropNodeG?.appendChild(linkSVGG);
|
|
230
|
+
}
|
|
231
|
+
// 构造一个矩形框坐标
|
|
232
|
+
let fakeRectangleG = drawRoundRectangle(roughSVG, startRectanglePointX, startRectanglePointY, endRectanglePointX, endRectanglePointY, {
|
|
233
|
+
stroke: PRIMARY_COLOR,
|
|
234
|
+
strokeWidth: 2,
|
|
235
|
+
fill: PRIMARY_COLOR,
|
|
236
|
+
fillStyle: 'solid'
|
|
237
|
+
});
|
|
238
|
+
fakeDropNodeG?.appendChild(fakeRectangleG);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
// 混合布局画线逻辑
|
|
242
|
+
if (isHorizontalLogicLayout(parentLayout)) {
|
|
243
|
+
if (isIndentedLayout(layout)) {
|
|
244
|
+
const fakePoint = getIndentedFakePoint(layout, pointOptions);
|
|
245
|
+
drawIndentNodeG(fakeDropNodeG, roughSVG, fakePoint, targetComponent.node);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
export const getHorizontalFakeY = (detectResult, targetIndex, parentNode, targetRect, layout, fakeY) => {
|
|
252
|
+
if (detectResult === 'top') {
|
|
253
|
+
if (targetIndex === 0 && isTopLayout(layout)) {
|
|
254
|
+
fakeY = targetRect.y + targetRect.height;
|
|
255
|
+
}
|
|
256
|
+
if (targetIndex > 0) {
|
|
257
|
+
const previousComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(parentNode.origin.children[targetIndex - 1]);
|
|
258
|
+
const previousRect = getRectangleByNode(previousComponent.node);
|
|
259
|
+
const topY = previousRect.y + previousRect.height;
|
|
260
|
+
fakeY = topY + (targetRect.y - topY) / 5;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (detectResult === 'bottom') {
|
|
264
|
+
fakeY = targetRect.y + targetRect.height + 30;
|
|
265
|
+
if (targetIndex < parentNode.origin.children.length - 1) {
|
|
266
|
+
const nextComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(parentNode.origin.children[targetIndex + 1]);
|
|
267
|
+
const nextRect = getRectangleByNode(nextComponent.node);
|
|
268
|
+
const topY = targetRect.y + targetRect.height;
|
|
269
|
+
fakeY = topY + (nextRect.y - topY) / 5;
|
|
270
|
+
}
|
|
271
|
+
if (targetIndex === parentNode.origin.children.length - 1) {
|
|
272
|
+
fakeY = targetRect.y + targetRect.height + 30;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return fakeY;
|
|
276
|
+
};
|
|
277
|
+
export const getIndentedFakePoint = (layout, pointOptions) => {
|
|
278
|
+
let { fakeX, fakeY, x, y, width, height, strokeWidth } = pointOptions;
|
|
279
|
+
const hGap = BASE * 4;
|
|
280
|
+
const vGap = BASE * 6;
|
|
281
|
+
const offsetX = hGap + width / 2 + strokeWidth;
|
|
282
|
+
const offsetY = vGap + height / 2 + strokeWidth;
|
|
283
|
+
if (isLeftLayout(layout)) {
|
|
284
|
+
fakeX = x - offsetX;
|
|
285
|
+
}
|
|
286
|
+
if (isRightLayout(layout)) {
|
|
287
|
+
fakeX = x + offsetX;
|
|
288
|
+
}
|
|
289
|
+
if (isTopLayout(layout)) {
|
|
290
|
+
fakeY = y - offsetY;
|
|
291
|
+
}
|
|
292
|
+
if (isBottomLayout(layout)) {
|
|
293
|
+
fakeY = y + height + offsetY;
|
|
294
|
+
}
|
|
295
|
+
return { fakeX, fakeY };
|
|
296
|
+
};
|
|
297
|
+
export const drawIndentNodeG = (fakeDropNodeG, roughSVG, fakePoint, node) => {
|
|
298
|
+
const { fakeX, fakeY } = fakePoint;
|
|
299
|
+
const fakeNode = { ...node, x: fakeX, y: fakeY, width: 30, height: 12 };
|
|
300
|
+
const linkSVGG = drawIndentedLink(roughSVG, node, fakeNode, PRIMARY_COLOR, false);
|
|
301
|
+
const startRectanglePointX = fakeX, startRectanglePointY = fakeY, endRectanglePointX = fakeX + 30, endRectanglePointY = fakeY + 12;
|
|
302
|
+
const fakeRectangleG = drawRoundRectangle(roughSVG, startRectanglePointX, startRectanglePointY, endRectanglePointX, endRectanglePointY, {
|
|
303
|
+
stroke: PRIMARY_COLOR,
|
|
304
|
+
strokeWidth: 2,
|
|
305
|
+
fill: PRIMARY_COLOR,
|
|
306
|
+
fillStyle: 'solid'
|
|
307
|
+
});
|
|
308
|
+
fakeDropNodeG?.appendChild(linkSVGG);
|
|
309
|
+
fakeDropNodeG?.appendChild(fakeRectangleG);
|
|
310
|
+
};
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy1wbGFjZWhvbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL2RyYXctcGxhY2Vob2xkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRCxPQUFPLEVBQVMsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEVBQ0gsY0FBYyxFQUNkLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixxQkFBcUIsRUFFeEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FDcEMsVUFBK0QsRUFDL0QsUUFBa0IsRUFDbEIsYUFBc0MsRUFDeEMsRUFBRTtJQUNBLE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFzQixDQUFDO0lBQ2pHLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLGVBQWUsQ0FB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O0lBQ25DLE1BQU0sUUFBUSxHQUFnQixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNyRixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFbEYsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQzlCLG9CQUFvQixHQUFHLEtBQUssRUFDNUIsa0JBQWtCLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFDL0Isa0JBQWtCLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNwQyxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FDckMsUUFBUSxFQUNSLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQjtRQUNJLE1BQU0sRUFBRSxhQUFhO1FBQ3JCLFdBQVcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxFQUFFLGFBQWE7UUFDbkIsU0FBUyxFQUFFLE9BQU87S0FDckIsQ0FDSixDQUFDO0lBQ0YsYUFBYSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxhQUFhLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSAncm91Z2hqcy9iaW4vc3ZnJztcbmltcG9ydCB7IEJBU0UsIFBSSU1BUllfQ09MT1IsIFNUUk9LRV9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBkcmF3TGluayB9IGZyb20gJy4uL2RyYXcvbGluayc7XG5pbXBvcnQgeyBEZXRlY3RSZXN1bHQsIE1pbmRFbGVtZW50LCBNaW5kbWFwTm9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWluZE5vZGVDb21wb25lbnQgfSBmcm9tICcuLi9ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuL2dyYXBoJztcbmltcG9ydCB7IE1JTkRNQVBfRUxFTUVOVF9UT19DT01QT05FTlQgfSBmcm9tICcuL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBQb2ludCwgZHJhd1JvdW5kUmVjdGFuZ2xlIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZG1hcFF1ZXJpZXMgfSBmcm9tICcuLi9xdWVyaWVzJztcbmltcG9ydCB7XG4gICAgaXNCb3R0b21MYXlvdXQsXG4gICAgaXNIb3Jpem9udGFsTGF5b3V0LFxuICAgIGlzSG9yaXpvbnRhbExvZ2ljTGF5b3V0LFxuICAgIGlzSW5kZW50ZWRMYXlvdXQsXG4gICAgaXNSaWdodExheW91dCxcbiAgICBpc1ZlcnRpY2FsTG9naWNMYXlvdXQsXG4gICAgTWluZG1hcExheW91dFR5cGVcbn0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgZHJhd0luZGVudGVkTGluayB9IGZyb20gJy4uL2RyYXcvaW5kZW50ZWQtbGluayc7XG5pbXBvcnQgeyBpc0xlZnRMYXlvdXQsIGlzVG9wTGF5b3V0IH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgaXNTdGFuZGFyZExheW91dCB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IGlzTWl4ZWRMYXlvdXQgfSBmcm9tICcuL2xheW91dCc7XG5cbmV4cG9ydCBjb25zdCBkcmF3UGxhY2Vob2xkZXJEcm9wTm9kZUcgPSAoXG4gICAgZHJvcFRhcmdldDogeyB0YXJnZXQ6IE1pbmRFbGVtZW50OyBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdCB9LFxuICAgIHJvdWdoU1ZHOiBSb3VnaFNWRyxcbiAgICBmYWtlRHJvcE5vZGVHOiBTVkdHRWxlbWVudCB8IHVuZGVmaW5lZFxuKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0Q29tcG9uZW50ID0gTUlORE1BUF9FTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQoZHJvcFRhcmdldC50YXJnZXQpIGFzIE1pbmROb2RlQ29tcG9uZW50O1xuICAgIGNvbnN0IHRhcmdldFJlY3QgPSBnZXRSZWN0YW5nbGVCeU5vZGUodGFyZ2V0Q29tcG9uZW50Lm5vZGUpO1xuICAgIGlmIChkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCAmJiBbJ3JpZ2h0JywgJ2xlZnQnXS5pbmNsdWRlcyhkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCkpIHtcbiAgICAgICAgZHJhd1N0cmFpZ2h0RHJvcE5vZGVHKHRhcmdldFJlY3QsIGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0LCB0YXJnZXRDb21wb25lbnQsIHJvdWdoU1ZHLCBmYWtlRHJvcE5vZGVHKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0Q29tcG9uZW50LnBhcmVudCAmJiBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCAmJiBbJ3RvcCcsICdib3R0b20nXS5pbmNsdWRlcyhkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCkpIHtcbiAgICAgICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gTUlORE1BUF9FTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQodGFyZ2V0Q29tcG9uZW50LnBhcmVudC5vcmlnaW4pIGFzIE1pbmROb2RlQ29tcG9uZW50O1xuICAgICAgICBjb25zdCB0YXJnZXRJbmRleCA9IHBhcmVudENvbXBvbmVudC5ub2RlLm9yaWdpbi5jaGlsZHJlbi5pbmRleE9mKHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbik7XG4gICAgICAgIGRyYXdDdXJ2ZVBsYWNlaG9sZGVyRHJvcE5vZGVHKFxuICAgICAgICAgICAgdGFyZ2V0UmVjdCxcbiAgICAgICAgICAgIGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0LFxuICAgICAgICAgICAgdGFyZ2V0SW5kZXgsXG4gICAgICAgICAgICB0YXJnZXRDb21wb25lbnQsXG4gICAgICAgICAgICByb3VnaFNWRyxcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICAgIGZha2VEcm9wTm9kZUdcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZHJhd0N1cnZlUGxhY2Vob2xkZXJEcm9wTm9kZUcgPSAoXG4gICAgdGFyZ2V0UmVjdDoge1xuICAgICAgICB4OiBudW1iZXI7XG4gICAgICAgIHk6IG51bWJlcjtcbiAgICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgfSxcbiAgICBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdCxcbiAgICB0YXJnZXRJbmRleDogbnVtYmVyLFxuICAgIHRhcmdldENvbXBvbmVudDogTWluZE5vZGVDb21wb25lbnQsXG4gICAgcm91Z2hTVkc6IFJvdWdoU1ZHLFxuICAgIHBhcmVudENvbXBvbmVudDogTWluZE5vZGVDb21wb25lbnQsXG4gICAgZmFrZURyb3BOb2RlRzogU1ZHR0VsZW1lbnQgfCB1bmRlZmluZWRcbikgPT4ge1xuICAgIGNvbnN0IHBhcmVudE5vZGVMYXlvdXQgPSBNaW5kbWFwUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KHBhcmVudENvbXBvbmVudC5ub2RlLm9yaWdpbik7XG4gICAgY29uc3QgbGF5b3V0ID0gTWluZG1hcFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudCh0YXJnZXRDb21wb25lbnQubm9kZS5wYXJlbnQub3JpZ2luKTtcbiAgICBjb25zdCBzdHJva2VXaWR0aCA9IHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5saW5rTGluZVdpZHRoID8gdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luLmxpbmtMaW5lV2lkdGggOiBTVFJPS0VfV0lEVEg7XG4gICAgbGV0IGZha2VYID0gdGFyZ2V0Q29tcG9uZW50Lm5vZGUueCxcbiAgICAgICAgZmFrZVkgPSB0YXJnZXRSZWN0LnkgLSAzMCxcbiAgICAgICAgZmFrZVJlY3RhbmdsZVN0YXJ0WCA9IHRhcmdldFJlY3QueCxcbiAgICAgICAgZmFrZVJlY3RhbmdsZUVuZFggPSB0YXJnZXRSZWN0LnggKyAzMCxcbiAgICAgICAgZmFrZVJlY3RhbmdsZVN0YXJ0WSA9IGZha2VZLFxuICAgICAgICBmYWtlUmVjdGFuZ2xlRW5kWSA9IGZha2VSZWN0YW5nbGVTdGFydFkgKyAxMixcbiAgICAgICAgd2lkdGggPSAzMDtcblxuICAgIGlmIChpc0xlZnRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICBmYWtlWCA9IHRhcmdldENvbXBvbmVudC5ub2RlLnggKyB0YXJnZXRDb21wb25lbnQubm9kZS53aWR0aCAtIDMwO1xuICAgICAgICBmYWtlUmVjdGFuZ2xlU3RhcnRYID0gdGFyZ2V0UmVjdC54ICsgdGFyZ2V0UmVjdC53aWR0aCAtIDMwO1xuICAgICAgICBmYWtlUmVjdGFuZ2xlRW5kWCA9IHRhcmdldFJlY3QueCArIHRhcmdldFJlY3Qud2lkdGg7XG4gICAgfVxuICAgIGlmIChpc0hvcml6b250YWxMb2dpY0xheW91dChwYXJlbnROb2RlTGF5b3V0KSkge1xuICAgICAgICBmYWtlWSA9IGdldEhvcml6b250YWxGYWtlWShkZXRlY3RSZXN1bHQgYXMgJ3RvcCcgfCAnYm90dG9tJywgdGFyZ2V0SW5kZXgsIHBhcmVudENvbXBvbmVudC5ub2RlLCB0YXJnZXRSZWN0LCBsYXlvdXQsIGZha2VZKTtcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRMYXlvdXQocGFyZW50Tm9kZUxheW91dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Tm9kZUNvdW50ID0gcGFyZW50Q29tcG9uZW50Lm5vZGUub3JpZ2luLnJpZ2h0Tm9kZUNvdW50IHx8IDA7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBwYXJlbnRDb21wb25lbnQubm9kZS5jaGlsZHJlbi5maW5kSW5kZXgoeCA9PiB4ID09PSB0YXJnZXRDb21wb25lbnQubm9kZSk7XG4gICAgICAgICAgICBjb25zdCBpc0xlZnQgPSBpZHggPj0gcmlnaHROb2RlQ291bnQ7XG4gICAgICAgICAgICAvLyDmoIflh4bluIPlsYDnmoTlt6bvvIzpnIDopoHosIPmlbQgeFxuICAgICAgICAgICAgaWYgKGlzTGVmdCkge1xuICAgICAgICAgICAgICAgIGZha2VYID0gdGFyZ2V0Q29tcG9uZW50Lm5vZGUueCArIHRhcmdldENvbXBvbmVudC5ub2RlLndpZHRoIC0gMzA7XG4gICAgICAgICAgICAgICAgZmFrZVJlY3RhbmdsZVN0YXJ0WCA9IHRhcmdldFJlY3QueCArIHRhcmdldFJlY3Qud2lkdGggLSAzMDtcbiAgICAgICAgICAgICAgICBmYWtlUmVjdGFuZ2xlRW5kWCA9IHRhcmdldFJlY3QueCArIHRhcmdldFJlY3Qud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpc0xlZnRGaXJzdCA9IGlkeCA9PT0gcmlnaHROb2RlQ291bnQ7XG4gICAgICAgICAgICBjb25zdCBpc1JpZ2h0TGFzdCA9IGlkeCA9PT0gcmlnaHROb2RlQ291bnQgLSAxO1xuICAgICAgICAgICAgLy8g5ouW5ou96Iez5bem56ys5LiA5Liq6IqC54K555qE5oOF5Ya1XG4gICAgICAgICAgICBpZiAoZGV0ZWN0UmVzdWx0ID09PSAndG9wJyAmJiBpc0xlZnRGaXJzdCkge1xuICAgICAgICAgICAgICAgIGZha2VZID0gdGFyZ2V0UmVjdC55IC0gdGFyZ2V0UmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGV0ZWN0UmVzdWx0ID09PSAnYm90dG9tJyAmJiBpc1JpZ2h0TGFzdCkge1xuICAgICAgICAgICAgICAgIGZha2VZID0gdGFyZ2V0UmVjdC55ICsgdGFyZ2V0UmVjdC5oZWlnaHQgKyAzMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmYWtlUmVjdGFuZ2xlU3RhcnRZID0gZmFrZVk7XG4gICAgICAgIGZha2VSZWN0YW5nbGVFbmRZID0gZmFrZVJlY3RhbmdsZVN0YXJ0WSArIDEyO1xuICAgIH1cblxuICAgIGlmIChpc1ZlcnRpY2FsTG9naWNMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICBwYXJlbnRDb21wb25lbnQgPSB0YXJnZXRDb21wb25lbnQ7XG4gICAgICAgIHRhcmdldENvbXBvbmVudCA9IE1JTkRNQVBfRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHRhcmdldENvbXBvbmVudC5wYXJlbnQub3JpZ2luKSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICAgICAgZmFrZVggPSBwYXJlbnRDb21wb25lbnQubm9kZS54O1xuICAgICAgICB3aWR0aCA9IHBhcmVudENvbXBvbmVudC5ub2RlLndpZHRoO1xuICAgICAgICBjb25zdCB2R2FwID0gQkFTRSAqIDYgKyBzdHJva2VXaWR0aDtcbiAgICAgICAgaWYgKGlzVG9wTGF5b3V0KGxheW91dCkgJiYgZGV0ZWN0UmVzdWx0ID09PSAndG9wJykge1xuICAgICAgICAgICAgZmFrZVkgPSB0YXJnZXRSZWN0LnkgLSB2R2FwO1xuICAgICAgICAgICAgZmFrZVJlY3RhbmdsZVN0YXJ0WSA9IGZha2VZIC0gdkdhcCArIHN0cm9rZVdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0JvdHRvbUxheW91dChsYXlvdXQpICYmIGRldGVjdFJlc3VsdCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIGZha2VZID0gdGFyZ2V0UmVjdC55ICsgdGFyZ2V0UmVjdC5oZWlnaHQgKyB2R2FwO1xuICAgICAgICAgICAgZmFrZVJlY3RhbmdsZVN0YXJ0WSA9IGZha2VZICsgdkdhcCAtIHN0cm9rZVdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGZha2VSZWN0YW5nbGVTdGFydFggPSBmYWtlWCArIE1hdGguY2VpbChwYXJlbnRDb21wb25lbnQubm9kZS53aWR0aCAvIDIpIC0gcGFyZW50Q29tcG9uZW50Lm5vZGUuaEdhcCAtIE1hdGguY2VpbChzdHJva2VXaWR0aCAvIDIpO1xuICAgICAgICBmYWtlUmVjdGFuZ2xlRW5kWCA9IGZha2VSZWN0YW5nbGVTdGFydFggKyAzMDtcbiAgICAgICAgZmFrZVJlY3RhbmdsZUVuZFkgPSBmYWtlUmVjdGFuZ2xlU3RhcnRZICsgMTI7XG4gICAgfVxuICAgIGlmIChpc0luZGVudGVkTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgLy8g5YGP56e75LiA5LiqIEdhcFxuICAgICAgICBpZiAoaXNMZWZ0TGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgIGZha2VYIC09IEJBU0UgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JpZ2h0TGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgIGZha2VYICs9IEJBU0UgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RvcExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICBpZiAoZGV0ZWN0UmVzdWx0ID09PSAndG9wJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdE5vZGUgPSB0YXJnZXRJbmRleCA9PT0gcGFyZW50Q29tcG9uZW50Lm5vZGUub3JpZ2luLmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgaWYgKGlzTGFzdE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFrZVkgPSB0YXJnZXRSZWN0LnkgLSB0YXJnZXRSZWN0LmhlaWdodCAtIEJBU0U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dENvbXBvbmVudCA9IE1JTkRNQVBfRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50Lm5vZGUub3JpZ2luLmNoaWxkcmVuW3RhcmdldEluZGV4ICsgMV1cbiAgICAgICAgICAgICAgICAgICAgKSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFJlY3QgPSBnZXRSZWN0YW5nbGVCeU5vZGUobmV4dENvbXBvbmVudC5ub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgZmFrZVkgPSB0YXJnZXRSZWN0LnkgLSBNYXRoLmFicygobmV4dFJlY3QueSArIG5leHRSZWN0LmhlaWdodCAtIHRhcmdldFJlY3QueSkgLyAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGV0ZWN0UmVzdWx0ID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRmlyc3ROb2RlID0gdGFyZ2V0SW5kZXggPT09IDA7XG4gICAgICAgICAgICAgICAgaWYgKGlzRmlyc3ROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFJlY3QgPSBnZXRSZWN0YW5nbGVCeU5vZGUocGFyZW50Q29tcG9uZW50Lm5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBmYWtlWSA9IHBhcmVudFJlY3QueSAtIHBhcmVudFJlY3QuaGVpZ2h0IC8gMiAtIEJBU0U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNDb21wb25lbnQgPSBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbXBvbmVudC5ub2RlLm9yaWdpbi5jaGlsZHJlblt0YXJnZXRJbmRleCAtIDFdXG4gICAgICAgICAgICAgICAgICAgICkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUmVjdCA9IGdldFJlY3RhbmdsZUJ5Tm9kZShwcmV2aW91c0NvbXBvbmVudC5ub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgZmFrZVkgPSBwcmV2aW91c1JlY3QueSAtIE1hdGguYWJzKCh0YXJnZXRSZWN0LnkgKyB0YXJnZXRSZWN0LmhlaWdodCAtIHByZXZpb3VzUmVjdC55KSAvIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmYWtlUmVjdGFuZ2xlU3RhcnRYID0gZmFrZVg7XG4gICAgICAgIGZha2VSZWN0YW5nbGVFbmRYID0gZmFrZVJlY3RhbmdsZVN0YXJ0WCArIDMwO1xuICAgICAgICBmYWtlUmVjdGFuZ2xlU3RhcnRZID0gZmFrZVk7XG4gICAgICAgIGZha2VSZWN0YW5nbGVFbmRZID0gZmFrZVJlY3RhbmdsZVN0YXJ0WSArIDEyO1xuICAgIH1cblxuICAgIC8vIOaehOmAoOS4gOadoeabsue6v1xuICAgIGNvbnN0IGZha2VOb2RlOiBNaW5kbWFwTm9kZSA9IHsgLi4udGFyZ2V0Q29tcG9uZW50Lm5vZGUsIHg6IGZha2VYLCB5OiBmYWtlWSwgd2lkdGgsIGhlaWdodDogMTIgfTtcbiAgICBjb25zdCBsaW5rU1ZHRyA9IGlzSW5kZW50ZWRMYXlvdXQobGF5b3V0KVxuICAgICAgICA/IGRyYXdJbmRlbnRlZExpbmsocm91Z2hTVkcsIHBhcmVudENvbXBvbmVudC5ub2RlLCBmYWtlTm9kZSwgUFJJTUFSWV9DT0xPUiwgZmFsc2UpXG4gICAgICAgIDogZHJhd0xpbmsocm91Z2hTVkcsIHBhcmVudENvbXBvbmVudC5ub2RlLCBmYWtlTm9kZSwgUFJJTUFSWV9DT0xPUiwgaXNIb3Jpem9udGFsTGF5b3V0KGxheW91dCksIGZhbHNlKTtcbiAgICAvLyDmnoTpgKDkuIDkuKrnn6nlvaLmoYblnZDmoIdcbiAgICBjb25zdCBmYWtlUmVjdGFuZ2xlRyA9IGRyYXdSb3VuZFJlY3RhbmdsZShyb3VnaFNWRywgZmFrZVJlY3RhbmdsZVN0YXJ0WCwgZmFrZVJlY3RhbmdsZVN0YXJ0WSwgZmFrZVJlY3RhbmdsZUVuZFgsIGZha2VSZWN0YW5nbGVFbmRZLCB7XG4gICAgICAgIHN0cm9rZTogUFJJTUFSWV9DT0xPUixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgIGZpbGw6IFBSSU1BUllfQ09MT1IsXG4gICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgIH0pO1xuICAgIGZha2VEcm9wTm9kZUc/LmFwcGVuZENoaWxkKGxpbmtTVkdHKTtcbiAgICBmYWtlRHJvcE5vZGVHPy5hcHBlbmRDaGlsZChmYWtlUmVjdGFuZ2xlRyk7XG59O1xuZXhwb3J0IGNvbnN0IGRyYXdTdHJhaWdodERyb3BOb2RlRyA9IChcbiAgICB0YXJnZXRSZWN0OiB7XG4gICAgICAgIHg6IG51bWJlcjtcbiAgICAgICAgeTogbnVtYmVyO1xuICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICB9LFxuICAgIGRldGVjdFJlc3VsdDogRGV0ZWN0UmVzdWx0LFxuICAgIHRhcmdldENvbXBvbmVudDogTWluZE5vZGVDb21wb25lbnQsXG4gICAgcm91Z2hTVkc6IFJvdWdoU1ZHLFxuICAgIGZha2VEcm9wTm9kZUc6IFNWR0dFbGVtZW50IHwgdW5kZWZpbmVkXG4pID0+IHtcbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IHRhcmdldFJlY3Q7XG4gICAgY29uc3QgbGluZUxlbmd0aCA9IDQwO1xuICAgIGxldCBzdGFydExpbmVQb2ludCA9IHggKyB3aWR0aDtcbiAgICBsZXQgZW5kTGluZVBvaW50ID0geCArIHdpZHRoICsgbGluZUxlbmd0aDtcbiAgICBsZXQgc3RhcnRSZWN0YW5nbGVQb2ludFggPSB4ICsgd2lkdGggKyBsaW5lTGVuZ3RoO1xuICAgIGxldCBlbmRSZWN0YW5nbGVQb2ludFggPSB4ICsgbGluZUxlbmd0aCArIHdpZHRoICsgMzA7XG4gICAgbGV0IHN0YXJ0UmVjdGFuZ2xlUG9pbnRZID0geSArIGhlaWdodCAvIDIgLSA2O1xuICAgIGxldCBlbmRSZWN0YW5nbGVQb2ludFkgPSB5ICsgaGVpZ2h0IC8gMiAtIDYgKyAxMjtcblxuICAgIGlmIChkZXRlY3RSZXN1bHQgPT09ICdsZWZ0Jykge1xuICAgICAgICBzdGFydExpbmVQb2ludCA9IHggLSBsaW5lTGVuZ3RoO1xuICAgICAgICBlbmRMaW5lUG9pbnQgPSB4O1xuICAgICAgICBzdGFydFJlY3RhbmdsZVBvaW50WCA9IHggLSBsaW5lTGVuZ3RoIC0gMzA7XG4gICAgICAgIGVuZFJlY3RhbmdsZVBvaW50WCA9IHggLSBsaW5lTGVuZ3RoO1xuICAgIH1cbiAgICBsZXQgZmFrZVkgPSB0YXJnZXRDb21wb25lbnQubm9kZS55O1xuICAgIGxldCBmYWtlWCA9IHRhcmdldFJlY3QueDtcbiAgICBjb25zdCBzdHJva2VXaWR0aCA9IHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5saW5rTGluZVdpZHRoID8gdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luLmxpbmtMaW5lV2lkdGggOiBTVFJPS0VfV0lEVEg7XG4gICAgY29uc3QgcG9pbnRPcHRpb25zID0ge1xuICAgICAgICBmYWtlWCxcbiAgICAgICAgZmFrZVksXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHN0cm9rZVdpZHRoXG4gICAgfTtcbiAgICBjb25zdCBwYXJlbnRMYXlvdXQgPSBNaW5kbWFwUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KFxuICAgICAgICB0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4uaXNSb290ID8gdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luIDogdGFyZ2V0Q29tcG9uZW50Lm5vZGUucGFyZW50Lm9yaWdpblxuICAgICk7XG4gICAgY29uc3QgbGF5b3V0ID0gTWluZG1hcFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudCh0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4pO1xuICAgIGlmICghaXNNaXhlZExheW91dChwYXJlbnRMYXlvdXQsIGxheW91dCkpIHtcbiAgICAgICAgLy8g5p6E6YCg5LiA5p2h55u057q/XG4gICAgICAgIGxldCBsaW5lUG9pbnRzID0gW1xuICAgICAgICAgICAgW3N0YXJ0TGluZVBvaW50LCB5ICsgaGVpZ2h0IC8gMl0sXG4gICAgICAgICAgICBbZW5kTGluZVBvaW50LCB5ICsgaGVpZ2h0IC8gMl1cbiAgICAgICAgXSBhcyBQb2ludFtdO1xuICAgICAgICBpZiAoaXNJbmRlbnRlZExheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICBjb25zdCBmYWtlUG9pbnQgPSBnZXRJbmRlbnRlZEZha2VQb2ludChwYXJlbnRMYXlvdXQsIHBvaW50T3B0aW9ucyk7XG4gICAgICAgICAgICBkcmF3SW5kZW50Tm9kZUcoZmFrZURyb3BOb2RlRyBhcyBTVkdHRWxlbWVudCwgcm91Z2hTVkcsIGZha2VQb2ludCwgdGFyZ2V0Q29tcG9uZW50Lm5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGlzVmVydGljYWxMb2dpY0xheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICBpZiAoIXRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiDorqHnrpfpgLvovpHvvJpcbiAgICAgICAgICAgICAgICAgKiAgMS4g56e75Yqo5Yiw5bem5L6n77ya5b2T5YmN6IqC54K5IHN0YXJ0WCAtIOWBj+enu+WAvO+8jOWBj+enu+WAvOiuoeeul+WmguS4i++8mlxuICAgICAgICAgICAgICAgICAqICAgICAgYS4g56ys5LiA5Liq6IqC54K577yaIOWbuuWumuWAvO+8iOadpea6kOS6jiBnZXRNYWluQXhsZe+8jOesrOS6jOe6p+iKgueCue+8mkJBU0UgKiA477yM5YW25LuWIEJBU0UgKiAzICsgc3Ryb2tlV2lkdGggLyAy77yJ77ybXG4gICAgICAgICAgICAgICAgICogICAgICBiLiDnrKzkuozkuKroioLngrnliLDmnIDlkI7kuIDkuKroioLngrnkuYvpl7TvvJrkuIrkuIDkuKroioLngrnliLDlvZPliY3oioLngrnpl7Tot53nmoTkuIDljYrvvIgo5b2T5YmN6IqC54K5IHN0YXJ0WCAtIOS4iuS4gOS4quiKgueCueeahCBlbmRYKSAvIDIp77yMZW5kWCA9IOW9k+WJjeiKgueCueeahCBzdGFydFggKyB3aWR0aDtcbiAgICAgICAgICAgICAgICAgKiAgMi4g56e75Yqo5Yiw5Y+z5L6n77ya5b2T5YmN6IqC54K5IHggKyB3aWR0aCArIOWBj+enu+WAvO+8jOWBj+enu+WAvOiuoeeul+WmguS4i++8mlxuICAgICAgICAgICAgICAgICAqICAgICAgYS4g56ys5LqM5Liq6IqC54K55Yiw5pyA5ZCO5LiA5Liq6IqC54K55LmL6Ze055qE5Y+z5L6n77ya5b2T5YmN6IqC54K55Yiw5LiL5LiA5Liq6IqC54K56Ze06Led55qE5LiA5Y2K77yIKOS4i+S4gOS4quiKgueCuSBzdGFydFggLSDlvZPliY3oioLngrnnmoQgZW5kWCkgLyAyKe+8jGVuZFggPSDlvZPliY3oioLngrnnmoQgc3RhcnRYICsgd2lkdGg7XG4gICAgICAgICAgICAgICAgICogICAgICBiLiDmnIDlkI7kuIDkuKroioLngrnnmoTlj7PkvqfvvJrlm7rlrprlgLzvvIjmnaXmupDkuo4gZ2V0TWFpbkF4bGXvvIznrKzkuoznuqfoioLngrnvvJpCQVNFICogOO+8jOWFtuS7liBCQVNFICogMyArIHN0cm9rZVdpZHRoIC8gMu+8ie+8m1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGZha2VZID0gdGFyZ2V0Q29tcG9uZW50Lm5vZGUueTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5ULmdldCh0YXJnZXRDb21wb25lbnQucGFyZW50Lm9yaWdpbikgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSBwYXJlbnRDb21wb25lbnQubm9kZS5vcmlnaW4uY2hpbGRyZW4uaW5kZXhPZih0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRldGVjdFJlc3VsdCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvZmZzZXRYID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNGaXJzdE5vZGUgPSB0YXJnZXRJbmRleCA9PT0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRmlyc3ROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRYID0gcGFyZW50Q29tcG9uZW50Lm5vZGUub3JpZ2luLmlzUm9vdCA/IEJBU0UgKiA4IDogQkFTRSAqIDMgKyBzdHJva2VXaWR0aCAvIDI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0NvbXBvbmVudCA9IE1JTkRNQVBfRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbXBvbmVudC5ub2RlLm9yaWdpbi5jaGlsZHJlblt0YXJnZXRJbmRleCAtIDFdXG4gICAgICAgICAgICAgICAgICAgICAgICApIGFzIE1pbmROb2RlQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNSZWN0ID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKHByZXZpb3VzQ29tcG9uZW50Lm5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BhY2UgPSB0YXJnZXRSZWN0LnggLSAocHJldmlvdXNSZWN0LnggKyBwcmV2aW91c1JlY3Qud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WCA9IHNwYWNlIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmYWtlWCA9IHRhcmdldFJlY3QueCAtIG9mZnNldFggLSB3aWR0aCAvIDIgLSBNYXRoLmNlaWwoc3Ryb2tlV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRldGVjdFJlc3VsdCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdE5vZGUgPSB0YXJnZXRJbmRleCA9PT0gcGFyZW50Q29tcG9uZW50Lm5vZGUub3JpZ2luLmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0xhc3ROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRYID0gcGFyZW50Q29tcG9uZW50Lm5vZGUub3JpZ2luLmlzUm9vdCA/IEJBU0UgKiA4IDogQkFTRSAqIDMgKyBzdHJva2VXaWR0aCAvIDI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tcG9uZW50ID0gTUlORE1BUF9FTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50Lm5vZGUub3JpZ2luLmNoaWxkcmVuW3RhcmdldEluZGV4ICsgMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0UmVjdCA9IGdldFJlY3RhbmdsZUJ5Tm9kZShuZXh0Q29tcG9uZW50Lm5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BhY2UgPSBuZXh0UmVjdC54IC0gKHRhcmdldFJlY3QueCArIHRhcmdldFJlY3Qud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WCA9IHNwYWNlIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmYWtlWCA9IHRhcmdldFJlY3QueCArIHdpZHRoICsgb2Zmc2V0WCAtIHdpZHRoIC8gMiAtIE1hdGguY2VpbChzdHJva2VXaWR0aCAvIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGFydFJlY3RhbmdsZVBvaW50WCA9IGZha2VYO1xuICAgICAgICAgICAgICAgIGlmIChpc1RvcExheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOWboOS4uuefqeW9ouaYr+S7juW3puS4iuinkuS4uui1t+eCueWQkeS4i+eUu+eahO+8jOaJgOS7pemcgOimgeWQkeS4iuWBj+enu+S4gOS4quefqeW9oueahOmrmOW6pu+8iC0xMu+8iVxuICAgICAgICAgICAgICAgICAgICBzdGFydFJlY3RhbmdsZVBvaW50WSA9IGZha2VZICsgaGVpZ2h0ICsgdGFyZ2V0Q29tcG9uZW50Lm5vZGUudkdhcCAtIDEyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNCb3R0b21MYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydFJlY3RhbmdsZVBvaW50WSA9IGZha2VZICsgdGFyZ2V0Q29tcG9uZW50Lm5vZGUudkdhcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW5kUmVjdGFuZ2xlUG9pbnRYID0gc3RhcnRSZWN0YW5nbGVQb2ludFggKyAzMDtcbiAgICAgICAgICAgICAgICBlbmRSZWN0YW5nbGVQb2ludFkgPSBzdGFydFJlY3RhbmdsZVBvaW50WSArIDEyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZha2VOb2RlOiBNaW5kbWFwTm9kZSA9IHsgLi4udGFyZ2V0Q29tcG9uZW50Lm5vZGUsIHg6IGZha2VYLCB5OiBmYWtlWSwgd2lkdGg6IDMwIH07XG4gICAgICAgICAgICAgICAgY29uc3QgbGlua1NWR0cgPSBkcmF3TGluayhyb3VnaFNWRywgcGFyZW50Q29tcG9uZW50Lm5vZGUsIGZha2VOb2RlLCBQUklNQVJZX0NPTE9SLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZha2VEcm9wTm9kZUc/LmFwcGVuZENoaWxkKGxpbmtTVkdHKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBsaW5rU1ZHRyA9IHJvdWdoU1ZHLmxpbmVhclBhdGgobGluZVBvaW50cywgeyBzdHJva2U6IFBSSU1BUllfQ09MT1IsIHN0cm9rZVdpZHRoIH0pO1xuICAgICAgICAgICAgZmFrZURyb3BOb2RlRz8uYXBwZW5kQ2hpbGQobGlua1NWR0cpO1xuICAgICAgICB9XG4gICAgICAgIC8vIOaehOmAoOS4gOS4quefqeW9ouahhuWdkOagh1xuICAgICAgICBsZXQgZmFrZVJlY3RhbmdsZUcgPSBkcmF3Um91bmRSZWN0YW5nbGUoXG4gICAgICAgICAgICByb3VnaFNWRyxcbiAgICAgICAgICAgIHN0YXJ0UmVjdGFuZ2xlUG9pbnRYLFxuICAgICAgICAgICAgc3RhcnRSZWN0YW5nbGVQb2ludFksXG4gICAgICAgICAgICBlbmRSZWN0YW5nbGVQb2ludFgsXG4gICAgICAgICAgICBlbmRSZWN0YW5nbGVQb2ludFksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBQUklNQVJZX0NPTE9SLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgIGZpbGw6IFBSSU1BUllfQ09MT1IsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiAnc29saWQnXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgZmFrZURyb3BOb2RlRz8uYXBwZW5kQ2hpbGQoZmFrZVJlY3RhbmdsZUcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOa3t+WQiOW4g+WxgOeUu+e6v+mAu+i+kVxuICAgICAgICBpZiAoaXNIb3Jpem9udGFsTG9naWNMYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgaWYgKGlzSW5kZW50ZWRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZha2VQb2ludCA9IGdldEluZGVudGVkRmFrZVBvaW50KGxheW91dCwgcG9pbnRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBkcmF3SW5kZW50Tm9kZUcoZmFrZURyb3BOb2RlRyBhcyBTVkdHRWxlbWVudCwgcm91Z2hTVkcsIGZha2VQb2ludCwgdGFyZ2V0Q29tcG9uZW50Lm5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIb3Jpem9udGFsRmFrZVkgPSAoXG4gICAgZGV0ZWN0UmVzdWx0OiAndG9wJyB8ICdib3R0b20nLFxuICAgIHRhcmdldEluZGV4OiBudW1iZXIsXG4gICAgcGFyZW50Tm9kZTogTWluZG1hcE5vZGUsXG4gICAgdGFyZ2V0UmVjdDoge1xuICAgICAgICB4OiBudW1iZXI7XG4gICAgICAgIHk6IG51bWJlcjtcbiAgICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgfSxcbiAgICBsYXlvdXQ6IE1pbmRtYXBMYXlvdXRUeXBlLFxuICAgIGZha2VZOiBudW1iZXJcbikgPT4ge1xuICAgIGlmIChkZXRlY3RSZXN1bHQgPT09ICd0b3AnKSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA9PT0gMCAmJiBpc1RvcExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICBmYWtlWSA9IHRhcmdldFJlY3QueSArIHRhcmdldFJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQ29tcG9uZW50ID0gTUlORE1BUF9FTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQocGFyZW50Tm9kZS5vcmlnaW4uY2hpbGRyZW5bdGFyZ2V0SW5kZXggLSAxXSkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c1JlY3QgPSBnZXRSZWN0YW5nbGVCeU5vZGUocHJldmlvdXNDb21wb25lbnQubm9kZSk7XG4gICAgICAgICAgICBjb25zdCB0b3BZID0gcHJldmlvdXNSZWN0LnkgKyBwcmV2aW91c1JlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgZmFrZVkgPSB0b3BZICsgKHRhcmdldFJlY3QueSAtIHRvcFkpIC8gNTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGV0ZWN0UmVzdWx0ID09PSAnYm90dG9tJykge1xuICAgICAgICBmYWtlWSA9IHRhcmdldFJlY3QueSArIHRhcmdldFJlY3QuaGVpZ2h0ICsgMzA7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA8IHBhcmVudE5vZGUub3JpZ2luLmNoaWxkcmVuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRDb21wb25lbnQgPSBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChwYXJlbnROb2RlLm9yaWdpbi5jaGlsZHJlblt0YXJnZXRJbmRleCArIDFdKSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSZWN0ID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKG5leHRDb21wb25lbnQubm9kZSk7XG4gICAgICAgICAgICBjb25zdCB0b3BZID0gdGFyZ2V0UmVjdC55ICsgdGFyZ2V0UmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBmYWtlWSA9IHRvcFkgKyAobmV4dFJlY3QueSAtIHRvcFkpIC8gNTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPT09IHBhcmVudE5vZGUub3JpZ2luLmNoaWxkcmVuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGZha2VZID0gdGFyZ2V0UmVjdC55ICsgdGFyZ2V0UmVjdC5oZWlnaHQgKyAzMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFrZVk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW5kZW50ZWRGYWtlUG9pbnQgPSAoXG4gICAgbGF5b3V0OiBNaW5kbWFwTGF5b3V0VHlwZSxcbiAgICBwb2ludE9wdGlvbnM6IHtcbiAgICAgICAgZmFrZVg6IG51bWJlcjtcbiAgICAgICAgZmFrZVk6IG51bWJlcjtcbiAgICAgICAgeDogbnVtYmVyO1xuICAgICAgICB5OiBudW1iZXI7XG4gICAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICAgIGhlaWdodDogbnVtYmVyO1xuICAgICAgICBzdHJva2VXaWR0aDogbnVtYmVyO1xuICAgIH1cbikgPT4ge1xuICAgIGxldCB7IGZha2VYLCBmYWtlWSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc3Ryb2tlV2lkdGggfSA9IHBvaW50T3B0aW9ucztcbiAgICBjb25zdCBoR2FwID0gQkFTRSAqIDQ7XG4gICAgY29uc3QgdkdhcCA9IEJBU0UgKiA2O1xuICAgIGNvbnN0IG9mZnNldFggPSBoR2FwICsgd2lkdGggLyAyICsgc3Ryb2tlV2lkdGg7XG4gICAgY29uc3Qgb2Zmc2V0WSA9IHZHYXAgKyBoZWlnaHQgLyAyICsgc3Ryb2tlV2lkdGg7XG4gICAgaWYgKGlzTGVmdExheW91dChsYXlvdXQpKSB7XG4gICAgICAgIGZha2VYID0geCAtIG9mZnNldFg7XG4gICAgfVxuICAgIGlmIChpc1JpZ2h0TGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgZmFrZVggPSB4ICsgb2Zmc2V0WDtcbiAgICB9XG4gICAgaWYgKGlzVG9wTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgZmFrZVkgPSB5IC0gb2Zmc2V0WTtcbiAgICB9XG4gICAgaWYgKGlzQm90dG9tTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgZmFrZVkgPSB5ICsgaGVpZ2h0ICsgb2Zmc2V0WTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZmFrZVgsIGZha2VZIH07XG59O1xuXG5leHBvcnQgY29uc3QgZHJhd0luZGVudE5vZGVHID0gKFxuICAgIGZha2VEcm9wTm9kZUc6IFNWR0dFbGVtZW50LFxuICAgIHJvdWdoU1ZHOiBSb3VnaFNWRyxcbiAgICBmYWtlUG9pbnQ6IHsgZmFrZVg6IG51bWJlcjsgZmFrZVk6IG51bWJlciB9LFxuICAgIG5vZGU6IE1pbmRtYXBOb2RlXG4pID0+IHtcbiAgICBjb25zdCB7IGZha2VYLCBmYWtlWSB9ID0gZmFrZVBvaW50O1xuICAgIGNvbnN0IGZha2VOb2RlOiBNaW5kbWFwTm9kZSA9IHsgLi4ubm9kZSwgeDogZmFrZVgsIHk6IGZha2VZLCB3aWR0aDogMzAsIGhlaWdodDogMTIgfTtcbiAgICBjb25zdCBsaW5rU1ZHRyA9IGRyYXdJbmRlbnRlZExpbmsocm91Z2hTVkcsIG5vZGUsIGZha2VOb2RlLCBQUklNQVJZX0NPTE9SLCBmYWxzZSk7XG5cbiAgICBjb25zdCBzdGFydFJlY3RhbmdsZVBvaW50WCA9IGZha2VYLFxuICAgICAgICBzdGFydFJlY3RhbmdsZVBvaW50WSA9IGZha2VZLFxuICAgICAgICBlbmRSZWN0YW5nbGVQb2ludFggPSBmYWtlWCArIDMwLFxuICAgICAgICBlbmRSZWN0YW5nbGVQb2ludFkgPSBmYWtlWSArIDEyO1xuICAgIGNvbnN0IGZha2VSZWN0YW5nbGVHID0gZHJhd1JvdW5kUmVjdGFuZ2xlKFxuICAgICAgICByb3VnaFNWRyxcbiAgICAgICAgc3RhcnRSZWN0YW5nbGVQb2ludFgsXG4gICAgICAgIHN0YXJ0UmVjdGFuZ2xlUG9pbnRZLFxuICAgICAgICBlbmRSZWN0YW5nbGVQb2ludFgsXG4gICAgICAgIGVuZFJlY3RhbmdsZVBvaW50WSxcbiAgICAgICAge1xuICAgICAgICAgICAgc3Ryb2tlOiBQUklNQVJZX0NPTE9SLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICBmaWxsOiBQUklNQVJZX0NPTE9SLFxuICAgICAgICAgICAgZmlsbFN0eWxlOiAnc29saWQnXG4gICAgICAgIH1cbiAgICApO1xuICAgIGZha2VEcm9wTm9kZUc/LmFwcGVuZENoaWxkKGxpbmtTVkdHKTtcbiAgICBmYWtlRHJvcE5vZGVHPy5hcHBlbmRDaGlsZChmYWtlUmVjdGFuZ2xlRyk7XG59O1xuIl19
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { isStandardLayout, isIndentedLayout, isVerticalLogicLayout, isTopLayout, MindmapLayoutType } from '@plait/layouts';
|
|
2
|
+
import { MINDMAP_ELEMENT_TO_COMPONENT } from './weak-maps';
|
|
3
|
+
import { MindmapQueries } from '../queries';
|
|
4
|
+
import { isMixedLayout } from './layout';
|
|
5
|
+
/* 根据布局调整 target 以及 direction */
|
|
6
|
+
export const readjustmentDropTarget = (dropTarget) => {
|
|
7
|
+
const { target, detectResult } = dropTarget;
|
|
8
|
+
const newDropTarget = { target, detectResult };
|
|
9
|
+
const targetComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(target);
|
|
10
|
+
if (targetComponent.node.children.length > 0 && dropTarget.detectResult) {
|
|
11
|
+
const layout = MindmapQueries.getCorrectLayoutByElement(targetComponent.node.origin);
|
|
12
|
+
const parentLayout = MindmapQueries.getCorrectLayoutByElement(targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin);
|
|
13
|
+
if (['right', 'left'].includes(dropTarget.detectResult)) {
|
|
14
|
+
if (!isMixedLayout(parentLayout, layout)) {
|
|
15
|
+
if (targetComponent.node.origin.isRoot) {
|
|
16
|
+
const layout = MindmapQueries.getCorrectLayoutByElement(targetComponent.node.origin);
|
|
17
|
+
// 标准布局,根节点
|
|
18
|
+
if (isStandardLayout(layout)) {
|
|
19
|
+
const rightNodeCount = targetComponent.node.origin.rightNodeCount;
|
|
20
|
+
if (detectResult === 'left') {
|
|
21
|
+
// 作为左的第一个节点
|
|
22
|
+
if (targetComponent.node.children.length === rightNodeCount) {
|
|
23
|
+
return newDropTarget;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// 作为右的第一个节点或最后一个节点
|
|
28
|
+
if (rightNodeCount === 0) {
|
|
29
|
+
newDropTarget.target = target;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
newDropTarget.target = targetComponent.node.children[rightNodeCount - 1].origin;
|
|
33
|
+
newDropTarget.detectResult = 'bottom';
|
|
34
|
+
}
|
|
35
|
+
return newDropTarget;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// 缩进布局探测到第一个子节点
|
|
40
|
+
if (isIndentedLayout(parentLayout)) {
|
|
41
|
+
newDropTarget.target = targetComponent.node.children[0].origin;
|
|
42
|
+
newDropTarget.detectResult = isTopLayout(parentLayout) ? 'bottom' : 'top';
|
|
43
|
+
return newDropTarget;
|
|
44
|
+
}
|
|
45
|
+
// 上下布局的根节点只可以探测到上或者下,子节点的左右探测不处理,跳过。
|
|
46
|
+
if (isVerticalLogicLayout(parentLayout)) {
|
|
47
|
+
return newDropTarget;
|
|
48
|
+
}
|
|
49
|
+
// 剩下是水平布局的默认情况:插入最后一个子节点的下方
|
|
50
|
+
const lastChildNodeIndex = targetComponent.node.children.length - 1;
|
|
51
|
+
newDropTarget.target = targetComponent.node.children[lastChildNodeIndex].origin;
|
|
52
|
+
newDropTarget.detectResult = 'bottom';
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// 处理左右布局下的混合布局
|
|
56
|
+
if ([MindmapLayoutType.left, MindmapLayoutType.right].includes(parentLayout)) {
|
|
57
|
+
const layout = MindmapQueries.getCorrectLayoutByElement(targetComponent.node.origin);
|
|
58
|
+
if (isIndentedLayout(layout)) {
|
|
59
|
+
newDropTarget.target = targetComponent.node.children[0].origin;
|
|
60
|
+
newDropTarget.detectResult = isTopLayout(layout) ? 'bottom' : 'top';
|
|
61
|
+
return newDropTarget;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (['top', 'bottom'].includes(dropTarget.detectResult)) {
|
|
67
|
+
// 缩进布局移动至第一个节点
|
|
68
|
+
if (targetComponent.node.origin.isRoot && isIndentedLayout(layout)) {
|
|
69
|
+
newDropTarget.target = targetComponent.node.children[0].origin;
|
|
70
|
+
newDropTarget.detectResult = isTopLayout(layout) ? 'bottom' : 'top';
|
|
71
|
+
return newDropTarget;
|
|
72
|
+
}
|
|
73
|
+
// 上下布局,插到右边
|
|
74
|
+
const parentLayout = MindmapQueries.getCorrectLayoutByElement(targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin);
|
|
75
|
+
if (isVerticalLogicLayout(parentLayout)) {
|
|
76
|
+
const lastChildNodeIndex = targetComponent.node.children.length - 1;
|
|
77
|
+
newDropTarget.target = targetComponent.node.children[lastChildNodeIndex].origin;
|
|
78
|
+
newDropTarget.detectResult = 'right';
|
|
79
|
+
return newDropTarget;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return newDropTarget;
|
|
83
|
+
}
|
|
84
|
+
return dropTarget;
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC10YXJnZXQtY29ycmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvZHJvcC10YXJnZXQtY29ycmVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczSCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXpDLGdDQUFnQztBQUNoQyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFVBR3RDLEVBQXVELEVBQUU7SUFDdEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUM7SUFDNUMsTUFBTSxhQUFhLEdBQUcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDL0MsTUFBTSxlQUFlLEdBQUcsNEJBQTRCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBc0IsQ0FBQztJQUN0RixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRTtRQUNyRSxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMseUJBQXlCLENBQ3pELGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVB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Q0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU3RhbmRhcmRMYXlvdXQsIGlzSW5kZW50ZWRMYXlvdXQsIGlzVmVydGljYWxMb2dpY0xheW91dCwgaXNUb3BMYXlvdXQsIE1pbmRtYXBMYXlvdXRUeXBlIH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgRGV0ZWN0UmVzdWx0LCBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWluZE5vZGVDb21wb25lbnQgfSBmcm9tICcuLi9ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5UIH0gZnJvbSAnLi93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgTWluZG1hcFF1ZXJpZXMgfSBmcm9tICcuLi9xdWVyaWVzJztcbmltcG9ydCB7IGlzTWl4ZWRMYXlvdXQgfSBmcm9tICcuL2xheW91dCc7XG5cbi8qIOagueaNruW4g+WxgOiwg+aVtCB0YXJnZXQg5Lul5Y+KIGRpcmVjdGlvbiAqL1xuZXhwb3J0IGNvbnN0IHJlYWRqdXN0bWVudERyb3BUYXJnZXQgPSAoZHJvcFRhcmdldDoge1xuICAgIHRhcmdldDogTWluZEVsZW1lbnQ7XG4gICAgZGV0ZWN0UmVzdWx0OiBEZXRlY3RSZXN1bHQ7XG59KTogeyB0YXJnZXQ6IE1pbmRFbGVtZW50OyBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdCB9ID0+IHtcbiAgICBjb25zdCB7IHRhcmdldCwgZGV0ZWN0UmVzdWx0IH0gPSBkcm9wVGFyZ2V0O1xuICAgIGNvbnN0IG5ld0Ryb3BUYXJnZXQgPSB7IHRhcmdldCwgZGV0ZWN0UmVzdWx0IH07XG4gICAgY29uc3QgdGFyZ2V0Q29tcG9uZW50ID0gTUlORE1BUF9FTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQodGFyZ2V0KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICBpZiAodGFyZ2V0Q29tcG9uZW50Lm5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCkge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kbWFwUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbik7XG4gICAgICAgIGNvbnN0IHBhcmVudExheW91dCA9IE1pbmRtYXBRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQoXG4gICAgICAgICAgICB0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4uaXNSb290ID8gdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luIDogdGFyZ2V0Q29tcG9uZW50Lm5vZGUucGFyZW50Lm9yaWdpblxuICAgICAgICApO1xuICAgICAgICBpZiAoWydyaWdodCcsICdsZWZ0J10uaW5jbHVkZXMoZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQpKSB7XG4gICAgICAgICAgICBpZiAoIWlzTWl4ZWRMYXlvdXQocGFyZW50TGF5b3V0LCBsYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5b3V0ID0gTWluZG1hcFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudCh0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICAvLyDmoIflh4bluIPlsYDvvIzmoLnoioLngrlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RhbmRhcmRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmlnaHROb2RlQ291bnQgPSB0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4ucmlnaHROb2RlQ291bnQgYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRldGVjdFJlc3VsdCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L2c5Li65bem55qE56ys5LiA5Liq6IqC54K5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gcmlnaHROb2RlQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Ryb3BUYXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkvZzkuLrlj7PnmoTnrKzkuIDkuKroioLngrnmiJbmnIDlkI7kuIDkuKroioLngrlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHROb2RlQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC50YXJnZXQgPSB0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlbltyaWdodE5vZGVDb3VudCAtIDFdLm9yaWdpbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPSAnYm90dG9tJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Ryb3BUYXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyDnvKnov5vluIPlsYDmjqLmtYvliLDnrKzkuIDkuKrlrZDoioLngrlcbiAgICAgICAgICAgICAgICBpZiAoaXNJbmRlbnRlZExheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQudGFyZ2V0ID0gdGFyZ2V0Q29tcG9uZW50Lm5vZGUuY2hpbGRyZW5bMF0ub3JpZ2luO1xuICAgICAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9IGlzVG9wTGF5b3V0KHBhcmVudExheW91dCkgPyAnYm90dG9tJyA6ICd0b3AnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3RHJvcFRhcmdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5LiK5LiL5biD5bGA55qE5qC56IqC54K55Y+q5Y+v5Lul5o6i5rWL5Yiw5LiK5oiW6ICF5LiL77yM5a2Q6IqC54K555qE5bem5Y+z5o6i5rWL5LiN5aSE55CG77yM6Lez6L+H44CCXG4gICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWxMb2dpY0xheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdEcm9wVGFyZ2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDliankuIvmmK/msLTlubPluIPlsYDnmoTpu5jorqTmg4XlhrXvvJrmj5LlhaXmnIDlkI7kuIDkuKrlrZDoioLngrnnmoTkuIvmlrlcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlSW5kZXggPSB0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQudGFyZ2V0ID0gdGFyZ2V0Q29tcG9uZW50Lm5vZGUuY2hpbGRyZW5bbGFzdENoaWxkTm9kZUluZGV4XS5vcmlnaW47XG4gICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPSAnYm90dG9tJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8g5aSE55CG5bem5Y+z5biD5bGA5LiL55qE5re35ZCI5biD5bGAXG4gICAgICAgICAgICAgICAgaWYgKFtNaW5kbWFwTGF5b3V0VHlwZS5sZWZ0LCBNaW5kbWFwTGF5b3V0VHlwZS5yaWdodF0uaW5jbHVkZXMocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kbWFwUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0luZGVudGVkTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQudGFyZ2V0ID0gdGFyZ2V0Q29tcG9uZW50Lm5vZGUuY2hpbGRyZW5bMF0ub3JpZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPSBpc1RvcExheW91dChsYXlvdXQpID8gJ2JvdHRvbScgOiAndG9wJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdEcm9wVGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChbJ3RvcCcsICdib3R0b20nXS5pbmNsdWRlcyhkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCkpIHtcbiAgICAgICAgICAgIC8vIOe8qei/m+W4g+WxgOenu+WKqOiHs+esrOS4gOS4quiKgueCuVxuICAgICAgICAgICAgaWYgKHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5pc1Jvb3QgJiYgaXNJbmRlbnRlZExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC50YXJnZXQgPSB0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlblswXS5vcmlnaW47XG4gICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPSBpc1RvcExheW91dChsYXlvdXQpID8gJ2JvdHRvbScgOiAndG9wJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RHJvcFRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOS4iuS4i+W4g+WxgO+8jOaPkuWIsOWPs+i+uVxuICAgICAgICAgICAgY29uc3QgcGFyZW50TGF5b3V0ID0gTWluZG1hcFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChcbiAgICAgICAgICAgICAgICB0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4uaXNSb290ID8gdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luIDogdGFyZ2V0Q29tcG9uZW50Lm5vZGUucGFyZW50Lm9yaWdpblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsTG9naWNMYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGVJbmRleCA9IHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC50YXJnZXQgPSB0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlbltsYXN0Q2hpbGROb2RlSW5kZXhdLm9yaWdpbjtcbiAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9ICdyaWdodCc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Ryb3BUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0Ryb3BUYXJnZXQ7XG4gICAgfVxuICAgIHJldHVybiBkcm9wVGFyZ2V0O1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { distanceBetweenPointAndRectangle } from '@plait/core';
|
|
2
|
+
import { ELEMENT_TO_NODE } from './weak-maps';
|
|
3
|
+
export function getRectangleByNode(node) {
|
|
4
|
+
const x = node.x + node.hGap;
|
|
5
|
+
let y = node.y + node.vGap;
|
|
6
|
+
const width = node.width - node.hGap * 2;
|
|
7
|
+
const height = node.height - node.vGap * 2;
|
|
8
|
+
return {
|
|
9
|
+
x,
|
|
10
|
+
y,
|
|
11
|
+
width,
|
|
12
|
+
height
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function hitMindmapElement(board, point, element) {
|
|
16
|
+
const node = ELEMENT_TO_NODE.get(element);
|
|
17
|
+
if (node && distanceBetweenPointAndRectangle(point[0], point[1], getRectangleByNode(node)) === 0) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9ncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXNDLGdDQUFnQyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUMsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQWlCO0lBQ2hELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM3QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE9BQU87UUFDSCxDQUFDO1FBQ0QsQ0FBQztRQUNELEtBQUs7UUFDTCxNQUFNO0tBQ1QsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBaUIsRUFBRSxLQUFZLEVBQUUsT0FBb0I7SUFDbkYsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxJQUFJLElBQUksSUFBSSxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzlGLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7U0FBTTtRQUNILE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1pbmRtYXBOb2RlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUmVjdGFuZ2xlIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVMRU1FTlRfVE9fTk9ERSB9IGZyb20gJy4vd2Vhay1tYXBzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlY3RhbmdsZUJ5Tm9kZShub2RlOiBNaW5kbWFwTm9kZSk6IFJlY3RhbmdsZUNsaWVudCB7XG4gICAgY29uc3QgeCA9IG5vZGUueCArIG5vZGUuaEdhcDtcbiAgICBsZXQgeSA9IG5vZGUueSArIG5vZGUudkdhcDtcbiAgICBjb25zdCB3aWR0aCA9IG5vZGUud2lkdGggLSBub2RlLmhHYXAgKiAyO1xuICAgIGNvbnN0IGhlaWdodCA9IG5vZGUuaGVpZ2h0IC0gbm9kZS52R2FwICogMjtcbiAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhpdE1pbmRtYXBFbGVtZW50KGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgY29uc3Qgbm9kZSA9IEVMRU1FTlRfVE9fTk9ERS5nZXQoZWxlbWVudCk7XG4gICAgaWYgKG5vZGUgJiYgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRSZWN0YW5nbGUocG9pbnRbMF0sIHBvaW50WzFdLCBnZXRSZWN0YW5nbGVCeU5vZGUobm9kZSkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from './graph';
|
|
2
|
+
export * from './weak-maps';
|
|
3
|
+
export * from './mindmap';
|
|
4
|
+
export * from './layout';
|
|
5
|
+
export * from './shape';
|
|
6
|
+
export * from './colors';
|
|
7
|
+
export * from './is-virtual-key';
|
|
8
|
+
export * from './draw-placeholder';
|
|
9
|
+
export * from './direction-detector';
|
|
10
|
+
export * from './direction-corrector';
|
|
11
|
+
export * from './drop-target-corrector';
|
|
12
|
+
export * from './abstract/common';
|
|
13
|
+
export * from './abstract/resize';
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ncmFwaCc7XG5leHBvcnQgKiBmcm9tICcuL3dlYWstbWFwcyc7XG5leHBvcnQgKiBmcm9tICcuL21pbmRtYXAnO1xuZXhwb3J0ICogZnJvbSAnLi9sYXlvdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9zaGFwZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2lzLXZpcnR1YWwta2V5JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhdy1wbGFjZWhvbGRlcic7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGlvbi1kZXRlY3Rvcic7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGlvbi1jb3JyZWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kcm9wLXRhcmdldC1jb3JyZWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9hYnN0cmFjdC9jb21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi9hYnN0cmFjdC9yZXNpemUnO1xuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { isKeyHotkey } from 'is-hotkey';
|
|
2
|
+
export function isVirtualKey(e) {
|
|
3
|
+
const isMod = e.ctrlKey || e.metaKey;
|
|
4
|
+
const isAlt = isKeyHotkey('alt', e);
|
|
5
|
+
const isShift = isKeyHotkey('shift', e);
|
|
6
|
+
const isCapsLock = e.key.includes('CapsLock');
|
|
7
|
+
const isTab = e.key.includes('Tab');
|
|
8
|
+
const isEsc = e.key.includes('Escape');
|
|
9
|
+
const isF = e.key.startsWith('F');
|
|
10
|
+
const isArrow = e.key.includes('Arrow') ? true : false;
|
|
11
|
+
return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtdmlydHVhbC1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9pcy12aXJ0dWFsLWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXhDLE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBZ0I7SUFDekMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDdkQsT0FBTyxVQUFVLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDO0FBQ3ZGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0tleUhvdGtleSB9IGZyb20gJ2lzLWhvdGtleSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpcnR1YWxLZXkoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGlzTW9kID0gZS5jdHJsS2V5IHx8IGUubWV0YUtleTtcbiAgICBjb25zdCBpc0FsdCA9IGlzS2V5SG90a2V5KCdhbHQnLCBlKTtcbiAgICBjb25zdCBpc1NoaWZ0ID0gaXNLZXlIb3RrZXkoJ3NoaWZ0JywgZSk7XG4gICAgY29uc3QgaXNDYXBzTG9jayA9IGUua2V5LmluY2x1ZGVzKCdDYXBzTG9jaycpO1xuICAgIGNvbnN0IGlzVGFiID0gZS5rZXkuaW5jbHVkZXMoJ1RhYicpO1xuICAgIGNvbnN0IGlzRXNjID0gZS5rZXkuaW5jbHVkZXMoJ0VzY2FwZScpO1xuICAgIGNvbnN0IGlzRiA9IGUua2V5LnN0YXJ0c1dpdGgoJ0YnKTtcbiAgICBjb25zdCBpc0Fycm93ID0gZS5rZXkuaW5jbHVkZXMoJ0Fycm93JykgPyB0cnVlIDogZmFsc2U7XG4gICAgcmV0dXJuIGlzQ2Fwc0xvY2sgfHwgaXNNb2QgfHwgaXNBbHQgfHwgaXNBcnJvdyB8fCBpc1NoaWZ0IHx8IGlzVGFiIHx8IGlzRXNjIHx8IGlzRjtcbn1cbiJdfQ==
|