@plait/mind 0.38.0 → 0.40.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/esm2022/interfaces/options.mjs +1 -1
- package/esm2022/plugins/with-node-resize.mjs +39 -104
- package/fesm2022/plait-mind.mjs +38 -104
- package/fesm2022/plait-mind.mjs.map +1 -1
- package/interfaces/options.d.ts +0 -2
- package/package.json +1 -1
- package/plugins/with-node-resize.d.ts +0 -4
- package/styles/styles.scss +0 -4
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL2ludGVyZmFjZXMvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgV2l0aFBsdWdpbk9wdGlvbnMgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kRW1vamlCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS9lbW9qaS1iYXNlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aE1pbmRPcHRpb25zIGV4dGVuZHMgV2l0aFBsdWdpbk9wdGlvbnMge1xuICAgIGVtb2ppUGFkZGluZzogbnVtYmVyO1xuICAgIHNwYWNlQmV0d2VlbkVtb2ppczogbnVtYmVyO1xuICAgIGVtb2ppQ29tcG9uZW50VHlwZT86IENvbXBvbmVudFR5cGU8TWluZEVtb2ppQmFzZUNvbXBvbmVudD47XG59XG4iXX0=
|
|
@@ -1,122 +1,57 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PlaitBoard, PlaitNode, ResizeCursorClass, distanceBetweenPointAndRectangle, getSelectedElements } from '@plait/core';
|
|
2
2
|
import { MindElement } from '../interfaces/element';
|
|
3
3
|
import { getRectangleByNode } from '../utils/position/node';
|
|
4
4
|
import { NodeSpace } from '../utils/space/node-space';
|
|
5
5
|
import { MindTransforms } from '../transforms';
|
|
6
6
|
import { EXTEND_OFFSET } from '../constants/default';
|
|
7
7
|
import { isDragging } from '../utils/dnd/common';
|
|
8
|
+
import { withResize } from '@plait/common';
|
|
8
9
|
export const withNodeResize = (board) => {
|
|
9
|
-
const { pointerDown, pointerMove, globalPointerUp } = board;
|
|
10
|
-
let targetElement = null;
|
|
11
10
|
let targetElementRef = null;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
preventTouchMove(board, event, true);
|
|
25
|
-
}
|
|
26
|
-
pointerDown(event);
|
|
27
|
-
};
|
|
28
|
-
board.pointerMove = (event) => {
|
|
29
|
-
if (PlaitBoard.isReadonly(board) || PlaitBoard.hasBeenTextEditing(board)) {
|
|
30
|
-
pointerMove(event);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
if (startPoint && targetElement && !isMindNodeResizing(board)) {
|
|
34
|
-
// prevent text from being selected
|
|
35
|
-
event.preventDefault();
|
|
36
|
-
const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
37
|
-
const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
38
|
-
if (distance > PRESS_AND_MOVE_BUFFER) {
|
|
39
|
-
addResizing(board, targetElement);
|
|
40
|
-
targetElementRef = {
|
|
41
|
-
minWidth: NodeSpace.getNodeResizableMinWidth(board, targetElement),
|
|
42
|
-
currentWidth: NodeSpace.getNodeDynamicWidth(board, targetElement),
|
|
43
|
-
path: PlaitBoard.findPath(board, targetElement),
|
|
44
|
-
textManage: MindElement.getTextManage(targetElement)
|
|
11
|
+
const options = {
|
|
12
|
+
key: 'mind-node',
|
|
13
|
+
canResize: () => {
|
|
14
|
+
return !isDragging(board);
|
|
15
|
+
},
|
|
16
|
+
detect: (point) => {
|
|
17
|
+
const newTargetElement = getSelectedTarget(board, point);
|
|
18
|
+
if (newTargetElement) {
|
|
19
|
+
return {
|
|
20
|
+
element: newTargetElement,
|
|
21
|
+
handle: null,
|
|
22
|
+
cursorClass: ResizeCursorClass.ew
|
|
45
23
|
};
|
|
46
|
-
MERGING.set(board, true);
|
|
47
24
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
const newTarget = PlaitNode.get(board, targetElementRef.path);
|
|
65
|
-
if (newTarget && NodeSpace.getNodeTopicMinWidth(board, newTarget) !== resizedWidth) {
|
|
66
|
-
targetElementRef.textManage.updateRectangleWidth(resizedWidth);
|
|
67
|
-
const { height } = targetElementRef.textManage.getSize();
|
|
68
|
-
MindTransforms.setNodeManualWidth(board, newTarget, resizedWidth * zoom, height);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
// press and start drag when node is non selected
|
|
75
|
-
if (!isDragging(board)) {
|
|
76
|
-
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
77
|
-
const newTargetElement = getSelectedTarget(board, point);
|
|
78
|
-
if (newTargetElement) {
|
|
79
|
-
PlaitBoard.getBoardContainer(board).classList.add(`mind-${ResizeCursorClass['ew']}`);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
PlaitBoard.getBoardContainer(board).classList.remove(`mind-${ResizeCursorClass['ew']}`);
|
|
83
|
-
}
|
|
25
|
+
return null;
|
|
26
|
+
},
|
|
27
|
+
beforeResize: (resizeRef) => {
|
|
28
|
+
targetElementRef = {
|
|
29
|
+
minWidth: NodeSpace.getNodeResizableMinWidth(board, resizeRef.element),
|
|
30
|
+
currentWidth: NodeSpace.getNodeDynamicWidth(board, resizeRef.element),
|
|
31
|
+
path: PlaitBoard.findPath(board, resizeRef.element),
|
|
32
|
+
textManage: MindElement.getTextManage(resizeRef.element)
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
onResize: (resizeRef, resizeState) => {
|
|
36
|
+
const zoom = board.viewport.zoom;
|
|
37
|
+
let resizedWidth = targetElementRef.currentWidth + resizeState.offsetX / zoom;
|
|
38
|
+
if (resizedWidth <= targetElementRef.minWidth) {
|
|
39
|
+
resizedWidth = targetElementRef.minWidth;
|
|
84
40
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
41
|
+
const newTarget = PlaitNode.get(board, targetElementRef.path);
|
|
42
|
+
if (newTarget && NodeSpace.getNodeTopicMinWidth(board, newTarget) !== resizedWidth) {
|
|
43
|
+
targetElementRef.textManage.updateRectangleWidth(resizedWidth);
|
|
44
|
+
const { height } = targetElementRef.textManage.getSize();
|
|
45
|
+
MindTransforms.setNodeManualWidth(board, newTarget, resizedWidth * zoom, height);
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
afterResize: (resizeRef) => {
|
|
92
49
|
targetElementRef = null;
|
|
93
|
-
targetElement = null;
|
|
94
|
-
startPoint = null;
|
|
95
|
-
MERGING.set(board, false);
|
|
96
|
-
preventTouchMove(board, event, false);
|
|
97
50
|
}
|
|
98
51
|
};
|
|
52
|
+
withResize(board, options);
|
|
99
53
|
return board;
|
|
100
54
|
};
|
|
101
|
-
export const IS_MIND_NODE_RESIZING = new WeakMap();
|
|
102
|
-
export const isMindNodeResizing = (board) => {
|
|
103
|
-
return !!IS_MIND_NODE_RESIZING.get(board);
|
|
104
|
-
};
|
|
105
|
-
export const addResizing = (board, element) => {
|
|
106
|
-
PlaitBoard.getBoardContainer(board).classList.add('mind-node-resizing');
|
|
107
|
-
const component = PlaitElement.getComponent(element);
|
|
108
|
-
component.g.classList.add('resizing');
|
|
109
|
-
IS_MIND_NODE_RESIZING.set(board, true);
|
|
110
|
-
};
|
|
111
|
-
export const removeResizing = (board, element) => {
|
|
112
|
-
PlaitBoard.getBoardContainer(board).classList.remove('mind-node-resizing');
|
|
113
|
-
PlaitBoard.getBoardContainer(board).classList.remove(ResizeCursorClass['ew']);
|
|
114
|
-
const component = PlaitElement.getComponent(element);
|
|
115
|
-
if (component && component.g) {
|
|
116
|
-
component.g.classList.remove('resizing');
|
|
117
|
-
}
|
|
118
|
-
IS_MIND_NODE_RESIZING.set(board, false);
|
|
119
|
-
};
|
|
120
55
|
export const getSelectedTarget = (board, point) => {
|
|
121
56
|
const selectedElements = getSelectedElements(board).filter(value => MindElement.isMindElement(board, value));
|
|
122
57
|
if (selectedElements.length > 0) {
|
|
@@ -133,4 +68,4 @@ export const getResizeActiveRectangle = (board, element) => {
|
|
|
133
68
|
const rectangle = getRectangleByNode(node);
|
|
134
69
|
return { x: rectangle.x + rectangle.width - EXTEND_OFFSET, y: rectangle.y, width: EXTEND_OFFSET * 2, height: rectangle.height };
|
|
135
70
|
};
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1ub2RlLXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3BsdWdpbnMvd2l0aC1ub2RlLXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsT0FBTyxFQUNQLHFCQUFxQixFQUVyQixVQUFVLEVBQ1YsWUFBWSxFQUNaLFNBQVMsRUFHVCxpQkFBaUIsRUFDakIsNEJBQTRCLEVBQzVCLGdDQUFnQyxFQUNoQyxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxPQUFPLEVBQ1AsY0FBYyxFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVNqRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDaEQsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQzVELElBQUksYUFBYSxHQUF1QixJQUFJLENBQUM7SUFDN0MsSUFBSSxnQkFBZ0IsR0FBNEIsSUFBSSxDQUFDO0lBQ3JELElBQUksVUFBVSxHQUFpQixJQUFJLENBQUM7SUFFcEMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUN4QyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIs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cG9ydCB7XG4gICAgTUVSR0lORyxcbiAgICBQUkVTU19BTkRfTU9WRV9CVUZGRVIsXG4gICAgUGF0aCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQbGFpdE5vZGUsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFJlc2l6ZUN1cnNvckNsYXNzLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRSZWN0YW5nbGUsXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50cyxcbiAgICBwcmV2ZW50VG91Y2hNb3ZlLFxuICAgIHRocm90dGxlUkFGLFxuICAgIHRvUG9pbnQsXG4gICAgdHJhbnNmb3JtUG9pbnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi4vdXRpbHMvcG9zaXRpb24vbm9kZSc7XG5pbXBvcnQgeyBOb2RlU3BhY2UgfSBmcm9tICcuLi91dGlscy9zcGFjZS9ub2RlLXNwYWNlJztcbmltcG9ydCB7IFBsYWl0TWluZEJvYXJkIH0gZnJvbSAnLi93aXRoLW1pbmQuYm9hcmQnO1xuaW1wb3J0IHsgTWluZE5vZGVDb21wb25lbnQgfSBmcm9tICcuLi9taW5kLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IE1pbmRUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBUZXh0TWFuYWdlIH0gZnJvbSAnQHBsYWl0L3RleHQnO1xuaW1wb3J0IHsgRVhURU5EX09GRlNFVCB9IGZyb20gJy4uL2NvbnN0YW50cy9kZWZhdWx0JztcbmltcG9ydCB7IGlzRHJhZ2dpbmcgfSBmcm9tICcuLi91dGlscy9kbmQvY29tbW9uJztcblxuaW50ZXJmYWNlIFRhcmdldEVsZW1lbnRSZWYge1xuICAgIG1pbldpZHRoOiBudW1iZXI7XG4gICAgY3VycmVudFdpZHRoOiBudW1iZXI7XG4gICAgcGF0aDogUGF0aDtcbiAgICB0ZXh0TWFuYWdlOiBUZXh0TWFuYWdlO1xufVxuXG5leHBvcnQgY29uc3Qgd2l0aE5vZGVSZXNpemUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCB7IHBvaW50ZXJEb3duLCBwb2ludGVyTW92ZSwgZ2xvYmFsUG9pbnRlclVwIH0gPSBib2FyZDtcbiAgICBsZXQgdGFyZ2V0RWxlbWVudDogTWluZEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgdGFyZ2V0RWxlbWVudFJlZjogVGFyZ2V0RWxlbWVudFJlZiB8IG51bGwgPSBudWxsO1xuICAgIGxldCBzdGFydFBvaW50OiBQb2ludCB8IG51bGwgPSBudWxsO1xuXG4gICAgYm9hcmQucG9pbnRlckRvd24gPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdHJhbnNmb3JtUG9pbnQoYm9hcmQsIHRvUG9pbnQoZXZlbnQueCwgZXZlbnQueSwgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKSkpO1xuICAgICAgICBjb25zdCBuZXdUYXJnZXRFbGVtZW50ID0gZ2V0U2VsZWN0ZWRUYXJnZXQoYm9hcmQgYXMgUGxhaXRNaW5kQm9hcmQsIHBvaW50KTtcbiAgICAgICAgaWYgKG5ld1RhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoUmVzaXplQ3Vyc29yQ2xhc3NbJ2V3J10pO1xuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IG5ld1RhcmdldEVsZW1lbnQ7XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gW2V2ZW50LngsIGV2ZW50LnldO1xuICAgICAgICAgICAgcHJldmVudFRvdWNoTW92ZShib2FyZCwgZXZlbnQsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpIHx8IFBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0UG9pbnQgJiYgdGFyZ2V0RWxlbWVudCAmJiAhaXNNaW5kTm9kZVJlc2l6aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgLy8gcHJldmVudCB0ZXh0IGZyb20gYmVpbmcgc2VsZWN0ZWRcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRyYW5zZm9ybVBvaW50KGJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCkpKTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChzdGFydFBvaW50WzBdLCBzdGFydFBvaW50WzFdLCBlbmRQb2ludFswXSwgZW5kUG9pbnRbMV0pO1xuICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gUFJFU1NfQU5EX01PVkVfQlVGRkVSKSB7XG4gICAgICAgICAgICAgICAgYWRkUmVzaXppbmcoYm9hcmQsIHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRhcmdldEVsZW1lbnRSZWYgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBOb2RlU3BhY2UuZ2V0Tm9kZVJlc2l6YWJsZU1pbldpZHRoKGJvYXJkIGFzIFBsYWl0TWluZEJvYXJkLCB0YXJnZXRFbGVtZW50KSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFdpZHRoOiBOb2RlU3BhY2UuZ2V0Tm9kZUR5bmFtaWNXaWR0aChib2FyZCBhcyBQbGFpdE1pbmRCb2FyZCwgdGFyZ2V0RWxlbWVudCksXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHRhcmdldEVsZW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0TWFuYWdlOiBNaW5kRWxlbWVudC5nZXRUZXh0TWFuYWdlKHRhcmdldEVsZW1lbnQpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBNRVJHSU5HLnNldChib2FyZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNaW5kTm9kZVJlc2l6aW5nKGJvYXJkKSAmJiBzdGFydFBvaW50ICYmIHRhcmdldEVsZW1lbnRSZWYpIHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgdGV4dCBmcm9tIGJlaW5nIHNlbGVjdGVkXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcHJldmVudFRvdWNoTW92ZShib2FyZCwgZXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgdGhyb3R0bGVSQUYoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc3RhcnRQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSBbZXZlbnQueCwgZXZlbnQueV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IGVuZFBvaW50WzBdIC0gc3RhcnRQb2ludCFbMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgICAgICAgICAgICAgbGV0IHJlc2l6ZWRXaWR0aCA9IHRhcmdldEVsZW1lbnRSZWYhLmN1cnJlbnRXaWR0aCArIG9mZnNldFggLyB6b29tO1xuICAgICAgICAgICAgICAgIGlmIChyZXNpemVkV2lkdGggPD0gdGFyZ2V0RWxlbWVudFJlZiEubWluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzaXplZFdpZHRoID0gdGFyZ2V0RWxlbWVudFJlZiEubWluV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VGFyZ2V0ID0gUGxhaXROb2RlLmdldDxNaW5kRWxlbWVudD4oYm9hcmQsIHRhcmdldEVsZW1lbnRSZWYhLnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdUYXJnZXQgJiYgTm9kZVNwYWNlLmdldE5vZGVUb3BpY01pbldpZHRoKGJvYXJkIGFzIFBsYWl0TWluZEJvYXJkLCBuZXdUYXJnZXQpICE9PSByZXNpemVkV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudFJlZiEudGV4dE1hbmFnZS51cGRhdGVSZWN0YW5nbGVXaWR0aChyZXNpemVkV2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGhlaWdodCB9ID0gdGFyZ2V0RWxlbWVudFJlZiEudGV4dE1hbmFnZS5nZXRTaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIE1pbmRUcmFuc2Zvcm1zLnNldE5vZGVNYW51YWxXaWR0aChib2FyZCBhcyBQbGFpdE1pbmRCb2FyZCwgbmV3VGFyZ2V0LCByZXNpemVkV2lkdGggKiB6b29tLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcHJlc3MgYW5kIHN0YXJ0IGRyYWcgd2hlbiBub2RlIGlzIG5vbiBzZWxlY3RlZFxuICAgICAgICAgICAgaWYgKCFpc0RyYWdnaW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gdHJhbnNmb3JtUG9pbnQoYm9hcmQsIHRvUG9pbnQoZXZlbnQueCwgZXZlbnQueSwgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RhcmdldEVsZW1lbnQgPSBnZXRTZWxlY3RlZFRhcmdldChib2FyZCBhcyBQbGFpdE1pbmRCb2FyZCwgcG9pbnQpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdUYXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoYG1pbmQtJHtSZXNpemVDdXJzb3JDbGFzc1snZXcnXX1gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QucmVtb3ZlKGBtaW5kLSR7UmVzaXplQ3Vyc29yQ2xhc3NbJ2V3J119YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyVXAgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBnbG9iYWxQb2ludGVyVXAoZXZlbnQpO1xuXG4gICAgICAgIGlmIChpc01pbmROb2RlUmVzaXppbmcoYm9hcmQpIHx8IHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQgJiYgcmVtb3ZlUmVzaXppbmcoYm9hcmQsIHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudFJlZiA9IG51bGw7XG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcblxuZXhwb3J0IGNvbnN0IElTX01JTkRfTk9ERV9SRVNJWklORyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBjb25zdCBpc01pbmROb2RlUmVzaXppbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFJU19NSU5EX05PREVfUkVTSVpJTkcuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRSZXNpemluZyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKCdtaW5kLW5vZGUtcmVzaXppbmcnKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KGVsZW1lbnQpO1xuICAgIGNvbXBvbmVudC5nLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XG4gICAgSVNfTUlORF9OT0RFX1JFU0laSU5HLnNldChib2FyZCwgdHJ1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlUmVzaXppbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZSgnbWluZC1ub2RlLXJlc2l6aW5nJyk7XG4gICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZShSZXNpemVDdXJzb3JDbGFzc1snZXcnXSk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudChlbGVtZW50KTtcbiAgICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudC5nKSB7XG4gICAgICAgIGNvbXBvbmVudC5nLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XG4gICAgfVxuICAgIElTX01JTkRfTk9ERV9SRVNJWklORy5zZXQoYm9hcmQsIGZhbHNlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZFRhcmdldCA9IChib2FyZDogUGxhaXRNaW5kQm9hcmQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKS5maWx0ZXIodmFsdWUgPT4gTWluZEVsZW1lbnQuaXNNaW5kRWxlbWVudChib2FyZCwgdmFsdWUpKSBhcyBNaW5kRWxlbWVudFtdO1xuICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gc2VsZWN0ZWRFbGVtZW50cy5maW5kKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IGdldFJlc2l6ZUFjdGl2ZVJlY3RhbmdsZShib2FyZCwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUmVjdGFuZ2xlKHBvaW50WzBdLCBwb2ludFsxXSwgcmVjdGFuZ2xlKSA8PSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldCA/IHRhcmdldCA6IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplQWN0aXZlUmVjdGFuZ2xlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudCk6IFJlY3RhbmdsZUNsaWVudCA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCk7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKG5vZGUpO1xuICAgIHJldHVybiB7IHg6IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gRVhURU5EX09GRlNFVCwgeTogcmVjdGFuZ2xlLnksIHdpZHRoOiBFWFRFTkRfT0ZGU0VUICogMiwgaGVpZ2h0OiByZWN0YW5nbGUuaGVpZ2h0IH07XG59O1xuIl19
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1ub2RlLXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3BsdWdpbnMvd2l0aC1ub2RlLXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsVUFBVSxFQUNWLFNBQVMsRUFHVCxpQkFBaUIsRUFDakIsZ0NBQWdDLEVBQ2hDLG1CQUFtQixFQUN0QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXRELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQTZDLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVN0RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDaEQsSUFBSSxnQkFBZ0IsR0FBNEIsSUFBSSxDQUFDO0lBQ3JELE1BQU0sT0FBTyxHQUF5QztRQUNsRCxHQUFHLEVBQUUsV0FBVztRQUNoQixTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBQ0QsTUFBTSxFQUFFLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDckIsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxLQUF1QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNFLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ2xCLE9BQU87b0JBQ0gsT0FBTyxFQUFFLGdCQUFn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Q0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBb0IsRUFBbUIsRUFBRTtJQUNqRyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsYUFBYSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGF0aCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0Tm9kZSxcbiAgICBQb2ludCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgUmVzaXplQ3Vyc29yQ2xhc3MsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRSZWN0YW5nbGUsXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50c1xufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9ub2RlJztcbmltcG9ydCB7IE5vZGVTcGFjZSB9IGZyb20gJy4uL3V0aWxzL3NwYWNlL25vZGUtc3BhY2UnO1xuaW1wb3J0IHsgUGxhaXRNaW5kQm9hcmQgfSBmcm9tICcuL3dpdGgtbWluZC5ib2FyZCc7XG5pbXBvcnQgeyBNaW5kVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgVGV4dE1hbmFnZSB9IGZyb20gJ0BwbGFpdC90ZXh0JztcbmltcG9ydCB7IEVYVEVORF9PRkZTRVQgfSBmcm9tICcuLi9jb25zdGFudHMvZGVmYXVsdCc7XG5pbXBvcnQgeyBpc0RyYWdnaW5nIH0gZnJvbSAnLi4vdXRpbHMvZG5kL2NvbW1vbic7XG5pbXBvcnQgeyBSZXNpemVSZWYsIFJlc2l6ZVN0YXRlLCBXaXRoUmVzaXplT3B0aW9ucywgd2l0aFJlc2l6ZSB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuXG5pbnRlcmZhY2UgVGFyZ2V0RWxlbWVudFJlZiB7XG4gICAgbWluV2lkdGg6IG51bWJlcjtcbiAgICBjdXJyZW50V2lkdGg6IG51bWJlcjtcbiAgICBwYXRoOiBQYXRoO1xuICAgIHRleHRNYW5hZ2U6IFRleHRNYW5hZ2U7XG59XG5cbmV4cG9ydCBjb25zdCB3aXRoTm9kZVJlc2l6ZSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGxldCB0YXJnZXRFbGVtZW50UmVmOiBUYXJnZXRFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3Qgb3B0aW9uczogV2l0aFJlc2l6ZU9wdGlvbnM8TWluZEVsZW1lbnQsIG51bGw+ID0ge1xuICAgICAgICBrZXk6ICdtaW5kLW5vZGUnLFxuICAgICAgICBjYW5SZXNpemU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhaXNEcmFnZ2luZyhib2FyZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRldGVjdDogKHBvaW50OiBQb2ludCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3VGFyZ2V0RWxlbWVudCA9IGdldFNlbGVjdGVkVGFyZ2V0KGJvYXJkIGFzIFBsYWl0TWluZEJvYXJkLCBwb2ludCk7XG4gICAgICAgICAgICBpZiAobmV3VGFyZ2V0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IG5ld1RhcmdldEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yQ2xhc3M6IFJlc2l6ZUN1cnNvckNsYXNzLmV3XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiZWZvcmVSZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxNaW5kRWxlbWVudCwgbnVsbD4pID0+IHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnRSZWYgPSB7XG4gICAgICAgICAgICAgICAgbWluV2lkdGg6IE5vZGVTcGFjZS5nZXROb2RlUmVzaXphYmxlTWluV2lkdGgoYm9hcmQgYXMgUGxhaXRNaW5kQm9hcmQsIHJlc2l6ZVJlZi5lbGVtZW50KSxcbiAgICAgICAgICAgICAgICBjdXJyZW50V2lkdGg6IE5vZGVTcGFjZS5nZXROb2RlRHluYW1pY1dpZHRoKGJvYXJkIGFzIFBsYWl0TWluZEJvYXJkLCByZXNpemVSZWYuZWxlbWVudCksXG4gICAgICAgICAgICAgICAgcGF0aDogUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQpLFxuICAgICAgICAgICAgICAgIHRleHRNYW5hZ2U6IE1pbmRFbGVtZW50LmdldFRleHRNYW5hZ2UocmVzaXplUmVmLmVsZW1lbnQpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBvblJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPE1pbmRFbGVtZW50LCBudWxsPiwgcmVzaXplU3RhdGU6IFJlc2l6ZVN0YXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICAgICAgICAgIGxldCByZXNpemVkV2lkdGggPSB0YXJnZXRFbGVtZW50UmVmIS5jdXJyZW50V2lkdGggKyByZXNpemVTdGF0ZS5vZmZzZXRYIC8gem9vbTtcbiAgICAgICAgICAgIGlmIChyZXNpemVkV2lkdGggPD0gdGFyZ2V0RWxlbWVudFJlZiEubWluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICByZXNpemVkV2lkdGggPSB0YXJnZXRFbGVtZW50UmVmIS5taW5XaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld1RhcmdldCA9IFBsYWl0Tm9kZS5nZXQ8TWluZEVsZW1lbnQ+KGJvYXJkLCB0YXJnZXRFbGVtZW50UmVmIS5wYXRoKTtcbiAgICAgICAgICAgIGlmIChuZXdUYXJnZXQgJiYgTm9kZVNwYWNlLmdldE5vZGVUb3BpY01pbldpZHRoKGJvYXJkIGFzIFBsYWl0TWluZEJvYXJkLCBuZXdUYXJnZXQpICE9PSByZXNpemVkV2lkdGgpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50UmVmIS50ZXh0TWFuYWdlLnVwZGF0ZVJlY3RhbmdsZVdpZHRoKHJlc2l6ZWRXaWR0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBoZWlnaHQgfSA9IHRhcmdldEVsZW1lbnRSZWYhLnRleHRNYW5hZ2UuZ2V0U2l6ZSgpO1xuICAgICAgICAgICAgICAgIE1pbmRUcmFuc2Zvcm1zLnNldE5vZGVNYW51YWxXaWR0aChib2FyZCBhcyBQbGFpdE1pbmRCb2FyZCwgbmV3VGFyZ2V0LCByZXNpemVkV2lkdGggKiB6b29tLCBoZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhZnRlclJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPE1pbmRFbGVtZW50LCBudWxsPikgPT4ge1xuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudFJlZiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHdpdGhSZXNpemU8TWluZEVsZW1lbnQsIG51bGw+KGJvYXJkLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRUYXJnZXQgPSAoYm9hcmQ6IFBsYWl0TWluZEJvYXJkLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCkuZmlsdGVyKHZhbHVlID0+IE1pbmRFbGVtZW50LmlzTWluZEVsZW1lbnQoYm9hcmQsIHZhbHVlKSkgYXMgTWluZEVsZW1lbnRbXTtcbiAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHNlbGVjdGVkRWxlbWVudHMuZmluZCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWN0YW5nbGUgPSBnZXRSZXNpemVBY3RpdmVSZWN0YW5nbGUoYm9hcmQsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFJlY3RhbmdsZShwb2ludFswXSwgcG9pbnRbMV0sIHJlY3RhbmdsZSkgPD0gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0YXJnZXQgPyB0YXJnZXQgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVBY3RpdmVSZWN0YW5nbGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KTogUmVjdGFuZ2xlQ2xpZW50ID0+IHtcbiAgICBjb25zdCBub2RlID0gTWluZEVsZW1lbnQuZ2V0Tm9kZShlbGVtZW50KTtcbiAgICBjb25zdCByZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeU5vZGUobm9kZSk7XG4gICAgcmV0dXJuIHsgeDogcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLSBFWFRFTkRfT0ZGU0VULCB5OiByZWN0YW5nbGUueSwgd2lkdGg6IEVYVEVORF9PRkZTRVQgKiAyLCBoZWlnaHQ6IHJlY3RhbmdsZS5oZWlnaHQgfTtcbn07XG4iXX0=
|
package/fesm2022/plait-mind.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Component, ChangeDetectionStrategy, NgZone, Directive, Input, HostListener } from '@angular/core';
|
|
3
|
-
import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, PlaitElement, PlaitNode, Path, isNullOrUndefined, PlaitBoard, distanceBetweenPointAndRectangle, RectangleClient, getSelectedElements, idCreator, Transforms, clearSelectedElement, addSelectedElement, depthFirstRecursion, getIsRecursionFunc, drawRoundRectangle, drawLinearPath, drawBezierPath, createG, updateForeignObject, getRectangleByElements, NODE_TO_PARENT, createForeignObject, setStrokeLinecap, ACTIVE_STROKE_WIDTH, createText, PlaitPointerType, NODE_TO_INDEX, PlaitChildrenElementComponent, isMainPointer, transformPoint, toPoint, getHitElementByPoint, distanceBetweenPointAndPoint, CoreTransforms, BOARD_TO_HOST, BoardTransforms, throttleRAF, removeSelectedElement, PlaitHistoryBoard, temporaryDisableSelection, hotkeys, setClipboardDataByMedia, getClipboardDataByMedia, ResizeCursorClass,
|
|
3
|
+
import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, PlaitElement, PlaitNode, Path, isNullOrUndefined, PlaitBoard, distanceBetweenPointAndRectangle, RectangleClient, getSelectedElements, idCreator, Transforms, clearSelectedElement, addSelectedElement, depthFirstRecursion, getIsRecursionFunc, drawRoundRectangle, drawLinearPath, drawBezierPath, createG, updateForeignObject, getRectangleByElements, NODE_TO_PARENT, createForeignObject, setStrokeLinecap, ACTIVE_STROKE_WIDTH, createText, PlaitPointerType, NODE_TO_INDEX, PlaitChildrenElementComponent, isMainPointer, transformPoint, toPoint, getHitElementByPoint, distanceBetweenPointAndPoint, CoreTransforms, BOARD_TO_HOST, BoardTransforms, throttleRAF, removeSelectedElement, PlaitHistoryBoard, temporaryDisableSelection, hotkeys, setClipboardDataByMedia, getClipboardDataByMedia, ResizeCursorClass, setClipboardData, setClipboardDataByText, getDataFromClipboard, PlaitPluginKey } from '@plait/core';
|
|
4
4
|
import { MindLayoutType, AbstractNode, isIndentedLayout, isHorizontalLayout, isHorizontalLogicLayout, ConnectingPosition, getNonAbstractChildren, isStandardLayout, isLeftLayout, isRightLayout, isVerticalLogicLayout, isTopLayout, isBottomLayout, getCorrectStartEnd, getAbstractLayout, GlobalLayout } from '@plait/layouts';
|
|
5
5
|
import { PlaitMarkEditor, MarkTypes, DEFAULT_FONT_SIZE, TEXT_DEFAULT_HEIGHT, buildText, getTextSize, TextManage, ExitOrigin, getTextFromClipboard } from '@plait/text';
|
|
6
6
|
import { fromEvent, Subject } from 'rxjs';
|
|
7
|
-
import { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs, addElementOfFocusedImage, removeElementOfFocusedImage, Generator, CommonPluginElement, ImageGenerator, WithTextPluginKey, isDrawingMode, isDndMode, setCreationMode, BoardCreationMode, isExpandHotkey, isTabHotkey, isEnterHotkey, isVirtualKey, isDelete, isSpaceHotkey, getElementOfFocusedImage, MediaKeys, acceptImageTypes, buildImage,
|
|
7
|
+
import { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs, addElementOfFocusedImage, removeElementOfFocusedImage, Generator, CommonPluginElement, ImageGenerator, WithTextPluginKey, isDrawingMode, isDndMode, setCreationMode, BoardCreationMode, isExpandHotkey, isTabHotkey, isEnterHotkey, isVirtualKey, isDelete, isSpaceHotkey, getElementOfFocusedImage, MediaKeys, acceptImageTypes, buildImage, withResize, ResizeHandle } from '@plait/common';
|
|
8
8
|
import { Node as Node$1, Path as Path$1 } from 'slate';
|
|
9
9
|
import { pointsOnBezierCurves } from 'points-on-curve';
|
|
10
10
|
import { take, filter } from 'rxjs/operators';
|
|
@@ -3762,117 +3762,51 @@ const withNodeImage = (board) => {
|
|
|
3762
3762
|
};
|
|
3763
3763
|
|
|
3764
3764
|
const withNodeResize = (board) => {
|
|
3765
|
-
const { pointerDown, pointerMove, globalPointerUp } = board;
|
|
3766
|
-
let targetElement = null;
|
|
3767
3765
|
let targetElementRef = null;
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
3778
|
-
|
|
3779
|
-
|
|
3780
|
-
preventTouchMove(board, event, true);
|
|
3781
|
-
}
|
|
3782
|
-
pointerDown(event);
|
|
3783
|
-
};
|
|
3784
|
-
board.pointerMove = (event) => {
|
|
3785
|
-
if (PlaitBoard.isReadonly(board) || PlaitBoard.hasBeenTextEditing(board)) {
|
|
3786
|
-
pointerMove(event);
|
|
3787
|
-
return;
|
|
3788
|
-
}
|
|
3789
|
-
if (startPoint && targetElement && !isMindNodeResizing(board)) {
|
|
3790
|
-
// prevent text from being selected
|
|
3791
|
-
event.preventDefault();
|
|
3792
|
-
const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3793
|
-
const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
3794
|
-
if (distance > PRESS_AND_MOVE_BUFFER) {
|
|
3795
|
-
addResizing(board, targetElement);
|
|
3796
|
-
targetElementRef = {
|
|
3797
|
-
minWidth: NodeSpace.getNodeResizableMinWidth(board, targetElement),
|
|
3798
|
-
currentWidth: NodeSpace.getNodeDynamicWidth(board, targetElement),
|
|
3799
|
-
path: PlaitBoard.findPath(board, targetElement),
|
|
3800
|
-
textManage: MindElement.getTextManage(targetElement)
|
|
3766
|
+
const options = {
|
|
3767
|
+
key: 'mind-node',
|
|
3768
|
+
canResize: () => {
|
|
3769
|
+
return !isDragging(board);
|
|
3770
|
+
},
|
|
3771
|
+
detect: (point) => {
|
|
3772
|
+
const newTargetElement = getSelectedTarget(board, point);
|
|
3773
|
+
if (newTargetElement) {
|
|
3774
|
+
return {
|
|
3775
|
+
element: newTargetElement,
|
|
3776
|
+
handle: null,
|
|
3777
|
+
cursorClass: ResizeCursorClass.ew
|
|
3801
3778
|
};
|
|
3802
|
-
MERGING.set(board, true);
|
|
3803
3779
|
}
|
|
3804
|
-
|
|
3805
|
-
|
|
3806
|
-
|
|
3807
|
-
|
|
3808
|
-
|
|
3809
|
-
|
|
3810
|
-
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
}
|
|
3820
|
-
const newTarget = PlaitNode.get(board, targetElementRef.path);
|
|
3821
|
-
if (newTarget && NodeSpace.getNodeTopicMinWidth(board, newTarget) !== resizedWidth) {
|
|
3822
|
-
targetElementRef.textManage.updateRectangleWidth(resizedWidth);
|
|
3823
|
-
const { height } = targetElementRef.textManage.getSize();
|
|
3824
|
-
MindTransforms.setNodeManualWidth(board, newTarget, resizedWidth * zoom, height);
|
|
3825
|
-
}
|
|
3826
|
-
});
|
|
3827
|
-
return;
|
|
3828
|
-
}
|
|
3829
|
-
else {
|
|
3830
|
-
// press and start drag when node is non selected
|
|
3831
|
-
if (!isDragging(board)) {
|
|
3832
|
-
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3833
|
-
const newTargetElement = getSelectedTarget(board, point);
|
|
3834
|
-
if (newTargetElement) {
|
|
3835
|
-
PlaitBoard.getBoardContainer(board).classList.add(`mind-${ResizeCursorClass['ew']}`);
|
|
3836
|
-
}
|
|
3837
|
-
else {
|
|
3838
|
-
PlaitBoard.getBoardContainer(board).classList.remove(`mind-${ResizeCursorClass['ew']}`);
|
|
3839
|
-
}
|
|
3780
|
+
return null;
|
|
3781
|
+
},
|
|
3782
|
+
beforeResize: (resizeRef) => {
|
|
3783
|
+
targetElementRef = {
|
|
3784
|
+
minWidth: NodeSpace.getNodeResizableMinWidth(board, resizeRef.element),
|
|
3785
|
+
currentWidth: NodeSpace.getNodeDynamicWidth(board, resizeRef.element),
|
|
3786
|
+
path: PlaitBoard.findPath(board, resizeRef.element),
|
|
3787
|
+
textManage: MindElement.getTextManage(resizeRef.element)
|
|
3788
|
+
};
|
|
3789
|
+
},
|
|
3790
|
+
onResize: (resizeRef, resizeState) => {
|
|
3791
|
+
const zoom = board.viewport.zoom;
|
|
3792
|
+
let resizedWidth = targetElementRef.currentWidth + resizeState.offsetX / zoom;
|
|
3793
|
+
if (resizedWidth <= targetElementRef.minWidth) {
|
|
3794
|
+
resizedWidth = targetElementRef.minWidth;
|
|
3840
3795
|
}
|
|
3841
|
-
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
|
|
3845
|
-
|
|
3846
|
-
|
|
3847
|
-
|
|
3796
|
+
const newTarget = PlaitNode.get(board, targetElementRef.path);
|
|
3797
|
+
if (newTarget && NodeSpace.getNodeTopicMinWidth(board, newTarget) !== resizedWidth) {
|
|
3798
|
+
targetElementRef.textManage.updateRectangleWidth(resizedWidth);
|
|
3799
|
+
const { height } = targetElementRef.textManage.getSize();
|
|
3800
|
+
MindTransforms.setNodeManualWidth(board, newTarget, resizedWidth * zoom, height);
|
|
3801
|
+
}
|
|
3802
|
+
},
|
|
3803
|
+
afterResize: (resizeRef) => {
|
|
3848
3804
|
targetElementRef = null;
|
|
3849
|
-
targetElement = null;
|
|
3850
|
-
startPoint = null;
|
|
3851
|
-
MERGING.set(board, false);
|
|
3852
|
-
preventTouchMove(board, event, false);
|
|
3853
3805
|
}
|
|
3854
3806
|
};
|
|
3807
|
+
withResize(board, options);
|
|
3855
3808
|
return board;
|
|
3856
3809
|
};
|
|
3857
|
-
const IS_MIND_NODE_RESIZING = new WeakMap();
|
|
3858
|
-
const isMindNodeResizing = (board) => {
|
|
3859
|
-
return !!IS_MIND_NODE_RESIZING.get(board);
|
|
3860
|
-
};
|
|
3861
|
-
const addResizing = (board, element) => {
|
|
3862
|
-
PlaitBoard.getBoardContainer(board).classList.add('mind-node-resizing');
|
|
3863
|
-
const component = PlaitElement.getComponent(element);
|
|
3864
|
-
component.g.classList.add('resizing');
|
|
3865
|
-
IS_MIND_NODE_RESIZING.set(board, true);
|
|
3866
|
-
};
|
|
3867
|
-
const removeResizing = (board, element) => {
|
|
3868
|
-
PlaitBoard.getBoardContainer(board).classList.remove('mind-node-resizing');
|
|
3869
|
-
PlaitBoard.getBoardContainer(board).classList.remove(ResizeCursorClass['ew']);
|
|
3870
|
-
const component = PlaitElement.getComponent(element);
|
|
3871
|
-
if (component && component.g) {
|
|
3872
|
-
component.g.classList.remove('resizing');
|
|
3873
|
-
}
|
|
3874
|
-
IS_MIND_NODE_RESIZING.set(board, false);
|
|
3875
|
-
};
|
|
3876
3810
|
const getSelectedTarget = (board, point) => {
|
|
3877
3811
|
const selectedElements = getSelectedElements(board).filter(value => MindElement.isMindElement(board, value));
|
|
3878
3812
|
if (selectedElements.length > 0) {
|