@plait/draw 0.77.2 → 0.78.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/plait-draw.mjs +21 -14
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/package.json +1 -3
- package/transforms/image.d.ts +6 -0
- package/utils/hit.d.ts +1 -1
- package/esm2022/arrow-line.component.mjs +0 -165
- package/esm2022/constants/default.mjs +0 -7
- package/esm2022/constants/geometry.mjs +0 -272
- package/esm2022/constants/image.mjs +0 -2
- package/esm2022/constants/index.mjs +0 -9
- package/esm2022/constants/line.mjs +0 -12
- package/esm2022/constants/pointer.mjs +0 -23
- package/esm2022/constants/swimlane.mjs +0 -25
- package/esm2022/constants/text.mjs +0 -2
- package/esm2022/constants/theme.mjs +0 -28
- package/esm2022/engines/basic-shapes/cloud.mjs +0 -146
- package/esm2022/engines/basic-shapes/comment.mjs +0 -56
- package/esm2022/engines/basic-shapes/cross.mjs +0 -33
- package/esm2022/engines/basic-shapes/diamond.mjs +0 -16
- package/esm2022/engines/basic-shapes/ellipse.mjs +0 -53
- package/esm2022/engines/basic-shapes/hexagon.mjs +0 -27
- package/esm2022/engines/basic-shapes/left-arrow.mjs +0 -30
- package/esm2022/engines/basic-shapes/octagon.mjs +0 -29
- package/esm2022/engines/basic-shapes/parallelogram.mjs +0 -26
- package/esm2022/engines/basic-shapes/pentagon-arrow.mjs +0 -27
- package/esm2022/engines/basic-shapes/pentagon.mjs +0 -30
- package/esm2022/engines/basic-shapes/polygon.mjs +0 -56
- package/esm2022/engines/basic-shapes/process-arrow.mjs +0 -26
- package/esm2022/engines/basic-shapes/rectangle.mjs +0 -26
- package/esm2022/engines/basic-shapes/right-arrow.mjs +0 -28
- package/esm2022/engines/basic-shapes/round-comment.mjs +0 -82
- package/esm2022/engines/basic-shapes/round-rectangle.mjs +0 -58
- package/esm2022/engines/basic-shapes/star.mjs +0 -39
- package/esm2022/engines/basic-shapes/trapezoid.mjs +0 -26
- package/esm2022/engines/basic-shapes/triangle.mjs +0 -34
- package/esm2022/engines/basic-shapes/two-way-arrow.mjs +0 -25
- package/esm2022/engines/flowchart/database.mjs +0 -84
- package/esm2022/engines/flowchart/delay.mjs +0 -44
- package/esm2022/engines/flowchart/display.mjs +0 -74
- package/esm2022/engines/flowchart/document.mjs +0 -81
- package/esm2022/engines/flowchart/hard-disk.mjs +0 -84
- package/esm2022/engines/flowchart/internal-storage.mjs +0 -47
- package/esm2022/engines/flowchart/manual-input.mjs +0 -33
- package/esm2022/engines/flowchart/manual-loop.mjs +0 -26
- package/esm2022/engines/flowchart/merge.mjs +0 -34
- package/esm2022/engines/flowchart/multi-document.mjs +0 -143
- package/esm2022/engines/flowchart/note-curly-left.mjs +0 -86
- package/esm2022/engines/flowchart/note-curly-right.mjs +0 -89
- package/esm2022/engines/flowchart/note-square.mjs +0 -46
- package/esm2022/engines/flowchart/off-page.mjs +0 -32
- package/esm2022/engines/flowchart/or.mjs +0 -20
- package/esm2022/engines/flowchart/predefined-process.mjs +0 -47
- package/esm2022/engines/flowchart/preparation.mjs +0 -27
- package/esm2022/engines/flowchart/stored-data.mjs +0 -79
- package/esm2022/engines/flowchart/summing-junction.mjs +0 -23
- package/esm2022/engines/flowchart/terminal.mjs +0 -68
- package/esm2022/engines/index.mjs +0 -130
- package/esm2022/engines/table/table.mjs +0 -101
- package/esm2022/engines/uml/activity-class.mjs +0 -47
- package/esm2022/engines/uml/actor.mjs +0 -119
- package/esm2022/engines/uml/assembly.mjs +0 -105
- package/esm2022/engines/uml/combined-fragment.mjs +0 -66
- package/esm2022/engines/uml/component-box.mjs +0 -61
- package/esm2022/engines/uml/component.mjs +0 -117
- package/esm2022/engines/uml/container.mjs +0 -44
- package/esm2022/engines/uml/deletion.mjs +0 -54
- package/esm2022/engines/uml/note.mjs +0 -58
- package/esm2022/engines/uml/package.mjs +0 -105
- package/esm2022/engines/uml/provided-interface.mjs +0 -92
- package/esm2022/engines/uml/required-interface.mjs +0 -81
- package/esm2022/engines/uml/template.mjs +0 -47
- package/esm2022/generators/arrow-line-auto-complete.generator.mjs +0 -46
- package/esm2022/generators/arrow-line.generator.mjs +0 -13
- package/esm2022/generators/geometry-shape.generator.mjs +0 -29
- package/esm2022/generators/index.mjs +0 -7
- package/esm2022/generators/line-active.generator.mjs +0 -84
- package/esm2022/generators/single-text.generator.mjs +0 -16
- package/esm2022/generators/table.generator.mjs +0 -25
- package/esm2022/generators/text.generator.mjs +0 -131
- package/esm2022/generators/vector-line-generator.mjs +0 -13
- package/esm2022/geometry.component.mjs +0 -145
- package/esm2022/image.component.mjs +0 -67
- package/esm2022/interfaces/arrow-line.mjs +0 -70
- package/esm2022/interfaces/element.mjs +0 -9
- package/esm2022/interfaces/engine.mjs +0 -2
- package/esm2022/interfaces/geometry.mjs +0 -82
- package/esm2022/interfaces/image.mjs +0 -2
- package/esm2022/interfaces/index.mjs +0 -92
- package/esm2022/interfaces/line.mjs +0 -2
- package/esm2022/interfaces/options.mjs +0 -2
- package/esm2022/interfaces/swimlane.mjs +0 -13
- package/esm2022/interfaces/table.mjs +0 -13
- package/esm2022/interfaces/text.mjs +0 -2
- package/esm2022/interfaces/vector-line.mjs +0 -10
- package/esm2022/plait-draw.mjs +0 -5
- package/esm2022/plugins/with-arrow-line-auto-complete-reaction.mjs +0 -43
- package/esm2022/plugins/with-arrow-line-auto-complete.mjs +0 -76
- package/esm2022/plugins/with-arrow-line-bound-reaction.mjs +0 -53
- package/esm2022/plugins/with-arrow-line-create.mjs +0 -51
- package/esm2022/plugins/with-arrow-line-resize.mjs +0 -158
- package/esm2022/plugins/with-arrow-line-text-move.mjs +0 -53
- package/esm2022/plugins/with-arrow-line-text.mjs +0 -73
- package/esm2022/plugins/with-draw-fragment.mjs +0 -98
- package/esm2022/plugins/with-draw-hotkey.mjs +0 -45
- package/esm2022/plugins/with-draw-resize.mjs +0 -269
- package/esm2022/plugins/with-draw-rotate.mjs +0 -132
- package/esm2022/plugins/with-draw.mjs +0 -144
- package/esm2022/plugins/with-geometry-create.mjs +0 -182
- package/esm2022/plugins/with-swimlane-create.mjs +0 -127
- package/esm2022/plugins/with-swimlane.mjs +0 -21
- package/esm2022/plugins/with-table-resize.mjs +0 -135
- package/esm2022/plugins/with-table.mjs +0 -109
- package/esm2022/plugins/with-vector-line-create.mjs +0 -85
- package/esm2022/plugins/with-vector-line-resize.mjs +0 -61
- package/esm2022/public-api.mjs +0 -11
- package/esm2022/table.component.mjs +0 -162
- package/esm2022/transforms/arrow-line.mjs +0 -66
- package/esm2022/transforms/common.mjs +0 -36
- package/esm2022/transforms/geometry-text.mjs +0 -59
- package/esm2022/transforms/geometry.mjs +0 -43
- package/esm2022/transforms/image.mjs +0 -22
- package/esm2022/transforms/index.mjs +0 -36
- package/esm2022/transforms/multi-text-geometry-text.mjs +0 -15
- package/esm2022/transforms/swimlane.mjs +0 -164
- package/esm2022/transforms/table-text.mjs +0 -44
- package/esm2022/transforms/table.mjs +0 -36
- package/esm2022/transforms/vector-line.mjs +0 -13
- package/esm2022/utils/arrow-line/arrow-line-arrow.mjs +0 -123
- package/esm2022/utils/arrow-line/arrow-line-basic.mjs +0 -205
- package/esm2022/utils/arrow-line/arrow-line-common.mjs +0 -162
- package/esm2022/utils/arrow-line/arrow-line-resize.mjs +0 -309
- package/esm2022/utils/arrow-line/elbow.mjs +0 -114
- package/esm2022/utils/arrow-line/index.mjs +0 -6
- package/esm2022/utils/clipboard.mjs +0 -55
- package/esm2022/utils/common.mjs +0 -184
- package/esm2022/utils/geometry.mjs +0 -178
- package/esm2022/utils/hit.mjs +0 -242
- package/esm2022/utils/index.mjs +0 -17
- package/esm2022/utils/line.mjs +0 -64
- package/esm2022/utils/memorize.mjs +0 -93
- package/esm2022/utils/multi-text-geometry.mjs +0 -61
- package/esm2022/utils/polygon.mjs +0 -30
- package/esm2022/utils/position/arrow-line.mjs +0 -20
- package/esm2022/utils/position/geometry.mjs +0 -30
- package/esm2022/utils/position/line.mjs +0 -51
- package/esm2022/utils/selected.mjs +0 -39
- package/esm2022/utils/shape.mjs +0 -11
- package/esm2022/utils/snap-resizing.mjs +0 -185
- package/esm2022/utils/style/index.mjs +0 -2
- package/esm2022/utils/style/stroke.mjs +0 -21
- package/esm2022/utils/swimlane.mjs +0 -124
- package/esm2022/utils/table-selected.mjs +0 -21
- package/esm2022/utils/table.mjs +0 -172
- package/esm2022/utils/uml.mjs +0 -90
- package/esm2022/utils/vector-line.mjs +0 -71
- package/esm2022/vector-line.component.mjs +0 -55
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { PlaitNode, Point } from '@plait/core';
|
|
2
|
-
import { simplifyOrthogonalPoints, withResize } from '@plait/common';
|
|
3
|
-
import { getSelectedArrowLineElements } from '../utils/selected';
|
|
4
|
-
import { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';
|
|
5
|
-
import { ArrowLineShape } from '../interfaces';
|
|
6
|
-
import { DrawTransforms } from '../transforms';
|
|
7
|
-
import { getElbowPoints, getNextRenderPoints, isUseDefaultOrthogonalRoute } from '../utils/arrow-line/elbow';
|
|
8
|
-
import { alignElbowSegment, alignPoints, getIndexAndDeleteCountByKeyPoint, getResizedPreviousAndNextPoint, hasIllegalElbowPoint } from '../utils/arrow-line/arrow-line-resize';
|
|
9
|
-
import { getHitConnection, getArrowLinePoints } from '../utils/arrow-line/arrow-line-basic';
|
|
10
|
-
import { getElbowLineRouteOptions } from '../utils/arrow-line';
|
|
11
|
-
import { getSnappingShape } from '../utils';
|
|
12
|
-
export const withArrowLineResize = (board) => {
|
|
13
|
-
let elbowLineIndex;
|
|
14
|
-
let elbowLineDeleteCount;
|
|
15
|
-
let elbowSourcePoint;
|
|
16
|
-
let elbowTargetPoint;
|
|
17
|
-
let elbowNextRenderPoints;
|
|
18
|
-
const options = {
|
|
19
|
-
key: 'draw-line',
|
|
20
|
-
canResize: () => {
|
|
21
|
-
return true;
|
|
22
|
-
},
|
|
23
|
-
hitTest: (point) => {
|
|
24
|
-
const selectedLineElements = getSelectedArrowLineElements(board);
|
|
25
|
-
if (selectedLineElements.length > 0) {
|
|
26
|
-
let result = null;
|
|
27
|
-
selectedLineElements.forEach(value => {
|
|
28
|
-
const handleRef = getHitLineResizeHandleRef(board, value, point);
|
|
29
|
-
if (handleRef) {
|
|
30
|
-
result = {
|
|
31
|
-
element: value,
|
|
32
|
-
handle: handleRef.handle,
|
|
33
|
-
handleIndex: handleRef.handleIndex
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
return result;
|
|
38
|
-
}
|
|
39
|
-
return null;
|
|
40
|
-
},
|
|
41
|
-
beforeResize: (resizeRef) => {
|
|
42
|
-
if (resizeRef.element.shape === ArrowLineShape.elbow &&
|
|
43
|
-
resizeRef.handle !== LineResizeHandle.source &&
|
|
44
|
-
resizeRef.handle !== LineResizeHandle.target) {
|
|
45
|
-
const params = getElbowLineRouteOptions(board, resizeRef.element);
|
|
46
|
-
if (isUseDefaultOrthogonalRoute(resizeRef.element, params)) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
const points = [...resizeRef.element.points];
|
|
50
|
-
const handleIndex = resizeRef.handleIndex;
|
|
51
|
-
const pointsOnElbow = getElbowPoints(board, resizeRef.element);
|
|
52
|
-
elbowSourcePoint = pointsOnElbow[0];
|
|
53
|
-
elbowTargetPoint = pointsOnElbow[pointsOnElbow.length - 1];
|
|
54
|
-
elbowNextRenderPoints = getNextRenderPoints(board, resizeRef.element, pointsOnElbow);
|
|
55
|
-
const value = getIndexAndDeleteCountByKeyPoint(board, resizeRef.element, [...points], elbowNextRenderPoints, handleIndex);
|
|
56
|
-
elbowLineIndex = value.index;
|
|
57
|
-
elbowLineDeleteCount = value.deleteCount;
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
onResize: (resizeRef, resizeState) => {
|
|
61
|
-
let points = [...resizeRef.element.points];
|
|
62
|
-
let source = { ...resizeRef.element.source };
|
|
63
|
-
let target = { ...resizeRef.element.target };
|
|
64
|
-
let handleIndex = resizeRef.handleIndex;
|
|
65
|
-
const hitElement = getSnappingShape(board, resizeState.endPoint);
|
|
66
|
-
if (resizeRef.handle === LineResizeHandle.source || resizeRef.handle === LineResizeHandle.target) {
|
|
67
|
-
const object = resizeRef.handle === LineResizeHandle.source ? source : target;
|
|
68
|
-
points[handleIndex] = resizeState.endPoint;
|
|
69
|
-
if (hitElement) {
|
|
70
|
-
object.connection = getHitConnection(board, resizeState.endPoint, hitElement);
|
|
71
|
-
object.boundId = hitElement.id;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
object.connection = undefined;
|
|
75
|
-
object.boundId = undefined;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
if (resizeRef.element.shape === ArrowLineShape.elbow) {
|
|
80
|
-
if (elbowNextRenderPoints && elbowSourcePoint && elbowTargetPoint) {
|
|
81
|
-
const resizedPreviousAndNextPoint = getResizedPreviousAndNextPoint(elbowNextRenderPoints, elbowSourcePoint, elbowTargetPoint, handleIndex);
|
|
82
|
-
const startKeyPoint = elbowNextRenderPoints[handleIndex];
|
|
83
|
-
const endKeyPoint = elbowNextRenderPoints[handleIndex + 1];
|
|
84
|
-
const [newStartPoint, newEndPoint] = alignElbowSegment(startKeyPoint, endKeyPoint, resizeState, resizedPreviousAndNextPoint);
|
|
85
|
-
let midDataPoints = [...points].slice(1, points.length - 1);
|
|
86
|
-
if (elbowLineIndex !== null && elbowLineDeleteCount !== null) {
|
|
87
|
-
if (hasIllegalElbowPoint(midDataPoints)) {
|
|
88
|
-
midDataPoints = [newStartPoint, newEndPoint];
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
midDataPoints.splice(elbowLineIndex, elbowLineDeleteCount, newStartPoint, newEndPoint);
|
|
92
|
-
}
|
|
93
|
-
points = [elbowSourcePoint, ...midDataPoints, elbowTargetPoint];
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
if (resizeRef.handle === LineResizeHandle.addHandle) {
|
|
99
|
-
points.splice(handleIndex + 1, 0, resizeState.endPoint);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
points[handleIndex] = resizeState.endPoint;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
if (!hitElement) {
|
|
107
|
-
handleIndex = resizeRef.handle === LineResizeHandle.addHandle ? handleIndex + 1 : handleIndex;
|
|
108
|
-
const drawPoints = getArrowLinePoints(board, resizeRef.element);
|
|
109
|
-
const newPoints = [...points];
|
|
110
|
-
newPoints[0] = drawPoints[0];
|
|
111
|
-
newPoints[newPoints.length - 1] = drawPoints[drawPoints.length - 1];
|
|
112
|
-
if (resizeRef.element.shape !== ArrowLineShape.elbow ||
|
|
113
|
-
(resizeRef.element.shape === ArrowLineShape.elbow && newPoints.length === 2)) {
|
|
114
|
-
newPoints.forEach((point, index) => {
|
|
115
|
-
if (index === handleIndex)
|
|
116
|
-
return;
|
|
117
|
-
if (points[handleIndex]) {
|
|
118
|
-
points[handleIndex] = alignPoints(point, points[handleIndex]);
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
DrawTransforms.resizeArrowLine(board, { points, source, target }, resizeRef.path);
|
|
124
|
-
},
|
|
125
|
-
afterResize: (resizeRef) => {
|
|
126
|
-
if (resizeRef.element.shape === ArrowLineShape.elbow) {
|
|
127
|
-
const element = PlaitNode.get(board, resizeRef.path);
|
|
128
|
-
let points = element && [...element.points];
|
|
129
|
-
if (points.length > 2 && elbowNextRenderPoints && elbowSourcePoint && elbowTargetPoint) {
|
|
130
|
-
const nextSourcePoint = elbowNextRenderPoints[0];
|
|
131
|
-
const nextTargetPoint = elbowNextRenderPoints[elbowNextRenderPoints.length - 1];
|
|
132
|
-
points.splice(0, 1, nextSourcePoint);
|
|
133
|
-
points.splice(-1, 1, nextTargetPoint);
|
|
134
|
-
points = simplifyOrthogonalPoints(points);
|
|
135
|
-
if (Point.isEquals(points[0], nextSourcePoint)) {
|
|
136
|
-
points.splice(0, 1);
|
|
137
|
-
}
|
|
138
|
-
if (Point.isEquals(points[points.length - 1], nextTargetPoint)) {
|
|
139
|
-
points.pop();
|
|
140
|
-
}
|
|
141
|
-
if (points.length === 1) {
|
|
142
|
-
points = [];
|
|
143
|
-
}
|
|
144
|
-
points = [elbowSourcePoint, ...points, elbowTargetPoint];
|
|
145
|
-
DrawTransforms.resizeArrowLine(board, { points }, resizeRef.path);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
elbowLineIndex = null;
|
|
149
|
-
elbowLineDeleteCount = null;
|
|
150
|
-
elbowSourcePoint = null;
|
|
151
|
-
elbowTargetPoint = null;
|
|
152
|
-
elbowNextRenderPoints = null;
|
|
153
|
-
}
|
|
154
|
-
};
|
|
155
|
-
withResize(board, options);
|
|
156
|
-
return board;
|
|
157
|
-
};
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1hcnJvdy1saW5lLXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1hcnJvdy1saW5lLXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUE2Qyx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckYsT0FBTyxFQUFtQixjQUFjLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdHLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsV0FBVyxFQUNYLGdDQUFnQyxFQUNoQyw4QkFBOEIsRUFDOUIsb0JBQW9CLEVBQ3ZCLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3JELElBQUksY0FBNkIsQ0FBQztJQUNsQyxJQUFJLG9CQUFtQyxDQUFDO0lBQ3hDLElBQUksZ0JBQThCLENBQUM7SUFDbkMsSUFBSSxnQkFB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Q0FBQzt3QkFDN0QsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNqQixDQUFDO29CQUNELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEIsTUFBTSxHQUFHLEVBQUUsQ0FBQztvQkFDaEIsQ0FBQztvQkFDRCxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO29CQUN6RCxjQUFjLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVMsQ0FBQyxJQUFZLENBQUMsQ0FBQztnQkFDOUUsQ0FBQztZQUNMLENBQUM7WUFDRCxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUM1QixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDeEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDO0tBQ0osQ0FBQztJQUVGLFVBQVUsQ0FBbUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTdELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhdGgsIFBsYWl0Qm9hcmQsIFBsYWl0Tm9kZSwgUG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBSZXNpemVSZWYsIFJlc2l6ZVN0YXRlLCBXaXRoUmVzaXplT3B0aW9ucywgc2ltcGxpZnlPcnRob2dvbmFsUG9pbnRzLCB3aXRoUmVzaXplIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWxlY3RlZEFycm93TGluZUVsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQnO1xuaW1wb3J0IHsgZ2V0SGl0TGluZVJlc2l6ZUhhbmRsZVJlZiwgTGluZVJlc2l6ZUhhbmRsZSB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2xpbmUnO1xuaW1wb3J0IHsgQXJyb3dMaW5lSGFuZGxlLCBBcnJvd0xpbmVTaGFwZSwgUGxhaXRBcnJvd0xpbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERyYXdUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBnZXRFbGJvd1BvaW50cywgZ2V0TmV4dFJlbmRlclBvaW50cywgaXNVc2VEZWZhdWx0T3J0aG9nb25hbFJvdXRlIH0gZnJvbSAnLi4vdXRpbHMvYXJyb3ctbGluZS9lbGJvdyc7XG5pbXBvcnQge1xuICAgIGFsaWduRWxib3dTZWdtZW50LFxuICAgIGFsaWduUG9pbnRzLFxuICAgIGdldEluZGV4QW5kRGVsZXRlQ291bnRCeUtleVBvaW50LFxuICAgIGdldFJlc2l6ZWRQcmV2aW91c0FuZE5leHRQb2ludCxcbiAgICBoYXNJbGxlZ2FsRWxib3dQb2ludFxufSBmcm9tICcuLi91dGlscy9hcnJvdy1saW5lL2Fycm93LWxpbmUtcmVzaXplJztcbmltcG9ydCB7IGdldEhpdENvbm5lY3Rpb24sIGdldEFycm93TGluZVBvaW50cyB9IGZyb20gJy4uL3V0aWxzL2Fycm93LWxpbmUvYXJyb3ctbGluZS1iYXNpYyc7XG5pbXBvcnQgeyBnZXRFbGJvd0xpbmVSb3V0ZU9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9hcnJvdy1saW5lJztcbmltcG9ydCB7IGdldFNuYXBwaW5nU2hhcGUgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCB3aXRoQXJyb3dMaW5lUmVzaXplID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgbGV0IGVsYm93TGluZUluZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIGxldCBlbGJvd0xpbmVEZWxldGVDb3VudDogbnVtYmVyIHwgbnVsbDtcbiAgICBsZXQgZWxib3dTb3VyY2VQb2ludDogUG9pbnQgfCBudWxsO1xuICAgIGxldCBlbGJvd1RhcmdldFBvaW50OiBQb2ludCB8IG51bGw7XG4gICAgbGV0IGVsYm93TmV4dFJlbmRlclBvaW50czogUG9pbnRbXSB8IG51bGw7XG5cbiAgICBjb25zdCBvcHRpb25zOiBXaXRoUmVzaXplT3B0aW9uczxQbGFpdEFycm93TGluZSwgTGluZVJlc2l6ZUhhbmRsZT4gPSB7XG4gICAgICAgIGtleTogJ2RyYXctbGluZScsXG4gICAgICAgIGNhblJlc2l6ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGhpdFRlc3Q6IChwb2ludDogUG9pbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTGluZUVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRBcnJvd0xpbmVFbGVtZW50cyhib2FyZCk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRMaW5lRWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkTGluZUVsZW1lbnRzLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVSZWYgPSBnZXRIaXRMaW5lUmVzaXplSGFuZGxlUmVmKGJvYXJkLCB2YWx1ZSwgcG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlOiBoYW5kbGVSZWYuaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4OiBoYW5kbGVSZWYuaGFuZGxlSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJlZm9yZVJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0QXJyb3dMaW5lLCBMaW5lUmVzaXplSGFuZGxlPikgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHJlc2l6ZVJlZi5lbGVtZW50LnNoYXBlID09PSBBcnJvd0xpbmVTaGFwZS5lbGJvdyAmJlxuICAgICAgICAgICAgICAgIHJlc2l6ZVJlZi5oYW5kbGUgIT09IExpbmVSZXNpemVIYW5kbGUuc291cmNlICYmXG4gICAgICAgICAgICAgICAgcmVzaXplUmVmLmhhbmRsZSAhPT0gTGluZVJlc2l6ZUhhbmRsZS50YXJnZXRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGdldEVsYm93TGluZVJvdXRlT3B0aW9ucyhib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChpc1VzZURlZmF1bHRPcnRob2dvbmFsUm91dGUocmVzaXplUmVmLmVsZW1lbnQsIHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludHM6IFBvaW50W10gPSBbLi4ucmVzaXplUmVmLmVsZW1lbnQucG9pbnRzXTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVJbmRleCA9IHJlc2l6ZVJlZi5oYW5kbGVJbmRleCE7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRzT25FbGJvdyA9IGdldEVsYm93UG9pbnRzKGJvYXJkLCByZXNpemVSZWYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxib3dTb3VyY2VQb2ludCA9IHBvaW50c09uRWxib3dbMF07XG4gICAgICAgICAgICAgICAgZWxib3dUYXJnZXRQb2ludCA9IHBvaW50c09uRWxib3dbcG9pbnRzT25FbGJvdy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBlbGJvd05leHRSZW5kZXJQb2ludHMgPSBnZXROZXh0UmVuZGVyUG9pbnRzKGJvYXJkLCByZXNpemVSZWYuZWxlbWVudCwgcG9pbnRzT25FbGJvdyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEluZGV4QW5kRGVsZXRlQ291bnRCeUtleVBvaW50KGJvYXJkLCByZXNpemVSZWYuZWxlbWVudCwgWy4uLnBvaW50c10sIGVsYm93TmV4dFJlbmRlclBvaW50cywgaGFuZGxlSW5kZXgpO1xuICAgICAgICAgICAgICAgIGVsYm93TGluZUluZGV4ID0gdmFsdWUuaW5kZXg7XG4gICAgICAgICAgICAgICAgZWxib3dMaW5lRGVsZXRlQ291bnQgPSB2YWx1ZS5kZWxldGVDb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25SZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxQbGFpdEFycm93TGluZSwgTGluZVJlc2l6ZUhhbmRsZT4sIHJlc2l6ZVN0YXRlOiBSZXNpemVTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHBvaW50czogUG9pbnRbXSA9IFsuLi5yZXNpemVSZWYuZWxlbWVudC5wb2ludHNdO1xuICAgICAgICAgICAgbGV0IHNvdXJjZTogQXJyb3dMaW5lSGFuZGxlID0geyAuLi5yZXNpemVSZWYuZWxlbWVudC5zb3VyY2UgfTtcbiAgICAgICAgICAgIGxldCB0YXJnZXQ6IEFycm93TGluZUhhbmRsZSA9IHsgLi4ucmVzaXplUmVmLmVsZW1lbnQudGFyZ2V0IH07XG4gICAgICAgICAgICBsZXQgaGFuZGxlSW5kZXggPSByZXNpemVSZWYuaGFuZGxlSW5kZXghO1xuICAgICAgICAgICAgY29uc3QgaGl0RWxlbWVudCA9IGdldFNuYXBwaW5nU2hhcGUoYm9hcmQsIHJlc2l6ZVN0YXRlLmVuZFBvaW50KTtcbiAgICAgICAgICAgIGlmIChyZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLnNvdXJjZSB8fCByZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IHJlc2l6ZVJlZi5oYW5kbGUgPT09IExpbmVSZXNpemVIYW5kbGUuc291cmNlID8gc291cmNlIDogdGFyZ2V0O1xuICAgICAgICAgICAgICAgIHBvaW50c1toYW5kbGVJbmRleF0gPSByZXNpemVTdGF0ZS5lbmRQb2ludDtcbiAgICAgICAgICAgICAgICBpZiAoaGl0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3QuY29ubmVjdGlvbiA9IGdldEhpdENvbm5lY3Rpb24oYm9hcmQsIHJlc2l6ZVN0YXRlLmVuZFBvaW50LCBoaXRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJvdW5kSWQgPSBoaXRFbGVtZW50LmlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5jb25uZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBvYmplY3QuYm91bmRJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZXNpemVSZWYuZWxlbWVudC5zaGFwZSA9PT0gQXJyb3dMaW5lU2hhcGUuZWxib3cpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsYm93TmV4dFJlbmRlclBvaW50cyAmJiBlbGJvd1NvdXJjZVBvaW50ICYmIGVsYm93VGFyZ2V0UG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZWRQcmV2aW91c0FuZE5leHRQb2ludCA9IGdldFJlc2l6ZWRQcmV2aW91c0FuZE5leHRQb2ludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGJvd05leHRSZW5kZXJQb2ludHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxib3dTb3VyY2VQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGJvd1RhcmdldFBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRLZXlQb2ludCA9IGVsYm93TmV4dFJlbmRlclBvaW50c1toYW5kbGVJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRLZXlQb2ludCA9IGVsYm93TmV4dFJlbmRlclBvaW50c1toYW5kbGVJbmRleCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW25ld1N0YXJ0UG9pbnQsIG5ld0VuZFBvaW50XSA9IGFsaWduRWxib3dTZWdtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0S2V5UG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kS2V5UG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplZFByZXZpb3VzQW5kTmV4dFBvaW50XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1pZERhdGFQb2ludHM6IFBvaW50W10gPSBbLi4ucG9pbnRzXS5zbGljZSgxLCBwb2ludHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxib3dMaW5lSW5kZXggIT09IG51bGwgJiYgZWxib3dMaW5lRGVsZXRlQ291bnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSWxsZWdhbEVsYm93UG9pbnQobWlkRGF0YVBvaW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlkRGF0YVBvaW50cyA9IFtuZXdTdGFydFBvaW50LCBuZXdFbmRQb2ludF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlkRGF0YVBvaW50cy5zcGxpY2UoZWxib3dMaW5lSW5kZXgsIGVsYm93TGluZURlbGV0ZUNvdW50LCBuZXdTdGFydFBvaW50LCBuZXdFbmRQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IFtlbGJvd1NvdXJjZVBvaW50LCAuLi5taWREYXRhUG9pbnRzLCBlbGJvd1RhcmdldFBvaW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLmFkZEhhbmRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnNwbGljZShoYW5kbGVJbmRleCArIDEsIDAsIHJlc2l6ZVN0YXRlLmVuZFBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1toYW5kbGVJbmRleF0gPSByZXNpemVTdGF0ZS5lbmRQb2ludDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFoaXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlSW5kZXggPSByZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLmFkZEhhbmRsZSA/IGhhbmRsZUluZGV4ICsgMSA6IGhhbmRsZUluZGV4O1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYXdQb2ludHMgPSBnZXRBcnJvd0xpbmVQb2ludHMoYm9hcmQsIHJlc2l6ZVJlZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQb2ludHMgPSBbLi4ucG9pbnRzXTtcbiAgICAgICAgICAgICAgICBuZXdQb2ludHNbMF0gPSBkcmF3UG9pbnRzWzBdO1xuICAgICAgICAgICAgICAgIG5ld1BvaW50c1tuZXdQb2ludHMubGVuZ3RoIC0gMV0gPSBkcmF3UG9pbnRzW2RyYXdQb2ludHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICByZXNpemVSZWYuZWxlbWVudC5zaGFwZSAhPT0gQXJyb3dMaW5lU2hhcGUuZWxib3cgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc2l6ZVJlZi5lbGVtZW50LnNoYXBlID09PSBBcnJvd0xpbmVTaGFwZS5lbGJvdyAmJiBuZXdQb2ludHMubGVuZ3RoID09PSAyKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBuZXdQb2ludHMuZm9yRWFjaCgocG9pbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGhhbmRsZUluZGV4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRzW2hhbmRsZUluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1toYW5kbGVJbmRleF0gPSBhbGlnblBvaW50cyhwb2ludCwgcG9pbnRzW2hhbmRsZUluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLnJlc2l6ZUFycm93TGluZShib2FyZCwgeyBwb2ludHMsIHNvdXJjZSwgdGFyZ2V0IH0sIHJlc2l6ZVJlZi5wYXRoIGFzIFBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICBhZnRlclJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0QXJyb3dMaW5lLCBMaW5lUmVzaXplSGFuZGxlPikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc2l6ZVJlZi5lbGVtZW50LnNoYXBlID09PSBBcnJvd0xpbmVTaGFwZS5lbGJvdykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBQbGFpdE5vZGUuZ2V0KGJvYXJkLCByZXNpemVSZWYucGF0aCBhcyBQYXRoKTtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnRzID0gZWxlbWVudCAmJiBbLi4uZWxlbWVudC5wb2ludHMhXTtcbiAgICAgICAgICAgICAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDIgJiYgZWxib3dOZXh0UmVuZGVyUG9pbnRzICYmIGVsYm93U291cmNlUG9pbnQgJiYgZWxib3dUYXJnZXRQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0U291cmNlUG9pbnQgPSBlbGJvd05leHRSZW5kZXJQb2ludHNbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXRQb2ludCA9IGVsYm93TmV4dFJlbmRlclBvaW50c1tlbGJvd05leHRSZW5kZXJQb2ludHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIHBvaW50cy5zcGxpY2UoMCwgMSwgbmV4dFNvdXJjZVBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnNwbGljZSgtMSwgMSwgbmV4dFRhcmdldFBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gc2ltcGxpZnlPcnRob2dvbmFsUG9pbnRzKHBvaW50cyEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoUG9pbnQuaXNFcXVhbHMocG9pbnRzWzBdLCBuZXh0U291cmNlUG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMuc3BsaWNlKDAsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChQb2ludC5pc0VxdWFscyhwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdLCBuZXh0VGFyZ2V0UG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IFtlbGJvd1NvdXJjZVBvaW50LCAuLi5wb2ludHMsIGVsYm93VGFyZ2V0UG9pbnRdO1xuICAgICAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5yZXNpemVBcnJvd0xpbmUoYm9hcmQsIHsgcG9pbnRzIH0sIHJlc2l6ZVJlZi5wYXRoIGFzIFBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsYm93TGluZUluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgIGVsYm93TGluZURlbGV0ZUNvdW50ID0gbnVsbDtcbiAgICAgICAgICAgIGVsYm93U291cmNlUG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgZWxib3dUYXJnZXRQb2ludCA9IG51bGw7XG4gICAgICAgICAgICBlbGJvd05leHRSZW5kZXJQb2ludHMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHdpdGhSZXNpemU8UGxhaXRBcnJvd0xpbmUsIExpbmVSZXNpemVIYW5kbGU+KGJvYXJkLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG4iXX0=
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { distanceBetweenPointAndSegments, getHitElementByPoint, getNearestPointBetweenPointAndSegments } from '@plait/core';
|
|
2
|
-
import { PlaitDrawElement } from '../interfaces';
|
|
3
|
-
import { ResizeHandle, getRatioByPoint, getTextManages, withResize } from '@plait/common';
|
|
4
|
-
import { DrawTransforms } from '../transforms';
|
|
5
|
-
import { getArrowLinePoints } from '../utils/arrow-line/arrow-line-basic';
|
|
6
|
-
import { getHitArrowLineTextIndex } from '../utils/position/arrow-line';
|
|
7
|
-
export const withArrowLineTextMove = (board) => {
|
|
8
|
-
let textIndex = 0;
|
|
9
|
-
const movableBuffer = 100;
|
|
10
|
-
const options = {
|
|
11
|
-
key: 'line-text',
|
|
12
|
-
canResize: () => {
|
|
13
|
-
return true;
|
|
14
|
-
},
|
|
15
|
-
hitTest: (point) => {
|
|
16
|
-
let result = null;
|
|
17
|
-
const line = getHitElementByPoint(board, point, (element) => {
|
|
18
|
-
return PlaitDrawElement.isArrowLine(element);
|
|
19
|
-
});
|
|
20
|
-
if (line) {
|
|
21
|
-
const index = getHitArrowLineTextIndex(board, line, point);
|
|
22
|
-
const textManages = getTextManages(line);
|
|
23
|
-
const textManage = textManages[index];
|
|
24
|
-
if (index !== -1 && !textManage.isEditing) {
|
|
25
|
-
textIndex = index;
|
|
26
|
-
return { element: line, handle: ResizeHandle.e };
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return result;
|
|
30
|
-
},
|
|
31
|
-
onResize: (resizeRef, resizeState) => {
|
|
32
|
-
const element = resizeRef.element;
|
|
33
|
-
if (element) {
|
|
34
|
-
const movingPoint = resizeState.endPoint;
|
|
35
|
-
const points = getArrowLinePoints(board, element);
|
|
36
|
-
const distance = distanceBetweenPointAndSegments(movingPoint, points);
|
|
37
|
-
if (distance <= movableBuffer) {
|
|
38
|
-
const point = getNearestPointBetweenPointAndSegments(movingPoint, points, false);
|
|
39
|
-
const position = getRatioByPoint(points, point);
|
|
40
|
-
const texts = [...element.texts];
|
|
41
|
-
texts[textIndex] = {
|
|
42
|
-
...texts[textIndex],
|
|
43
|
-
position
|
|
44
|
-
};
|
|
45
|
-
DrawTransforms.setArrowLineTexts(board, element, texts);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
withResize(board, options);
|
|
51
|
-
return board;
|
|
52
|
-
};
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1hcnJvdy1saW5lLXRleHQtbW92ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1hcnJvdy1saW5lLXRleHQtbW92ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsK0JBQStCLEVBQy9CLG9CQUFvQixFQUNwQixzQ0FBc0MsRUFDekMsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFrQixnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUE2QyxlQUFlLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3ZELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7SUFDMUIsTUFBTSxPQUFPLEdBQXNDO1FBQy9DLEdBQUcsRUFBRSxXQUFXO1FBQ2hCLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFxQixFQUFFLEVBQUU7Z0JBQ3RFLE9BQU8sZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBK0IsQ0FBQztZQUNqQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNQLE1BQU0sS0FBSyxHQUFHLHdCQUF3QixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzNELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDeEMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDbEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO1FBQ0QsUUFBUSxFQUFFLENBQUMsU0FBb0MsRUFBRSxXQUF3QixFQUFFLEVBQUU7WUFDekUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUNsQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0JBQ3pDLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxRQUFRLEdBQUcsK0JBQStCLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLFFBQVEsSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDNUIsTUFBTSxLQUFLLEdBQUcsc0NBQXNDLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDakYsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDaEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHO3dCQUNmLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQzt3QkFDbkIsUUFBUTtxQkFDWCxDQUFDO29CQUNGLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM1RCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7S0FDSixDQUFDO0lBRUYsVUFBVSxDQUFpQixLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFM0MsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQb2ludCxcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnRzLFxuICAgIGdldEhpdEVsZW1lbnRCeVBvaW50LFxuICAgIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0QXJyb3dMaW5lLCBQbGFpdERyYXdFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZXNpemVIYW5kbGUsIFJlc2l6ZVJlZiwgUmVzaXplU3RhdGUsIFdpdGhSZXNpemVPcHRpb25zLCBnZXRSYXRpb0J5UG9pbnQsIGdldFRleHRNYW5hZ2VzLCB3aXRoUmVzaXplIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBEcmF3VHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZ2V0QXJyb3dMaW5lUG9pbnRzIH0gZnJvbSAnLi4vdXRpbHMvYXJyb3ctbGluZS9hcnJvdy1saW5lLWJhc2ljJztcbmltcG9ydCB7IGdldEhpdEFycm93TGluZVRleHRJbmRleCB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2Fycm93LWxpbmUnO1xuXG5leHBvcnQgY29uc3Qgd2l0aEFycm93TGluZVRleHRNb3ZlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgbGV0IHRleHRJbmRleCA9IDA7XG4gICAgY29uc3QgbW92YWJsZUJ1ZmZlciA9IDEwMDtcbiAgICBjb25zdCBvcHRpb25zOiBXaXRoUmVzaXplT3B0aW9uczxQbGFpdEFycm93TGluZT4gPSB7XG4gICAgICAgIGtleTogJ2xpbmUtdGV4dCcsXG4gICAgICAgIGNhblJlc2l6ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGhpdFRlc3Q6IChwb2ludDogUG9pbnQpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IGdldEhpdEVsZW1lbnRCeVBvaW50KGJvYXJkLCBwb2ludCwgKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSkgYXMgdW5kZWZpbmVkIHwgUGxhaXRBcnJvd0xpbmU7XG4gICAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZ2V0SGl0QXJyb3dMaW5lVGV4dEluZGV4KGJvYXJkLCBsaW5lLCBwb2ludCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dE1hbmFnZXMgPSBnZXRUZXh0TWFuYWdlcyhsaW5lKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0TWFuYWdlID0gdGV4dE1hbmFnZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgIXRleHRNYW5hZ2UuaXNFZGl0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBlbGVtZW50OiBsaW5lLCBoYW5kbGU6IFJlc2l6ZUhhbmRsZS5lIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxQbGFpdEFycm93TGluZT4sIHJlc2l6ZVN0YXRlOiBSZXNpemVTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHJlc2l6ZVJlZi5lbGVtZW50O1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3ZpbmdQb2ludCA9IHJlc2l6ZVN0YXRlLmVuZFBvaW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50cyA9IGdldEFycm93TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKG1vdmluZ1BvaW50LCBwb2ludHMpO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8PSBtb3ZhYmxlQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMobW92aW5nUG9pbnQsIHBvaW50cywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFJhdGlvQnlQb2ludChwb2ludHMsIHBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dHMgPSBbLi4uZWxlbWVudC50ZXh0c107XG4gICAgICAgICAgICAgICAgICAgIHRleHRzW3RleHRJbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50ZXh0c1t0ZXh0SW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgRHJhd1RyYW5zZm9ybXMuc2V0QXJyb3dMaW5lVGV4dHMoYm9hcmQsIGVsZW1lbnQsIHRleHRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgd2l0aFJlc2l6ZTxQbGFpdEFycm93TGluZT4oYm9hcmQsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcbiJdfQ==
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, PlaitNode, getHitElementByPoint, getI18nValue, getNearestPointBetweenPointAndSegments, toHostPoint, toViewBoxPoint } from '@plait/core';
|
|
2
|
-
import { PlaitDrawElement } from '../interfaces';
|
|
3
|
-
import { Node } from 'slate';
|
|
4
|
-
import { buildText, DEFAULT_FONT_FAMILY, getMemorizedLatest, getRatioByPoint, getTextManages, measureElement } from '@plait/common';
|
|
5
|
-
import { DrawTransforms } from '../transforms';
|
|
6
|
-
import { getArrowLinePoints } from '../utils/arrow-line/arrow-line-basic';
|
|
7
|
-
import { getHitArrowLineTextIndex } from '../utils/position/arrow-line';
|
|
8
|
-
import { isHitArrowLineText } from '../utils/hit';
|
|
9
|
-
import { LINE_TEXT } from '../constants/line';
|
|
10
|
-
import { DEFAULT_FONT_SIZE } from '@plait/text-plugins';
|
|
11
|
-
import { DrawI18nKey } from '../constants/default';
|
|
12
|
-
export const getDefaultLineText = (board) => {
|
|
13
|
-
return getI18nValue(board, DrawI18nKey.lineText, LINE_TEXT);
|
|
14
|
-
};
|
|
15
|
-
export const withArrowLineText = (board) => {
|
|
16
|
-
const { dblClick } = board;
|
|
17
|
-
board.dblClick = (event) => {
|
|
18
|
-
if (!PlaitBoard.isReadonly(board)) {
|
|
19
|
-
const clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
20
|
-
const hitTarget = getHitElementByPoint(board, clickPoint);
|
|
21
|
-
if (hitTarget && PlaitDrawElement.isArrowLine(hitTarget)) {
|
|
22
|
-
const hitTargetPath = hitTarget && PlaitBoard.findPath(board, hitTarget);
|
|
23
|
-
const points = getArrowLinePoints(board, hitTarget);
|
|
24
|
-
const point = getNearestPointBetweenPointAndSegments(clickPoint, points);
|
|
25
|
-
const texts = hitTarget.texts?.length ? [...hitTarget.texts] : [];
|
|
26
|
-
const textIndex = getHitArrowLineTextIndex(board, hitTarget, clickPoint);
|
|
27
|
-
const isHitText = isHitArrowLineText(board, hitTarget, clickPoint);
|
|
28
|
-
if (isHitText) {
|
|
29
|
-
editHandle(board, hitTarget, textIndex);
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
const defaultLineText = getDefaultLineText(board);
|
|
33
|
-
const textMemory = getMemorizedLatest('arrow-line')?.text || {};
|
|
34
|
-
const textElement = buildText(defaultLineText, undefined, textMemory);
|
|
35
|
-
const { width, height } = measureElement(textElement, {
|
|
36
|
-
fontSize: DEFAULT_FONT_SIZE,
|
|
37
|
-
fontFamily: DEFAULT_FONT_FAMILY
|
|
38
|
-
});
|
|
39
|
-
const ratio = getRatioByPoint(points, point);
|
|
40
|
-
texts.push({
|
|
41
|
-
text: textElement,
|
|
42
|
-
position: ratio,
|
|
43
|
-
width,
|
|
44
|
-
height
|
|
45
|
-
});
|
|
46
|
-
DrawTransforms.setArrowLineTexts(board, hitTarget, texts);
|
|
47
|
-
setTimeout(() => {
|
|
48
|
-
if (hitTargetPath) {
|
|
49
|
-
const newHitTarget = PlaitNode.get(board, hitTargetPath);
|
|
50
|
-
const textManages = getTextManages(newHitTarget);
|
|
51
|
-
editHandle(board, newHitTarget, textManages.length - 1, true);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
dblClick(event);
|
|
58
|
-
};
|
|
59
|
-
return board;
|
|
60
|
-
};
|
|
61
|
-
function editHandle(board, element, manageIndex, isFirstEdit = false) {
|
|
62
|
-
const textManages = getTextManages(element);
|
|
63
|
-
const textManage = textManages[manageIndex];
|
|
64
|
-
textManage.edit(() => {
|
|
65
|
-
const text = Node.string(textManage.getText());
|
|
66
|
-
const defaultLineText = getDefaultLineText(board);
|
|
67
|
-
const shouldRemove = !text || (isFirstEdit && text === defaultLineText);
|
|
68
|
-
if (shouldRemove) {
|
|
69
|
-
DrawTransforms.removeArrowLineText(board, element, manageIndex);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1hcnJvdy1saW5lLXRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9wbHVnaW5zL3dpdGgtYXJyb3ctbGluZS10ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBQ1YsU0FBUyxFQUNULG9CQUFvQixFQUNwQixZQUFZLEVBQ1osc0NBQXNDLEVBQ3RDLFdBQVcsRUFDWCxjQUFjLEVBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDcEQsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxD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QztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLFNBQVMsVUFBVSxDQUFDLEtBQWlCLEVBQUUsT0FBdUIsRUFBRSxXQUFtQixFQUFFLGNBQXVCLEtBQUs7SUFDN0csTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNqQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksS0FBSyxlQUFlLENBQUMsQ0FBQztRQUN4RSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2YsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdE5vZGUsXG4gICAgZ2V0SGl0RWxlbWVudEJ5UG9pbnQsXG4gICAgZ2V0STE4blZhbHVlLFxuICAgIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzLFxuICAgIHRvSG9zdFBvaW50LFxuICAgIHRvVmlld0JveFBvaW50XG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0QXJyb3dMaW5lLCBQbGFpdERyYXdFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgYnVpbGRUZXh0LCBERUZBVUxUX0ZPTlRfRkFNSUxZLCBnZXRNZW1vcml6ZWRMYXRlc3QsIGdldFJhdGlvQnlQb2ludCwgZ2V0VGV4dE1hbmFnZXMsIG1lYXN1cmVFbGVtZW50IH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBEcmF3VHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZ2V0QXJyb3dMaW5lUG9pbnRzIH0gZnJvbSAnLi4vdXRpbHMvYXJyb3ctbGluZS9hcnJvdy1saW5lLWJhc2ljJztcbmltcG9ydCB7IGdldEhpdEFycm93TGluZVRleHRJbmRleCB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2Fycm93LWxpbmUnO1xuaW1wb3J0IHsgaXNIaXRBcnJvd0xpbmVUZXh0IH0gZnJvbSAnLi4vdXRpbHMvaGl0JztcbmltcG9ydCB7IExJTkVfVEVYVCB9IGZyb20gJy4uL2NvbnN0YW50cy9saW5lJztcbmltcG9ydCB7IERFRkFVTFRfRk9OVF9TSVpFIH0gZnJvbSAnQHBsYWl0L3RleHQtcGx1Z2lucyc7XG5pbXBvcnQgeyBEcmF3STE4bktleSB9IGZyb20gJy4uL2NvbnN0YW50cy9kZWZhdWx0JztcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRMaW5lVGV4dCA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiBnZXRJMThuVmFsdWUoYm9hcmQsIERyYXdJMThuS2V5LmxpbmVUZXh0LCBMSU5FX1RFWFQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHdpdGhBcnJvd0xpbmVUZXh0ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgeyBkYmxDbGljayB9ID0gYm9hcmQ7XG5cbiAgICBib2FyZC5kYmxDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrUG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIGNvbnN0IGhpdFRhcmdldCA9IGdldEhpdEVsZW1lbnRCeVBvaW50KGJvYXJkLCBjbGlja1BvaW50KSBhcyB1bmRlZmluZWQgfCBQbGFpdEFycm93TGluZTtcbiAgICAgICAgICAgIGlmIChoaXRUYXJnZXQgJiYgUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShoaXRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGl0VGFyZ2V0UGF0aCA9IGhpdFRhcmdldCAmJiBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBoaXRUYXJnZXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50cyA9IGdldEFycm93TGluZVBvaW50cyhib2FyZCwgaGl0VGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludCA9IGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKGNsaWNrUG9pbnQsIHBvaW50cyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dHMgPSBoaXRUYXJnZXQudGV4dHM/Lmxlbmd0aCA/IFsuLi5oaXRUYXJnZXQudGV4dHNdIDogW107XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dEluZGV4ID0gZ2V0SGl0QXJyb3dMaW5lVGV4dEluZGV4KGJvYXJkLCBoaXRUYXJnZXQsIGNsaWNrUG9pbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzSGl0VGV4dCA9IGlzSGl0QXJyb3dMaW5lVGV4dChib2FyZCwgaGl0VGFyZ2V0LCBjbGlja1BvaW50KTtcbiAgICAgICAgICAgICAgICBpZiAoaXNIaXRUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRIYW5kbGUoYm9hcmQsIGhpdFRhcmdldCwgdGV4dEluZGV4KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0TGluZVRleHQgPSBnZXREZWZhdWx0TGluZVRleHQoYm9hcmQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0TWVtb3J5ID0gZ2V0TWVtb3JpemVkTGF0ZXN0KCdhcnJvdy1saW5lJyk/LnRleHQgfHwge307XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gYnVpbGRUZXh0KGRlZmF1bHRMaW5lVGV4dCwgdW5kZWZpbmVkLCB0ZXh0TWVtb3J5KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBtZWFzdXJlRWxlbWVudCh0ZXh0RWxlbWVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogREVGQVVMVF9GT05UX0ZBTUlMWVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF0aW8gPSBnZXRSYXRpb0J5UG9pbnQocG9pbnRzLCBwb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIHRleHRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmF0aW8sXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgRHJhd1RyYW5zZm9ybXMuc2V0QXJyb3dMaW5lVGV4dHMoYm9hcmQsIGhpdFRhcmdldCwgdGV4dHMpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaXRUYXJnZXRQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SGl0VGFyZ2V0ID0gUGxhaXROb2RlLmdldChib2FyZCwgaGl0VGFyZ2V0UGF0aCkgYXMgUGxhaXRBcnJvd0xpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dE1hbmFnZXMgPSBnZXRUZXh0TWFuYWdlcyhuZXdIaXRUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRIYW5kbGUoYm9hcmQsIG5ld0hpdFRhcmdldCwgdGV4dE1hbmFnZXMubGVuZ3RoIC0gMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYmxDbGljayhldmVudCk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG5cbmZ1bmN0aW9uIGVkaXRIYW5kbGUoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0QXJyb3dMaW5lLCBtYW5hZ2VJbmRleDogbnVtYmVyLCBpc0ZpcnN0RWRpdDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgdGV4dE1hbmFnZXMgPSBnZXRUZXh0TWFuYWdlcyhlbGVtZW50KTtcbiAgICBjb25zdCB0ZXh0TWFuYWdlID0gdGV4dE1hbmFnZXNbbWFuYWdlSW5kZXhdO1xuICAgIHRleHRNYW5hZ2UuZWRpdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBOb2RlLnN0cmluZyh0ZXh0TWFuYWdlLmdldFRleHQoKSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaW5lVGV4dCA9IGdldERlZmF1bHRMaW5lVGV4dChib2FyZCk7XG4gICAgICAgIGNvbnN0IHNob3VsZFJlbW92ZSA9ICF0ZXh0IHx8IChpc0ZpcnN0RWRpdCAmJiB0ZXh0ID09PSBkZWZhdWx0TGluZVRleHQpO1xuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlKSB7XG4gICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5yZW1vdmVBcnJvd0xpbmVUZXh0KGJvYXJkLCBlbGVtZW50LCBtYW5hZ2VJbmRleCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { WritableClipboardOperationType, WritableClipboardType, addOrCreateClipboardContext, getSelectedElements } from '@plait/core';
|
|
2
|
-
import { getSelectedDrawElements } from '../utils/selected';
|
|
3
|
-
import { PlaitDrawElement, PlaitArrowLine } from '../interfaces';
|
|
4
|
-
import { buildClipboardData, insertClipboardData } from '../utils/clipboard';
|
|
5
|
-
import { DrawTransforms } from '../transforms';
|
|
6
|
-
import { getArrowLines } from '../utils/arrow-line/arrow-line-basic';
|
|
7
|
-
import { acceptImageTypes, buildImage, getElementOfFocusedImage, getElementsText } from '@plait/common';
|
|
8
|
-
import { DEFAULT_IMAGE_WIDTH } from '../constants';
|
|
9
|
-
export const withDrawFragment = (baseBoard) => {
|
|
10
|
-
const board = baseBoard;
|
|
11
|
-
const { getDeletedFragment, buildFragment, insertFragment } = board;
|
|
12
|
-
board.getDeletedFragment = (data) => {
|
|
13
|
-
const drawElements = getSelectedDrawElements(board);
|
|
14
|
-
if (drawElements.length) {
|
|
15
|
-
const geometryElements = drawElements.filter(value => PlaitDrawElement.isGeometry(value));
|
|
16
|
-
const arrowLineElements = drawElements.filter(value => PlaitDrawElement.isArrowLine(value));
|
|
17
|
-
const vectorLineElements = drawElements.filter(value => PlaitDrawElement.isVectorLine(value));
|
|
18
|
-
const imageElements = drawElements.filter(value => PlaitDrawElement.isImage(value));
|
|
19
|
-
const tableElements = drawElements.filter(value => PlaitDrawElement.isTable(value));
|
|
20
|
-
const swimlaneElements = drawElements.filter(value => PlaitDrawElement.isSwimlane(value));
|
|
21
|
-
const boundLineElements = [
|
|
22
|
-
...getBoundedArrowLineElements(board, geometryElements),
|
|
23
|
-
...getBoundedArrowLineElements(board, imageElements),
|
|
24
|
-
...getBoundedArrowLineElements(board, tableElements),
|
|
25
|
-
...getBoundedArrowLineElements(board, swimlaneElements)
|
|
26
|
-
].filter(line => !arrowLineElements.includes(line));
|
|
27
|
-
data.push(...[
|
|
28
|
-
...geometryElements,
|
|
29
|
-
...arrowLineElements,
|
|
30
|
-
...vectorLineElements,
|
|
31
|
-
...imageElements,
|
|
32
|
-
...tableElements,
|
|
33
|
-
...swimlaneElements,
|
|
34
|
-
...boundLineElements.filter(line => !arrowLineElements.includes(line))
|
|
35
|
-
]);
|
|
36
|
-
}
|
|
37
|
-
return getDeletedFragment(data);
|
|
38
|
-
};
|
|
39
|
-
board.buildFragment = (clipboardContext, rectangle, operationType, originData) => {
|
|
40
|
-
const targetDrawElements = getSelectedDrawElements(board, originData);
|
|
41
|
-
let boundLineElements = [];
|
|
42
|
-
if (targetDrawElements.length) {
|
|
43
|
-
if (operationType === WritableClipboardOperationType.cut) {
|
|
44
|
-
const geometryElements = targetDrawElements.filter(value => PlaitDrawElement.isGeometry(value));
|
|
45
|
-
const lineElements = targetDrawElements.filter(value => PlaitDrawElement.isArrowLine(value));
|
|
46
|
-
boundLineElements = getBoundedArrowLineElements(board, geometryElements).filter(line => !lineElements.includes(line));
|
|
47
|
-
}
|
|
48
|
-
const selectedElements = [...targetDrawElements, ...boundLineElements];
|
|
49
|
-
const elements = buildClipboardData(board, selectedElements, rectangle ? [rectangle.x, rectangle.y] : [0, 0]);
|
|
50
|
-
const text = getElementsText(selectedElements);
|
|
51
|
-
const addition = {
|
|
52
|
-
text,
|
|
53
|
-
type: WritableClipboardType.elements,
|
|
54
|
-
elements: elements
|
|
55
|
-
};
|
|
56
|
-
clipboardContext = addOrCreateClipboardContext(clipboardContext, addition);
|
|
57
|
-
}
|
|
58
|
-
return buildFragment(clipboardContext, rectangle, operationType, originData);
|
|
59
|
-
};
|
|
60
|
-
board.insertFragment = (clipboardData, targetPoint, operationType) => {
|
|
61
|
-
const selectedElements = getSelectedElements(board);
|
|
62
|
-
if (clipboardData?.files?.length) {
|
|
63
|
-
const acceptImageArray = acceptImageTypes.map(type => 'image/' + type);
|
|
64
|
-
const canInsertionImage = !getElementOfFocusedImage(board) && !(selectedElements.length === 1 && board.isImageBindingAllowed(selectedElements[0]));
|
|
65
|
-
if (acceptImageArray.includes(clipboardData.files[0].type) && canInsertionImage) {
|
|
66
|
-
const imageFile = clipboardData.files[0];
|
|
67
|
-
buildImage(board, imageFile, DEFAULT_IMAGE_WIDTH, imageItem => {
|
|
68
|
-
DrawTransforms.insertImage(board, imageItem, targetPoint);
|
|
69
|
-
});
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
if (clipboardData?.elements?.length) {
|
|
74
|
-
const drawElements = clipboardData.elements?.filter(value => PlaitDrawElement.isDrawElement(value));
|
|
75
|
-
if (clipboardData.elements && clipboardData.elements.length > 0 && drawElements.length > 0) {
|
|
76
|
-
insertClipboardData(board, drawElements, targetPoint);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (clipboardData?.text) {
|
|
80
|
-
if (!clipboardData.elements || clipboardData.elements.length === 0) {
|
|
81
|
-
// (* ̄︶ ̄)
|
|
82
|
-
const insertAsChildren = selectedElements.length === 1 && selectedElements[0].children;
|
|
83
|
-
const insertAsFreeText = !insertAsChildren;
|
|
84
|
-
if (insertAsFreeText) {
|
|
85
|
-
DrawTransforms.insertText(board, targetPoint, clipboardData.text);
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
insertFragment(clipboardData, targetPoint, operationType);
|
|
91
|
-
};
|
|
92
|
-
return board;
|
|
93
|
-
};
|
|
94
|
-
export const getBoundedArrowLineElements = (board, plaitShapes) => {
|
|
95
|
-
const lines = getArrowLines(board);
|
|
96
|
-
return lines.filter(line => plaitShapes.find(shape => PlaitArrowLine.isBoundElementOfSource(line, shape) || PlaitArrowLine.isBoundElementOfTarget(line, shape)));
|
|
97
|
-
};
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LWZyYWdtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvcGx1Z2lucy93aXRoLWRyYXctZnJhZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQU9ILDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLG1CQUFtQixFQUN0QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWlCLGNBQWMsRUFBcUQsTUFBTSxlQUFlLENBQUM7QUFDbkksT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR25ELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsU0FBcUIsRUFBRSxFQUFFO0lBQ3RELE1BQU0sS0FBSyxHQUFHLFNBQXVCLENBQUM7SUFDdEMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFcEUsS0FBSyxDQUFDLGtCQUFrQixHQUFHLENBQUMsSUFBb0IsRUFBRSxFQUFFO1FBQ2hELE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE1BQU0sZ0JBQWdCLEdB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TSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDdkYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLGdCQUFnQixDQUFDO2dCQUMzQyxJQUFJLGdCQUFnQixFQUFFLENBQUM7b0JBQ25CLGNBQWMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xFLE9BQU87Z0JBQ1gsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBRUQsY0FBYyxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDOUQsQ0FBQyxDQUFDO0lBRUYsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFdBQWdDLEVBQUUsRUFBRTtJQUMvRixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3ZCLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDdEksQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2xpcGJvYXJkRGF0YSxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQb2ludCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0LFxuICAgIFdyaXRhYmxlQ2xpcGJvYXJkT3BlcmF0aW9uVHlwZSxcbiAgICBXcml0YWJsZUNsaXBib2FyZFR5cGUsXG4gICAgYWRkT3JDcmVhdGVDbGlwYm9hcmRDb250ZXh0LFxuICAgIGdldFNlbGVjdGVkRWxlbWVudHNcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgZ2V0U2VsZWN0ZWREcmF3RWxlbWVudHMgfSBmcm9tICcuLi91dGlscy9zZWxlY3RlZCc7XG5pbXBvcnQgeyBQbGFpdERyYXdFbGVtZW50LCBQbGFpdEdlb21ldHJ5LCBQbGFpdEFycm93TGluZSwgUGxhaXRTaGFwZUVsZW1lbnQsIFBsYWl0U3dpbWxhbmUsIFBsYWl0VmVjdG9yTGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYnVpbGRDbGlwYm9hcmREYXRhLCBpbnNlcnRDbGlwYm9hcmREYXRhIH0gZnJvbSAnLi4vdXRpbHMvY2xpcGJvYXJkJztcbmltcG9ydCB7IERyYXdUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBnZXRBcnJvd0xpbmVzIH0gZnJvbSAnLi4vdXRpbHMvYXJyb3ctbGluZS9hcnJvdy1saW5lLWJhc2ljJztcbmltcG9ydCB7IFBsYWl0SW1hZ2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ltYWdlJztcbmltcG9ydCB7IGFjY2VwdEltYWdlVHlwZXMsIGJ1aWxkSW1hZ2UsIGdldEVsZW1lbnRPZkZvY3VzZWRJbWFnZSwgZ2V0RWxlbWVudHNUZXh0IH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBERUZBVUxUX0lNQUdFX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBsYWl0VGFibGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3RhYmxlJztcblxuZXhwb3J0IGNvbnN0IHdpdGhEcmF3RnJhZ21lbnQgPSAoYmFzZUJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgYm9hcmQgPSBiYXNlQm9hcmQgYXMgUGxhaXRCb2FyZDtcbiAgICBjb25zdCB7IGdldERlbGV0ZWRGcmFnbWVudCwgYnVpbGRGcmFnbWVudCwgaW5zZXJ0RnJhZ21lbnQgfSA9IGJvYXJkO1xuXG4gICAgYm9hcmQuZ2V0RGVsZXRlZEZyYWdtZW50ID0gKGRhdGE6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgICAgIGNvbnN0IGRyYXdFbGVtZW50cyA9IGdldFNlbGVjdGVkRHJhd0VsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgaWYgKGRyYXdFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5RWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeSh2YWx1ZSkpIGFzIFBsYWl0R2VvbWV0cnlbXTtcbiAgICAgICAgICAgIGNvbnN0IGFycm93TGluZUVsZW1lbnRzID0gZHJhd0VsZW1lbnRzLmZpbHRlcih2YWx1ZSA9PiBQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKHZhbHVlKSkgYXMgUGxhaXRBcnJvd0xpbmVbXTtcbiAgICAgICAgICAgIGNvbnN0IHZlY3RvckxpbmVFbGVtZW50cyA9IGRyYXdFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gUGxhaXREcmF3RWxlbWVudC5pc1ZlY3RvckxpbmUodmFsdWUpKSBhcyBQbGFpdFZlY3RvckxpbmVbXTtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZSh2YWx1ZSkpIGFzIFBsYWl0SW1hZ2VbXTtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlRWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNUYWJsZSh2YWx1ZSkpIGFzIFBsYWl0VGFibGVbXTtcbiAgICAgICAgICAgIGNvbnN0IHN3aW1sYW5lRWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNTd2ltbGFuZSh2YWx1ZSkpIGFzIFBsYWl0U3dpbWxhbmVbXTtcblxuICAgICAgICAgICAgY29uc3QgYm91bmRMaW5lRWxlbWVudHMgPSBbXG4gICAgICAgICAgICAgICAgLi4uZ2V0Qm91bmRlZEFycm93TGluZUVsZW1lbnRzKGJvYXJkLCBnZW9tZXRyeUVsZW1lbnRzKSxcbiAgICAgICAgICAgICAgICAuLi5nZXRCb3VuZGVkQXJyb3dMaW5lRWxlbWVudHMoYm9hcmQsIGltYWdlRWxlbWVudHMpLFxuICAgICAgICAgICAgICAgIC4uLmdldEJvdW5kZWRBcnJvd0xpbmVFbGVtZW50cyhib2FyZCwgdGFibGVFbGVtZW50cyksXG4gICAgICAgICAgICAgICAgLi4uZ2V0Qm91bmRlZEFycm93TGluZUVsZW1lbnRzKGJvYXJkLCBzd2ltbGFuZUVsZW1lbnRzKVxuICAgICAgICAgICAgXS5maWx0ZXIobGluZSA9PiAhYXJyb3dMaW5lRWxlbWVudHMuaW5jbHVkZXMobGluZSkpO1xuICAgICAgICAgICAgZGF0YS5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLltcbiAgICAgICAgICAgICAgICAgICAgLi4uZ2VvbWV0cnlFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4uYXJyb3dMaW5lRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgIC4uLnZlY3RvckxpbmVFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4uaW1hZ2VFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4udGFibGVFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4uc3dpbWxhbmVFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4uYm91bmRMaW5lRWxlbWVudHMuZmlsdGVyKGxpbmUgPT4gIWFycm93TGluZUVsZW1lbnRzLmluY2x1ZGVzKGxpbmUpKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldERlbGV0ZWRGcmFnbWVudChkYXRhKTtcbiAgICB9O1xuXG4gICAgYm9hcmQuYnVpbGRGcmFnbWVudCA9IChcbiAgICAgICAgY2xpcGJvYXJkQ29udGV4dDogV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0IHwgbnVsbCxcbiAgICAgICAgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQgfCBudWxsLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUsXG4gICAgICAgIG9yaWdpbkRhdGE/OiBQbGFpdEVsZW1lbnRbXVxuICAgICkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXREcmF3RWxlbWVudHMgPSBnZXRTZWxlY3RlZERyYXdFbGVtZW50cyhib2FyZCwgb3JpZ2luRGF0YSk7XG4gICAgICAgIGxldCBib3VuZExpbmVFbGVtZW50czogUGxhaXRBcnJvd0xpbmVbXSA9IFtdO1xuICAgICAgICBpZiAodGFyZ2V0RHJhd0VsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgPT09IFdyaXRhYmxlQ2xpcGJvYXJkT3BlcmF0aW9uVHlwZS5jdXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBnZW9tZXRyeUVsZW1lbnRzID0gdGFyZ2V0RHJhd0VsZW1lbnRzLmZpbHRlcih2YWx1ZSA9PiBQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkodmFsdWUpKSBhcyBQbGFpdEdlb21ldHJ5W107XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZUVsZW1lbnRzID0gdGFyZ2V0RHJhd0VsZW1lbnRzLmZpbHRlcih2YWx1ZSA9PiBQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKHZhbHVlKSkgYXMgUGxhaXRBcnJvd0xpbmVbXTtcbiAgICAgICAgICAgICAgICBib3VuZExpbmVFbGVtZW50cyA9IGdldEJvdW5kZWRBcnJvd0xpbmVFbGVtZW50cyhib2FyZCwgZ2VvbWV0cnlFbGVtZW50cykuZmlsdGVyKGxpbmUgPT4gIWxpbmVFbGVtZW50cy5pbmNsdWRlcyhsaW5lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gWy4uLnRhcmdldERyYXdFbGVtZW50cywgLi4uYm91bmRMaW5lRWxlbWVudHNdO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBidWlsZENsaXBib2FyZERhdGEoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMsIHJlY3RhbmdsZSA/IFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnldIDogWzAsIDBdKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBnZXRFbGVtZW50c1RleHQoc2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgICAgICAgICBjb25zdCBhZGRpdGlvbjogV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgdHlwZTogV3JpdGFibGVDbGlwYm9hcmRUeXBlLmVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNsaXBib2FyZENvbnRleHQgPSBhZGRPckNyZWF0ZUNsaXBib2FyZENvbnRleHQoY2xpcGJvYXJkQ29udGV4dCwgYWRkaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZEZyYWdtZW50KGNsaXBib2FyZENvbnRleHQsIHJlY3RhbmdsZSwgb3BlcmF0aW9uVHlwZSwgb3JpZ2luRGF0YSk7XG4gICAgfTtcblxuICAgIGJvYXJkLmluc2VydEZyYWdtZW50ID0gKGNsaXBib2FyZERhdGE6IENsaXBib2FyZERhdGEgfCBudWxsLCB0YXJnZXRQb2ludDogUG9pbnQsIG9wZXJhdGlvblR5cGU/OiBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YT8uZmlsZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXB0SW1hZ2VBcnJheSA9IGFjY2VwdEltYWdlVHlwZXMubWFwKHR5cGUgPT4gJ2ltYWdlLycgKyB0eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbkluc2VydGlvbkltYWdlID1cbiAgICAgICAgICAgICAgICAhZ2V0RWxlbWVudE9mRm9jdXNlZEltYWdlKGJvYXJkKSAmJiAhKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxICYmIGJvYXJkLmlzSW1hZ2VCaW5kaW5nQWxsb3dlZChzZWxlY3RlZEVsZW1lbnRzWzBdKSk7XG4gICAgICAgICAgICBpZiAoYWNjZXB0SW1hZ2VBcnJheS5pbmNsdWRlcyhjbGlwYm9hcmREYXRhLmZpbGVzWzBdLnR5cGUpICYmIGNhbkluc2VydGlvbkltYWdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VGaWxlID0gY2xpcGJvYXJkRGF0YS5maWxlc1swXTtcbiAgICAgICAgICAgICAgICBidWlsZEltYWdlKGJvYXJkLCBpbWFnZUZpbGUsIERFRkFVTFRfSU1BR0VfV0lEVEgsIGltYWdlSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLmluc2VydEltYWdlKGJvYXJkLCBpbWFnZUl0ZW0sIHRhcmdldFBvaW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YT8uZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZHJhd0VsZW1lbnRzID0gY2xpcGJvYXJkRGF0YS5lbGVtZW50cz8uZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNEcmF3RWxlbWVudCh2YWx1ZSkpIGFzIFBsYWl0RHJhd0VsZW1lbnRbXTtcbiAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhLmVsZW1lbnRzICYmIGNsaXBib2FyZERhdGEuZWxlbWVudHMubGVuZ3RoID4gMCAmJiBkcmF3RWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGluc2VydENsaXBib2FyZERhdGEoYm9hcmQsIGRyYXdFbGVtZW50cywgdGFyZ2V0UG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsaXBib2FyZERhdGE/LnRleHQpIHtcbiAgICAgICAgICAgIGlmICghY2xpcGJvYXJkRGF0YS5lbGVtZW50cyB8fCBjbGlwYm9hcmREYXRhLmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vICgq77+j77i277+jKVxuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEFzQ2hpbGRyZW4gPSBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBzZWxlY3RlZEVsZW1lbnRzWzBdLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEFzRnJlZVRleHQgPSAhaW5zZXJ0QXNDaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QXNGcmVlVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5pbnNlcnRUZXh0KGJvYXJkLCB0YXJnZXRQb2ludCwgY2xpcGJvYXJkRGF0YS50ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydEZyYWdtZW50KGNsaXBib2FyZERhdGEsIHRhcmdldFBvaW50LCBvcGVyYXRpb25UeXBlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJvdW5kZWRBcnJvd0xpbmVFbGVtZW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgcGxhaXRTaGFwZXM6IFBsYWl0U2hhcGVFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBsaW5lcyA9IGdldEFycm93TGluZXMoYm9hcmQpO1xuICAgIHJldHVybiBsaW5lcy5maWx0ZXIobGluZSA9PlxuICAgICAgICBwbGFpdFNoYXBlcy5maW5kKHNoYXBlID0+IFBsYWl0QXJyb3dMaW5lLmlzQm91bmRFbGVtZW50T2ZTb3VyY2UobGluZSwgc2hhcGUpIHx8IFBsYWl0QXJyb3dMaW5lLmlzQm91bmRFbGVtZW50T2ZUYXJnZXQobGluZSwgc2hhcGUpKVxuICAgICk7XG59O1xuIl19
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, getHitElementByPoint, getSelectedElements, toHostPoint, toViewBoxPoint } from '@plait/core';
|
|
2
|
-
import { isVirtualKey, isSpaceHotkey, isDelete } from '@plait/common';
|
|
3
|
-
import { GeometryCommonTextKeys, PlaitDrawElement } from '../interfaces';
|
|
4
|
-
import { editText } from '../utils/geometry';
|
|
5
|
-
import { getHitMultipleGeometryText, isDrawElementIncludeText, isMultipleTextGeometry } from '../utils';
|
|
6
|
-
export const withDrawHotkey = (board) => {
|
|
7
|
-
const { keyDown, dblClick } = board;
|
|
8
|
-
board.keyDown = (event) => {
|
|
9
|
-
const selectedElements = getSelectedElements(board);
|
|
10
|
-
const isSingleSelection = selectedElements.length === 1;
|
|
11
|
-
const targetElement = selectedElements[0];
|
|
12
|
-
if (!PlaitBoard.isReadonly(board) &&
|
|
13
|
-
!isVirtualKey(event) &&
|
|
14
|
-
!isDelete(event) &&
|
|
15
|
-
!isSpaceHotkey(event) &&
|
|
16
|
-
isSingleSelection &&
|
|
17
|
-
PlaitDrawElement.isGeometry(targetElement)) {
|
|
18
|
-
event.preventDefault();
|
|
19
|
-
editText(board, targetElement);
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
keyDown(event);
|
|
23
|
-
};
|
|
24
|
-
board.dblClick = (event) => {
|
|
25
|
-
event.preventDefault();
|
|
26
|
-
if (!PlaitBoard.isReadonly(board)) {
|
|
27
|
-
const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
28
|
-
const hitElement = getHitElementByPoint(board, point, undefined, false);
|
|
29
|
-
if (hitElement && PlaitDrawElement.isGeometry(hitElement) && isDrawElementIncludeText(hitElement)) {
|
|
30
|
-
if (isMultipleTextGeometry(hitElement)) {
|
|
31
|
-
const hitText = getHitMultipleGeometryText(hitElement, point) ||
|
|
32
|
-
hitElement.texts.find((item) => item.id.includes(GeometryCommonTextKeys.content)) ||
|
|
33
|
-
hitElement.texts[0];
|
|
34
|
-
editText(board, hitElement, hitText);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
editText(board, hitElement);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
dblClick(event);
|
|
42
|
-
};
|
|
43
|
-
return board;
|
|
44
|
-
};
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LWhvdGtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1kcmF3LWhvdGtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakgsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXhHLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNoRCxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVwQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQ0ksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUM3QixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDcEIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ2hCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztZQUNyQixpQkFBaUI7WUFDakIsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUM1QyxDQUFDO1lBQ0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDL0IsT0FBTztRQUNYLENBQUM7UUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtRQUNuQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRSxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4RSxJQUFJLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksd0JBQXdCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDaEcsSUFBSSxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUNyQyxNQUFNLE9BQU8sR0FDVCwwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO3dCQUM3QyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2pGLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN6QyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osUUFBUSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDaEMsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQztJQUNGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIGdldEhpdEVsZW1lbnRCeVBvaW50LCBnZXRTZWxlY3RlZEVsZW1lbnRzLCB0b0hvc3RQb2ludCwgdG9WaWV3Qm94UG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBpc1ZpcnR1YWxLZXksIGlzU3BhY2VIb3RrZXksIGlzRGVsZXRlIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBHZW9tZXRyeUNvbW1vblRleHRLZXlzLCBQbGFpdERyYXdFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBlZGl0VGV4dCB9IGZyb20gJy4uL3V0aWxzL2dlb21ldHJ5JztcbmltcG9ydCB7IGdldEhpdE11bHRpcGxlR2VvbWV0cnlUZXh0LCBpc0RyYXdFbGVtZW50SW5jbHVkZVRleHQsIGlzTXVsdGlwbGVUZXh0R2VvbWV0cnkgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCB3aXRoRHJhd0hvdGtleSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IHsga2V5RG93biwgZGJsQ2xpY2sgfSA9IGJvYXJkO1xuXG4gICAgYm9hcmQua2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIGNvbnN0IGlzU2luZ2xlU2VsZWN0aW9uID0gc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDE7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzWzBdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSAmJlxuICAgICAgICAgICAgIWlzVmlydHVhbEtleShldmVudCkgJiZcbiAgICAgICAgICAgICFpc0RlbGV0ZShldmVudCkgJiZcbiAgICAgICAgICAgICFpc1NwYWNlSG90a2V5KGV2ZW50KSAmJlxuICAgICAgICAgICAgaXNTaW5nbGVTZWxlY3Rpb24gJiZcbiAgICAgICAgICAgIFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeSh0YXJnZXRFbGVtZW50KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlZGl0VGV4dChib2FyZCwgdGFyZ2V0RWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBrZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZGJsQ2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICAgICAgY29uc3QgaGl0RWxlbWVudCA9IGdldEhpdEVsZW1lbnRCeVBvaW50KGJvYXJkLCBwb2ludCwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoaGl0RWxlbWVudCAmJiBQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoaGl0RWxlbWVudCkgJiYgaXNEcmF3RWxlbWVudEluY2x1ZGVUZXh0KGhpdEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTXVsdGlwbGVUZXh0R2VvbWV0cnkoaGl0RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGl0VGV4dCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRIaXRNdWx0aXBsZUdlb21ldHJ5VGV4dChoaXRFbGVtZW50LCBwb2ludCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpdEVsZW1lbnQudGV4dHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZC5pbmNsdWRlcyhHZW9tZXRyeUNvbW1vblRleHRLZXlzLmNvbnRlbnQpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaGl0RWxlbWVudC50ZXh0c1swXTtcbiAgICAgICAgICAgICAgICAgICAgZWRpdFRleHQoYm9hcmQsIGhpdEVsZW1lbnQsIGhpdFRleHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRUZXh0KGJvYXJkLCBoaXRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGJsQ2xpY2soZXZlbnQpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvYXJkO1xufTtcbiJdfQ==
|