@plait/draw 0.62.0-next.1 → 0.62.0-next.10
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 +26 -0
- package/constants/geometry.d.ts +1 -0
- package/constants/pointer.d.ts +3 -3
- package/esm2022/arrow-line.component.mjs +157 -0
- package/esm2022/constants/geometry.mjs +10 -3
- package/esm2022/constants/pointer.mjs +4 -4
- package/esm2022/engines/basic-shapes/ellipse.mjs +5 -3
- package/esm2022/engines/basic-shapes/round-comment.mjs +5 -3
- package/esm2022/engines/flowchart/note-curly-left.mjs +2 -2
- package/esm2022/engines/flowchart/note-curly-right.mjs +7 -7
- package/esm2022/engines/flowchart/note-square.mjs +2 -2
- package/esm2022/engines/flowchart/or.mjs +5 -3
- package/esm2022/engines/flowchart/summing-junction.mjs +5 -3
- package/esm2022/engines/table/table.mjs +48 -26
- package/esm2022/engines/uml/deletion.mjs +3 -2
- package/esm2022/engines/uml/required-interface.mjs +3 -2
- package/esm2022/generators/arrow-line-active.generator.mjs +81 -0
- package/esm2022/generators/arrow-line-auto-complete.generator.mjs +46 -0
- package/esm2022/generators/arrow-line.generator.mjs +13 -0
- package/esm2022/generators/index.mjs +3 -3
- package/esm2022/geometry.component.mjs +4 -4
- package/esm2022/image.component.mjs +4 -4
- package/esm2022/interfaces/arrow-line.mjs +70 -0
- package/esm2022/interfaces/element.mjs +2 -2
- package/esm2022/interfaces/index.mjs +14 -7
- package/esm2022/interfaces/vector-line.mjs +6 -0
- package/esm2022/plugins/with-arrow-line-auto-complete-reaction.mjs +41 -0
- package/esm2022/plugins/with-arrow-line-auto-complete.mjs +74 -0
- package/esm2022/plugins/with-arrow-line-bound-reaction.mjs +53 -0
- package/esm2022/plugins/with-arrow-line-create.mjs +53 -0
- package/esm2022/plugins/with-arrow-line-resize.mjs +158 -0
- package/esm2022/plugins/with-arrow-line-text-move.mjs +53 -0
- package/esm2022/plugins/with-arrow-line-text.mjs +63 -0
- package/esm2022/plugins/with-draw-fragment.mjs +13 -13
- package/esm2022/plugins/with-draw-resize.mjs +12 -5
- package/esm2022/plugins/with-draw.mjs +27 -20
- package/esm2022/plugins/with-geometry-resize.mjs +1 -1
- package/esm2022/plugins/with-swimlane-create.mjs +4 -7
- package/esm2022/plugins/with-swimlane.mjs +1 -20
- package/esm2022/plugins/with-table.mjs +34 -7
- package/esm2022/public-api.mjs +3 -3
- package/esm2022/table.component.mjs +6 -6
- package/esm2022/transforms/arrow-line.mjs +66 -0
- package/esm2022/transforms/common.mjs +36 -0
- package/esm2022/transforms/geometry.mjs +6 -28
- package/esm2022/transforms/index.mjs +15 -13
- package/esm2022/transforms/swimlane.mjs +1 -29
- package/esm2022/transforms/table-text.mjs +5 -5
- package/esm2022/transforms/table.mjs +30 -0
- package/esm2022/utils/arrow-line/arrow-line-arrow.mjs +123 -0
- package/esm2022/utils/arrow-line/arrow-line-basic.mjs +257 -0
- package/esm2022/utils/arrow-line/arrow-line-common.mjs +162 -0
- package/esm2022/utils/arrow-line/arrow-line-resize.mjs +309 -0
- package/esm2022/utils/arrow-line/elbow.mjs +114 -0
- package/esm2022/utils/arrow-line/index.mjs +6 -0
- package/esm2022/utils/clipboard.mjs +10 -10
- package/esm2022/utils/common.mjs +14 -5
- package/esm2022/utils/geometry.mjs +17 -14
- package/esm2022/utils/hit.mjs +67 -44
- package/esm2022/utils/index.mjs +2 -2
- package/esm2022/utils/memorize.mjs +4 -5
- package/esm2022/utils/position/arrow-line.mjs +67 -0
- package/esm2022/utils/position/geometry.mjs +1 -1
- package/esm2022/utils/selected.mjs +3 -3
- package/esm2022/utils/style/stroke.mjs +6 -4
- package/esm2022/utils/swimlane.mjs +16 -7
- package/esm2022/utils/table-selected.mjs +3 -4
- package/esm2022/utils/table.mjs +28 -5
- package/fesm2022/plait-draw.mjs +668 -511
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/generators/arrow-line-active.generator.d.ts +13 -0
- package/generators/{line-auto-complete.generator.d.ts → arrow-line-auto-complete.generator.d.ts} +1 -1
- package/generators/arrow-line.generator.d.ts +8 -0
- package/generators/index.d.ts +2 -2
- package/geometry.component.d.ts +2 -2
- package/image.component.d.ts +2 -2
- package/interfaces/arrow-line.d.ts +75 -0
- package/interfaces/element.d.ts +1 -1
- package/interfaces/index.d.ts +6 -4
- package/interfaces/vector-line.d.ts +16 -0
- package/package.json +12 -4
- package/plugins/with-arrow-line-auto-complete-reaction.d.ts +2 -0
- package/plugins/with-arrow-line-auto-complete.d.ts +7 -0
- package/plugins/with-arrow-line-bound-reaction.d.ts +2 -0
- package/plugins/with-arrow-line-create.d.ts +2 -0
- package/plugins/with-arrow-line-resize.d.ts +2 -0
- package/plugins/with-arrow-line-text-move.d.ts +2 -0
- package/plugins/with-arrow-line-text.d.ts +2 -0
- package/plugins/with-draw-fragment.d.ts +2 -2
- package/plugins/with-swimlane.d.ts +1 -2
- package/public-api.d.ts +2 -2
- package/table.component.d.ts +2 -2
- package/transforms/arrow-line.d.ts +8 -0
- package/transforms/common.d.ts +3 -0
- package/transforms/geometry.d.ts +1 -2
- package/transforms/index.d.ts +9 -9
- package/transforms/swimlane.d.ts +1 -3
- package/transforms/table-text.d.ts +2 -3
- package/transforms/table.d.ts +3 -0
- package/utils/arrow-line/arrow-line-arrow.d.ts +4 -0
- package/utils/arrow-line/arrow-line-basic.d.ts +13 -0
- package/utils/{line/line-common.d.ts → arrow-line/arrow-line-common.d.ts} +8 -4
- package/utils/{line/line-resize.d.ts → arrow-line/arrow-line-resize.d.ts} +3 -3
- package/utils/{line → arrow-line}/elbow.d.ts +7 -7
- package/utils/arrow-line/index.d.ts +5 -0
- package/utils/clipboard.d.ts +4 -4
- package/utils/common.d.ts +1 -0
- package/utils/geometry.d.ts +2 -1
- package/utils/hit.d.ts +7 -4
- package/utils/index.d.ts +1 -1
- package/utils/position/arrow-line.d.ts +16 -0
- package/utils/selected.d.ts +2 -2
- package/utils/swimlane.d.ts +3 -2
- package/utils/table.d.ts +2 -0
- package/esm2022/generators/line-active.generator.mjs +0 -81
- package/esm2022/generators/line-auto-complete.generator.mjs +0 -46
- package/esm2022/generators/line.generator.mjs +0 -13
- package/esm2022/interfaces/line.mjs +0 -70
- package/esm2022/line.component.mjs +0 -155
- package/esm2022/plugins/with-line-auto-complete-reaction.mjs +0 -41
- package/esm2022/plugins/with-line-auto-complete.mjs +0 -75
- package/esm2022/plugins/with-line-bound-reaction.mjs +0 -53
- package/esm2022/plugins/with-line-create.mjs +0 -53
- package/esm2022/plugins/with-line-resize.mjs +0 -158
- package/esm2022/plugins/with-line-text-move.mjs +0 -53
- package/esm2022/plugins/with-line-text.mjs +0 -62
- package/esm2022/transforms/line.mjs +0 -100
- package/esm2022/utils/line/elbow.mjs +0 -114
- package/esm2022/utils/line/index.mjs +0 -6
- package/esm2022/utils/line/line-arrow.mjs +0 -123
- package/esm2022/utils/line/line-basic.mjs +0 -257
- package/esm2022/utils/line/line-common.mjs +0 -123
- package/esm2022/utils/line/line-resize.mjs +0 -309
- package/esm2022/utils/position/line.mjs +0 -67
- package/generators/line-active.generator.d.ts +0 -13
- package/generators/line.generator.d.ts +0 -8
- package/interfaces/line.d.ts +0 -75
- package/line.component.d.ts +0 -26
- package/plugins/with-line-auto-complete-reaction.d.ts +0 -2
- package/plugins/with-line-auto-complete.d.ts +0 -7
- package/plugins/with-line-bound-reaction.d.ts +0 -2
- package/plugins/with-line-create.d.ts +0 -2
- package/plugins/with-line-resize.d.ts +0 -2
- package/plugins/with-line-text-move.d.ts +0 -2
- package/plugins/with-line-text.d.ts +0 -2
- package/transforms/line.d.ts +0 -12
- package/utils/line/index.d.ts +0 -5
- package/utils/line/line-arrow.d.ts +0 -4
- package/utils/line/line-basic.d.ts +0 -13
- package/utils/position/line.d.ts +0 -16
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { generateElbowLineRoute, removeDuplicatePoints, simplifyOrthogonalPoints } from '@plait/common';
|
|
2
|
+
import { Point, RectangleClient, createDebugGenerator } from '@plait/core';
|
|
3
|
+
import { LINE_ALIGN_TOLERANCE } from '../../constants/line';
|
|
4
|
+
import { getElbowLineRouteOptions, getArrowLineHandleRefPair } from './arrow-line-common';
|
|
5
|
+
const debugKey = 'debug:plait:line-mirror';
|
|
6
|
+
const debugGenerator = createDebugGenerator(debugKey);
|
|
7
|
+
export const alignPoints = (basePoint, movingPoint) => {
|
|
8
|
+
const newPoint = [...movingPoint];
|
|
9
|
+
if (Point.isVertical(newPoint, basePoint, LINE_ALIGN_TOLERANCE)) {
|
|
10
|
+
newPoint[0] = basePoint[0];
|
|
11
|
+
}
|
|
12
|
+
if (Point.isHorizontal(newPoint, basePoint, LINE_ALIGN_TOLERANCE)) {
|
|
13
|
+
newPoint[1] = basePoint[1];
|
|
14
|
+
}
|
|
15
|
+
return newPoint;
|
|
16
|
+
};
|
|
17
|
+
export function getResizedPreviousAndNextPoint(nextRenderPoints, sourcePoint, targetPoint, handleIndex) {
|
|
18
|
+
const referencePoint = {
|
|
19
|
+
previous: null,
|
|
20
|
+
next: null
|
|
21
|
+
};
|
|
22
|
+
const startPoint = nextRenderPoints[handleIndex];
|
|
23
|
+
const endPoint = nextRenderPoints[handleIndex + 1];
|
|
24
|
+
const isHorizontal = Point.isHorizontal(startPoint, endPoint);
|
|
25
|
+
const isVertical = Point.isVertical(startPoint, endPoint);
|
|
26
|
+
const previousPoint = nextRenderPoints[handleIndex - 1] ?? nextRenderPoints[0];
|
|
27
|
+
const beforePreviousPoint = nextRenderPoints[handleIndex - 2] ?? sourcePoint;
|
|
28
|
+
if ((isHorizontal && Point.isHorizontal(beforePreviousPoint, previousPoint)) ||
|
|
29
|
+
(isVertical && Point.isVertical(beforePreviousPoint, previousPoint))) {
|
|
30
|
+
referencePoint.previous = previousPoint;
|
|
31
|
+
}
|
|
32
|
+
const nextPoint = nextRenderPoints[handleIndex + 2] ?? nextRenderPoints[nextRenderPoints.length - 1];
|
|
33
|
+
const afterNextPoint = nextRenderPoints[handleIndex + 3] ?? targetPoint;
|
|
34
|
+
if ((isHorizontal && Point.isHorizontal(nextPoint, afterNextPoint)) || (isVertical && Point.isVertical(nextPoint, afterNextPoint))) {
|
|
35
|
+
referencePoint.next = nextPoint;
|
|
36
|
+
}
|
|
37
|
+
return referencePoint;
|
|
38
|
+
}
|
|
39
|
+
export function alignElbowSegment(startKeyPoint, endKeyPoint, resizeState, resizedPreviousAndNextPoint) {
|
|
40
|
+
let newStartPoint = startKeyPoint;
|
|
41
|
+
let newEndPoint = endKeyPoint;
|
|
42
|
+
if (Point.isHorizontal(startKeyPoint, endKeyPoint)) {
|
|
43
|
+
const offsetY = Point.getOffsetY(resizeState.startPoint, resizeState.endPoint);
|
|
44
|
+
let pointY = startKeyPoint[1] + offsetY;
|
|
45
|
+
if (resizedPreviousAndNextPoint.previous && Math.abs(resizedPreviousAndNextPoint.previous[1] - pointY) < LINE_ALIGN_TOLERANCE) {
|
|
46
|
+
pointY = resizedPreviousAndNextPoint.previous[1];
|
|
47
|
+
}
|
|
48
|
+
else if (resizedPreviousAndNextPoint.next && Math.abs(resizedPreviousAndNextPoint.next[1] - pointY) < LINE_ALIGN_TOLERANCE) {
|
|
49
|
+
pointY = resizedPreviousAndNextPoint.next[1];
|
|
50
|
+
}
|
|
51
|
+
newStartPoint = [startKeyPoint[0], pointY];
|
|
52
|
+
newEndPoint = [endKeyPoint[0], pointY];
|
|
53
|
+
}
|
|
54
|
+
if (Point.isVertical(startKeyPoint, endKeyPoint)) {
|
|
55
|
+
const offsetX = Point.getOffsetX(resizeState.startPoint, resizeState.endPoint);
|
|
56
|
+
let pointX = startKeyPoint[0] + offsetX;
|
|
57
|
+
if (resizedPreviousAndNextPoint.previous && Math.abs(resizedPreviousAndNextPoint.previous[0] - pointX) < LINE_ALIGN_TOLERANCE) {
|
|
58
|
+
pointX = resizedPreviousAndNextPoint.previous[0];
|
|
59
|
+
}
|
|
60
|
+
else if (resizedPreviousAndNextPoint.next && Math.abs(resizedPreviousAndNextPoint.next[0] - pointX) < LINE_ALIGN_TOLERANCE) {
|
|
61
|
+
pointX = resizedPreviousAndNextPoint.next[0];
|
|
62
|
+
}
|
|
63
|
+
newStartPoint = [pointX, startKeyPoint[1]];
|
|
64
|
+
newEndPoint = [pointX, endKeyPoint[1]];
|
|
65
|
+
}
|
|
66
|
+
return [newStartPoint, newEndPoint];
|
|
67
|
+
}
|
|
68
|
+
export function getIndexAndDeleteCountByKeyPoint(board, element, dataPoints, nextRenderPoints, handleIndex) {
|
|
69
|
+
let index = null;
|
|
70
|
+
let deleteCount = null;
|
|
71
|
+
const startKeyPoint = nextRenderPoints[handleIndex];
|
|
72
|
+
const endKeyPoint = nextRenderPoints[handleIndex + 1];
|
|
73
|
+
if (!startKeyPoint || !endKeyPoint) {
|
|
74
|
+
return {
|
|
75
|
+
index,
|
|
76
|
+
deleteCount
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const midDataPoints = dataPoints.slice(1, -1);
|
|
80
|
+
const startIndex = midDataPoints.findIndex(item => Point.isEquals(item, startKeyPoint));
|
|
81
|
+
const endIndex = midDataPoints.findIndex(item => Point.isEquals(item, endKeyPoint));
|
|
82
|
+
if (Math.max(startIndex, endIndex) > -1) {
|
|
83
|
+
if (startIndex > -1 && endIndex > -1) {
|
|
84
|
+
return {
|
|
85
|
+
index: startIndex,
|
|
86
|
+
deleteCount: 2
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (startIndex > -1 && endIndex === -1) {
|
|
90
|
+
const isReplace = startIndex < midDataPoints.length - 1 &&
|
|
91
|
+
Point.isAlign([midDataPoints[startIndex], midDataPoints[startIndex + 1], startKeyPoint, endKeyPoint]);
|
|
92
|
+
if (isReplace) {
|
|
93
|
+
return {
|
|
94
|
+
index: startIndex,
|
|
95
|
+
deleteCount: 2
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
index: startIndex,
|
|
100
|
+
deleteCount: 1
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (startIndex === -1 && endIndex > -1) {
|
|
104
|
+
const isReplace = endIndex > 0 && Point.isAlign([midDataPoints[endIndex], midDataPoints[endIndex - 1], startKeyPoint, endKeyPoint]);
|
|
105
|
+
if (isReplace) {
|
|
106
|
+
return {
|
|
107
|
+
index: endIndex - 1,
|
|
108
|
+
deleteCount: 2
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
index: endIndex,
|
|
113
|
+
deleteCount: 1
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
for (let i = 0; i < midDataPoints.length - 1; i++) {
|
|
119
|
+
const currentPoint = midDataPoints[i];
|
|
120
|
+
const nextPoint = midDataPoints[i + 1];
|
|
121
|
+
if (Point.isAlign([currentPoint, nextPoint, startKeyPoint, endKeyPoint])) {
|
|
122
|
+
index = i;
|
|
123
|
+
deleteCount = 2;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
if (Point.isAlign([currentPoint, nextPoint, startKeyPoint])) {
|
|
127
|
+
index = Math.min(i + 1, midDataPoints.length - 1);
|
|
128
|
+
deleteCount = 1;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
if (Point.isAlign([currentPoint, nextPoint, endKeyPoint])) {
|
|
132
|
+
index = Math.max(i - 1, 0);
|
|
133
|
+
deleteCount = 1;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (index === null) {
|
|
139
|
+
deleteCount = 0;
|
|
140
|
+
if (midDataPoints.length > 0) {
|
|
141
|
+
const handleRefPair = getArrowLineHandleRefPair(board, element);
|
|
142
|
+
const params = getElbowLineRouteOptions(board, element, handleRefPair);
|
|
143
|
+
const keyPoints = removeDuplicatePoints(generateElbowLineRoute(params, board));
|
|
144
|
+
const nextKeyPoints = simplifyOrthogonalPoints(keyPoints.slice(1, keyPoints.length - 1));
|
|
145
|
+
const nextDataPoints = [nextRenderPoints[0], ...midDataPoints, nextRenderPoints[nextRenderPoints.length - 1]];
|
|
146
|
+
const mirrorDataPoints = getMirrorDataPoints(board, nextDataPoints, nextKeyPoints, params);
|
|
147
|
+
for (let i = handleIndex - 1; i >= 0; i--) {
|
|
148
|
+
const previousIndex = mirrorDataPoints.slice(1, -1).findIndex(item => Point.isEquals(item, nextRenderPoints[i]));
|
|
149
|
+
if (previousIndex > -1) {
|
|
150
|
+
index = previousIndex + 1;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (index === null) {
|
|
155
|
+
index = 0;
|
|
156
|
+
// When renderPoints is a straight line and dataPoints are not on the line,
|
|
157
|
+
// the default 'deleteCount' is set to midDataPoints.length.
|
|
158
|
+
if (Point.isAlign(nextRenderPoints)) {
|
|
159
|
+
deleteCount = midDataPoints.length;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
index = 0;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
index,
|
|
169
|
+
deleteCount
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
export function getMirrorDataPoints(board, nextDataPoints, nextKeyPoints, params) {
|
|
173
|
+
for (let index = 1; index < nextDataPoints.length - 2; index++) {
|
|
174
|
+
adjustByCustomPointStartIndex(board, index, nextDataPoints, nextKeyPoints, params);
|
|
175
|
+
}
|
|
176
|
+
return nextDataPoints;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* adjust based parallel segment
|
|
180
|
+
*/
|
|
181
|
+
const adjustByCustomPointStartIndex = (board, customPointStartIndex, nextDataPoints, nextKeyPoints, params) => {
|
|
182
|
+
const beforePoint = nextDataPoints[customPointStartIndex - 1];
|
|
183
|
+
const startPoint = nextDataPoints[customPointStartIndex];
|
|
184
|
+
const endPoint = nextDataPoints[customPointStartIndex + 1];
|
|
185
|
+
const afterPoint = nextDataPoints[customPointStartIndex + 2];
|
|
186
|
+
const beforeSegment = [beforePoint, startPoint];
|
|
187
|
+
const afterSegment = [endPoint, afterPoint];
|
|
188
|
+
const isStraightWithBefore = Point.isAlign(beforeSegment);
|
|
189
|
+
const isStraightWithAfter = Point.isAlign(afterSegment);
|
|
190
|
+
let isAdjustStart = false;
|
|
191
|
+
let isAdjustEnd = false;
|
|
192
|
+
if (!isStraightWithBefore || !isStraightWithAfter) {
|
|
193
|
+
const midKeyPointsWithBefore = getMidKeyPoints(nextKeyPoints, beforeSegment[0], beforeSegment[1]);
|
|
194
|
+
const midKeyPointsWithAfter = getMidKeyPoints(nextKeyPoints, afterSegment[0], afterSegment[1]);
|
|
195
|
+
const hasMidKeyPoints = midKeyPointsWithBefore.length > 0 && midKeyPointsWithAfter.length > 0;
|
|
196
|
+
isAdjustStart = !isStraightWithBefore && !hasMidKeyPoints;
|
|
197
|
+
isAdjustEnd = !isStraightWithAfter && !hasMidKeyPoints;
|
|
198
|
+
}
|
|
199
|
+
if (isAdjustStart || isAdjustEnd) {
|
|
200
|
+
const parallelSegment = [startPoint, endPoint];
|
|
201
|
+
const parallelSegments = findOrthogonalParallelSegments(parallelSegment, nextKeyPoints);
|
|
202
|
+
const mirrorSegments = findMirrorSegments(board, parallelSegment, parallelSegments, params.sourceRectangle, params.targetRectangle);
|
|
203
|
+
if (mirrorSegments.length === 1) {
|
|
204
|
+
const mirrorSegment = mirrorSegments[0];
|
|
205
|
+
if (isAdjustStart) {
|
|
206
|
+
nextDataPoints.splice(customPointStartIndex, 1, mirrorSegment[0]);
|
|
207
|
+
}
|
|
208
|
+
if (isAdjustEnd) {
|
|
209
|
+
nextDataPoints.splice(customPointStartIndex + 1, 1, mirrorSegment[1]);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
const isHorizontal = Point.isHorizontal(startPoint, endPoint);
|
|
214
|
+
const adjustIndex = isHorizontal ? 0 : 1;
|
|
215
|
+
if (isAdjustStart) {
|
|
216
|
+
const newStartPoint = [startPoint[0], startPoint[1]];
|
|
217
|
+
newStartPoint[adjustIndex] = beforePoint[adjustIndex];
|
|
218
|
+
nextDataPoints.splice(customPointStartIndex, 1, newStartPoint);
|
|
219
|
+
}
|
|
220
|
+
if (isAdjustEnd) {
|
|
221
|
+
const newEndPoint = [endPoint[0], endPoint[1]];
|
|
222
|
+
newEndPoint[adjustIndex] = afterPoint[adjustIndex];
|
|
223
|
+
nextDataPoints.splice(customPointStartIndex + 1, 1, newEndPoint);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
export function isUpdatedHandleIndex(board, element, dataPoints, nextRenderPoints, handleIndex) {
|
|
229
|
+
const { deleteCount } = getIndexAndDeleteCountByKeyPoint(board, element, dataPoints, nextRenderPoints, handleIndex);
|
|
230
|
+
if (deleteCount !== null && deleteCount > 1) {
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
export function getMidKeyPoints(simplifiedNextKeyPoints, startPoint, endPoint) {
|
|
236
|
+
let midElbowPoints = [];
|
|
237
|
+
let startPointIndex = -1;
|
|
238
|
+
let endPointIndex = -1;
|
|
239
|
+
for (let i = 0; i < simplifiedNextKeyPoints.length; i++) {
|
|
240
|
+
if (Point.isAlign([simplifiedNextKeyPoints[i], startPoint])) {
|
|
241
|
+
startPointIndex = i;
|
|
242
|
+
}
|
|
243
|
+
if (startPointIndex > -1 && Point.isAlign([simplifiedNextKeyPoints[i], endPoint])) {
|
|
244
|
+
endPointIndex = i;
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (startPointIndex > -1 && endPointIndex > -1) {
|
|
249
|
+
midElbowPoints = simplifiedNextKeyPoints.slice(startPointIndex, endPointIndex + 1);
|
|
250
|
+
}
|
|
251
|
+
return midElbowPoints;
|
|
252
|
+
}
|
|
253
|
+
function findOrthogonalParallelSegments(segment, keyPoints) {
|
|
254
|
+
const isHorizontalSegment = Point.isHorizontal(segment[0], segment[1]);
|
|
255
|
+
const parallelSegments = [];
|
|
256
|
+
for (let i = 0; i < keyPoints.length - 1; i++) {
|
|
257
|
+
const current = keyPoints[i];
|
|
258
|
+
const next = keyPoints[i + 1];
|
|
259
|
+
const isHorizontal = Point.isHorizontal(current, next, 0.1);
|
|
260
|
+
if (isHorizontalSegment && isHorizontal) {
|
|
261
|
+
parallelSegments.push([current, next]);
|
|
262
|
+
}
|
|
263
|
+
if (!isHorizontalSegment && !isHorizontal) {
|
|
264
|
+
parallelSegments.push([current, next]);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return parallelSegments;
|
|
268
|
+
}
|
|
269
|
+
function findMirrorSegments(board, segment, parallelSegments, sourceRectangle, targetRectangle) {
|
|
270
|
+
debugGenerator.isDebug() && debugGenerator.clear();
|
|
271
|
+
const mirrorSegments = [];
|
|
272
|
+
for (let index = 0; index < parallelSegments.length; index++) {
|
|
273
|
+
const parallelPath = parallelSegments[index];
|
|
274
|
+
const startPoint = [segment[0][0], segment[0][1]];
|
|
275
|
+
const endPoint = [segment[1][0], segment[1][1]];
|
|
276
|
+
const isHorizontal = Point.isHorizontal(startPoint, endPoint);
|
|
277
|
+
const adjustDataIndex = isHorizontal ? 0 : 1;
|
|
278
|
+
startPoint[adjustDataIndex] = parallelPath[0][adjustDataIndex];
|
|
279
|
+
endPoint[adjustDataIndex] = parallelPath[1][adjustDataIndex];
|
|
280
|
+
const fakeRectangle = RectangleClient.getRectangleByPoints([startPoint, endPoint, ...parallelPath]);
|
|
281
|
+
const isValid = !RectangleClient.isHit(fakeRectangle, sourceRectangle) && !RectangleClient.isHit(fakeRectangle, targetRectangle);
|
|
282
|
+
if (isValid) {
|
|
283
|
+
mirrorSegments.push([startPoint, endPoint]);
|
|
284
|
+
debugGenerator.isDebug() && debugGenerator.drawPolygon(board, RectangleClient.getCornerPoints(fakeRectangle));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return mirrorSegments;
|
|
288
|
+
}
|
|
289
|
+
export const hasIllegalElbowPoint = (midDataPoints) => {
|
|
290
|
+
if (midDataPoints.length === 1) {
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
return midDataPoints.some((item, index) => {
|
|
294
|
+
const beforePoint = midDataPoints[index - 1];
|
|
295
|
+
const afterPoint = midDataPoints[index + 1];
|
|
296
|
+
const beforeSegment = beforePoint && [beforePoint, item];
|
|
297
|
+
const afterSegment = afterPoint && [item, afterPoint];
|
|
298
|
+
const isStraightWithBefore = beforeSegment && Point.isAlign(beforeSegment);
|
|
299
|
+
const isStraightWithAfter = afterSegment && Point.isAlign(afterSegment);
|
|
300
|
+
if (index === 0) {
|
|
301
|
+
return !isStraightWithAfter;
|
|
302
|
+
}
|
|
303
|
+
if (index === midDataPoints.length - 1) {
|
|
304
|
+
return !isStraightWithBefore;
|
|
305
|
+
}
|
|
306
|
+
return !isStraightWithBefore && !isStraightWithAfter;
|
|
307
|
+
});
|
|
308
|
+
};
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyb3ctbGluZS1yZXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9hcnJvdy1saW5lL2Fycm93LWxpbmUtcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0Msc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUksT0FBTyxFQUFjLEtBQUssRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHMUYsTUFBTSxRQUFRLEdBQUcseUJBQXlCLENBQUM7QUFDM0MsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBZ0IsRUFBRSxXQUFrQixFQUFFLEVBQUU7SUFDaEUsTUFBTSxRQUFRLEdBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztRQUM5RCxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7UUFDaEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQyxD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YUFBYSxDQUFDLENBQUM7UUFDM0UsTUFBTSxtQkFBbUIsR0FBRyxZQUFZLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNkLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxib3dMaW5lUm91dGVPcHRpb25zLCBSZXNpemVTdGF0ZSwgZ2VuZXJhdGVFbGJvd0xpbmVSb3V0ZSwgcmVtb3ZlRHVwbGljYXRlUG9pbnRzLCBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIGNyZWF0ZURlYnVnR2VuZXJhdG9yIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTElORV9BTElHTl9UT0xFUkFOQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbGluZSc7XG5pbXBvcnQgeyBnZXRFbGJvd0xpbmVSb3V0ZU9wdGlvbnMsIGdldEFycm93TGluZUhhbmRsZVJlZlBhaXIgfSBmcm9tICcuL2Fycm93LWxpbmUtY29tbW9uJztcbmltcG9ydCB7IFBsYWl0QXJyb3dMaW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmNvbnN0IGRlYnVnS2V5ID0gJ2RlYnVnOnBsYWl0OmxpbmUtbWlycm9yJztcbmNvbnN0IGRlYnVnR2VuZXJhdG9yID0gY3JlYXRlRGVidWdHZW5lcmF0b3IoZGVidWdLZXkpO1xuXG5leHBvcnQgY29uc3QgYWxpZ25Qb2ludHMgPSAoYmFzZVBvaW50OiBQb2ludCwgbW92aW5nUG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgbmV3UG9pbnQ6IFBvaW50ID0gWy4uLm1vdmluZ1BvaW50XTtcbiAgICBpZiAoUG9pbnQuaXNWZXJ0aWNhbChuZXdQb2ludCwgYmFzZVBvaW50LCBMSU5FX0FMSUdOX1RPTEVSQU5DRSkpIHtcbiAgICAgICAgbmV3UG9pbnRbMF0gPSBiYXNlUG9pbnRbMF07XG4gICAgfVxuICAgIGlmIChQb2ludC5pc0hvcml6b250YWwobmV3UG9pbnQsIGJhc2VQb2ludCwgTElORV9BTElHTl9UT0xFUkFOQ0UpKSB7XG4gICAgICAgIG5ld1BvaW50WzFdID0gYmFzZVBvaW50WzFdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3UG9pbnQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzaXplZFByZXZpb3VzQW5kTmV4dFBvaW50KG5leHRSZW5kZXJQb2ludHM6IFBvaW50W10sIHNvdXJjZVBvaW50OiBQb2ludCwgdGFyZ2V0UG9pbnQ6IFBvaW50LCBoYW5kbGVJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlUG9pbnQ6IHsgcHJldmlvdXM6IFBvaW50IHwgbnVsbDsgbmV4dDogUG9pbnQgfCBudWxsIH0gPSB7XG4gICAgICAgIHByZXZpb3VzOiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSBuZXh0UmVuZGVyUG9pbnRzW2hhbmRsZUluZGV4XTtcbiAgICBjb25zdCBlbmRQb2ludCA9IG5leHRSZW5kZXJQb2ludHNbaGFuZGxlSW5kZXggKyAxXTtcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBQb2ludC5pc0hvcml6b250YWwoc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xuICAgIGNvbnN0IGlzVmVydGljYWwgPSBQb2ludC5pc1ZlcnRpY2FsKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcbiAgICBjb25zdCBwcmV2aW91c1BvaW50ID0gbmV4dFJlbmRlclBvaW50c1toYW5kbGVJbmRleCAtIDFdID8/IG5leHRSZW5kZXJQb2ludHNbMF07XG4gICAgY29uc3QgYmVmb3JlUHJldmlvdXNQb2ludCA9IG5leHRSZW5kZXJQb2ludHNbaGFuZGxlSW5kZXggLSAyXSA/PyBzb3VyY2VQb2ludDtcbiAgICBpZiAoXG4gICAgICAgIChpc0hvcml6b250YWwgJiYgUG9pbnQuaXNIb3Jpem9udGFsKGJlZm9yZVByZXZpb3VzUG9pbnQsIHByZXZpb3VzUG9pbnQpKSB8fFxuICAgICAgICAoaXNWZXJ0aWNhbCAmJiBQb2ludC5pc1ZlcnRpY2FsKGJlZm9yZVByZXZpb3VzUG9pbnQsIHByZXZpb3VzUG9pbnQpKVxuICAgICkge1xuICAgICAgICByZWZlcmVuY2VQb2ludC5wcmV2aW91cyA9IHByZXZpb3VzUG9pbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFBvaW50ID0gbmV4dFJlbmRlclBvaW50c1toYW5kbGVJbmRleCArIDJdID8/IG5leHRSZW5kZXJQb2ludHNbbmV4dFJlbmRlclBvaW50cy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhZnRlck5leHRQb2ludCA9IG5leHRSZW5kZXJQb2ludHNbaGFuZGxlSW5kZXggKyAzXSA/PyB0YXJnZXRQb2ludDtcbiAgICBpZiAoKGlzSG9yaXpvbnRhbCAmJiBQb2ludC5pc0hvcml6b250YWwobmV4dFBvaW50LCBhZnRlck5leHRQb2ludCkpIHx8IChpc1ZlcnRpY2FsICYmIFBvaW50LmlzVmVydGljYWwobmV4dFBvaW50LCBhZnRlck5leHRQb2ludCkpKSB7XG4gICAgICAgIHJlZmVyZW5jZVBvaW50Lm5leHQgPSBuZXh0UG9pbnQ7XG4gICAgfVxuICAgIHJldHVybiByZWZlcmVuY2VQb2ludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsaWduRWxib3dTZWdtZW50KFxuICAgIHN0YXJ0S2V5UG9pbnQ6IFBvaW50LFxuICAgIGVuZEtleVBvaW50OiBQb2ludCxcbiAgICByZXNpemVTdGF0ZTogUmVzaXplU3RhdGUsXG4gICAgcmVzaXplZFByZXZpb3VzQW5kTmV4dFBvaW50OiB7IHByZXZpb3VzOiBQb2ludCB8IG51bGw7IG5leHQ6IFBvaW50IHwgbnVsbCB9XG4pIHtcbiAgICBsZXQgbmV3U3RhcnRQb2ludCA9IHN0YXJ0S2V5UG9pbnQ7XG4gICAgbGV0IG5ld0VuZFBvaW50ID0gZW5kS2V5UG9pbnQ7XG4gICAgaWYgKFBvaW50LmlzSG9yaXpvbnRhbChzdGFydEtleVBvaW50LCBlbmRLZXlQb2ludCkpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IFBvaW50LmdldE9mZnNldFkocmVzaXplU3RhdGUuc3RhcnRQb2ludCwgcmVzaXplU3RhdGUuZW5kUG9pbnQpO1xuICAgICAgICBsZXQgcG9pbnRZID0gc3RhcnRLZXlQb2ludFsxXSArIG9mZnNldFk7XG4gICAgICAgIGlmIChyZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnQucHJldmlvdXMgJiYgTWF0aC5hYnMocmVzaXplZFByZXZpb3VzQW5kTmV4dFBvaW50LnByZXZpb3VzWzFdIC0gcG9pbnRZKSA8IExJTkVfQUxJR05fVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICBwb2ludFkgPSByZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnQucHJldmlvdXNbMV07XG4gICAgICAgIH0gZWxzZSBpZiAocmVzaXplZFByZXZpb3VzQW5kTmV4dFBvaW50Lm5leHQgJiYgTWF0aC5hYnMocmVzaXplZFByZXZpb3VzQW5kTmV4dFBvaW50Lm5leHRbMV0gLSBwb2ludFkpIDwgTElORV9BTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgIHBvaW50WSA9IHJlc2l6ZWRQcmV2aW91c0FuZE5leHRQb2ludC5uZXh0WzFdO1xuICAgICAgICB9XG4gICAgICAgIG5ld1N0YXJ0UG9pbnQgPSBbc3RhcnRLZXlQb2ludFswXSwgcG9pbnRZXTtcbiAgICAgICAgbmV3RW5kUG9pbnQgPSBbZW5kS2V5UG9pbnRbMF0sIHBvaW50WV07XG4gICAgfVxuICAgIGlmIChQb2ludC5pc1ZlcnRpY2FsKHN0YXJ0S2V5UG9pbnQsIGVuZEtleVBvaW50KSkge1xuICAgICAgICBjb25zdCBvZmZzZXRYID0gUG9pbnQuZ2V0T2Zmc2V0WChyZXNpemVTdGF0ZS5zdGFydFBvaW50LCByZXNpemVTdGF0ZS5lbmRQb2ludCk7XG4gICAgICAgIGxldCBwb2ludFggPSBzdGFydEtleVBvaW50WzBdICsgb2Zmc2V0WDtcbiAgICAgICAgaWYgKHJlc2l6ZWRQcmV2aW91c0FuZE5leHRQb2ludC5wcmV2aW91cyAmJiBNYXRoLmFicyhyZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnQucHJldmlvdXNbMF0gLSBwb2ludFgpIDwgTElORV9BTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgIHBvaW50WCA9IHJlc2l6ZWRQcmV2aW91c0FuZE5leHRQb2ludC5wcmV2aW91c1swXTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnQubmV4dCAmJiBNYXRoLmFicyhyZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnQubmV4dFswXSAtIHBvaW50WCkgPCBMSU5FX0FMSUdOX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgcG9pbnRYID0gcmVzaXplZFByZXZpb3VzQW5kTmV4dFBvaW50Lm5leHRbMF07XG4gICAgICAgIH1cbiAgICAgICAgbmV3U3RhcnRQb2ludCA9IFtwb2ludFgsIHN0YXJ0S2V5UG9pbnRbMV1dO1xuICAgICAgICBuZXdFbmRQb2ludCA9IFtwb2ludFgsIGVuZEtleVBvaW50WzFdXTtcbiAgICB9XG4gICAgcmV0dXJuIFtuZXdTdGFydFBvaW50LCBuZXdFbmRQb2ludF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmRleEFuZERlbGV0ZUNvdW50QnlLZXlQb2ludChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBlbGVtZW50OiBQbGFpdEFycm93TGluZSxcbiAgICBkYXRhUG9pbnRzOiBQb2ludFtdLFxuICAgIG5leHRSZW5kZXJQb2ludHM6IFBvaW50W10sXG4gICAgaGFuZGxlSW5kZXg6IG51bWJlclxuKSB7XG4gICAgbGV0IGluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgZGVsZXRlQ291bnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhcnRLZXlQb2ludCA9IG5leHRSZW5kZXJQb2ludHNbaGFuZGxlSW5kZXhdO1xuICAgIGNvbnN0IGVuZEtleVBvaW50ID0gbmV4dFJlbmRlclBvaW50c1toYW5kbGVJbmRleCArIDFdO1xuICAgIGlmICghc3RhcnRLZXlQb2ludCB8fCAhZW5kS2V5UG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGVsZXRlQ291bnRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgbWlkRGF0YVBvaW50cyA9IGRhdGFQb2ludHMuc2xpY2UoMSwgLTEpO1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBtaWREYXRhUG9pbnRzLmZpbmRJbmRleChpdGVtID0+IFBvaW50LmlzRXF1YWxzKGl0ZW0sIHN0YXJ0S2V5UG9pbnQpKTtcbiAgICBjb25zdCBlbmRJbmRleCA9IG1pZERhdGFQb2ludHMuZmluZEluZGV4KGl0ZW0gPT4gUG9pbnQuaXNFcXVhbHMoaXRlbSwgZW5kS2V5UG9pbnQpKTtcblxuICAgIGlmIChNYXRoLm1heChzdGFydEluZGV4LCBlbmRJbmRleCkgPiAtMSkge1xuICAgICAgICBpZiAoc3RhcnRJbmRleCA+IC0xICYmIGVuZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgZGVsZXRlQ291bnQ6IDJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0SW5kZXggPiAtMSAmJiBlbmRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzUmVwbGFjZSA9XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA8IG1pZERhdGFQb2ludHMubGVuZ3RoIC0gMSAmJlxuICAgICAgICAgICAgICAgIFBvaW50LmlzQWxpZ24oW21pZERhdGFQb2ludHNbc3RhcnRJbmRleF0sIG1pZERhdGFQb2ludHNbc3RhcnRJbmRleCArIDFdLCBzdGFydEtleVBvaW50LCBlbmRLZXlQb2ludF0pO1xuICAgICAgICAgICAgaWYgKGlzUmVwbGFjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVDb3VudDogMlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50OiAxXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydEluZGV4ID09PSAtMSAmJiBlbmRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBpc1JlcGxhY2UgPVxuICAgICAgICAgICAgICAgIGVuZEluZGV4ID4gMCAmJiBQb2ludC5pc0FsaWduKFttaWREYXRhUG9pbnRzW2VuZEluZGV4XSwgbWlkRGF0YVBvaW50c1tlbmRJbmRleCAtIDFdLCBzdGFydEtleVBvaW50LCBlbmRLZXlQb2ludF0pO1xuICAgICAgICAgICAgaWYgKGlzUmVwbGFjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBlbmRJbmRleCAtIDEsXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50OiAyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGVuZEluZGV4LFxuICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50OiAxXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaWREYXRhUG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBvaW50ID0gbWlkRGF0YVBvaW50c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRQb2ludCA9IG1pZERhdGFQb2ludHNbaSArIDFdO1xuICAgICAgICAgICAgaWYgKFBvaW50LmlzQWxpZ24oW2N1cnJlbnRQb2ludCwgbmV4dFBvaW50LCBzdGFydEtleVBvaW50LCBlbmRLZXlQb2ludF0pKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChQb2ludC5pc0FsaWduKFtjdXJyZW50UG9pbnQsIG5leHRQb2ludCwgc3RhcnRLZXlQb2ludF0pKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBNYXRoLm1pbihpICsgMSwgbWlkRGF0YVBvaW50cy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUG9pbnQuaXNBbGlnbihbY3VycmVudFBvaW50LCBuZXh0UG9pbnQsIGVuZEtleVBvaW50XSkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IE1hdGgubWF4KGkgLSAxLCAwKTtcbiAgICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIGRlbGV0ZUNvdW50ID0gMDtcbiAgICAgICAgaWYgKG1pZERhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlUmVmUGFpciA9IGdldEFycm93TGluZUhhbmRsZVJlZlBhaXIoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gZ2V0RWxib3dMaW5lUm91dGVPcHRpb25zKGJvYXJkLCBlbGVtZW50IGFzIFBsYWl0QXJyb3dMaW5lLCBoYW5kbGVSZWZQYWlyKTtcbiAgICAgICAgICAgIGNvbnN0IGtleVBvaW50cyA9IHJlbW92ZUR1cGxpY2F0ZVBvaW50cyhnZW5lcmF0ZUVsYm93TGluZVJvdXRlKHBhcmFtcywgYm9hcmQpKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRLZXlQb2ludHMgPSBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMoa2V5UG9pbnRzLnNsaWNlKDEsIGtleVBvaW50cy5sZW5ndGggLSAxKSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0RGF0YVBvaW50cyA9IFtuZXh0UmVuZGVyUG9pbnRzWzBdLCAuLi5taWREYXRhUG9pbnRzLCBuZXh0UmVuZGVyUG9pbnRzW25leHRSZW5kZXJQb2ludHMubGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgY29uc3QgbWlycm9yRGF0YVBvaW50cyA9IGdldE1pcnJvckRhdGFQb2ludHMoYm9hcmQsIG5leHREYXRhUG9pbnRzLCBuZXh0S2V5UG9pbnRzLCBwYXJhbXMpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGhhbmRsZUluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gbWlycm9yRGF0YVBvaW50cy5zbGljZSgxLCAtMSkuZmluZEluZGV4KGl0ZW0gPT4gUG9pbnQuaXNFcXVhbHMoaXRlbSwgbmV4dFJlbmRlclBvaW50c1tpXSkpO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwcmV2aW91c0luZGV4ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gcmVuZGVyUG9pbnRzIGlzIGEgc3RyYWlnaHQgbGluZSBhbmQgZGF0YVBvaW50cyBhcmUgbm90IG9uIHRoZSBsaW5lLFxuICAgICAgICAgICAgICAgIC8vIHRoZSBkZWZhdWx0ICdkZWxldGVDb3VudCcgaXMgc2V0IHRvIG1pZERhdGFQb2ludHMubGVuZ3RoLlxuICAgICAgICAgICAgICAgIGlmIChQb2ludC5pc0FsaWduKG5leHRSZW5kZXJQb2ludHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gbWlkRGF0YVBvaW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRlbGV0ZUNvdW50XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1pcnJvckRhdGFQb2ludHMoYm9hcmQ6IFBsYWl0Qm9hcmQsIG5leHREYXRhUG9pbnRzOiBQb2ludFtdLCBuZXh0S2V5UG9pbnRzOiBQb2ludFtdLCBwYXJhbXM6IEVsYm93TGluZVJvdXRlT3B0aW9ucykge1xuICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBuZXh0RGF0YVBvaW50cy5sZW5ndGggLSAyOyBpbmRleCsrKSB7XG4gICAgICAgIGFkanVzdEJ5Q3VzdG9tUG9pbnRTdGFydEluZGV4KGJvYXJkLCBpbmRleCwgbmV4dERhdGFQb2ludHMsIG5leHRLZXlQb2ludHMsIHBhcmFtcyk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0RGF0YVBvaW50cztcbn1cblxuLyoqXG4gKiBhZGp1c3QgYmFzZWQgcGFyYWxsZWwgc2VnbWVudFxuICovXG5jb25zdCBhZGp1c3RCeUN1c3RvbVBvaW50U3RhcnRJbmRleCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBjdXN0b21Qb2ludFN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBuZXh0RGF0YVBvaW50czogUG9pbnRbXSxcbiAgICBuZXh0S2V5UG9pbnRzOiBQb2ludFtdLFxuICAgIHBhcmFtczogRWxib3dMaW5lUm91dGVPcHRpb25zXG4pID0+IHtcbiAgICBjb25zdCBiZWZvcmVQb2ludCA9IG5leHREYXRhUG9pbnRzW2N1c3RvbVBvaW50U3RhcnRJbmRleCAtIDFdO1xuICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSBuZXh0RGF0YVBvaW50c1tjdXN0b21Qb2ludFN0YXJ0SW5kZXhdO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gbmV4dERhdGFQb2ludHNbY3VzdG9tUG9pbnRTdGFydEluZGV4ICsgMV07XG4gICAgY29uc3QgYWZ0ZXJQb2ludCA9IG5leHREYXRhUG9pbnRzW2N1c3RvbVBvaW50U3RhcnRJbmRleCArIDJdO1xuICAgIGNvbnN0IGJlZm9yZVNlZ21lbnQgPSBbYmVmb3JlUG9pbnQsIHN0YXJ0UG9pbnRdO1xuICAgIGNvbnN0IGFmdGVyU2VnbWVudCA9IFtlbmRQb2ludCwgYWZ0ZXJQb2ludF07XG4gICAgY29uc3QgaXNTdHJhaWdodFdpdGhCZWZvcmUgPSBQb2ludC5pc0FsaWduKGJlZm9yZVNlZ21lbnQpO1xuICAgIGNvbnN0IGlzU3RyYWlnaHRXaXRoQWZ0ZXIgPSBQb2ludC5pc0FsaWduKGFmdGVyU2VnbWVudCk7XG4gICAgbGV0IGlzQWRqdXN0U3RhcnQgPSBmYWxzZTtcbiAgICBsZXQgaXNBZGp1c3RFbmQgPSBmYWxzZTtcbiAgICBpZiAoIWlzU3RyYWlnaHRXaXRoQmVmb3JlIHx8ICFpc1N0cmFpZ2h0V2l0aEFmdGVyKSB7XG4gICAgICAgIGNvbnN0IG1pZEtleVBvaW50c1dpdGhCZWZvcmUgPSBnZXRNaWRLZXlQb2ludHMobmV4dEtleVBvaW50cywgYmVmb3JlU2VnbWVudFswXSwgYmVmb3JlU2VnbWVudFsxXSk7XG4gICAgICAgIGNvbnN0IG1pZEtleVBvaW50c1dpdGhBZnRlciA9IGdldE1pZEtleVBvaW50cyhuZXh0S2V5UG9pbnRzLCBhZnRlclNlZ21lbnRbMF0sIGFmdGVyU2VnbWVudFsxXSk7XG4gICAgICAgIGNvbnN0IGhhc01pZEtleVBvaW50cyA9IG1pZEtleVBvaW50c1dpdGhCZWZvcmUubGVuZ3RoID4gMCAmJiBtaWRLZXlQb2ludHNXaXRoQWZ0ZXIubGVuZ3RoID4gMDtcbiAgICAgICAgaXNBZGp1c3RTdGFydCA9ICFpc1N0cmFpZ2h0V2l0aEJlZm9yZSAmJiAhaGFzTWlkS2V5UG9pbnRzO1xuICAgICAgICBpc0FkanVzdEVuZCA9ICFpc1N0cmFpZ2h0V2l0aEFmdGVyICYmICFoYXNNaWRLZXlQb2ludHM7XG4gICAgfVxuICAgIGlmIChpc0FkanVzdFN0YXJ0IHx8IGlzQWRqdXN0RW5kKSB7XG4gICAgICAgIGNvbnN0IHBhcmFsbGVsU2VnbWVudCA9IFtzdGFydFBvaW50LCBlbmRQb2ludF0gYXMgW1BvaW50LCBQb2ludF07XG4gICAgICAgIGNvbnN0IHBhcmFsbGVsU2VnbWVudHMgPSBmaW5kT3J0aG9nb25hbFBhcmFsbGVsU2VnbWVudHMocGFyYWxsZWxTZWdtZW50LCBuZXh0S2V5UG9pbnRzKTtcbiAgICAgICAgY29uc3QgbWlycm9yU2VnbWVudHMgPSBmaW5kTWlycm9yU2VnbWVudHMoYm9hcmQsIHBhcmFsbGVsU2VnbWVudCwgcGFyYWxsZWxTZWdtZW50cywgcGFyYW1zLnNvdXJjZVJlY3RhbmdsZSwgcGFyYW1zLnRhcmdldFJlY3RhbmdsZSk7XG4gICAgICAgIGlmIChtaXJyb3JTZWdtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pcnJvclNlZ21lbnQgPSBtaXJyb3JTZWdtZW50c1swXTtcbiAgICAgICAgICAgIGlmIChpc0FkanVzdFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgbmV4dERhdGFQb2ludHMuc3BsaWNlKGN1c3RvbVBvaW50U3RhcnRJbmRleCwgMSwgbWlycm9yU2VnbWVudFswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNBZGp1c3RFbmQpIHtcbiAgICAgICAgICAgICAgICBuZXh0RGF0YVBvaW50cy5zcGxpY2UoY3VzdG9tUG9pbnRTdGFydEluZGV4ICsgMSwgMSwgbWlycm9yU2VnbWVudFsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSBQb2ludC5pc0hvcml6b250YWwoc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xuICAgICAgICAgICAgY29uc3QgYWRqdXN0SW5kZXggPSBpc0hvcml6b250YWwgPyAwIDogMTtcbiAgICAgICAgICAgIGlmIChpc0FkanVzdFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3RhcnRQb2ludCA9IFtzdGFydFBvaW50WzBdLCBzdGFydFBvaW50WzFdXSBhcyBQb2ludDtcbiAgICAgICAgICAgICAgICBuZXdTdGFydFBvaW50W2FkanVzdEluZGV4XSA9IGJlZm9yZVBvaW50W2FkanVzdEluZGV4XTtcbiAgICAgICAgICAgICAgICBuZXh0RGF0YVBvaW50cy5zcGxpY2UoY3VzdG9tUG9pbnRTdGFydEluZGV4LCAxLCBuZXdTdGFydFBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0FkanVzdEVuZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VuZFBvaW50ID0gW2VuZFBvaW50WzBdLCBlbmRQb2ludFsxXV0gYXMgUG9pbnQ7XG4gICAgICAgICAgICAgICAgbmV3RW5kUG9pbnRbYWRqdXN0SW5kZXhdID0gYWZ0ZXJQb2ludFthZGp1c3RJbmRleF07XG4gICAgICAgICAgICAgICAgbmV4dERhdGFQb2ludHMuc3BsaWNlKGN1c3RvbVBvaW50U3RhcnRJbmRleCArIDEsIDEsIG5ld0VuZFBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VwZGF0ZWRIYW5kbGVJbmRleChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBlbGVtZW50OiBQbGFpdEFycm93TGluZSxcbiAgICBkYXRhUG9pbnRzOiBQb2ludFtdLFxuICAgIG5leHRSZW5kZXJQb2ludHM6IFBvaW50W10sXG4gICAgaGFuZGxlSW5kZXg6IG51bWJlclxuKSB7XG4gICAgY29uc3QgeyBkZWxldGVDb3VudCB9ID0gZ2V0SW5kZXhBbmREZWxldGVDb3VudEJ5S2V5UG9pbnQoYm9hcmQsIGVsZW1lbnQsIGRhdGFQb2ludHMsIG5leHRSZW5kZXJQb2ludHMsIGhhbmRsZUluZGV4KTtcbiAgICBpZiAoZGVsZXRlQ291bnQgIT09IG51bGwgJiYgZGVsZXRlQ291bnQgPiAxKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaWRLZXlQb2ludHMoc2ltcGxpZmllZE5leHRLZXlQb2ludHM6IFBvaW50W10sIHN0YXJ0UG9pbnQ6IFBvaW50LCBlbmRQb2ludDogUG9pbnQpIHtcbiAgICBsZXQgbWlkRWxib3dQb2ludHM6IFBvaW50W10gPSBbXTtcbiAgICBsZXQgc3RhcnRQb2ludEluZGV4ID0gLTE7XG4gICAgbGV0IGVuZFBvaW50SW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpbXBsaWZpZWROZXh0S2V5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChQb2ludC5pc0FsaWduKFtzaW1wbGlmaWVkTmV4dEtleVBvaW50c1tpXSwgc3RhcnRQb2ludF0pKSB7XG4gICAgICAgICAgICBzdGFydFBvaW50SW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydFBvaW50SW5kZXggPiAtMSAmJiBQb2ludC5pc0FsaWduKFtzaW1wbGlmaWVkTmV4dEtleVBvaW50c1tpXSwgZW5kUG9pbnRdKSkge1xuICAgICAgICAgICAgZW5kUG9pbnRJbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhcnRQb2ludEluZGV4ID4gLTEgJiYgZW5kUG9pbnRJbmRleCA+IC0xKSB7XG4gICAgICAgIG1pZEVsYm93UG9pbnRzID0gc2ltcGxpZmllZE5leHRLZXlQb2ludHMuc2xpY2Uoc3RhcnRQb2ludEluZGV4LCBlbmRQb2ludEluZGV4ICsgMSk7XG4gICAgfVxuICAgIHJldHVybiBtaWRFbGJvd1BvaW50cztcbn1cblxuZnVuY3Rpb24gZmluZE9ydGhvZ29uYWxQYXJhbGxlbFNlZ21lbnRzKHNlZ21lbnQ6IFtQb2ludCwgUG9pbnRdLCBrZXlQb2ludHM6IFBvaW50W10pOiBbUG9pbnQsIFBvaW50XVtdIHtcbiAgICBjb25zdCBpc0hvcml6b250YWxTZWdtZW50ID0gUG9pbnQuaXNIb3Jpem9udGFsKHNlZ21lbnRbMF0sIHNlZ21lbnRbMV0pO1xuICAgIGNvbnN0IHBhcmFsbGVsU2VnbWVudHM6IFtQb2ludCwgUG9pbnRdW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5UG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0ga2V5UG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBuZXh0ID0ga2V5UG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gUG9pbnQuaXNIb3Jpem9udGFsKGN1cnJlbnQsIG5leHQsIDAuMSk7XG4gICAgICAgIGlmIChpc0hvcml6b250YWxTZWdtZW50ICYmIGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgcGFyYWxsZWxTZWdtZW50cy5wdXNoKFtjdXJyZW50LCBuZXh0XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0hvcml6b250YWxTZWdtZW50ICYmICFpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgIHBhcmFsbGVsU2VnbWVudHMucHVzaChbY3VycmVudCwgbmV4dF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFsbGVsU2VnbWVudHM7XG59XG5cbmZ1bmN0aW9uIGZpbmRNaXJyb3JTZWdtZW50cyhcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBzZWdtZW50OiBbUG9pbnQsIFBvaW50XSxcbiAgICBwYXJhbGxlbFNlZ21lbnRzOiBbUG9pbnQsIFBvaW50XVtdLFxuICAgIHNvdXJjZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LFxuICAgIHRhcmdldFJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50XG4pIHtcbiAgICBkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgZGVidWdHZW5lcmF0b3IuY2xlYXIoKTtcblxuICAgIGNvbnN0IG1pcnJvclNlZ21lbnRzOiBbUG9pbnQsIFBvaW50XVtdID0gW107XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBhcmFsbGVsU2VnbWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHBhcmFsbGVsUGF0aCA9IHBhcmFsbGVsU2VnbWVudHNbaW5kZXhdO1xuICAgICAgICBjb25zdCBzdGFydFBvaW50ID0gW3NlZ21lbnRbMF1bMF0sIHNlZ21lbnRbMF1bMV1dIGFzIFBvaW50O1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IFtzZWdtZW50WzFdWzBdLCBzZWdtZW50WzFdWzFdXSBhcyBQb2ludDtcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gUG9pbnQuaXNIb3Jpem9udGFsKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcbiAgICAgICAgY29uc3QgYWRqdXN0RGF0YUluZGV4ID0gaXNIb3Jpem9udGFsID8gMCA6IDE7XG4gICAgICAgIHN0YXJ0UG9pbnRbYWRqdXN0RGF0YUluZGV4XSA9IHBhcmFsbGVsUGF0aFswXVthZGp1c3REYXRhSW5kZXhdO1xuICAgICAgICBlbmRQb2ludFthZGp1c3REYXRhSW5kZXhdID0gcGFyYWxsZWxQYXRoWzFdW2FkanVzdERhdGFJbmRleF07XG4gICAgICAgIGNvbnN0IGZha2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3N0YXJ0UG9pbnQsIGVuZFBvaW50LCAuLi5wYXJhbGxlbFBhdGhdKTtcbiAgICAgICAgY29uc3QgaXNWYWxpZCA9ICFSZWN0YW5nbGVDbGllbnQuaXNIaXQoZmFrZVJlY3RhbmdsZSwgc291cmNlUmVjdGFuZ2xlKSAmJiAhUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KGZha2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSk7XG4gICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICBtaXJyb3JTZWdtZW50cy5wdXNoKFtzdGFydFBvaW50LCBlbmRQb2ludF0pO1xuXG4gICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgZGVidWdHZW5lcmF0b3IuZHJhd1BvbHlnb24oYm9hcmQsIFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMoZmFrZVJlY3RhbmdsZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtaXJyb3JTZWdtZW50cztcbn1cblxuZXhwb3J0IGNvbnN0IGhhc0lsbGVnYWxFbGJvd1BvaW50ID0gKG1pZERhdGFQb2ludHM6IFBvaW50W10pOiBib29sZWFuID0+IHtcbiAgICBpZiAobWlkRGF0YVBvaW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBtaWREYXRhUG9pbnRzLnNvbWUoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGJlZm9yZVBvaW50ID0gbWlkRGF0YVBvaW50c1tpbmRleCAtIDFdO1xuICAgICAgICBjb25zdCBhZnRlclBvaW50ID0gbWlkRGF0YVBvaW50c1tpbmRleCArIDFdO1xuICAgICAgICBjb25zdCBiZWZvcmVTZWdtZW50ID0gYmVmb3JlUG9pbnQgJiYgW2JlZm9yZVBvaW50LCBpdGVtXTtcbiAgICAgICAgY29uc3QgYWZ0ZXJTZWdtZW50ID0gYWZ0ZXJQb2ludCAmJiBbaXRlbSwgYWZ0ZXJQb2ludF07XG4gICAgICAgIGNvbnN0IGlzU3RyYWlnaHRXaXRoQmVmb3JlID0gYmVmb3JlU2VnbWVudCAmJiBQb2ludC5pc0FsaWduKGJlZm9yZVNlZ21lbnQpO1xuICAgICAgICBjb25zdCBpc1N0cmFpZ2h0V2l0aEFmdGVyID0gYWZ0ZXJTZWdtZW50ICYmIFBvaW50LmlzQWxpZ24oYWZ0ZXJTZWdtZW50KTtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gIWlzU3RyYWlnaHRXaXRoQWZ0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSBtaWREYXRhUG9pbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiAhaXNTdHJhaWdodFdpdGhCZWZvcmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFpc1N0cmFpZ2h0V2l0aEJlZm9yZSAmJiAhaXNTdHJhaWdodFdpdGhBZnRlcjtcbiAgICB9KTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Point, getElementById, RectangleClient, rotatePointsByElement } from '@plait/core';
|
|
2
|
+
import { getPoints, getPointByVectorComponent, removeDuplicatePoints, generateElbowLineRoute, simplifyOrthogonalPoints, isSourceAndTargetIntersect, DEFAULT_ROUTE_MARGIN } from '@plait/common';
|
|
3
|
+
import { BasicShapes, PlaitArrowLine } from '../../interfaces';
|
|
4
|
+
import { createGeometryElement } from '../geometry';
|
|
5
|
+
import { getElbowLineRouteOptions, getArrowLineHandleRefPair } from './arrow-line-common';
|
|
6
|
+
import { getMidKeyPoints, getMirrorDataPoints, hasIllegalElbowPoint } from './arrow-line-resize';
|
|
7
|
+
import { getStrokeWidthByElement } from '../common';
|
|
8
|
+
export const isSelfLoop = (element) => {
|
|
9
|
+
return element.source.boundId && element.source.boundId === element.target.boundId;
|
|
10
|
+
};
|
|
11
|
+
export const isUseDefaultOrthogonalRoute = (element, options) => {
|
|
12
|
+
return isSourceAndTargetIntersect(options) && !isSelfLoop(element);
|
|
13
|
+
};
|
|
14
|
+
export const getElbowPoints = (board, element) => {
|
|
15
|
+
const handleRefPair = getArrowLineHandleRefPair(board, element);
|
|
16
|
+
const params = getElbowLineRouteOptions(board, element, handleRefPair);
|
|
17
|
+
// console.log(params, 'params');
|
|
18
|
+
if (isUseDefaultOrthogonalRoute(element, params)) {
|
|
19
|
+
return simplifyOrthogonalPoints(getPoints(handleRefPair.source.point, handleRefPair.source.direction, handleRefPair.target.point, handleRefPair.target.direction, DEFAULT_ROUTE_MARGIN));
|
|
20
|
+
}
|
|
21
|
+
const keyPoints = removeDuplicatePoints(generateElbowLineRoute(params, board));
|
|
22
|
+
const nextKeyPoints = keyPoints.slice(1, keyPoints.length - 1);
|
|
23
|
+
if (element.points.length === 2) {
|
|
24
|
+
return simplifyOrthogonalPoints(keyPoints);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const simplifiedNextKeyPoints = simplifyOrthogonalPoints(nextKeyPoints);
|
|
28
|
+
const dataPoints = removeDuplicatePoints(PlaitArrowLine.getPoints(board, element));
|
|
29
|
+
const midDataPoints = dataPoints.slice(1, -1);
|
|
30
|
+
if (hasIllegalElbowPoint(midDataPoints)) {
|
|
31
|
+
return simplifyOrthogonalPoints(keyPoints);
|
|
32
|
+
}
|
|
33
|
+
const nextDataPoints = [simplifiedNextKeyPoints[0], ...midDataPoints, simplifiedNextKeyPoints[simplifiedNextKeyPoints.length - 1]];
|
|
34
|
+
const mirrorDataPoints = getMirrorDataPoints(board, nextDataPoints, simplifiedNextKeyPoints, params);
|
|
35
|
+
// console.log(mirrorDataPoints, 'mirrorDataPoints');
|
|
36
|
+
const renderPoints = [keyPoints[0]];
|
|
37
|
+
for (let index = 0; index < mirrorDataPoints.length - 1; index++) {
|
|
38
|
+
let currentPoint = mirrorDataPoints[index];
|
|
39
|
+
let nextPoint = mirrorDataPoints[index + 1];
|
|
40
|
+
const isStraight = Point.isAlign([currentPoint, nextPoint]);
|
|
41
|
+
if (!isStraight) {
|
|
42
|
+
const midKeyPoints = getMidKeyPoints(simplifiedNextKeyPoints, currentPoint, nextPoint);
|
|
43
|
+
if (midKeyPoints.length) {
|
|
44
|
+
renderPoints.push(currentPoint);
|
|
45
|
+
renderPoints.push(...midKeyPoints);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
renderPoints.push(currentPoint);
|
|
49
|
+
console.log('unknown data points');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
renderPoints.push(currentPoint);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
renderPoints.push(keyPoints[keyPoints.length - 2], keyPoints[keyPoints.length - 1]);
|
|
57
|
+
// Remove the middle point to avoid the situation where the starting and ending positions are drawn back, such as when sourcePoint is between nextSourcePoint and the first key point.
|
|
58
|
+
// Issue
|
|
59
|
+
// keyPoint2
|
|
60
|
+
// |
|
|
61
|
+
// |
|
|
62
|
+
// nextPoint---sourcePoint---keyPoint1
|
|
63
|
+
// The correct rendering should be (nextPoint should be filtered out):
|
|
64
|
+
// keyPoint2
|
|
65
|
+
// |
|
|
66
|
+
// |
|
|
67
|
+
// sourcePoint---keyPoint1
|
|
68
|
+
const ret = simplifyOrthogonalPoints(renderPoints);
|
|
69
|
+
return ret;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
export const getNextSourceAndTargetPoints = (board, element) => {
|
|
73
|
+
const options = getElbowLineRouteOptions(board, element);
|
|
74
|
+
return [options.nextSourcePoint, options.nextTargetPoint];
|
|
75
|
+
};
|
|
76
|
+
export const getSourceAndTargetRectangle = (board, element, handleRefPair) => {
|
|
77
|
+
let sourceElement = element.source.boundId ? getElementById(board, element.source.boundId) : undefined;
|
|
78
|
+
let targetElement = element.target.boundId ? getElementById(board, element.target.boundId) : undefined;
|
|
79
|
+
if (!sourceElement) {
|
|
80
|
+
const source = handleRefPair.source;
|
|
81
|
+
sourceElement = createFakeElement(source.point, source.vector);
|
|
82
|
+
}
|
|
83
|
+
if (!targetElement) {
|
|
84
|
+
const target = handleRefPair.target;
|
|
85
|
+
targetElement = createFakeElement(target.point, target.vector);
|
|
86
|
+
}
|
|
87
|
+
let sourceRectangle = RectangleClient.getRectangleByPoints(sourceElement.points);
|
|
88
|
+
const rotatedSourceCornerPoints = rotatePointsByElement(RectangleClient.getCornerPoints(sourceRectangle), sourceElement) ||
|
|
89
|
+
RectangleClient.getCornerPoints(sourceRectangle);
|
|
90
|
+
sourceRectangle = RectangleClient.getRectangleByPoints(rotatedSourceCornerPoints);
|
|
91
|
+
sourceRectangle = RectangleClient.inflate(sourceRectangle, getStrokeWidthByElement(sourceElement) * 2);
|
|
92
|
+
let targetRectangle = RectangleClient.getRectangleByPoints(targetElement.points);
|
|
93
|
+
const rotatedTargetCornerPoints = rotatePointsByElement(RectangleClient.getCornerPoints(targetRectangle), targetElement) ||
|
|
94
|
+
RectangleClient.getCornerPoints(targetRectangle);
|
|
95
|
+
targetRectangle = RectangleClient.getRectangleByPoints(rotatedTargetCornerPoints);
|
|
96
|
+
targetRectangle = RectangleClient.inflate(targetRectangle, getStrokeWidthByElement(targetElement) * 2);
|
|
97
|
+
return {
|
|
98
|
+
sourceRectangle,
|
|
99
|
+
targetRectangle
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
const createFakeElement = (startPoint, vector) => {
|
|
103
|
+
const point = getPointByVectorComponent(startPoint, vector, -25);
|
|
104
|
+
const points = RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(point, 50, 50));
|
|
105
|
+
return createGeometryElement(BasicShapes.rectangle, points, '');
|
|
106
|
+
};
|
|
107
|
+
export function getNextRenderPoints(board, element, renderPoints) {
|
|
108
|
+
let newRenderKeyPoints = renderPoints ?? getElbowPoints(board, element);
|
|
109
|
+
const [nextSourcePoint, nextTargetPoint] = getNextSourceAndTargetPoints(board, element);
|
|
110
|
+
newRenderKeyPoints.splice(0, 1, nextSourcePoint);
|
|
111
|
+
newRenderKeyPoints.splice(-1, 1, nextTargetPoint);
|
|
112
|
+
return removeDuplicatePoints(newRenderKeyPoints);
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxib3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9hcnJvdy1saW5lL2VsYm93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWMsY0FBYyxFQUFFLGVBQWUsRUFBd0IscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUgsT0FBTyxFQUNILFNBQVMsRUFDVCx5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLG9CQUFvQixFQUV2QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUF5QyxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUF1QixFQUFFLEVBQUU7SUFDbEQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUN2RixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLE9BQXVCLEVBQUUsT0FBOEIsRUFBRSxFQUFFO0lBQ25HLE9BQU8sMEJBQTBCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7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QUMsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNqRCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2xELE9BQU8scUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQsIFBsYWl0Qm9hcmQsIGdldEVsZW1lbnRCeUlkLCBSZWN0YW5nbGVDbGllbnQsIFZlY3Rvciwgcm90YXRlUG9pbnRzLCByb3RhdGVQb2ludHNCeUVsZW1lbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQge1xuICAgIGdldFBvaW50cyxcbiAgICBnZXRQb2ludEJ5VmVjdG9yQ29tcG9uZW50LFxuICAgIHJlbW92ZUR1cGxpY2F0ZVBvaW50cyxcbiAgICBnZW5lcmF0ZUVsYm93TGluZVJvdXRlLFxuICAgIHNpbXBsaWZ5T3J0aG9nb25hbFBvaW50cyxcbiAgICBpc1NvdXJjZUFuZFRhcmdldEludGVyc2VjdCxcbiAgICBERUZBVUxUX1JPVVRFX01BUkdJTixcbiAgICBFbGJvd0xpbmVSb3V0ZU9wdGlvbnNcbn0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBCYXNpY1NoYXBlcywgQXJyb3dMaW5lSGFuZGxlUmVmUGFpciwgUGxhaXRHZW9tZXRyeSwgUGxhaXRBcnJvd0xpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNyZWF0ZUdlb21ldHJ5RWxlbWVudCB9IGZyb20gJy4uL2dlb21ldHJ5JztcbmltcG9ydCB7IGdldEVsYm93TGluZVJvdXRlT3B0aW9ucywgZ2V0QXJyb3dMaW5lSGFuZGxlUmVmUGFpciB9IGZyb20gJy4vYXJyb3ctbGluZS1jb21tb24nO1xuaW1wb3J0IHsgZ2V0TWlkS2V5UG9pbnRzLCBnZXRNaXJyb3JEYXRhUG9pbnRzLCBoYXNJbGxlZ2FsRWxib3dQb2ludCB9IGZyb20gJy4vYXJyb3ctbGluZS1yZXNpemUnO1xuaW1wb3J0IHsgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQgfSBmcm9tICcuLi9jb21tb24nO1xuXG5leHBvcnQgY29uc3QgaXNTZWxmTG9vcCA9IChlbGVtZW50OiBQbGFpdEFycm93TGluZSkgPT4ge1xuICAgIHJldHVybiBlbGVtZW50LnNvdXJjZS5ib3VuZElkICYmIGVsZW1lbnQuc291cmNlLmJvdW5kSWQgPT09IGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNVc2VEZWZhdWx0T3J0aG9nb25hbFJvdXRlID0gKGVsZW1lbnQ6IFBsYWl0QXJyb3dMaW5lLCBvcHRpb25zOiBFbGJvd0xpbmVSb3V0ZU9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gaXNTb3VyY2VBbmRUYXJnZXRJbnRlcnNlY3Qob3B0aW9ucykgJiYgIWlzU2VsZkxvb3AoZWxlbWVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RWxib3dQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0QXJyb3dMaW5lKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlUmVmUGFpciA9IGdldEFycm93TGluZUhhbmRsZVJlZlBhaXIoYm9hcmQsIGVsZW1lbnQpO1xuICAgIGNvbnN0IHBhcmFtcyA9IGdldEVsYm93TGluZVJvdXRlT3B0aW9ucyhib2FyZCwgZWxlbWVudCwgaGFuZGxlUmVmUGFpcik7XG4gICAgLy8gY29uc29sZS5sb2cocGFyYW1zLCAncGFyYW1zJyk7XG4gICAgaWYgKGlzVXNlRGVmYXVsdE9ydGhvZ29uYWxSb3V0ZShlbGVtZW50LCBwYXJhbXMpKSB7XG4gICAgICAgIHJldHVybiBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMoXG4gICAgICAgICAgICBnZXRQb2ludHMoXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVmUGFpci5zb3VyY2UucG9pbnQsXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVmUGFpci5zb3VyY2UuZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIGhhbmRsZVJlZlBhaXIudGFyZ2V0LnBvaW50LFxuICAgICAgICAgICAgICAgIGhhbmRsZVJlZlBhaXIudGFyZ2V0LmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICBERUZBVUxUX1JPVVRFX01BUkdJTlxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCBrZXlQb2ludHMgPSByZW1vdmVEdXBsaWNhdGVQb2ludHMoZ2VuZXJhdGVFbGJvd0xpbmVSb3V0ZShwYXJhbXMsIGJvYXJkKSk7XG4gICAgY29uc3QgbmV4dEtleVBvaW50cyA9IGtleVBvaW50cy5zbGljZSgxLCBrZXlQb2ludHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGVsZW1lbnQucG9pbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICByZXR1cm4gc2ltcGxpZnlPcnRob2dvbmFsUG9pbnRzKGtleVBvaW50cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2ltcGxpZmllZE5leHRLZXlQb2ludHMgPSBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMobmV4dEtleVBvaW50cyk7XG4gICAgICAgIGNvbnN0IGRhdGFQb2ludHMgPSByZW1vdmVEdXBsaWNhdGVQb2ludHMoUGxhaXRBcnJvd0xpbmUuZ2V0UG9pbnRzKGJvYXJkLCBlbGVtZW50KSk7XG4gICAgICAgIGNvbnN0IG1pZERhdGFQb2ludHMgPSBkYXRhUG9pbnRzLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgaWYgKGhhc0lsbGVnYWxFbGJvd1BvaW50KG1pZERhdGFQb2ludHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2ltcGxpZnlPcnRob2dvbmFsUG9pbnRzKGtleVBvaW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV4dERhdGFQb2ludHMgPSBbc2ltcGxpZmllZE5leHRLZXlQb2ludHNbMF0sIC4uLm1pZERhdGFQb2ludHMsIHNpbXBsaWZpZWROZXh0S2V5UG9pbnRzW3NpbXBsaWZpZWROZXh0S2V5UG9pbnRzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgY29uc3QgbWlycm9yRGF0YVBvaW50cyA9IGdldE1pcnJvckRhdGFQb2ludHMoYm9hcmQsIG5leHREYXRhUG9pbnRzLCBzaW1wbGlmaWVkTmV4dEtleVBvaW50cywgcGFyYW1zKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobWlycm9yRGF0YVBvaW50cywgJ21pcnJvckRhdGFQb2ludHMnKTtcbiAgICAgICAgY29uc3QgcmVuZGVyUG9pbnRzOiBQb2ludFtdID0gW2tleVBvaW50c1swXV07XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtaXJyb3JEYXRhUG9pbnRzLmxlbmd0aCAtIDE7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UG9pbnQgPSBtaXJyb3JEYXRhUG9pbnRzW2luZGV4XTtcbiAgICAgICAgICAgIGxldCBuZXh0UG9pbnQgPSBtaXJyb3JEYXRhUG9pbnRzW2luZGV4ICsgMV07XG4gICAgICAgICAgICBjb25zdCBpc1N0cmFpZ2h0ID0gUG9pbnQuaXNBbGlnbihbY3VycmVudFBvaW50LCBuZXh0UG9pbnRdKTtcbiAgICAgICAgICAgIGlmICghaXNTdHJhaWdodCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pZEtleVBvaW50cyA9IGdldE1pZEtleVBvaW50cyhzaW1wbGlmaWVkTmV4dEtleVBvaW50cywgY3VycmVudFBvaW50LCBuZXh0UG9pbnQpO1xuICAgICAgICAgICAgICAgIGlmIChtaWRLZXlQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclBvaW50cy5wdXNoKGN1cnJlbnRQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclBvaW50cy5wdXNoKC4uLm1pZEtleVBvaW50cyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyUG9pbnRzLnB1c2goY3VycmVudFBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3Vua25vd24gZGF0YSBwb2ludHMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlbmRlclBvaW50cy5wdXNoKGN1cnJlbnRQb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyUG9pbnRzLnB1c2goa2V5UG9pbnRzW2tleVBvaW50cy5sZW5ndGggLSAyXSwga2V5UG9pbnRzW2tleVBvaW50cy5sZW5ndGggLSAxXSk7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgbWlkZGxlIHBvaW50IHRvIGF2b2lkIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgcG9zaXRpb25zIGFyZSBkcmF3biBiYWNrLCBzdWNoIGFzIHdoZW4gc291cmNlUG9pbnQgaXMgYmV0d2VlbiBuZXh0U291cmNlUG9pbnQgYW5kIHRoZSBmaXJzdCBrZXkgcG9pbnQuXG4gICAgICAgIC8vIElzc3VlXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5UG9pbnQyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgIC8vIG5leHRQb2ludC0tLXNvdXJjZVBvaW50LS0ta2V5UG9pbnQxXG4gICAgICAgIC8vIFRoZSBjb3JyZWN0IHJlbmRlcmluZyBzaG91bGQgYmUgKG5leHRQb2ludCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0KTpcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlQb2ludDJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgLy8gICAgICAgICAgICAgc291cmNlUG9pbnQtLS1rZXlQb2ludDFcbiAgICAgICAgY29uc3QgcmV0ID0gc2ltcGxpZnlPcnRob2dvbmFsUG9pbnRzKHJlbmRlclBvaW50cyk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldE5leHRTb3VyY2VBbmRUYXJnZXRQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0QXJyb3dMaW5lKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldEVsYm93TGluZVJvdXRlT3B0aW9ucyhib2FyZCwgZWxlbWVudCk7XG4gICAgcmV0dXJuIFtvcHRpb25zLm5leHRTb3VyY2VQb2ludCwgb3B0aW9ucy5uZXh0VGFyZ2V0UG9pbnRdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNvdXJjZUFuZFRhcmdldFJlY3RhbmdsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRBcnJvd0xpbmUsIGhhbmRsZVJlZlBhaXI6IEFycm93TGluZUhhbmRsZVJlZlBhaXIpID0+IHtcbiAgICBsZXQgc291cmNlRWxlbWVudCA9IGVsZW1lbnQuc291cmNlLmJvdW5kSWQgPyBnZXRFbGVtZW50QnlJZDxQbGFpdEdlb21ldHJ5Pihib2FyZCwgZWxlbWVudC5zb3VyY2UuYm91bmRJZCkgOiB1bmRlZmluZWQ7XG4gICAgbGV0IHRhcmdldEVsZW1lbnQgPSBlbGVtZW50LnRhcmdldC5ib3VuZElkID8gZ2V0RWxlbWVudEJ5SWQ8UGxhaXRHZW9tZXRyeT4oYm9hcmQsIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpIDogdW5kZWZpbmVkO1xuICAgIGlmICghc291cmNlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBoYW5kbGVSZWZQYWlyLnNvdXJjZTtcbiAgICAgICAgc291cmNlRWxlbWVudCA9IGNyZWF0ZUZha2VFbGVtZW50KHNvdXJjZS5wb2ludCwgc291cmNlLnZlY3Rvcik7XG4gICAgfVxuICAgIGlmICghdGFyZ2V0RWxlbWVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBoYW5kbGVSZWZQYWlyLnRhcmdldDtcbiAgICAgICAgdGFyZ2V0RWxlbWVudCA9IGNyZWF0ZUZha2VFbGVtZW50KHRhcmdldC5wb2ludCwgdGFyZ2V0LnZlY3Rvcik7XG4gICAgfVxuXG4gICAgbGV0IHNvdXJjZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhzb3VyY2VFbGVtZW50LnBvaW50cyk7XG4gICAgY29uc3Qgcm90YXRlZFNvdXJjZUNvcm5lclBvaW50cyA9XG4gICAgICAgIHJvdGF0ZVBvaW50c0J5RWxlbWVudChSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHNvdXJjZVJlY3RhbmdsZSksIHNvdXJjZUVsZW1lbnQpIHx8XG4gICAgICAgIFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMoc291cmNlUmVjdGFuZ2xlKTtcbiAgICBzb3VyY2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocm90YXRlZFNvdXJjZUNvcm5lclBvaW50cyk7XG4gICAgc291cmNlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUoc291cmNlUmVjdGFuZ2xlLCBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChzb3VyY2VFbGVtZW50KSAqIDIpO1xuXG4gICAgbGV0IHRhcmdldFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyh0YXJnZXRFbGVtZW50LnBvaW50cyk7XG4gICAgY29uc3Qgcm90YXRlZFRhcmdldENvcm5lclBvaW50cyA9XG4gICAgICAgIHJvdGF0ZVBvaW50c0J5RWxlbWVudChSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHRhcmdldFJlY3RhbmdsZSksIHRhcmdldEVsZW1lbnQpIHx8XG4gICAgICAgIFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHModGFyZ2V0UmVjdGFuZ2xlKTtcbiAgICB0YXJnZXRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocm90YXRlZFRhcmdldENvcm5lclBvaW50cyk7XG4gICAgdGFyZ2V0UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUodGFyZ2V0UmVjdGFuZ2xlLCBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCh0YXJnZXRFbGVtZW50KSAqIDIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlUmVjdGFuZ2xlLFxuICAgICAgICB0YXJnZXRSZWN0YW5nbGVcbiAgICB9O1xufTtcblxuY29uc3QgY3JlYXRlRmFrZUVsZW1lbnQgPSAoc3RhcnRQb2ludDogUG9pbnQsIHZlY3RvcjogVmVjdG9yKSA9PiB7XG4gICAgY29uc3QgcG9pbnQgPSBnZXRQb2ludEJ5VmVjdG9yQ29tcG9uZW50KHN0YXJ0UG9pbnQsIHZlY3RvciwgLTI1KTtcbiAgICBjb25zdCBwb2ludHMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UG9pbnRzKFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeUNlbnRlclBvaW50KHBvaW50LCA1MCwgNTApKTtcbiAgICByZXR1cm4gY3JlYXRlR2VvbWV0cnlFbGVtZW50KEJhc2ljU2hhcGVzLnJlY3RhbmdsZSwgcG9pbnRzLCAnJyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFJlbmRlclBvaW50cyhib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRBcnJvd0xpbmUsIHJlbmRlclBvaW50cz86IFBvaW50W10pIHtcbiAgICBsZXQgbmV3UmVuZGVyS2V5UG9pbnRzID0gcmVuZGVyUG9pbnRzID8/IGdldEVsYm93UG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCBbbmV4dFNvdXJjZVBvaW50LCBuZXh0VGFyZ2V0UG9pbnRdID0gZ2V0TmV4dFNvdXJjZUFuZFRhcmdldFBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgbmV3UmVuZGVyS2V5UG9pbnRzLnNwbGljZSgwLCAxLCBuZXh0U291cmNlUG9pbnQpO1xuICAgIG5ld1JlbmRlcktleVBvaW50cy5zcGxpY2UoLTEsIDEsIG5leHRUYXJnZXRQb2ludCk7XG4gICAgcmV0dXJuIHJlbW92ZUR1cGxpY2F0ZVBvaW50cyhuZXdSZW5kZXJLZXlQb2ludHMpO1xufVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './elbow';
|
|
2
|
+
export * from './arrow-line-arrow';
|
|
3
|
+
export * from './arrow-line-basic';
|
|
4
|
+
export * from './arrow-line-common';
|
|
5
|
+
export * from './arrow-line-resize';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9hcnJvdy1saW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2VsYm93JztcbmV4cG9ydCAqIGZyb20gJy4vYXJyb3ctbGluZS1hcnJvdyc7XG5leHBvcnQgKiBmcm9tICcuL2Fycm93LWxpbmUtYmFzaWMnO1xuZXhwb3J0ICogZnJvbSAnLi9hcnJvdy1saW5lLWNvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL2Fycm93LWxpbmUtcmVzaXplJztcbiJdfQ==
|