@plait/draw 0.71.0 → 0.72.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/arrow-line.component.d.ts +1 -1
- package/constants/default.d.ts +1 -0
- package/constants/geometry.d.ts +5 -5
- package/constants/index.d.ts +1 -0
- package/constants/pointer.d.ts +3 -3
- package/engines/table/table.d.ts +2 -2
- package/engines/uml/combined-fragment.d.ts +2 -2
- package/engines/uml/package.d.ts +2 -2
- package/esm2022/arrow-line.component.mjs +13 -13
- package/esm2022/constants/default.mjs +2 -0
- package/esm2022/constants/geometry.mjs +8 -8
- package/esm2022/constants/index.mjs +2 -1
- package/esm2022/constants/pointer.mjs +4 -4
- package/esm2022/engines/table/table.mjs +3 -3
- package/esm2022/engines/uml/combined-fragment.mjs +5 -5
- package/esm2022/engines/uml/package.mjs +5 -5
- package/esm2022/generators/single-text.generator.mjs +3 -3
- package/esm2022/generators/text.generator.mjs +25 -21
- package/esm2022/geometry.component.mjs +4 -5
- package/esm2022/interfaces/arrow-line.mjs +1 -1
- package/esm2022/interfaces/element.mjs +1 -7
- package/esm2022/interfaces/geometry.mjs +6 -6
- package/esm2022/interfaces/index.mjs +13 -1
- package/esm2022/interfaces/options.mjs +2 -0
- package/esm2022/interfaces/vector-line.mjs +5 -5
- package/esm2022/plugins/with-arrow-line-text.mjs +2 -2
- package/esm2022/plugins/with-draw-fragment.mjs +8 -12
- package/esm2022/plugins/with-draw-hotkey.mjs +3 -3
- package/esm2022/plugins/with-draw-resize.mjs +11 -6
- package/esm2022/plugins/with-draw-rotate.mjs +3 -2
- package/esm2022/plugins/with-draw.mjs +10 -11
- package/esm2022/plugins/with-vector-line-create.mjs +123 -0
- package/esm2022/plugins/with-vector-line-resize.mjs +3 -3
- package/esm2022/table.component.mjs +8 -9
- package/esm2022/transforms/index.mjs +3 -3
- package/esm2022/transforms/multi-text-geometry-text.mjs +3 -3
- package/esm2022/utils/arrow-line/arrow-line-basic.mjs +3 -3
- package/esm2022/utils/clipboard.mjs +6 -17
- package/esm2022/utils/common.mjs +15 -8
- package/esm2022/utils/geometry.mjs +3 -3
- package/esm2022/utils/hit.mjs +21 -19
- package/esm2022/utils/index.mjs +2 -1
- package/esm2022/utils/multi-text-geometry.mjs +3 -3
- package/esm2022/utils/selected.mjs +9 -1
- package/esm2022/utils/snap-resizing.mjs +1 -1
- package/esm2022/utils/style/stroke.mjs +6 -6
- package/esm2022/utils/table.mjs +2 -2
- package/esm2022/utils/vector-line.mjs +3 -9
- package/esm2022/vector-line.component.mjs +2 -4
- package/fesm2022/plait-draw.mjs +248 -301
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/generators/single-text.generator.d.ts +2 -2
- package/generators/text.generator.d.ts +11 -11
- package/interfaces/arrow-line.d.ts +1 -1
- package/interfaces/element.d.ts +0 -5
- package/interfaces/geometry.d.ts +11 -10
- package/interfaces/index.d.ts +4 -1
- package/interfaces/options.d.ts +4 -0
- package/interfaces/vector-line.d.ts +4 -4
- package/package.json +1 -1
- package/plugins/with-vector-line-create.d.ts +2 -0
- package/styles/styles.scss +1 -1
- package/table.component.d.ts +2 -2
- package/transforms/common.d.ts +1 -1
- package/transforms/geometry.d.ts +1 -1
- package/transforms/index.d.ts +3 -3
- package/transforms/multi-text-geometry-text.d.ts +2 -2
- package/utils/clipboard.d.ts +10 -3
- package/utils/common.d.ts +5 -3
- package/utils/geometry.d.ts +6 -6
- package/utils/hit.d.ts +8 -4
- package/utils/index.d.ts +1 -0
- package/utils/multi-text-geometry.d.ts +6 -10
- package/utils/selected.d.ts +3 -1
- package/utils/snap-resizing.d.ts +2 -2
- package/utils/vector-line.d.ts +0 -1
- package/esm2022/plugins/with-geometry-resize.mjs +0 -70
- package/esm2022/plugins/with-vector-pen-create.mjs +0 -123
- package/plugins/with-geometry-resize.d.ts +0 -2
- package/plugins/with-vector-pen-create.d.ts +0 -2
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { BoardTransforms, PlaitBoard, PlaitPointerType, Transforms, addSelectedElement, clearSelectedElement, createG, distanceBetweenPointAndPoint, getElementById, toHostPoint, toViewBoxPoint } from '@plait/core';
|
|
2
|
-
import { VectorLineShape, VectorPenPointerType } from '../interfaces';
|
|
3
|
-
import { LINE_HIT_GEOMETRY_BUFFER, getVectorPenPointers } from '../constants';
|
|
4
|
-
import { isDrawingMode } from '@plait/common';
|
|
5
|
-
import { vectorLineCreating } from '../utils';
|
|
6
|
-
import { isKeyHotkey } from 'is-hotkey';
|
|
7
|
-
export const withVectorPenCreateByDraw = (board) => {
|
|
8
|
-
const { pointerDown, pointerMove, dblClick, globalKeyDown } = board;
|
|
9
|
-
let lineShapeG = null;
|
|
10
|
-
let temporaryElement = null;
|
|
11
|
-
let vectorPenRef;
|
|
12
|
-
const vectorLineComplete = () => {
|
|
13
|
-
if (vectorPenRef) {
|
|
14
|
-
clearSelectedElement(board);
|
|
15
|
-
if (vectorPenRef?.element) {
|
|
16
|
-
addSelectedElement(board, vectorPenRef?.element);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);
|
|
20
|
-
lineShapeG?.remove();
|
|
21
|
-
lineShapeG = null;
|
|
22
|
-
vectorPenRef = null;
|
|
23
|
-
temporaryElement = null;
|
|
24
|
-
};
|
|
25
|
-
board.pointerDown = (event) => {
|
|
26
|
-
const penPointers = getVectorPenPointers();
|
|
27
|
-
const isVectorPenPointer = PlaitBoard.isInPointer(board, penPointers);
|
|
28
|
-
if (isVectorPenPointer && !vectorPenRef) {
|
|
29
|
-
vectorPenRef = { shape: VectorLineShape.straight };
|
|
30
|
-
}
|
|
31
|
-
if (!PlaitBoard.isReadonly(board) && vectorPenRef && isDrawingMode(board)) {
|
|
32
|
-
let point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
33
|
-
if (!temporaryElement) {
|
|
34
|
-
vectorPenRef = {
|
|
35
|
-
...vectorPenRef,
|
|
36
|
-
start: point
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
if (!vectorPenRef.element) {
|
|
41
|
-
vectorPenRef.element = temporaryElement;
|
|
42
|
-
Transforms.insertNode(board, vectorPenRef.element, [board.children.length]);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
let points = vectorPenRef.element.points;
|
|
46
|
-
const isClosed = distanceBetweenPointAndPoint(...point, ...vectorPenRef.start) <= LINE_HIT_GEOMETRY_BUFFER;
|
|
47
|
-
if (isClosed) {
|
|
48
|
-
point = vectorPenRef.start;
|
|
49
|
-
}
|
|
50
|
-
if (vectorPenRef.path) {
|
|
51
|
-
const lastPoint = points[points.length - 1];
|
|
52
|
-
const distance = distanceBetweenPointAndPoint(...point, ...lastPoint);
|
|
53
|
-
if (distance > 2) {
|
|
54
|
-
Transforms.setNode(board, { points: [...points, point] }, vectorPenRef.path);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
vectorPenRef.element = getElementById(board, vectorPenRef.element.id);
|
|
58
|
-
if (isClosed) {
|
|
59
|
-
vectorLineComplete();
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
pointerDown(event);
|
|
65
|
-
};
|
|
66
|
-
board.pointerMove = (event) => {
|
|
67
|
-
lineShapeG?.remove();
|
|
68
|
-
lineShapeG = createG();
|
|
69
|
-
let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
70
|
-
const pointer = PlaitBoard.getPointer(board);
|
|
71
|
-
if (pointer !== VectorPenPointerType.vectorPen) {
|
|
72
|
-
vectorLineComplete();
|
|
73
|
-
}
|
|
74
|
-
if (vectorPenRef && vectorPenRef.start) {
|
|
75
|
-
let drawPoints = [vectorPenRef.start];
|
|
76
|
-
if (vectorPenRef.element) {
|
|
77
|
-
drawPoints = [vectorPenRef.start, ...vectorPenRef.element.points];
|
|
78
|
-
const path = PlaitBoard.findPath(board, vectorPenRef.element);
|
|
79
|
-
vectorPenRef.path = path;
|
|
80
|
-
}
|
|
81
|
-
const distance = distanceBetweenPointAndPoint(...movingPoint, ...vectorPenRef.start);
|
|
82
|
-
if (distance <= LINE_HIT_GEOMETRY_BUFFER) {
|
|
83
|
-
movingPoint = vectorPenRef.start;
|
|
84
|
-
PlaitBoard.getBoardContainer(board).classList.add(`vector-line-closed`);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);
|
|
88
|
-
}
|
|
89
|
-
temporaryElement = vectorLineCreating(board, vectorPenRef.shape, drawPoints, movingPoint, lineShapeG);
|
|
90
|
-
}
|
|
91
|
-
pointerMove(event);
|
|
92
|
-
};
|
|
93
|
-
board.dblClick = (event) => {
|
|
94
|
-
if (!PlaitBoard.isReadonly(board)) {
|
|
95
|
-
if (vectorPenRef) {
|
|
96
|
-
if (vectorPenRef.path) {
|
|
97
|
-
Transforms.setNode(board, { points: vectorPenRef?.element?.points }, vectorPenRef.path);
|
|
98
|
-
}
|
|
99
|
-
vectorLineComplete();
|
|
100
|
-
BoardTransforms.updatePointerType(board, PlaitPointerType.selection);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
dblClick(event);
|
|
104
|
-
};
|
|
105
|
-
board.globalKeyDown = (event) => {
|
|
106
|
-
if (!PlaitBoard.isReadonly(board)) {
|
|
107
|
-
const isEsc = isKeyHotkey('esc', event);
|
|
108
|
-
const isV = isKeyHotkey('v', event);
|
|
109
|
-
if ((isEsc || isV) && vectorPenRef) {
|
|
110
|
-
if (vectorPenRef.path) {
|
|
111
|
-
Transforms.setNode(board, { points: vectorPenRef.element?.points }, vectorPenRef.path);
|
|
112
|
-
}
|
|
113
|
-
vectorLineComplete();
|
|
114
|
-
if (isV) {
|
|
115
|
-
BoardTransforms.updatePointerType(board, PlaitPointerType.selection);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
globalKeyDown(event);
|
|
120
|
-
};
|
|
121
|
-
return board;
|
|
122
|
-
};
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC12ZWN0b3ItcGVuLWNyZWF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC12ZWN0b3ItcGVuLWNyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLDRCQUE0QixFQUM1QixjQUFjLEVBQ2QsV0FBVyxFQUNYLGNBQWMsRUFDakIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFtQixlQUFlLEVBQUUsb0JBQW9CLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBbUIsd0JBQXdCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUMzRCxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBFLElBQUksVUFBVSxHQUF1QixJQUFJLENBQUM7SUFFMUMsSUFBSSxnQkFBZ0IsR0FBMkIsSUFBSSxDQUFDO0lBRXBELElBQUksWUFBaUMsQ0FBQztJQUV0QyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtRQUM1QixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2Ysb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ3hCLGtCQUFrQixDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNMLENBQUM7UUFDRCxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzNFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNyQixVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDeEMsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUMzQyxNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXRFLElBQUksa0JBQWtCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QyxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEUsSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3BCLFlBQVksR0FBRztvQkFDWCxHQUFHLFlBQVk7b0JBQ2YsS0FBSyxFQUFFLEtBQUs7aUJBQ2YsQ0FBQztZQUNOLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN4QixZQUFZLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDO29CQUN4QyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNoRixDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ3pDLE1BQU0sUUFBUSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQU0sQ0FBQyxJQUFJLHdCQUF3QixDQUFDO29CQUM1RyxJQUFJLFFBQVEsRUFBRSxDQUFDO3dCQUNYLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBTSxDQUFDO29CQUNoQyxDQUFDO29CQUNELElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNwQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDNUMsTUFBTSxRQUFRLEdBQUcsNEJBQTRCLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQzt3QkFDdEUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7NEJBQ2YsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDakYsQ0FBQztvQkFDTCxDQUFDO29CQUNELFlBQVksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN0RSxJQUFJLFFBQVEsRUFBRSxDQUFDO3dCQUNYLGtCQUFrQixFQUFFLENBQUM7b0JBQ3pCLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDeEMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLFVBQVUsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLFdBQVcsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBb0IsQ0FBQztRQUNoRSxJQUFJLE9BQU8sS0FBSyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM3QyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZCLFVBQVUsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsT0FBUSxDQUFDLENBQUM7Z0JBQy9ELFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQzdCLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLFdBQVcsRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRixJQUFJLFFBQVEsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO2dCQUN2QyxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztnQkFDakMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM1RSxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUMvRSxDQUFDO1lBQ0QsZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRyxDQUFDO1FBQ0QsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNmLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNwQixVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUYsQ0FBQztnQkFDRCxrQkFBa0IsRUFBRSxDQUFDO2dCQUNyQixlQUFlLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7UUFDTCxDQUFDO1FBQ0QsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7UUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3BCLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzRixDQUFDO2dCQUNELGtCQUFrQixFQUFFLENBQUM7Z0JBQ3JCLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ04sZUFBZSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDekUsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQm9hcmRUcmFuc2Zvcm1zLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRQb2ludGVyVHlwZSxcbiAgICBUcmFuc2Zvcm1zLFxuICAgIGFkZFNlbGVjdGVkRWxlbWVudCxcbiAgICBjbGVhclNlbGVjdGVkRWxlbWVudCxcbiAgICBjcmVhdGVHLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgZ2V0RWxlbWVudEJ5SWQsXG4gICAgdG9Ib3N0UG9pbnQsXG4gICAgdG9WaWV3Qm94UG9pbnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRWZWN0b3JMaW5lLCBWZWN0b3JMaW5lU2hhcGUsIFZlY3RvclBlblBvaW50ZXJUeXBlLCBWZWN0b3JQZW5SZWYgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERyYXdQb2ludGVyVHlwZSwgTElORV9ISVRfR0VPTUVUUllfQlVGRkVSLCBnZXRWZWN0b3JQZW5Qb2ludGVycyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0RyYXdpbmdNb2RlIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyB2ZWN0b3JMaW5lQ3JlYXRpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBpc0tleUhvdGtleSB9IGZyb20gJ2lzLWhvdGtleSc7XG5cbmV4cG9ydCBjb25zdCB3aXRoVmVjdG9yUGVuQ3JlYXRlQnlEcmF3ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgeyBwb2ludGVyRG93biwgcG9pbnRlck1vdmUsIGRibENsaWNrLCBnbG9iYWxLZXlEb3duIH0gPSBib2FyZDtcblxuICAgIGxldCBsaW5lU2hhcGVHOiBTVkdHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgbGV0IHRlbXBvcmFyeUVsZW1lbnQ6IFBsYWl0VmVjdG9yTGluZSB8IG51bGwgPSBudWxsO1xuXG4gICAgbGV0IHZlY3RvclBlblJlZjogVmVjdG9yUGVuUmVmIHwgbnVsbDtcblxuICAgIGNvbnN0IHZlY3RvckxpbmVDb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHZlY3RvclBlblJlZikge1xuICAgICAgICAgICAgY2xlYXJTZWxlY3RlZEVsZW1lbnQoYm9hcmQpO1xuICAgICAgICAgICAgaWYgKHZlY3RvclBlblJlZj8uZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGFkZFNlbGVjdGVkRWxlbWVudChib2FyZCwgdmVjdG9yUGVuUmVmPy5lbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QucmVtb3ZlKGB2ZWN0b3ItbGluZS1jbG9zZWRgKTtcbiAgICAgICAgbGluZVNoYXBlRz8ucmVtb3ZlKCk7XG4gICAgICAgIGxpbmVTaGFwZUcgPSBudWxsO1xuICAgICAgICB2ZWN0b3JQZW5SZWYgPSBudWxsO1xuICAgICAgICB0ZW1wb3JhcnlFbGVtZW50ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgYm9hcmQucG9pbnRlckRvd24gPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBwZW5Qb2ludGVycyA9IGdldFZlY3RvclBlblBvaW50ZXJzKCk7XG4gICAgICAgIGNvbnN0IGlzVmVjdG9yUGVuUG9pbnRlciA9IFBsYWl0Qm9hcmQuaXNJblBvaW50ZXIoYm9hcmQsIHBlblBvaW50ZXJzKTtcblxuICAgICAgICBpZiAoaXNWZWN0b3JQZW5Qb2ludGVyICYmICF2ZWN0b3JQZW5SZWYpIHtcbiAgICAgICAgICAgIHZlY3RvclBlblJlZiA9IHsgc2hhcGU6IFZlY3RvckxpbmVTaGFwZS5zdHJhaWdodCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpICYmIHZlY3RvclBlblJlZiAmJiBpc0RyYXdpbmdNb2RlKGJvYXJkKSkge1xuICAgICAgICAgICAgbGV0IHBvaW50ID0gdG9WaWV3Qm94UG9pbnQoYm9hcmQsIHRvSG9zdFBvaW50KGJvYXJkLCBldmVudC54LCBldmVudC55KSk7XG4gICAgICAgICAgICBpZiAoIXRlbXBvcmFyeUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB2ZWN0b3JQZW5SZWYgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnZlY3RvclBlblJlZixcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2ZWN0b3JQZW5SZWYuZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICB2ZWN0b3JQZW5SZWYuZWxlbWVudCA9IHRlbXBvcmFyeUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShib2FyZCwgdmVjdG9yUGVuUmVmLmVsZW1lbnQsIFtib2FyZC5jaGlsZHJlbi5sZW5ndGhdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcG9pbnRzID0gdmVjdG9yUGVuUmVmLmVsZW1lbnQucG9pbnRzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0Nsb3NlZCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4ucG9pbnQsIC4uLnZlY3RvclBlblJlZi5zdGFydCEpIDw9IExJTkVfSElUX0dFT01FVFJZX0JVRkZFUjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludCA9IHZlY3RvclBlblJlZi5zdGFydCE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZlY3RvclBlblJlZi5wYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0UG9pbnQgPSBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLnBvaW50LCAuLi5sYXN0UG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBwb2ludHM6IFsuLi5wb2ludHMsIHBvaW50XSB9LCB2ZWN0b3JQZW5SZWYucGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmVjdG9yUGVuUmVmLmVsZW1lbnQgPSBnZXRFbGVtZW50QnlJZChib2FyZCwgdmVjdG9yUGVuUmVmLmVsZW1lbnQuaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvckxpbmVDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQucG9pbnRlck1vdmUgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBsaW5lU2hhcGVHPy5yZW1vdmUoKTtcbiAgICAgICAgbGluZVNoYXBlRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgbGV0IG1vdmluZ1BvaW50ID0gdG9WaWV3Qm94UG9pbnQoYm9hcmQsIHRvSG9zdFBvaW50KGJvYXJkLCBldmVudC54LCBldmVudC55KSk7XG4gICAgICAgIGNvbnN0IHBvaW50ZXIgPSBQbGFpdEJvYXJkLmdldFBvaW50ZXIoYm9hcmQpIGFzIERyYXdQb2ludGVyVHlwZTtcbiAgICAgICAgaWYgKHBvaW50ZXIgIT09IFZlY3RvclBlblBvaW50ZXJUeXBlLnZlY3RvclBlbikge1xuICAgICAgICAgICAgdmVjdG9yTGluZUNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZlY3RvclBlblJlZiAmJiB2ZWN0b3JQZW5SZWYuc3RhcnQpIHtcbiAgICAgICAgICAgIGxldCBkcmF3UG9pbnRzID0gW3ZlY3RvclBlblJlZi5zdGFydF07XG4gICAgICAgICAgICBpZiAodmVjdG9yUGVuUmVmLmVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBkcmF3UG9pbnRzID0gW3ZlY3RvclBlblJlZi5zdGFydCwgLi4udmVjdG9yUGVuUmVmLmVsZW1lbnQucG9pbnRzXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgdmVjdG9yUGVuUmVmLmVsZW1lbnQhKTtcbiAgICAgICAgICAgICAgICB2ZWN0b3JQZW5SZWYucGF0aCA9IHBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4ubW92aW5nUG9pbnQsIC4uLnZlY3RvclBlblJlZi5zdGFydCk7XG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPD0gTElORV9ISVRfR0VPTUVUUllfQlVGRkVSKSB7XG4gICAgICAgICAgICAgICAgbW92aW5nUG9pbnQgPSB2ZWN0b3JQZW5SZWYuc3RhcnQ7XG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZChgdmVjdG9yLWxpbmUtY2xvc2VkYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5yZW1vdmUoYHZlY3Rvci1saW5lLWNsb3NlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcG9yYXJ5RWxlbWVudCA9IHZlY3RvckxpbmVDcmVhdGluZyhib2FyZCwgdmVjdG9yUGVuUmVmLnNoYXBlLCBkcmF3UG9pbnRzLCBtb3ZpbmdQb2ludCwgbGluZVNoYXBlRyk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5kYmxDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkpIHtcbiAgICAgICAgICAgIGlmICh2ZWN0b3JQZW5SZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAodmVjdG9yUGVuUmVmLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHBvaW50czogdmVjdG9yUGVuUmVmPy5lbGVtZW50Py5wb2ludHMgfSwgdmVjdG9yUGVuUmVmLnBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2ZWN0b3JMaW5lQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlUG9pbnRlclR5cGUoYm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYmxDbGljayhldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmdsb2JhbEtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBjb25zdCBpc0VzYyA9IGlzS2V5SG90a2V5KCdlc2MnLCBldmVudCk7XG4gICAgICAgICAgICBjb25zdCBpc1YgPSBpc0tleUhvdGtleSgndicsIGV2ZW50KTtcbiAgICAgICAgICAgIGlmICgoaXNFc2MgfHwgaXNWKSAmJiB2ZWN0b3JQZW5SZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAodmVjdG9yUGVuUmVmLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHBvaW50czogdmVjdG9yUGVuUmVmLmVsZW1lbnQ/LnBvaW50cyB9LCB2ZWN0b3JQZW5SZWYucGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZlY3RvckxpbmVDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1YpIHtcbiAgICAgICAgICAgICAgICAgICAgQm9hcmRUcmFuc2Zvcm1zLnVwZGF0ZVBvaW50ZXJUeXBlKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdsb2JhbEtleURvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
|