@plait/mind 0.2.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{drawer/base/base.d.ts → base/base.drawer.d.ts} +1 -1
- package/{plugins/emoji → base}/emoji-base.component.d.ts +2 -2
- package/{plugins/emoji → base}/index.d.ts +1 -1
- package/draw/abstract.d.ts +2 -1
- package/draw/indented-link.d.ts +1 -1
- package/draw/link/logic-link.d.ts +1 -1
- package/draw/node.d.ts +5 -0
- package/draw/topic.d.ts +16 -0
- package/{plugins/emoji → drawer}/emoji.drawer.d.ts +3 -3
- package/drawer/quick-insert.drawer.d.ts +1 -1
- package/esm2020/base/base.drawer.mjs +17 -0
- package/esm2020/base/emoji-base.component.mjs +33 -0
- package/esm2020/base/index.mjs +3 -0
- package/esm2020/draw/abstract.mjs +8 -7
- package/esm2020/draw/indented-link.mjs +3 -3
- package/esm2020/draw/link/abstract-link.mjs +9 -15
- package/esm2020/draw/link/logic-link.mjs +9 -9
- package/esm2020/draw/node.mjs +21 -0
- package/esm2020/draw/topic.mjs +32 -0
- package/esm2020/drawer/emoji.drawer.mjs +73 -0
- package/esm2020/drawer/quick-insert.drawer.mjs +3 -3
- package/esm2020/interfaces/index.mjs +2 -2
- package/esm2020/interfaces/pointer.mjs +5 -0
- package/esm2020/mind.component.mjs +2 -2
- package/esm2020/mind.module.mjs +5 -5
- package/esm2020/node.component.mjs +11 -10
- package/esm2020/plugins/with-abstract-resize.board.mjs +12 -0
- package/esm2020/plugins/with-abstract-resize.mjs +107 -0
- package/esm2020/plugins/with-mind-create.mjs +85 -0
- package/esm2020/plugins/with-mind-extend.mjs +11 -0
- package/esm2020/plugins/with-mind.board.mjs +2 -0
- package/esm2020/plugins/with-mind.mjs +30 -16
- package/esm2020/plugins/with-node-dnd.mjs +162 -0
- package/esm2020/public-api.mjs +5 -3
- package/esm2020/transforms/abstract-node.mjs +3 -2
- package/esm2020/transforms/emoji.mjs +37 -0
- package/esm2020/transforms/index.mjs +7 -3
- package/esm2020/transforms/node.mjs +40 -33
- package/esm2020/utils/abstract/common.mjs +64 -31
- package/esm2020/utils/abstract/resize.mjs +3 -2
- package/esm2020/utils/clipboard.mjs +16 -18
- package/esm2020/utils/dnd/common.mjs +35 -0
- package/esm2020/utils/dnd/detector.mjs +268 -0
- package/esm2020/utils/dnd/draw.mjs +161 -0
- package/esm2020/utils/index.mjs +6 -6
- package/esm2020/utils/mind.mjs +6 -129
- package/esm2020/utils/node/adjust-node.mjs +49 -0
- package/esm2020/utils/node/common.mjs +6 -0
- package/esm2020/utils/node/create-node.mjs +61 -0
- package/esm2020/utils/node/index.mjs +4 -0
- package/esm2020/utils/point-placement.mjs +22 -2
- package/esm2020/utils/position/emoji.mjs +31 -0
- package/esm2020/utils/position/index.mjs +4 -0
- package/esm2020/utils/position/node.mjs +34 -0
- package/esm2020/utils/position/topic.mjs +14 -0
- package/esm2020/utils/space/emoji.mjs +19 -0
- package/esm2020/utils/space/layout-options.mjs +72 -0
- package/esm2020/utils/space/node-space.mjs +77 -0
- package/fesm2015/plait-mind.mjs +1464 -1631
- package/fesm2015/plait-mind.mjs.map +1 -1
- package/fesm2020/plait-mind.mjs +1486 -1642
- package/fesm2020/plait-mind.mjs.map +1 -1
- package/interfaces/index.d.ts +1 -1
- package/interfaces/pointer.d.ts +3 -0
- package/mind.module.d.ts +2 -2
- package/node.component.d.ts +3 -3
- package/package.json +3 -3
- package/{interfaces/abstract.d.ts → plugins/with-abstract-resize.board.d.ts} +2 -2
- package/plugins/with-mind-create.d.ts +11 -0
- package/plugins/with-mind-extend.d.ts +3 -0
- package/plugins/{with-extend-mind.d.ts → with-mind.board.d.ts} +4 -4
- package/plugins/with-mind.d.ts +1 -1
- package/public-api.d.ts +4 -2
- package/styles/styles.scss +5 -2
- package/transforms/abstract-node.d.ts +1 -1
- package/transforms/emoji.d.ts +6 -0
- package/transforms/index.d.ts +3 -0
- package/transforms/node.d.ts +5 -5
- package/utils/abstract/common.d.ts +19 -4
- package/utils/abstract/resize.d.ts +2 -1
- package/utils/dnd/common.d.ts +7 -0
- package/utils/dnd/detector.d.ts +31 -0
- package/utils/dnd/draw.d.ts +9 -0
- package/utils/index.d.ts +5 -5
- package/utils/mind.d.ts +3 -22
- package/utils/node/adjust-node.d.ts +5 -0
- package/utils/{node.d.ts → node/common.d.ts} +1 -1
- package/utils/node/create-node.d.ts +14 -0
- package/utils/node/index.d.ts +3 -0
- package/utils/point-placement.d.ts +8 -1
- package/utils/position/emoji.d.ts +7 -0
- package/utils/position/index.d.ts +3 -0
- package/utils/position/node.d.ts +12 -0
- package/utils/position/topic.d.ts +16 -0
- package/utils/space/emoji.d.ts +7 -0
- package/{layout-option.d.ts → utils/space/layout-options.d.ts} +1 -1
- package/utils/{node-space.d.ts → space/node-space.d.ts} +4 -4
- package/draw/link.d.ts +0 -3
- package/draw/richtext.d.ts +0 -15
- package/draw/shape.d.ts +0 -3
- package/esm2020/draw/link.mjs +0 -160
- package/esm2020/draw/richtext.mjs +0 -39
- package/esm2020/draw/shape.mjs +0 -18
- package/esm2020/drawer/base/base.mjs +0 -17
- package/esm2020/interfaces/abstract.mjs +0 -12
- package/esm2020/layout-option.mjs +0 -72
- package/esm2020/plugins/emoji/emoji-base.component.mjs +0 -33
- package/esm2020/plugins/emoji/emoji.drawer.mjs +0 -72
- package/esm2020/plugins/emoji/emoji.mjs +0 -47
- package/esm2020/plugins/emoji/index.mjs +0 -3
- package/esm2020/plugins/with-abstract.mjs +0 -106
- package/esm2020/plugins/with-dnd.mjs +0 -179
- package/esm2020/plugins/with-extend-mind.mjs +0 -11
- package/esm2020/utils/direction-corrector.mjs +0 -54
- package/esm2020/utils/direction-detector.mjs +0 -56
- package/esm2020/utils/dnd.mjs +0 -122
- package/esm2020/utils/draw-placeholder.mjs +0 -313
- package/esm2020/utils/drop-target-corrector.mjs +0 -87
- package/esm2020/utils/graph.mjs +0 -24
- package/esm2020/utils/node-space.mjs +0 -77
- package/esm2020/utils/node.mjs +0 -6
- package/plugins/emoji/emoji.d.ts +0 -11
- package/utils/direction-corrector.d.ts +0 -4
- package/utils/direction-detector.d.ts +0 -9
- package/utils/dnd.d.ts +0 -16
- package/utils/draw-placeholder.d.ts +0 -42
- package/utils/drop-target-corrector.d.ts +0 -9
- package/utils/graph.d.ts +0 -5
- /package/plugins/{with-abstract.d.ts → with-abstract-resize.d.ts} +0 -0
- /package/plugins/{with-dnd.d.ts → with-node-dnd.d.ts} +0 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { MindElement, PlaitMind } from '../../interfaces/element';
|
|
2
|
+
import { PlaitBoard, PlaitElement, depthFirstRecursion, Path } from '@plait/core';
|
|
3
|
+
import { getRectangleByNode } from '../position/node';
|
|
4
|
+
import { MindQueries } from '../../queries';
|
|
5
|
+
import { getRootLayout, isMixedLayout } from '../layout';
|
|
6
|
+
import { MindLayoutType, getNonAbstractChildren, isHorizontalLogicLayout, isIndentedLayout, isStandardLayout, isTopLayout, isVerticalLogicLayout } from '@plait/layouts';
|
|
7
|
+
import { isBottomLayout, isRightLayout, isLeftLayout, AbstractNode } from '@plait/layouts';
|
|
8
|
+
import { isChildElement } from '../mind';
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* @param targetNode
|
|
12
|
+
* @param centerPoint
|
|
13
|
+
* @returns DetectResult[] | null
|
|
14
|
+
*/
|
|
15
|
+
export const directionCorrector = (board, node, detectResults) => {
|
|
16
|
+
if (!node.origin.isRoot && !AbstractNode.isAbstract(node.origin)) {
|
|
17
|
+
const parentLayout = MindQueries.getCorrectLayoutByElement(board, node?.parent.origin);
|
|
18
|
+
if (isStandardLayout(parentLayout)) {
|
|
19
|
+
const idx = node.parent.children.findIndex(x => x === node);
|
|
20
|
+
const isLeft = idx >= (node.parent.origin.rightNodeCount || 0);
|
|
21
|
+
return getAllowedDirection(detectResults, [isLeft ? 'right' : 'left']);
|
|
22
|
+
}
|
|
23
|
+
if (isLeftLayout(parentLayout)) {
|
|
24
|
+
return getAllowedDirection(detectResults, ['right']);
|
|
25
|
+
}
|
|
26
|
+
if (isRightLayout(parentLayout)) {
|
|
27
|
+
return getAllowedDirection(detectResults, ['left']);
|
|
28
|
+
}
|
|
29
|
+
if (parentLayout === MindLayoutType.upward) {
|
|
30
|
+
return getAllowedDirection(detectResults, ['bottom']);
|
|
31
|
+
}
|
|
32
|
+
if (parentLayout === MindLayoutType.downward) {
|
|
33
|
+
return getAllowedDirection(detectResults, ['top']);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
const layout = MindQueries.getCorrectLayoutByElement(board, node?.origin);
|
|
38
|
+
if (isStandardLayout(layout)) {
|
|
39
|
+
return getAllowedDirection(detectResults, ['top', 'bottom']);
|
|
40
|
+
}
|
|
41
|
+
if (layout === MindLayoutType.upward) {
|
|
42
|
+
return getAllowedDirection(detectResults, ['left', 'right', 'bottom']);
|
|
43
|
+
}
|
|
44
|
+
if (layout === MindLayoutType.downward) {
|
|
45
|
+
return getAllowedDirection(detectResults, ['left', 'right', 'top']);
|
|
46
|
+
}
|
|
47
|
+
if (isLeftLayout(layout)) {
|
|
48
|
+
return getAllowedDirection(detectResults, ['right', 'top', 'bottom']);
|
|
49
|
+
}
|
|
50
|
+
if (isRightLayout(layout)) {
|
|
51
|
+
return getAllowedDirection(detectResults, ['left', 'top', 'bottom']);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
};
|
|
56
|
+
export const getAllowedDirection = (detectResults, illegalDirections) => {
|
|
57
|
+
const directions = detectResults;
|
|
58
|
+
illegalDirections.forEach(item => {
|
|
59
|
+
const bottomDirectionIndex = directions.findIndex(direction => direction === item);
|
|
60
|
+
if (bottomDirectionIndex !== -1) {
|
|
61
|
+
directions.splice(bottomDirectionIndex, 1);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return directions.length ? directions : null;
|
|
65
|
+
};
|
|
66
|
+
export const detectDropTarget = (board, detectPoint, dropTarget, activeElements) => {
|
|
67
|
+
let detectResult = null;
|
|
68
|
+
depthFirstRecursion(board, element => {
|
|
69
|
+
if (!MindElement.isMindElement(board, element) || detectResult) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const node = MindElement.getNode(element);
|
|
73
|
+
const directions = directionDetector(node, detectPoint);
|
|
74
|
+
if (directions) {
|
|
75
|
+
detectResult = directionCorrector(board, node, directions);
|
|
76
|
+
}
|
|
77
|
+
dropTarget = null;
|
|
78
|
+
const isValid = activeElements.every(element => isValidTarget(element, node.origin));
|
|
79
|
+
if (detectResult && isValid) {
|
|
80
|
+
dropTarget = { target: node.origin, detectResult: detectResult[0] };
|
|
81
|
+
}
|
|
82
|
+
}, node => {
|
|
83
|
+
if (PlaitBoard.isBoard(node) || board.isRecursion(node)) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return dropTarget;
|
|
91
|
+
};
|
|
92
|
+
export const directionDetector = (targetNode, centerPoint) => {
|
|
93
|
+
const { x, y, width, height } = getRectangleByNode(targetNode);
|
|
94
|
+
const yCenter = y + height / 2;
|
|
95
|
+
const xCenter = x + width / 2;
|
|
96
|
+
const top = targetNode.y;
|
|
97
|
+
const bottom = targetNode.y + targetNode.height;
|
|
98
|
+
const left = targetNode.x;
|
|
99
|
+
const right = targetNode.x + targetNode.width;
|
|
100
|
+
const direction = [];
|
|
101
|
+
// x 轴
|
|
102
|
+
if (centerPoint[1] > y && centerPoint[1] < y + height) {
|
|
103
|
+
if (centerPoint[0] > left && centerPoint[0] < xCenter) {
|
|
104
|
+
direction.push('left');
|
|
105
|
+
}
|
|
106
|
+
if (centerPoint[0] > xCenter && centerPoint[0] < right) {
|
|
107
|
+
direction.push('right');
|
|
108
|
+
}
|
|
109
|
+
// 重合区域,返回两个方向
|
|
110
|
+
if ((centerPoint[0] > x && centerPoint[0] < xCenter) || (centerPoint[0] > xCenter && centerPoint[0] < x + width)) {
|
|
111
|
+
if (centerPoint[1] < yCenter) {
|
|
112
|
+
direction.push('top');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
direction.push('bottom');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return direction.length ? direction : null;
|
|
119
|
+
}
|
|
120
|
+
// y 轴
|
|
121
|
+
if (centerPoint[0] > x && centerPoint[0] < x + width) {
|
|
122
|
+
if (centerPoint[1] > top && centerPoint[1] < yCenter) {
|
|
123
|
+
direction.push('top');
|
|
124
|
+
}
|
|
125
|
+
if (centerPoint[1] > yCenter && centerPoint[1] < bottom) {
|
|
126
|
+
direction.push('bottom');
|
|
127
|
+
}
|
|
128
|
+
if ((centerPoint[1] > y && centerPoint[1] < y + height) || (centerPoint[1] > yCenter && centerPoint[1] < y + height)) {
|
|
129
|
+
if (centerPoint[0] < xCenter) {
|
|
130
|
+
direction.push('left');
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
direction.push('right');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return direction.length ? direction : null;
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
};
|
|
140
|
+
/* 根据布局调整 target 以及 direction */
|
|
141
|
+
export const readjustmentDropTarget = (board, dropTarget) => {
|
|
142
|
+
const { target, detectResult } = dropTarget;
|
|
143
|
+
const newDropTarget = { target, detectResult };
|
|
144
|
+
const targetComponent = PlaitElement.getComponent(target);
|
|
145
|
+
if (targetComponent.node.children.length > 0 && dropTarget.detectResult) {
|
|
146
|
+
const layout = MindQueries.getCorrectLayoutByElement(board, targetComponent.node.origin);
|
|
147
|
+
const parentLayout = MindQueries.getCorrectLayoutByElement(board, targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin);
|
|
148
|
+
const children = getNonAbstractChildren(targetComponent.node);
|
|
149
|
+
if (['right', 'left'].includes(dropTarget.detectResult)) {
|
|
150
|
+
if (!isMixedLayout(parentLayout, layout)) {
|
|
151
|
+
if (targetComponent.node.origin.isRoot) {
|
|
152
|
+
const layout = MindQueries.getCorrectLayoutByElement(board, targetComponent.node.origin);
|
|
153
|
+
// 标准布局,根节点
|
|
154
|
+
if (isStandardLayout(layout)) {
|
|
155
|
+
const rightNodeCount = targetComponent.node.origin.rightNodeCount;
|
|
156
|
+
if (detectResult === 'left') {
|
|
157
|
+
// 作为左的第一个节点
|
|
158
|
+
if (targetComponent.node.children.length === rightNodeCount) {
|
|
159
|
+
return newDropTarget;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// 作为右的第一个节点或最后一个节点
|
|
164
|
+
if (rightNodeCount === 0) {
|
|
165
|
+
newDropTarget.target = target;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
newDropTarget.target = targetComponent.node.children[rightNodeCount - 1].origin;
|
|
169
|
+
newDropTarget.detectResult = 'bottom';
|
|
170
|
+
}
|
|
171
|
+
return newDropTarget;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// 缩进布局探测到第一个子节点
|
|
176
|
+
if (isIndentedLayout(parentLayout)) {
|
|
177
|
+
newDropTarget.target = targetComponent.node.children[0].origin;
|
|
178
|
+
newDropTarget.detectResult = isTopLayout(parentLayout) ? 'bottom' : 'top';
|
|
179
|
+
return newDropTarget;
|
|
180
|
+
}
|
|
181
|
+
// 上下布局的根节点只可以探测到上或者下,子节点的左右探测不处理,跳过。
|
|
182
|
+
if (isVerticalLogicLayout(parentLayout)) {
|
|
183
|
+
return newDropTarget;
|
|
184
|
+
}
|
|
185
|
+
// 剩下是水平布局的默认情况:插入最后一个子节点的下方
|
|
186
|
+
const lastChildNodeIndex = children.length - 1;
|
|
187
|
+
newDropTarget.target = targetComponent.node.children[lastChildNodeIndex].origin;
|
|
188
|
+
newDropTarget.detectResult = 'bottom';
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
// 处理左右布局下的混合布局
|
|
192
|
+
if ([MindLayoutType.left, MindLayoutType.right].includes(parentLayout)) {
|
|
193
|
+
const layout = MindQueries.getCorrectLayoutByElement(board, targetComponent.node.origin);
|
|
194
|
+
if (isIndentedLayout(layout)) {
|
|
195
|
+
newDropTarget.target = targetComponent.node.children[0].origin;
|
|
196
|
+
newDropTarget.detectResult = isTopLayout(layout) ? 'bottom' : 'top';
|
|
197
|
+
return newDropTarget;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (['top', 'bottom'].includes(dropTarget.detectResult)) {
|
|
203
|
+
// 缩进布局移动至第一个节点
|
|
204
|
+
if (targetComponent.node.origin.isRoot && isIndentedLayout(layout)) {
|
|
205
|
+
newDropTarget.target = targetComponent.node.children[0].origin;
|
|
206
|
+
newDropTarget.detectResult = isTopLayout(layout) ? 'bottom' : 'top';
|
|
207
|
+
return newDropTarget;
|
|
208
|
+
}
|
|
209
|
+
// 上下布局,插到右边
|
|
210
|
+
const parentLayout = MindQueries.getCorrectLayoutByElement(board, targetComponent.node.origin.isRoot ? targetComponent.node.origin : targetComponent.node.parent.origin);
|
|
211
|
+
if (isVerticalLogicLayout(parentLayout)) {
|
|
212
|
+
const lastChildNodeIndex = children.length - 1;
|
|
213
|
+
newDropTarget.target = targetComponent.node.children[lastChildNodeIndex].origin;
|
|
214
|
+
newDropTarget.detectResult = 'right';
|
|
215
|
+
return newDropTarget;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return newDropTarget;
|
|
219
|
+
}
|
|
220
|
+
return dropTarget;
|
|
221
|
+
};
|
|
222
|
+
export const isValidTarget = (origin, target) => {
|
|
223
|
+
return origin !== target && !isChildElement(origin, target);
|
|
224
|
+
};
|
|
225
|
+
export const getPathByDropTarget = (board, dropTarget) => {
|
|
226
|
+
let targetPath = PlaitBoard.findPath(board, dropTarget?.target);
|
|
227
|
+
const layout = PlaitMind.isMind(dropTarget?.target)
|
|
228
|
+
? getRootLayout(dropTarget?.target)
|
|
229
|
+
: MindQueries.getCorrectLayoutByElement(board, MindElement.getParent(dropTarget?.target));
|
|
230
|
+
const children = getNonAbstractChildren(dropTarget.target);
|
|
231
|
+
// 上下布局:左右是兄弟节点,上下是子节点
|
|
232
|
+
if (isVerticalLogicLayout(layout)) {
|
|
233
|
+
if (dropTarget.detectResult === 'top' || dropTarget.detectResult === 'bottom') {
|
|
234
|
+
targetPath.push(children.length);
|
|
235
|
+
}
|
|
236
|
+
// 如果是左,位置不变,右则插入到下一个兄弟节点
|
|
237
|
+
if (dropTarget.detectResult === 'right') {
|
|
238
|
+
targetPath = Path.next(targetPath);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// 水平布局/标准布局:上下是兄弟节点,左右是子节点
|
|
242
|
+
if (isHorizontalLogicLayout(layout)) {
|
|
243
|
+
if (dropTarget.detectResult === 'right' || dropTarget.detectResult === 'left') {
|
|
244
|
+
targetPath.push(children.length);
|
|
245
|
+
}
|
|
246
|
+
// 如果是上,位置不变,下插入到下一个兄弟节点
|
|
247
|
+
if (dropTarget.detectResult === 'bottom') {
|
|
248
|
+
targetPath = Path.next(targetPath);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// 缩进布局:上下是兄弟节点,左右是子节点,但上(左上/右上),探测到上是子节点,下则位置不变,反之同理。
|
|
252
|
+
if (isIndentedLayout(layout)) {
|
|
253
|
+
if (isTopLayout(layout) && dropTarget.detectResult === 'top') {
|
|
254
|
+
targetPath = Path.next(targetPath);
|
|
255
|
+
}
|
|
256
|
+
if (isBottomLayout(layout) && dropTarget.detectResult === 'bottom') {
|
|
257
|
+
targetPath = Path.next(targetPath);
|
|
258
|
+
}
|
|
259
|
+
if (isLeftLayout(layout) && dropTarget.detectResult === 'left') {
|
|
260
|
+
targetPath.push(children.length);
|
|
261
|
+
}
|
|
262
|
+
if (isRightLayout(layout) && dropTarget.detectResult === 'right') {
|
|
263
|
+
targetPath.push(children.length);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return targetPath;
|
|
267
|
+
};
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9kbmQvZGV0ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBUyxtQkFBbUIsRUFBRSxJQUFJLEVBQXlDLE1BQU0sYUFBYSxDQUFDO0FBRWhJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekQsT0FBTyxFQUNILGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUN4QixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXpDOzs7OztHQUtHO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLElBQWMsRUFBRSxhQUE2QixFQUF5QixFQUFFO0lBQzFILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzlELE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFx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Q0FBQztTQUNwQztLQUNKO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWluZEVsZW1lbnQsIFBsYWl0TWluZCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBvaW50LCBkZXB0aEZpcnN0UmVjdXJzaW9uLCBQYXRoLCBCb2FyZFRyYW5zZm9ybXMsIEVMRU1FTlRfVE9fQ09NUE9ORU5UIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgRGV0ZWN0UmVzdWx0LCBNaW5kTm9kZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuLi9wb3NpdGlvbi9ub2RlJztcbmltcG9ydCB7IE1pbmRRdWVyaWVzIH0gZnJvbSAnLi4vLi4vcXVlcmllcyc7XG5pbXBvcnQgeyBnZXRSb290TGF5b3V0LCBpc01peGVkTGF5b3V0IH0gZnJvbSAnLi4vbGF5b3V0JztcbmltcG9ydCB7XG4gICAgTWluZExheW91dFR5cGUsXG4gICAgZ2V0Tm9uQWJzdHJhY3RDaGlsZHJlbixcbiAgICBpc0hvcml6b250YWxMb2dpY0xheW91dCxcbiAgICBpc0luZGVudGVkTGF5b3V0LFxuICAgIGlzU3RhbmRhcmRMYXlvdXQsXG4gICAgaXNUb3BMYXlvdXQsXG4gICAgaXNWZXJ0aWNhbExvZ2ljTGF5b3V0XG59IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNCb3R0b21MYXlvdXQsIGlzUmlnaHRMYXlvdXQsIGlzTGVmdExheW91dCwgQWJzdHJhY3ROb2RlIH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgaXNDaGlsZEVsZW1lbnQgfSBmcm9tICcuLi9taW5kJztcblxuLyoqXG4gKlxuICogQHBhcmFtIHRhcmdldE5vZGVcbiAqIEBwYXJhbSBjZW50ZXJQb2ludFxuICogQHJldHVybnMgRGV0ZWN0UmVzdWx0W10gfCBudWxsXG4gKi9cblxuZXhwb3J0IGNvbnN0IGRpcmVjdGlvbkNvcnJlY3RvciA9IChib2FyZDogUGxhaXRCb2FyZCwgbm9kZTogTWluZE5vZGUsIGRldGVjdFJlc3VsdHM6IERldGVjdFJlc3VsdFtdKTogRGV0ZWN0UmVzdWx0W10gfCBudWxsID0+IHtcbiAgICBpZiAoIW5vZGUub3JpZ2luLmlzUm9vdCAmJiAhQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3Qobm9kZS5vcmlnaW4pKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudExheW91dCA9IE1pbmRRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQoYm9hcmQsIG5vZGU/LnBhcmVudC5vcmlnaW4gYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBub2RlLnBhcmVudC5jaGlsZHJlbi5maW5kSW5kZXgoeCA9PiB4ID09PSBub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzTGVmdCA9IGlkeCA+PSAobm9kZS5wYXJlbnQub3JpZ2luLnJpZ2h0Tm9kZUNvdW50IHx8IDApO1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgW2lzTGVmdCA/ICdyaWdodCcgOiAnbGVmdCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0xlZnRMYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydyaWdodCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1JpZ2h0TGF5b3V0KHBhcmVudExheW91dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnbGVmdCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnRMYXlvdXQgPT09IE1pbmRMYXlvdXRUeXBlLnVwd2FyZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydib3R0b20nXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyZW50TGF5b3V0ID09PSBNaW5kTGF5b3V0VHlwZS5kb3dud2FyZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWyd0b3AnXSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KGJvYXJkLCBub2RlPy5vcmlnaW4gYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWxsb3dlZERpcmVjdGlvbihkZXRlY3RSZXN1bHRzLCBbJ3RvcCcsICdib3R0b20nXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5b3V0ID09PSBNaW5kTGF5b3V0VHlwZS51cHdhcmQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnbGVmdCcsICdyaWdodCcsICdib3R0b20nXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5b3V0ID09PSBNaW5kTGF5b3V0VHlwZS5kb3dud2FyZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydsZWZ0JywgJ3JpZ2h0JywgJ3RvcCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0xlZnRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydyaWdodCcsICd0b3AnLCAnYm90dG9tJ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUmlnaHRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydsZWZ0JywgJ3RvcCcsICdib3R0b20nXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxvd2VkRGlyZWN0aW9uID0gKGRldGVjdFJlc3VsdHM6IERldGVjdFJlc3VsdFtdLCBpbGxlZ2FsRGlyZWN0aW9uczogRGV0ZWN0UmVzdWx0W10pOiBEZXRlY3RSZXN1bHRbXSB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGRpcmVjdGlvbnMgPSBkZXRlY3RSZXN1bHRzO1xuICAgIGlsbGVnYWxEaXJlY3Rpb25zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGJvdHRvbURpcmVjdGlvbkluZGV4ID0gZGlyZWN0aW9ucy5maW5kSW5kZXgoZGlyZWN0aW9uID0+IGRpcmVjdGlvbiA9PT0gaXRlbSk7XG4gICAgICAgIGlmIChib3R0b21EaXJlY3Rpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbnMuc3BsaWNlKGJvdHRvbURpcmVjdGlvbkluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkaXJlY3Rpb25zLmxlbmd0aCA/IGRpcmVjdGlvbnMgOiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdERyb3BUYXJnZXQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgZGV0ZWN0UG9pbnQ6IFBvaW50LFxuICAgIGRyb3BUYXJnZXQ6IHsgdGFyZ2V0OiBNaW5kRWxlbWVudDsgZGV0ZWN0UmVzdWx0OiBEZXRlY3RSZXN1bHQgfSB8IG51bGwsXG4gICAgYWN0aXZlRWxlbWVudHM6IE1pbmRFbGVtZW50W11cbikgPT4ge1xuICAgIGxldCBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdFtdIHwgbnVsbCA9IG51bGw7XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbihcbiAgICAgICAgKGJvYXJkIGFzIHVua25vd24pIGFzIE1pbmRFbGVtZW50LFxuICAgICAgICBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGlmICghTWluZEVsZW1lbnQuaXNNaW5kRWxlbWVudChib2FyZCwgZWxlbWVudCkgfHwgZGV0ZWN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb25zID0gZGlyZWN0aW9uRGV0ZWN0b3Iobm9kZSwgZGV0ZWN0UG9pbnQpO1xuICAgICAgICAgICAgaWYgKGRpcmVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBkZXRlY3RSZXN1bHQgPSBkaXJlY3Rpb25Db3JyZWN0b3IoYm9hcmQsIG5vZGUsIGRpcmVjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZHJvcFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gYWN0aXZlRWxlbWVudHMuZXZlcnkoZWxlbWVudCA9PiBpc1ZhbGlkVGFyZ2V0KGVsZW1lbnQsIG5vZGUub3JpZ2luKSk7XG4gICAgICAgICAgICBpZiAoZGV0ZWN0UmVzdWx0ICYmIGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBkcm9wVGFyZ2V0ID0geyB0YXJnZXQ6IG5vZGUub3JpZ2luLCBkZXRlY3RSZXN1bHQ6IGRldGVjdFJlc3VsdFswXSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgfHwgYm9hcmQuaXNSZWN1cnNpb24obm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gZHJvcFRhcmdldDtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXJlY3Rpb25EZXRlY3RvciA9ICh0YXJnZXROb2RlOiBNaW5kTm9kZSwgY2VudGVyUG9pbnQ6IFBvaW50KTogRGV0ZWN0UmVzdWx0W10gfCBudWxsID0+IHtcbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGdldFJlY3RhbmdsZUJ5Tm9kZSh0YXJnZXROb2RlKTtcbiAgICBjb25zdCB5Q2VudGVyID0geSArIGhlaWdodCAvIDI7XG4gICAgY29uc3QgeENlbnRlciA9IHggKyB3aWR0aCAvIDI7XG5cbiAgICBjb25zdCB0b3AgPSB0YXJnZXROb2RlLnk7XG4gICAgY29uc3QgYm90dG9tID0gdGFyZ2V0Tm9kZS55ICsgdGFyZ2V0Tm9kZS5oZWlnaHQ7XG4gICAgY29uc3QgbGVmdCA9IHRhcmdldE5vZGUueDtcbiAgICBjb25zdCByaWdodCA9IHRhcmdldE5vZGUueCArIHRhcmdldE5vZGUud2lkdGg7XG4gICAgY29uc3QgZGlyZWN0aW9uOiBEZXRlY3RSZXN1bHRbXSA9IFtdO1xuXG4gICAgLy8geCDovbRcbiAgICBpZiAoY2VudGVyUG9pbnRbMV0gPiB5ICYmIGNlbnRlclBvaW50WzFdIDwgeSArIGhlaWdodCkge1xuICAgICAgICBpZiAoY2VudGVyUG9pbnRbMF0gPiBsZWZ0ICYmIGNlbnRlclBvaW50WzBdIDwgeENlbnRlcikge1xuICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ2xlZnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2VudGVyUG9pbnRbMF0gPiB4Q2VudGVyICYmIGNlbnRlclBvaW50WzBdIDwgcmlnaHQpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCdyaWdodCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIOmHjeWQiOWMuuWfn++8jOi/lOWbnuS4pOS4quaWueWQkVxuICAgICAgICBpZiAoKGNlbnRlclBvaW50WzBdID4geCAmJiBjZW50ZXJQb2ludFswXSA8IHhDZW50ZXIpIHx8IChjZW50ZXJQb2ludFswXSA+IHhDZW50ZXIgJiYgY2VudGVyUG9pbnRbMF0gPCB4ICsgd2lkdGgpKSB7XG4gICAgICAgICAgICBpZiAoY2VudGVyUG9pbnRbMV0gPCB5Q2VudGVyKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ3RvcCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24ucHVzaCgnYm90dG9tJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpcmVjdGlvbi5sZW5ndGggPyBkaXJlY3Rpb24gOiBudWxsO1xuICAgIH1cblxuICAgIC8vIHkg6L20XG4gICAgaWYgKGNlbnRlclBvaW50WzBdID4geCAmJiBjZW50ZXJQb2ludFswXSA8IHggKyB3aWR0aCkge1xuICAgICAgICBpZiAoY2VudGVyUG9pbnRbMV0gPiB0b3AgJiYgY2VudGVyUG9pbnRbMV0gPCB5Q2VudGVyKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24ucHVzaCgndG9wJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbnRlclBvaW50WzFdID4geUNlbnRlciAmJiBjZW50ZXJQb2ludFsxXSA8IGJvdHRvbSkge1xuICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ2JvdHRvbScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoY2VudGVyUG9pbnRbMV0gPiB5ICYmIGNlbnRlclBvaW50WzFdIDwgeSArIGhlaWdodCkgfHwgKGNlbnRlclBvaW50WzFdID4geUNlbnRlciAmJiBjZW50ZXJQb2ludFsxXSA8IHkgKyBoZWlnaHQpKSB7XG4gICAgICAgICAgICBpZiAoY2VudGVyUG9pbnRbMF0gPCB4Q2VudGVyKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ2xlZnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ3JpZ2h0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpcmVjdGlvbi5sZW5ndGggPyBkaXJlY3Rpb24gOiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufTtcblxuLyog5qC55o2u5biD5bGA6LCD5pW0IHRhcmdldCDku6Xlj4ogZGlyZWN0aW9uICovXG5leHBvcnQgY29uc3QgcmVhZGp1c3RtZW50RHJvcFRhcmdldCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBkcm9wVGFyZ2V0OiB7XG4gICAgICAgIHRhcmdldDogTWluZEVsZW1lbnQ7XG4gICAgICAgIGRldGVjdFJlc3VsdDogRGV0ZWN0UmVzdWx0O1xuICAgIH1cbik6IHsgdGFyZ2V0OiBNaW5kRWxlbWVudDsgZGV0ZWN0UmVzdWx0OiBEZXRlY3RSZXN1bHQgfSA9PiB7XG4gICAgY29uc3QgeyB0YXJnZXQsIGRldGVjdFJlc3VsdCB9ID0gZHJvcFRhcmdldDtcbiAgICBjb25zdCBuZXdEcm9wVGFyZ2V0ID0geyB0YXJnZXQsIGRldGVjdFJlc3VsdCB9O1xuICAgIGNvbnN0IHRhcmdldENvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQodGFyZ2V0KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICBpZiAodGFyZ2V0Q29tcG9uZW50Lm5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCkge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KGJvYXJkLCB0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4pO1xuICAgICAgICBjb25zdCBwYXJlbnRMYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KFxuICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICB0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4uaXNSb290ID8gdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luIDogdGFyZ2V0Q29tcG9uZW50Lm5vZGUucGFyZW50Lm9yaWdpblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGdldE5vbkFic3RyYWN0Q2hpbGRyZW4odGFyZ2V0Q29tcG9uZW50Lm5vZGUpO1xuICAgICAgICBpZiAoWydyaWdodCcsICdsZWZ0J10uaW5jbHVkZXMoZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQpKSB7XG4gICAgICAgICAgICBpZiAoIWlzTWl4ZWRMYXlvdXQocGFyZW50TGF5b3V0LCBsYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChib2FyZCwgdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgLy8g5qCH5YeG5biD5bGA77yM5qC56IqC54K5XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1N0YW5kYXJkTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0Tm9kZUNvdW50ID0gdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luLnJpZ2h0Tm9kZUNvdW50IGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXRlY3RSZXN1bHQgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS9nOS4uuW3pueahOesrOS4gOS4quiKgueCuVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IHJpZ2h0Tm9kZUNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdEcm9wVGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L2c5Li65Y+z55qE56ys5LiA5Liq6IqC54K55oiW5pyA5ZCO5LiA5Liq6IqC54K5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0Tm9kZUNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQudGFyZ2V0ID0gdGFyZ2V0Q29tcG9uZW50Lm5vZGUuY2hpbGRyZW5bcmlnaHROb2RlQ291bnQgLSAxXS5vcmlnaW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID0gJ2JvdHRvbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdEcm9wVGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g57yp6L+b5biD5bGA5o6i5rWL5Yiw56ys5LiA5Liq5a2Q6IqC54K5XG4gICAgICAgICAgICAgICAgaWYgKGlzSW5kZW50ZWRMYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LnRhcmdldCA9IHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuWzBdLm9yaWdpbjtcbiAgICAgICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPSBpc1RvcExheW91dChwYXJlbnRMYXlvdXQpID8gJ2JvdHRvbScgOiAndG9wJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Ryb3BUYXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIOS4iuS4i+W4g+WxgOeahOagueiKgueCueWPquWPr+S7peaOoua1i+WIsOS4iuaIluiAheS4i++8jOWtkOiKgueCueeahOW3puWPs+aOoua1i+S4jeWkhOeQhu+8jOi3s+i/h+OAglxuICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsTG9naWNMYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3RHJvcFRhcmdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5Ymp5LiL5piv5rC05bmz5biD5bGA55qE6buY6K6k5oOF5Ya177ya5o+S5YWl5pyA5ZCO5LiA5Liq5a2Q6IqC54K555qE5LiL5pa5XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZUluZGV4ID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LnRhcmdldCA9IHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuW2xhc3RDaGlsZE5vZGVJbmRleF0ub3JpZ2luO1xuICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID0gJ2JvdHRvbSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIOWkhOeQhuW3puWPs+W4g+WxgOS4i+eahOa3t+WQiOW4g+WxgFxuICAgICAgICAgICAgICAgIGlmIChbTWluZExheW91dFR5cGUubGVmdCwgTWluZExheW91dFR5cGUucmlnaHRdLmluY2x1ZGVzKHBhcmVudExheW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChib2FyZCwgdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5kZW50ZWRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC50YXJnZXQgPSB0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlblswXS5vcmlnaW47XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9IGlzVG9wTGF5b3V0KGxheW91dCkgPyAnYm90dG9tJyA6ICd0b3AnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Ryb3BUYXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFsndG9wJywgJ2JvdHRvbSddLmluY2x1ZGVzKGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0KSkge1xuICAgICAgICAgICAgLy8g57yp6L+b5biD5bGA56e75Yqo6Iez56ys5LiA5Liq6IqC54K5XG4gICAgICAgICAgICBpZiAodGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luLmlzUm9vdCAmJiBpc0luZGVudGVkTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LnRhcmdldCA9IHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuWzBdLm9yaWdpbjtcbiAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9IGlzVG9wTGF5b3V0KGxheW91dCkgPyAnYm90dG9tJyA6ICd0b3AnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdEcm9wVGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g5LiK5LiL5biD5bGA77yM5o+S5Yiw5Y+z6L65XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRMYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KFxuICAgICAgICAgICAgICAgIGJvYXJkLFxuICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5pc1Jvb3QgPyB0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4gOiB0YXJnZXRDb21wb25lbnQubm9kZS5wYXJlbnQub3JpZ2luXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGlzVmVydGljYWxMb2dpY0xheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZUluZGV4ID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LnRhcmdldCA9IHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuW2xhc3RDaGlsZE5vZGVJbmRleF0ub3JpZ2luO1xuICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID0gJ3JpZ2h0JztcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RHJvcFRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3RHJvcFRhcmdldDtcbiAgICB9XG4gICAgcmV0dXJuIGRyb3BUYXJnZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFRhcmdldCA9IChvcmlnaW46IE1pbmRFbGVtZW50LCB0YXJnZXQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIG9yaWdpbiAhPT0gdGFyZ2V0ICYmICFpc0NoaWxkRWxlbWVudChvcmlnaW4sIHRhcmdldCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGF0aEJ5RHJvcFRhcmdldCA9IChib2FyZDogUGxhaXRCb2FyZCwgZHJvcFRhcmdldDogeyB0YXJnZXQ6IE1pbmRFbGVtZW50OyBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdCB9KSA9PiB7XG4gICAgbGV0IHRhcmdldFBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBkcm9wVGFyZ2V0Py50YXJnZXQpO1xuICAgIGNvbnN0IGxheW91dCA9IFBsYWl0TWluZC5pc01pbmQoZHJvcFRhcmdldD8udGFyZ2V0KVxuICAgICAgICA/IGdldFJvb3RMYXlvdXQoZHJvcFRhcmdldD8udGFyZ2V0KVxuICAgICAgICA6IE1pbmRRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQoYm9hcmQsIE1pbmRFbGVtZW50LmdldFBhcmVudChkcm9wVGFyZ2V0Py50YXJnZXQpKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGdldE5vbkFic3RyYWN0Q2hpbGRyZW4oZHJvcFRhcmdldC50YXJnZXQpO1xuICAgIC8vIOS4iuS4i+W4g+WxgO+8muW3puWPs+aYr+WFhOW8n+iKgueCue+8jOS4iuS4i+aYr+WtkOiKgueCuVxuICAgIGlmIChpc1ZlcnRpY2FsTG9naWNMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICBpZiAoZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICd0b3AnIHx8IGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8g5aaC5p6c5piv5bem77yM5L2N572u5LiN5Y+Y77yM5Y+z5YiZ5o+S5YWl5Yiw5LiL5LiA5Liq5YWE5byf6IqC54K5XG4gICAgICAgIGlmIChkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IFBhdGgubmV4dCh0YXJnZXRQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyDmsLTlubPluIPlsYAv5qCH5YeG5biD5bGA77ya5LiK5LiL5piv5YWE5byf6IqC54K577yM5bem5Y+z5piv5a2Q6IqC54K5XG4gICAgaWYgKGlzSG9yaXpvbnRhbExvZ2ljTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgaWYgKGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAncmlnaHQnIHx8IGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChjaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIOWmguaenOaYr+S4iu+8jOS9jee9ruS4jeWPmO+8jOS4i+aPkuWFpeWIsOS4i+S4gOS4quWFhOW8n+iKgueCuVxuICAgICAgICBpZiAoZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoID0gUGF0aC5uZXh0KHRhcmdldFBhdGgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g57yp6L+b5biD5bGA77ya5LiK5LiL5piv5YWE5byf6IqC54K577yM5bem5Y+z5piv5a2Q6IqC54K577yM5L2G5LiK77yI5bem5LiKL+WPs+S4iu+8ie+8jOaOoua1i+WIsOS4iuaYr+WtkOiKgueCue+8jOS4i+WImeS9jee9ruS4jeWPmO+8jOWPjeS5i+WQjOeQhuOAglxuICAgIGlmIChpc0luZGVudGVkTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgaWYgKGlzVG9wTGF5b3V0KGxheW91dCkgJiYgZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoID0gUGF0aC5uZXh0KHRhcmdldFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0JvdHRvbUxheW91dChsYXlvdXQpICYmIGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IFBhdGgubmV4dCh0YXJnZXRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNMZWZ0TGF5b3V0KGxheW91dCkgJiYgZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmlnaHRMYXlvdXQobGF5b3V0KSAmJiBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldFBhdGg7XG59O1xuIl19
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { drawRoundRectangleByNode } from '../../draw/node';
|
|
2
|
+
import { updateForeignObject } from '@plait/richtext';
|
|
3
|
+
import { BASE, PRIMARY_COLOR, STROKE_WIDTH } from '../../constants';
|
|
4
|
+
import { MindElement, PlaitMind } from '../../interfaces';
|
|
5
|
+
import { getRectangleByNode } from '../position/node';
|
|
6
|
+
import { PlaitBoard, drawRoundRectangle, createG, Path, PlaitNode } from '@plait/core';
|
|
7
|
+
import { MindQueries } from '../../queries';
|
|
8
|
+
import { getNonAbstractChildren, isHorizontalLayout, isIndentedLayout, isStandardLayout, isTopLayout } from '@plait/layouts';
|
|
9
|
+
import { drawIndentedLink } from '../../draw/indented-link';
|
|
10
|
+
import { getTopicRectangleByNode } from '../position/topic';
|
|
11
|
+
import { drawLogicLink } from '../../draw/link/logic-link';
|
|
12
|
+
import { HorizontalPlacement, VerticalPlacement } from '../../interfaces/types';
|
|
13
|
+
import { getLayoutDirection, getPointByPlacement, moveXOfPoint, moveYOfPoint, transformPlacement } from '../point-placement';
|
|
14
|
+
import { getRootLayout } from '../layout';
|
|
15
|
+
export const drawFakeDragNode = (board, activeComponent, offsetX, offsetY) => {
|
|
16
|
+
const dragFakeNodeG = createG();
|
|
17
|
+
dragFakeNodeG.classList.add('dragging', 'fake-node', 'plait-board-attached');
|
|
18
|
+
const fakeDraggingNode = {
|
|
19
|
+
...activeComponent.node,
|
|
20
|
+
children: [],
|
|
21
|
+
x: activeComponent.node.x + offsetX,
|
|
22
|
+
y: activeComponent.node.y + offsetY
|
|
23
|
+
};
|
|
24
|
+
const textRectangle = getTopicRectangleByNode(board, activeComponent.node);
|
|
25
|
+
const fakeNodeG = drawRoundRectangleByNode(board, fakeDraggingNode);
|
|
26
|
+
const richtextG = activeComponent.richtextG?.cloneNode(true);
|
|
27
|
+
updateForeignObject(richtextG, textRectangle.width + BASE * 10, textRectangle.height, textRectangle.x + offsetX, textRectangle.y + offsetY);
|
|
28
|
+
dragFakeNodeG?.append(fakeNodeG);
|
|
29
|
+
dragFakeNodeG?.append(richtextG);
|
|
30
|
+
return dragFakeNodeG;
|
|
31
|
+
};
|
|
32
|
+
export const drawFakeDropNodeByPath = (board, target, path) => {
|
|
33
|
+
const fakeDropNodeG = createG();
|
|
34
|
+
const parent = PlaitNode.get(board, Path.parent(path));
|
|
35
|
+
const layout = MindQueries.getLayoutByElement(parent);
|
|
36
|
+
const isHorizontal = isHorizontalLayout(layout);
|
|
37
|
+
const { hasNextNode, hasPreviousNode } = getPreviousAndNextByPath(parent, target, path);
|
|
38
|
+
const width = 30;
|
|
39
|
+
const height = 12;
|
|
40
|
+
let fakeNode, centerPoint, basicNode, linkDirection;
|
|
41
|
+
if (!hasPreviousNode && !hasNextNode) {
|
|
42
|
+
const parentNode = MindElement.getNode(parent);
|
|
43
|
+
const parentRect = getRectangleByNode(parentNode);
|
|
44
|
+
linkDirection = getLayoutDirection(parentNode, isHorizontal);
|
|
45
|
+
basicNode = parentNode;
|
|
46
|
+
const placement = [HorizontalPlacement.right, VerticalPlacement.middle];
|
|
47
|
+
transformPlacement(placement, linkDirection);
|
|
48
|
+
const parentCenterPoint = getPointByPlacement(parentRect, placement);
|
|
49
|
+
if (isIndentedLayout(layout)) {
|
|
50
|
+
const placement = [
|
|
51
|
+
HorizontalPlacement.center,
|
|
52
|
+
isTopLayout(layout) ? VerticalPlacement.top : VerticalPlacement.bottom
|
|
53
|
+
];
|
|
54
|
+
const parentCenterPoint = getPointByPlacement(parentRect, placement);
|
|
55
|
+
centerPoint = moveXOfPoint(parentCenterPoint, height, linkDirection);
|
|
56
|
+
centerPoint[1] = isTopLayout(layout) ? centerPoint[1] - height : centerPoint[1] + height;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
centerPoint = moveXOfPoint(parentCenterPoint, width, linkDirection);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else if (!hasPreviousNode && hasNextNode) {
|
|
63
|
+
const nextElement = PlaitNode.get(board, path);
|
|
64
|
+
basicNode = MindElement.getNode(nextElement);
|
|
65
|
+
const nextRect = getRectangleByNode(basicNode);
|
|
66
|
+
linkDirection = getLayoutDirection(basicNode, isHorizontal);
|
|
67
|
+
const placement = [HorizontalPlacement.left, VerticalPlacement.top];
|
|
68
|
+
transformPlacement(placement, linkDirection);
|
|
69
|
+
let offset = -height;
|
|
70
|
+
if (MindElement.isIndentedLayout(parent)) {
|
|
71
|
+
offset = isTopLayout(layout) ? offset / 2 + basicNode.height - basicNode.vGap : 0;
|
|
72
|
+
}
|
|
73
|
+
centerPoint = getPointByPlacement(nextRect, placement);
|
|
74
|
+
centerPoint = moveYOfPoint(centerPoint, offset, linkDirection);
|
|
75
|
+
}
|
|
76
|
+
else if (hasPreviousNode && !hasNextNode) {
|
|
77
|
+
const previousElement = PlaitNode.get(board, Path.previous(path));
|
|
78
|
+
basicNode = MindElement.getNode(previousElement);
|
|
79
|
+
const previousRect = getRectangleByNode(basicNode);
|
|
80
|
+
linkDirection = getLayoutDirection(basicNode, isHorizontal);
|
|
81
|
+
const placement = [HorizontalPlacement.left, VerticalPlacement.bottom];
|
|
82
|
+
transformPlacement(placement, linkDirection);
|
|
83
|
+
let offset = height;
|
|
84
|
+
if (MindElement.isIndentedLayout(parent)) {
|
|
85
|
+
offset = isTopLayout(layout) ? -offset - (basicNode.height - basicNode.vGap) : offset;
|
|
86
|
+
}
|
|
87
|
+
centerPoint = getPointByPlacement(previousRect, placement);
|
|
88
|
+
centerPoint = moveYOfPoint(centerPoint, offset, linkDirection);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const previousElement = PlaitNode.get(board, Path.previous(path));
|
|
92
|
+
basicNode = MindElement.getNode(previousElement);
|
|
93
|
+
const previousRect = getRectangleByNode(basicNode);
|
|
94
|
+
const nextElement = PlaitNode.get(board, path);
|
|
95
|
+
const nextNode = MindElement.getNode(nextElement);
|
|
96
|
+
const nextRect = getRectangleByNode(nextNode);
|
|
97
|
+
const beginPlacement = [HorizontalPlacement.left, VerticalPlacement.bottom];
|
|
98
|
+
const endPlacement = [HorizontalPlacement.left, VerticalPlacement.top];
|
|
99
|
+
linkDirection = getLayoutDirection(basicNode, isHorizontal);
|
|
100
|
+
transformPlacement(beginPlacement, linkDirection);
|
|
101
|
+
transformPlacement(endPlacement, linkDirection);
|
|
102
|
+
const previousPoint = getPointByPlacement(previousRect, beginPlacement);
|
|
103
|
+
const nextPoint = getPointByPlacement(nextRect, endPlacement);
|
|
104
|
+
centerPoint = [(previousPoint[0] + nextPoint[0]) / 2, (previousPoint[1] + nextPoint[1]) / 2];
|
|
105
|
+
}
|
|
106
|
+
let cornerPoint = centerPoint, oppositePoint = centerPoint;
|
|
107
|
+
const offsetY = isHorizontal ? height : width;
|
|
108
|
+
const offsetX = isHorizontal ? width : height;
|
|
109
|
+
cornerPoint = moveYOfPoint(cornerPoint, -offsetY / 2, linkDirection);
|
|
110
|
+
oppositePoint = moveYOfPoint(oppositePoint, offsetY / 2, linkDirection);
|
|
111
|
+
oppositePoint = moveXOfPoint(oppositePoint, offsetX, linkDirection);
|
|
112
|
+
const x = Math.min(cornerPoint[0], oppositePoint[0]);
|
|
113
|
+
const y = Math.min(cornerPoint[1], oppositePoint[1]);
|
|
114
|
+
fakeNode = {
|
|
115
|
+
...basicNode,
|
|
116
|
+
x,
|
|
117
|
+
y,
|
|
118
|
+
width,
|
|
119
|
+
height,
|
|
120
|
+
hGap: MindElement.isIndentedLayout(parent) ? BASE * 4 + (basicNode.origin.strokeWidth || STROKE_WIDTH) : 0,
|
|
121
|
+
vGap: MindElement.isIndentedLayout(parent) ? BASE : 0
|
|
122
|
+
};
|
|
123
|
+
const fakeRectangleG = drawRoundRectangle(PlaitBoard.getRoughSVG(board), fakeNode.x, fakeNode.y, fakeNode.x + width, fakeNode.y + height, {
|
|
124
|
+
stroke: PRIMARY_COLOR,
|
|
125
|
+
strokeWidth: 2,
|
|
126
|
+
fill: PRIMARY_COLOR,
|
|
127
|
+
fillStyle: 'solid'
|
|
128
|
+
});
|
|
129
|
+
const link = MindElement.isIndentedLayout(parent)
|
|
130
|
+
? drawIndentedLink(board, MindElement.getNode(parent), fakeNode, PRIMARY_COLOR, false, STROKE_WIDTH)
|
|
131
|
+
: drawLogicLink(board, fakeNode, MindElement.getNode(parent), isHorizontal, PRIMARY_COLOR, STROKE_WIDTH);
|
|
132
|
+
fakeDropNodeG?.appendChild(link);
|
|
133
|
+
fakeDropNodeG?.appendChild(fakeRectangleG);
|
|
134
|
+
return fakeDropNodeG;
|
|
135
|
+
};
|
|
136
|
+
export const getPreviousAndNextByPath = (parent, target, path) => {
|
|
137
|
+
const children = getNonAbstractChildren(parent);
|
|
138
|
+
let hasPreviousNode = path[path.length - 1] !== 0;
|
|
139
|
+
let hasNextNode = path[path.length - 1] !== (children?.length || 0);
|
|
140
|
+
if (PlaitMind.isMind(parent) && isStandardLayout(getRootLayout(parent))) {
|
|
141
|
+
const dropStandardRightBottom = target === parent.children[parent.rightNodeCount - 1] && path[path.length - 1] === parent.rightNodeCount;
|
|
142
|
+
const dropStandardLeftTop = target === parent.children[parent.rightNodeCount] && path[path.length - 1] === parent.rightNodeCount;
|
|
143
|
+
if (dropStandardRightBottom) {
|
|
144
|
+
hasPreviousNode = true;
|
|
145
|
+
hasNextNode = false;
|
|
146
|
+
}
|
|
147
|
+
if (dropStandardLeftTop) {
|
|
148
|
+
hasPreviousNode = false;
|
|
149
|
+
hasNextNode = true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (parent.isCollapsed) {
|
|
153
|
+
hasNextNode = false;
|
|
154
|
+
hasPreviousNode = false;
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
hasPreviousNode,
|
|
158
|
+
hasNextNode
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL2RuZC9kcmF3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFBbUIsV0FBVyxFQUFZLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQVMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFFZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQWtCLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU3SCxPQUFPLEVBQUUs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RyxLQUFLLENBQUM7UUFDcEIsZUFBZSxHQUFHLEtBQUssQ0FBQztLQUMzQjtJQUVELE9BQU87UUFDSCxlQUFlO1FBQ2YsV0FBVztLQUNkLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkcmF3Um91bmRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuLi8uLi9kcmF3L25vZGUnO1xuaW1wb3J0IHsgdXBkYXRlRm9yZWlnbk9iamVjdCB9IGZyb20gJ0BwbGFpdC9yaWNodGV4dCc7XG5pbXBvcnQgeyBCQVNFLCBQUklNQVJZX0NPTE9SLCBTVFJPS0VfV0lEVEggfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTGF5b3V0RGlyZWN0aW9uLCBNaW5kRWxlbWVudCwgTWluZE5vZGUsIFBsYWl0TWluZCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWluZE5vZGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuLi9wb3NpdGlvbi9ub2RlJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBkcmF3Um91bmRSZWN0YW5nbGUsIGNyZWF0ZUcsIFBhdGgsIFBsYWl0Tm9kZSB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE1pbmRRdWVyaWVzIH0gZnJvbSAnLi4vLi4vcXVlcmllcyc7XG5pbXBvcnQge1xuICAgIGdldE5vbkFic3RyYWN0Q2hpbGRyZW4sXG4gICAgaXNIb3Jpem9udGFsTGF5b3V0LFxuICAgIGlzSW5kZW50ZWRMYXlvdXQsXG4gICAgaXNTdGFuZGFyZExheW91dCxcbiAgICBpc1RvcExheW91dCxcbiAgICBNaW5kTGF5b3V0VHlwZVxufSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBkcmF3SW5kZW50ZWRMaW5rIH0gZnJvbSAnLi4vLi4vZHJhdy9pbmRlbnRlZC1saW5rJztcbmltcG9ydCB7IGdldFRvcGljUmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi4vcG9zaXRpb24vdG9waWMnO1xuaW1wb3J0IHsgZHJhd0xvZ2ljTGluayB9IGZyb20gJy4uLy4uL2RyYXcvbGluay9sb2dpYy1saW5rJztcbmltcG9ydCB7IEhvcml6b250YWxQbGFjZW1lbnQsIFBvaW50UGxhY2VtZW50LCBWZXJ0aWNhbFBsYWNlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0TGF5b3V0RGlyZWN0aW9uLCBnZXRQb2ludEJ5UGxhY2VtZW50LCBtb3ZlWE9mUG9pbnQsIG1vdmVZT2ZQb2ludCwgdHJhbnNmb3JtUGxhY2VtZW50IH0gZnJvbSAnLi4vcG9pbnQtcGxhY2VtZW50JztcbmltcG9ydCB7IFBsYWl0TWluZEJvYXJkIH0gZnJvbSAnLi4vLi4vcGx1Z2lucy93aXRoLW1pbmQuYm9hcmQnO1xuaW1wb3J0IHsgZ2V0Um9vdExheW91dCB9IGZyb20gJy4uL2xheW91dCc7XG5cbmV4cG9ydCBjb25zdCBkcmF3RmFrZURyYWdOb2RlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBhY3RpdmVDb21wb25lbnQ6IE1pbmROb2RlQ29tcG9uZW50LCBvZmZzZXRYOiBudW1iZXIsIG9mZnNldFk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGRyYWdGYWtlTm9kZUcgPSBjcmVhdGVHKCk7XG4gICAgZHJhZ0Zha2VOb2RlRy5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZycsICdmYWtlLW5vZGUnLCAncGxhaXQtYm9hcmQtYXR0YWNoZWQnKTtcblxuICAgIGNvbnN0IGZha2VEcmFnZ2luZ05vZGU6IE1pbmROb2RlID0ge1xuICAgICAgICAuLi5hY3RpdmVDb21wb25lbnQubm9kZSxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICB4OiBhY3RpdmVDb21wb25lbnQubm9kZS54ICsgb2Zmc2V0WCxcbiAgICAgICAgeTogYWN0aXZlQ29tcG9uZW50Lm5vZGUueSArIG9mZnNldFlcbiAgICB9O1xuICAgIGNvbnN0IHRleHRSZWN0YW5nbGUgPSBnZXRUb3BpY1JlY3RhbmdsZUJ5Tm9kZShib2FyZCBhcyBQbGFpdE1pbmRCb2FyZCwgYWN0aXZlQ29tcG9uZW50Lm5vZGUpO1xuICAgIGNvbnN0IGZha2VOb2RlRyA9IGRyYXdSb3VuZFJlY3RhbmdsZUJ5Tm9kZShib2FyZCwgZmFrZURyYWdnaW5nTm9kZSk7XG5cbiAgICBjb25zdCByaWNodGV4dEcgPSBhY3RpdmVDb21wb25lbnQucmljaHRleHRHPy5jbG9uZU5vZGUodHJ1ZSkgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgdXBkYXRlRm9yZWlnbk9iamVjdChcbiAgICAgICAgcmljaHRleHRHLFxuICAgICAgICB0ZXh0UmVjdGFuZ2xlLndpZHRoICsgQkFTRSAqIDEwLFxuICAgICAgICB0ZXh0UmVjdGFuZ2xlLmhlaWdodCxcbiAgICAgICAgdGV4dFJlY3RhbmdsZS54ICsgb2Zmc2V0WCxcbiAgICAgICAgdGV4dFJlY3RhbmdsZS55ICsgb2Zmc2V0WVxuICAgICk7XG5cbiAgICBkcmFnRmFrZU5vZGVHPy5hcHBlbmQoZmFrZU5vZGVHKTtcbiAgICBkcmFnRmFrZU5vZGVHPy5hcHBlbmQocmljaHRleHRHKTtcbiAgICByZXR1cm4gZHJhZ0Zha2VOb2RlRztcbn07XG5cbmV4cG9ydCBjb25zdCBkcmF3RmFrZURyb3BOb2RlQnlQYXRoID0gKGJvYXJkOiBQbGFpdEJvYXJkLCB0YXJnZXQ6IE1pbmRFbGVtZW50LCBwYXRoOiBQYXRoKSA9PiB7XG4gICAgY29uc3QgZmFrZURyb3BOb2RlRyA9IGNyZWF0ZUcoKTtcbiAgICBjb25zdCBwYXJlbnQgPSBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBQYXRoLnBhcmVudChwYXRoKSkgYXMgTWluZEVsZW1lbnQ7XG4gICAgY29uc3QgbGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0TGF5b3V0QnlFbGVtZW50KHBhcmVudCkgYXMgTWluZExheW91dFR5cGU7XG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsTGF5b3V0KGxheW91dCk7XG4gICAgY29uc3QgeyBoYXNOZXh0Tm9kZSwgaGFzUHJldmlvdXNOb2RlIH0gPSBnZXRQcmV2aW91c0FuZE5leHRCeVBhdGgocGFyZW50LCB0YXJnZXQsIHBhdGgpO1xuICAgIGNvbnN0IHdpZHRoID0gMzA7XG4gICAgY29uc3QgaGVpZ2h0ID0gMTI7XG4gICAgbGV0IGZha2VOb2RlOiBNaW5kTm9kZSwgY2VudGVyUG9pbnQ6IFBvaW50LCBiYXNpY05vZGU6IE1pbmROb2RlLCBsaW5rRGlyZWN0aW9uOiBMYXlvdXREaXJlY3Rpb247XG5cbiAgICBpZiAoIWhhc1ByZXZpb3VzTm9kZSAmJiAhaGFzTmV4dE5vZGUpIHtcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IE1pbmRFbGVtZW50LmdldE5vZGUocGFyZW50KTtcbiAgICAgICAgY29uc3QgcGFyZW50UmVjdCA9IGdldFJlY3RhbmdsZUJ5Tm9kZShwYXJlbnROb2RlKTtcblxuICAgICAgICBsaW5rRGlyZWN0aW9uID0gZ2V0TGF5b3V0RGlyZWN0aW9uKHBhcmVudE5vZGUsIGlzSG9yaXpvbnRhbCk7XG4gICAgICAgIGJhc2ljTm9kZSA9IHBhcmVudE5vZGU7XG5cbiAgICAgICAgY29uc3QgcGxhY2VtZW50OiBQb2ludFBsYWNlbWVudCA9IFtIb3Jpem9udGFsUGxhY2VtZW50LnJpZ2h0LCBWZXJ0aWNhbFBsYWNlbWVudC5taWRkbGVdO1xuICAgICAgICB0cmFuc2Zvcm1QbGFjZW1lbnQocGxhY2VtZW50LCBsaW5rRGlyZWN0aW9uKTtcbiAgICAgICAgY29uc3QgcGFyZW50Q2VudGVyUG9pbnQgPSBnZXRQb2ludEJ5UGxhY2VtZW50KHBhcmVudFJlY3QsIHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGlzSW5kZW50ZWRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50OiBQb2ludFBsYWNlbWVudCA9IFtcbiAgICAgICAgICAgICAgICBIb3Jpem9udGFsUGxhY2VtZW50LmNlbnRlcixcbiAgICAgICAgICAgICAgICBpc1RvcExheW91dChsYXlvdXQpID8gVmVydGljYWxQbGFjZW1lbnQudG9wIDogVmVydGljYWxQbGFjZW1lbnQuYm90dG9tXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q2VudGVyUG9pbnQgPSBnZXRQb2ludEJ5UGxhY2VtZW50KHBhcmVudFJlY3QsIHBsYWNlbWVudCk7XG5cbiAgICAgICAgICAgIGNlbnRlclBvaW50ID0gbW92ZVhPZlBvaW50KHBhcmVudENlbnRlclBvaW50LCBoZWlnaHQsIGxpbmtEaXJlY3Rpb24pO1xuICAgICAgICAgICAgY2VudGVyUG9pbnRbMV0gPSBpc1RvcExheW91dChsYXlvdXQpID8gY2VudGVyUG9pbnRbMV0gLSBoZWlnaHQgOiBjZW50ZXJQb2ludFsxXSArIGhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNlbnRlclBvaW50ID0gbW92ZVhPZlBvaW50KHBhcmVudENlbnRlclBvaW50LCB3aWR0aCwgbGlua0RpcmVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFoYXNQcmV2aW91c05vZGUgJiYgaGFzTmV4dE5vZGUpIHtcbiAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQgPSBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBwYXRoKSBhcyBNaW5kRWxlbWVudDtcbiAgICAgICAgYmFzaWNOb2RlID0gTWluZEVsZW1lbnQuZ2V0Tm9kZShuZXh0RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IG5leHRSZWN0ID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKGJhc2ljTm9kZSk7XG4gICAgICAgIGxpbmtEaXJlY3Rpb24gPSBnZXRMYXlvdXREaXJlY3Rpb24oYmFzaWNOb2RlLCBpc0hvcml6b250YWwpO1xuXG4gICAgICAgIGNvbnN0IHBsYWNlbWVudDogUG9pbnRQbGFjZW1lbnQgPSBbSG9yaXpvbnRhbFBsYWNlbWVudC5sZWZ0LCBWZXJ0aWNhbFBsYWNlbWVudC50b3BdO1xuXG4gICAgICAgIHRyYW5zZm9ybVBsYWNlbWVudChwbGFjZW1lbnQsIGxpbmtEaXJlY3Rpb24pO1xuXG4gICAgICAgIGxldCBvZmZzZXQgPSAtaGVpZ2h0O1xuICAgICAgICBpZiAoTWluZEVsZW1lbnQuaXNJbmRlbnRlZExheW91dChwYXJlbnQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBpc1RvcExheW91dChsYXlvdXQpID8gb2Zmc2V0IC8gMiArIGJhc2ljTm9kZS5oZWlnaHQgLSBiYXNpY05vZGUudkdhcCA6IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjZW50ZXJQb2ludCA9IGdldFBvaW50QnlQbGFjZW1lbnQobmV4dFJlY3QsIHBsYWNlbWVudCk7XG4gICAgICAgIGNlbnRlclBvaW50ID0gbW92ZVlPZlBvaW50KGNlbnRlclBvaW50LCBvZmZzZXQsIGxpbmtEaXJlY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaGFzUHJldmlvdXNOb2RlICYmICFoYXNOZXh0Tm9kZSkge1xuICAgICAgICBjb25zdCBwcmV2aW91c0VsZW1lbnQgPSBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBQYXRoLnByZXZpb3VzKHBhdGgpKSBhcyBNaW5kRWxlbWVudDtcbiAgICAgICAgYmFzaWNOb2RlID0gTWluZEVsZW1lbnQuZ2V0Tm9kZShwcmV2aW91c0VsZW1lbnQpO1xuICAgICAgICBjb25zdCBwcmV2aW91c1JlY3QgPSBnZXRSZWN0YW5nbGVCeU5vZGUoYmFzaWNOb2RlKTtcbiAgICAgICAgbGlua0RpcmVjdGlvbiA9IGdldExheW91dERpcmVjdGlvbihiYXNpY05vZGUsIGlzSG9yaXpvbnRhbCk7XG5cbiAgICAgICAgY29uc3QgcGxhY2VtZW50OiBQb2ludFBsYWNlbWVudCA9IFtIb3Jpem9udGFsUGxhY2VtZW50LmxlZnQsIFZlcnRpY2FsUGxhY2VtZW50LmJvdHRvbV07XG5cbiAgICAgICAgdHJhbnNmb3JtUGxhY2VtZW50KHBsYWNlbWVudCwgbGlua0RpcmVjdGlvbik7XG5cbiAgICAgICAgbGV0IG9mZnNldCA9IGhlaWdodDtcbiAgICAgICAgaWYgKE1pbmRFbGVtZW50LmlzSW5kZW50ZWRMYXlvdXQocGFyZW50KSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gaXNUb3BMYXlvdXQobGF5b3V0KSA/IC1vZmZzZXQgLSAoYmFzaWNOb2RlLmhlaWdodCAtIGJhc2ljTm9kZS52R2FwKSA6IG9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBjZW50ZXJQb2ludCA9IGdldFBvaW50QnlQbGFjZW1lbnQocHJldmlvdXNSZWN0LCBwbGFjZW1lbnQpO1xuICAgICAgICBjZW50ZXJQb2ludCA9IG1vdmVZT2ZQb2ludChjZW50ZXJQb2ludCwgb2Zmc2V0LCBsaW5rRGlyZWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwcmV2aW91c0VsZW1lbnQgPSBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBQYXRoLnByZXZpb3VzKHBhdGgpKSBhcyBNaW5kRWxlbWVudDtcbiAgICAgICAgYmFzaWNOb2RlID0gTWluZEVsZW1lbnQuZ2V0Tm9kZShwcmV2aW91c0VsZW1lbnQpO1xuICAgICAgICBjb25zdCBwcmV2aW91c1JlY3QgPSBnZXRSZWN0YW5nbGVCeU5vZGUoYmFzaWNOb2RlKTtcblxuICAgICAgICBjb25zdCBuZXh0RWxlbWVudCA9IFBsYWl0Tm9kZS5nZXQoYm9hcmQsIHBhdGgpIGFzIE1pbmRFbGVtZW50O1xuICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IE1pbmRFbGVtZW50LmdldE5vZGUobmV4dEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBuZXh0UmVjdCA9IGdldFJlY3RhbmdsZUJ5Tm9kZShuZXh0Tm9kZSk7XG5cbiAgICAgICAgY29uc3QgYmVnaW5QbGFjZW1lbnQ6IFBvaW50UGxhY2VtZW50ID0gW0hvcml6b250YWxQbGFjZW1lbnQubGVmdCwgVmVydGljYWxQbGFjZW1lbnQuYm90dG9tXTtcbiAgICAgICAgY29uc3QgZW5kUGxhY2VtZW50OiBQb2ludFBsYWNlbWVudCA9IFtIb3Jpem9udGFsUGxhY2VtZW50LmxlZnQsIFZlcnRpY2FsUGxhY2VtZW50LnRvcF07XG4gICAgICAgIGxpbmtEaXJlY3Rpb24gPSBnZXRMYXlvdXREaXJlY3Rpb24oYmFzaWNOb2RlLCBpc0hvcml6b250YWwpO1xuXG4gICAgICAgIHRyYW5zZm9ybVBsYWNlbWVudChiZWdpblBsYWNlbWVudCwgbGlua0RpcmVjdGlvbik7XG4gICAgICAgIHRyYW5zZm9ybVBsYWNlbWVudChlbmRQbGFjZW1lbnQsIGxpbmtEaXJlY3Rpb24pO1xuXG4gICAgICAgIGNvbnN0IHByZXZpb3VzUG9pbnQgPSBnZXRQb2ludEJ5UGxhY2VtZW50KHByZXZpb3VzUmVjdCwgYmVnaW5QbGFjZW1lbnQpO1xuICAgICAgICBjb25zdCBuZXh0UG9pbnQgPSBnZXRQb2ludEJ5UGxhY2VtZW50KG5leHRSZWN0LCBlbmRQbGFjZW1lbnQpO1xuXG4gICAgICAgIGNlbnRlclBvaW50ID0gWyhwcmV2aW91c1BvaW50WzBdICsgbmV4dFBvaW50WzBdKSAvIDIsIChwcmV2aW91c1BvaW50WzFdICsgbmV4dFBvaW50WzFdKSAvIDJdO1xuICAgIH1cblxuICAgIGxldCBjb3JuZXJQb2ludCA9IGNlbnRlclBvaW50LFxuICAgICAgICBvcHBvc2l0ZVBvaW50ID0gY2VudGVyUG9pbnQ7XG5cbiAgICBjb25zdCBvZmZzZXRZID0gaXNIb3Jpem9udGFsID8gaGVpZ2h0IDogd2lkdGg7XG4gICAgY29uc3Qgb2Zmc2V0WCA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuXG4gICAgY29ybmVyUG9pbnQgPSBtb3ZlWU9mUG9pbnQoY29ybmVyUG9pbnQsIC1vZmZzZXRZIC8gMiwgbGlua0RpcmVjdGlvbiEpO1xuXG4gICAgb3Bwb3NpdGVQb2ludCA9IG1vdmVZT2ZQb2ludChvcHBvc2l0ZVBvaW50LCBvZmZzZXRZIC8gMiwgbGlua0RpcmVjdGlvbiEpO1xuICAgIG9wcG9zaXRlUG9pbnQgPSBtb3ZlWE9mUG9pbnQob3Bwb3NpdGVQb2ludCwgb2Zmc2V0WCwgbGlua0RpcmVjdGlvbiEpO1xuXG4gICAgY29uc3QgeCA9IE1hdGgubWluKGNvcm5lclBvaW50WzBdLCBvcHBvc2l0ZVBvaW50WzBdKTtcbiAgICBjb25zdCB5ID0gTWF0aC5taW4oY29ybmVyUG9pbnRbMV0sIG9wcG9zaXRlUG9pbnRbMV0pO1xuXG4gICAgZmFrZU5vZGUgPSB7XG4gICAgICAgIC4uLmJhc2ljTm9kZSEsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGhHYXA6IE1pbmRFbGVtZW50LmlzSW5kZW50ZWRMYXlvdXQocGFyZW50KSA/IEJBU0UgKiA0ICsgKGJhc2ljTm9kZS5vcmlnaW4uc3Ryb2tlV2lkdGggfHwgU1RST0tFX1dJRFRIKSA6IDAsXG4gICAgICAgIHZHYXA6IE1pbmRFbGVtZW50LmlzSW5kZW50ZWRMYXlvdXQocGFyZW50KSA/IEJBU0UgOiAwXG4gICAgfTtcblxuICAgIGNvbnN0IGZha2VSZWN0YW5nbGVHID0gZHJhd1JvdW5kUmVjdGFuZ2xlKFxuICAgICAgICBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKSxcbiAgICAgICAgZmFrZU5vZGUhLngsXG4gICAgICAgIGZha2VOb2RlIS55LFxuICAgICAgICBmYWtlTm9kZSEueCArIHdpZHRoLFxuICAgICAgICBmYWtlTm9kZSEueSArIGhlaWdodCxcbiAgICAgICAge1xuICAgICAgICAgICAgc3Ryb2tlOiBQUklNQVJZX0NPTE9SLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICBmaWxsOiBQUklNQVJZX0NPTE9SLFxuICAgICAgICAgICAgZmlsbFN0eWxlOiAnc29saWQnXG4gICAgICAgIH1cbiAgICApO1xuICAgIGNvbnN0IGxpbmsgPSBNaW5kRWxlbWVudC5pc0luZGVudGVkTGF5b3V0KHBhcmVudClcbiAgICAgICAgPyBkcmF3SW5kZW50ZWRMaW5rKGJvYXJkLCBNaW5kRWxlbWVudC5nZXROb2RlKHBhcmVudCksIGZha2VOb2RlISwgUFJJTUFSWV9DT0xPUiwgZmFsc2UsIFNUUk9LRV9XSURUSClcbiAgICAgICAgOiBkcmF3TG9naWNMaW5rKGJvYXJkLCBmYWtlTm9kZSEsIE1pbmRFbGVtZW50LmdldE5vZGUocGFyZW50KSwgaXNIb3Jpem9udGFsLCBQUklNQVJZX0NPTE9SLCBTVFJPS0VfV0lEVEgpO1xuXG4gICAgZmFrZURyb3BOb2RlRz8uYXBwZW5kQ2hpbGQobGluayk7XG4gICAgZmFrZURyb3BOb2RlRz8uYXBwZW5kQ2hpbGQoZmFrZVJlY3RhbmdsZUcpO1xuXG4gICAgcmV0dXJuIGZha2VEcm9wTm9kZUc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UHJldmlvdXNBbmROZXh0QnlQYXRoID0gKHBhcmVudDogTWluZEVsZW1lbnQsIHRhcmdldDogTWluZEVsZW1lbnQsIHBhdGg6IFBhdGgpID0+IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGdldE5vbkFic3RyYWN0Q2hpbGRyZW4ocGFyZW50KTtcbiAgICBsZXQgaGFzUHJldmlvdXNOb2RlID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdICE9PSAwO1xuICAgIGxldCBoYXNOZXh0Tm9kZSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXSAhPT0gKGNoaWxkcmVuPy5sZW5ndGggfHwgMCk7XG4gICAgaWYgKFBsYWl0TWluZC5pc01pbmQocGFyZW50KSAmJiBpc1N0YW5kYXJkTGF5b3V0KGdldFJvb3RMYXlvdXQocGFyZW50KSkpIHtcbiAgICAgICAgY29uc3QgZHJvcFN0YW5kYXJkUmlnaHRCb3R0b20gPVxuICAgICAgICAgICAgdGFyZ2V0ID09PSBwYXJlbnQuY2hpbGRyZW5bcGFyZW50LnJpZ2h0Tm9kZUNvdW50ISAtIDFdICYmIHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9PT0gcGFyZW50LnJpZ2h0Tm9kZUNvdW50O1xuICAgICAgICBjb25zdCBkcm9wU3RhbmRhcmRMZWZ0VG9wID0gdGFyZ2V0ID09PSBwYXJlbnQuY2hpbGRyZW5bcGFyZW50LnJpZ2h0Tm9kZUNvdW50IV0gJiYgcGF0aFtwYXRoLmxlbmd0aCAtIDFdID09PSBwYXJlbnQucmlnaHROb2RlQ291bnQ7XG4gICAgICAgIGlmIChkcm9wU3RhbmRhcmRSaWdodEJvdHRvbSkge1xuICAgICAgICAgICAgaGFzUHJldmlvdXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIGhhc05leHROb2RlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRyb3BTdGFuZGFyZExlZnRUb3ApIHtcbiAgICAgICAgICAgIGhhc1ByZXZpb3VzTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgaGFzTmV4dE5vZGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudC5pc0NvbGxhcHNlZCkge1xuICAgICAgICBoYXNOZXh0Tm9kZSA9IGZhbHNlO1xuICAgICAgICBoYXNQcmV2aW91c05vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBoYXNQcmV2aW91c05vZGUsXG4gICAgICAgIGhhc05leHROb2RlXG4gICAgfTtcbn07XG4iXX0=
|
package/esm2020/utils/index.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './position';
|
|
2
2
|
export * from './weak-maps';
|
|
3
3
|
export * from './mind';
|
|
4
4
|
export * from './layout';
|
|
5
|
+
export * from './node';
|
|
5
6
|
export * from './node-style';
|
|
6
7
|
export * from './is-virtual-key';
|
|
7
|
-
export * from './
|
|
8
|
-
export * from './
|
|
9
|
-
export * from './
|
|
10
|
-
export * from './drop-target-corrector';
|
|
8
|
+
export * from './dnd/common';
|
|
9
|
+
export * from './dnd/detector';
|
|
10
|
+
export * from './dnd/draw';
|
|
11
11
|
export * from './abstract/common';
|
|
12
12
|
export * from './abstract/resize';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wb3NpdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3dlYWstbWFwcyc7XG5leHBvcnQgKiBmcm9tICcuL21pbmQnO1xuZXhwb3J0ICogZnJvbSAnLi9sYXlvdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9ub2RlJztcbmV4cG9ydCAqIGZyb20gJy4vbm9kZS1zdHlsZSc7XG5leHBvcnQgKiBmcm9tICcuL2lzLXZpcnR1YWwta2V5JztcbmV4cG9ydCAqIGZyb20gJy4vZG5kL2NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL2RuZC9kZXRlY3Rvcic7XG5leHBvcnQgKiBmcm9tICcuL2RuZC9kcmF3JztcbmV4cG9ydCAqIGZyb20gJy4vYWJzdHJhY3QvY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vYWJzdHJhY3QvcmVzaXplJztcbiJdfQ==
|