@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.
Files changed (156) hide show
  1. package/fesm2022/plait-draw.mjs +21 -14
  2. package/fesm2022/plait-draw.mjs.map +1 -1
  3. package/package.json +1 -3
  4. package/transforms/image.d.ts +6 -0
  5. package/utils/hit.d.ts +1 -1
  6. package/esm2022/arrow-line.component.mjs +0 -165
  7. package/esm2022/constants/default.mjs +0 -7
  8. package/esm2022/constants/geometry.mjs +0 -272
  9. package/esm2022/constants/image.mjs +0 -2
  10. package/esm2022/constants/index.mjs +0 -9
  11. package/esm2022/constants/line.mjs +0 -12
  12. package/esm2022/constants/pointer.mjs +0 -23
  13. package/esm2022/constants/swimlane.mjs +0 -25
  14. package/esm2022/constants/text.mjs +0 -2
  15. package/esm2022/constants/theme.mjs +0 -28
  16. package/esm2022/engines/basic-shapes/cloud.mjs +0 -146
  17. package/esm2022/engines/basic-shapes/comment.mjs +0 -56
  18. package/esm2022/engines/basic-shapes/cross.mjs +0 -33
  19. package/esm2022/engines/basic-shapes/diamond.mjs +0 -16
  20. package/esm2022/engines/basic-shapes/ellipse.mjs +0 -53
  21. package/esm2022/engines/basic-shapes/hexagon.mjs +0 -27
  22. package/esm2022/engines/basic-shapes/left-arrow.mjs +0 -30
  23. package/esm2022/engines/basic-shapes/octagon.mjs +0 -29
  24. package/esm2022/engines/basic-shapes/parallelogram.mjs +0 -26
  25. package/esm2022/engines/basic-shapes/pentagon-arrow.mjs +0 -27
  26. package/esm2022/engines/basic-shapes/pentagon.mjs +0 -30
  27. package/esm2022/engines/basic-shapes/polygon.mjs +0 -56
  28. package/esm2022/engines/basic-shapes/process-arrow.mjs +0 -26
  29. package/esm2022/engines/basic-shapes/rectangle.mjs +0 -26
  30. package/esm2022/engines/basic-shapes/right-arrow.mjs +0 -28
  31. package/esm2022/engines/basic-shapes/round-comment.mjs +0 -82
  32. package/esm2022/engines/basic-shapes/round-rectangle.mjs +0 -58
  33. package/esm2022/engines/basic-shapes/star.mjs +0 -39
  34. package/esm2022/engines/basic-shapes/trapezoid.mjs +0 -26
  35. package/esm2022/engines/basic-shapes/triangle.mjs +0 -34
  36. package/esm2022/engines/basic-shapes/two-way-arrow.mjs +0 -25
  37. package/esm2022/engines/flowchart/database.mjs +0 -84
  38. package/esm2022/engines/flowchart/delay.mjs +0 -44
  39. package/esm2022/engines/flowchart/display.mjs +0 -74
  40. package/esm2022/engines/flowchart/document.mjs +0 -81
  41. package/esm2022/engines/flowchart/hard-disk.mjs +0 -84
  42. package/esm2022/engines/flowchart/internal-storage.mjs +0 -47
  43. package/esm2022/engines/flowchart/manual-input.mjs +0 -33
  44. package/esm2022/engines/flowchart/manual-loop.mjs +0 -26
  45. package/esm2022/engines/flowchart/merge.mjs +0 -34
  46. package/esm2022/engines/flowchart/multi-document.mjs +0 -143
  47. package/esm2022/engines/flowchart/note-curly-left.mjs +0 -86
  48. package/esm2022/engines/flowchart/note-curly-right.mjs +0 -89
  49. package/esm2022/engines/flowchart/note-square.mjs +0 -46
  50. package/esm2022/engines/flowchart/off-page.mjs +0 -32
  51. package/esm2022/engines/flowchart/or.mjs +0 -20
  52. package/esm2022/engines/flowchart/predefined-process.mjs +0 -47
  53. package/esm2022/engines/flowchart/preparation.mjs +0 -27
  54. package/esm2022/engines/flowchart/stored-data.mjs +0 -79
  55. package/esm2022/engines/flowchart/summing-junction.mjs +0 -23
  56. package/esm2022/engines/flowchart/terminal.mjs +0 -68
  57. package/esm2022/engines/index.mjs +0 -130
  58. package/esm2022/engines/table/table.mjs +0 -101
  59. package/esm2022/engines/uml/activity-class.mjs +0 -47
  60. package/esm2022/engines/uml/actor.mjs +0 -119
  61. package/esm2022/engines/uml/assembly.mjs +0 -105
  62. package/esm2022/engines/uml/combined-fragment.mjs +0 -66
  63. package/esm2022/engines/uml/component-box.mjs +0 -61
  64. package/esm2022/engines/uml/component.mjs +0 -117
  65. package/esm2022/engines/uml/container.mjs +0 -44
  66. package/esm2022/engines/uml/deletion.mjs +0 -54
  67. package/esm2022/engines/uml/note.mjs +0 -58
  68. package/esm2022/engines/uml/package.mjs +0 -105
  69. package/esm2022/engines/uml/provided-interface.mjs +0 -92
  70. package/esm2022/engines/uml/required-interface.mjs +0 -81
  71. package/esm2022/engines/uml/template.mjs +0 -47
  72. package/esm2022/generators/arrow-line-auto-complete.generator.mjs +0 -46
  73. package/esm2022/generators/arrow-line.generator.mjs +0 -13
  74. package/esm2022/generators/geometry-shape.generator.mjs +0 -29
  75. package/esm2022/generators/index.mjs +0 -7
  76. package/esm2022/generators/line-active.generator.mjs +0 -84
  77. package/esm2022/generators/single-text.generator.mjs +0 -16
  78. package/esm2022/generators/table.generator.mjs +0 -25
  79. package/esm2022/generators/text.generator.mjs +0 -131
  80. package/esm2022/generators/vector-line-generator.mjs +0 -13
  81. package/esm2022/geometry.component.mjs +0 -145
  82. package/esm2022/image.component.mjs +0 -67
  83. package/esm2022/interfaces/arrow-line.mjs +0 -70
  84. package/esm2022/interfaces/element.mjs +0 -9
  85. package/esm2022/interfaces/engine.mjs +0 -2
  86. package/esm2022/interfaces/geometry.mjs +0 -82
  87. package/esm2022/interfaces/image.mjs +0 -2
  88. package/esm2022/interfaces/index.mjs +0 -92
  89. package/esm2022/interfaces/line.mjs +0 -2
  90. package/esm2022/interfaces/options.mjs +0 -2
  91. package/esm2022/interfaces/swimlane.mjs +0 -13
  92. package/esm2022/interfaces/table.mjs +0 -13
  93. package/esm2022/interfaces/text.mjs +0 -2
  94. package/esm2022/interfaces/vector-line.mjs +0 -10
  95. package/esm2022/plait-draw.mjs +0 -5
  96. package/esm2022/plugins/with-arrow-line-auto-complete-reaction.mjs +0 -43
  97. package/esm2022/plugins/with-arrow-line-auto-complete.mjs +0 -76
  98. package/esm2022/plugins/with-arrow-line-bound-reaction.mjs +0 -53
  99. package/esm2022/plugins/with-arrow-line-create.mjs +0 -51
  100. package/esm2022/plugins/with-arrow-line-resize.mjs +0 -158
  101. package/esm2022/plugins/with-arrow-line-text-move.mjs +0 -53
  102. package/esm2022/plugins/with-arrow-line-text.mjs +0 -73
  103. package/esm2022/plugins/with-draw-fragment.mjs +0 -98
  104. package/esm2022/plugins/with-draw-hotkey.mjs +0 -45
  105. package/esm2022/plugins/with-draw-resize.mjs +0 -269
  106. package/esm2022/plugins/with-draw-rotate.mjs +0 -132
  107. package/esm2022/plugins/with-draw.mjs +0 -144
  108. package/esm2022/plugins/with-geometry-create.mjs +0 -182
  109. package/esm2022/plugins/with-swimlane-create.mjs +0 -127
  110. package/esm2022/plugins/with-swimlane.mjs +0 -21
  111. package/esm2022/plugins/with-table-resize.mjs +0 -135
  112. package/esm2022/plugins/with-table.mjs +0 -109
  113. package/esm2022/plugins/with-vector-line-create.mjs +0 -85
  114. package/esm2022/plugins/with-vector-line-resize.mjs +0 -61
  115. package/esm2022/public-api.mjs +0 -11
  116. package/esm2022/table.component.mjs +0 -162
  117. package/esm2022/transforms/arrow-line.mjs +0 -66
  118. package/esm2022/transforms/common.mjs +0 -36
  119. package/esm2022/transforms/geometry-text.mjs +0 -59
  120. package/esm2022/transforms/geometry.mjs +0 -43
  121. package/esm2022/transforms/image.mjs +0 -22
  122. package/esm2022/transforms/index.mjs +0 -36
  123. package/esm2022/transforms/multi-text-geometry-text.mjs +0 -15
  124. package/esm2022/transforms/swimlane.mjs +0 -164
  125. package/esm2022/transforms/table-text.mjs +0 -44
  126. package/esm2022/transforms/table.mjs +0 -36
  127. package/esm2022/transforms/vector-line.mjs +0 -13
  128. package/esm2022/utils/arrow-line/arrow-line-arrow.mjs +0 -123
  129. package/esm2022/utils/arrow-line/arrow-line-basic.mjs +0 -205
  130. package/esm2022/utils/arrow-line/arrow-line-common.mjs +0 -162
  131. package/esm2022/utils/arrow-line/arrow-line-resize.mjs +0 -309
  132. package/esm2022/utils/arrow-line/elbow.mjs +0 -114
  133. package/esm2022/utils/arrow-line/index.mjs +0 -6
  134. package/esm2022/utils/clipboard.mjs +0 -55
  135. package/esm2022/utils/common.mjs +0 -184
  136. package/esm2022/utils/geometry.mjs +0 -178
  137. package/esm2022/utils/hit.mjs +0 -242
  138. package/esm2022/utils/index.mjs +0 -17
  139. package/esm2022/utils/line.mjs +0 -64
  140. package/esm2022/utils/memorize.mjs +0 -93
  141. package/esm2022/utils/multi-text-geometry.mjs +0 -61
  142. package/esm2022/utils/polygon.mjs +0 -30
  143. package/esm2022/utils/position/arrow-line.mjs +0 -20
  144. package/esm2022/utils/position/geometry.mjs +0 -30
  145. package/esm2022/utils/position/line.mjs +0 -51
  146. package/esm2022/utils/selected.mjs +0 -39
  147. package/esm2022/utils/shape.mjs +0 -11
  148. package/esm2022/utils/snap-resizing.mjs +0 -185
  149. package/esm2022/utils/style/index.mjs +0 -2
  150. package/esm2022/utils/style/stroke.mjs +0 -21
  151. package/esm2022/utils/swimlane.mjs +0 -124
  152. package/esm2022/utils/table-selected.mjs +0 -21
  153. package/esm2022/utils/table.mjs +0 -172
  154. package/esm2022/utils/uml.mjs +0 -90
  155. package/esm2022/utils/vector-line.mjs +0 -71
  156. package/esm2022/vector-line.component.mjs +0 -55
@@ -1,309 +0,0 @@
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=
@@ -1,114 +0,0 @@
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
@@ -1,6 +0,0 @@
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==
@@ -1,55 +0,0 @@
1
- import { getElementById } from '@plait/core';
2
- import { buildClipboardData as basicBuildClipboard, insertClipboardData as basicInsertClipboard } from '@plait/common';
3
- import { PlaitDrawElement } from '../interfaces';
4
- import { getConnectionPoint } from './arrow-line/arrow-line-common';
5
- import { updateCellIds, updateRowOrColumnIds } from './table';
6
- export const buildClipboardData = (board, elements, startPoint) => {
7
- return basicBuildClipboard(board, elements, startPoint, (element) => {
8
- if (PlaitDrawElement.isArrowLine(element)) {
9
- let source = { ...element.source };
10
- let target = { ...element.target };
11
- let points = [...element.points];
12
- if (element.source.boundId) {
13
- points[0] = getConnectionPoint(getElementById(board, element.source.boundId), element.source.connection);
14
- if (!getElementById(board, element.source.boundId, elements)) {
15
- delete source.boundId;
16
- delete source.connection;
17
- }
18
- }
19
- if (element.target.boundId) {
20
- points[points.length - 1] = getConnectionPoint(getElementById(board, element.target.boundId), element.target.connection);
21
- if (!getElementById(board, element.target.boundId, elements)) {
22
- delete target.boundId;
23
- delete target.connection;
24
- }
25
- }
26
- points = points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);
27
- return { ...element, points, source, target };
28
- }
29
- return undefined;
30
- });
31
- };
32
- export const insertClipboardData = (board, elements, startPoint) => {
33
- basicInsertClipboard(board, elements, startPoint, (element, idsMap) => {
34
- if (PlaitDrawElement.isArrowLine(element)) {
35
- if (element.source.boundId) {
36
- const boundElement = elements.find(item => [element.source.boundId, idsMap[element.source.boundId]].includes(item.id));
37
- if (boundElement) {
38
- element.source.boundId = idsMap[element.source.boundId];
39
- }
40
- }
41
- if (element.target.boundId) {
42
- const boundElement = elements.find(item => [element.target.boundId, idsMap[element.target.boundId]].includes(item.id));
43
- if (boundElement) {
44
- element.target.boundId = idsMap[element.target.boundId];
45
- }
46
- }
47
- }
48
- if (PlaitDrawElement.isElementByTable(element)) {
49
- updateRowOrColumnIds(element, 'row');
50
- updateRowOrColumnIds(element, 'column');
51
- updateCellIds(element.cells);
52
- }
53
- });
54
- };
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBK0MsY0FBYyxFQUFhLE1BQU0sYUFBYSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxrQkFBa0IsSUFBSSxtQkFBbUIsRUFBRSxtQkFBbUIsSUFBSSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQWtCLGdCQUFnQixFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxRQUE0QixFQUFFLFVBQWlCLEVBQUUsRUFBRTtJQUNyRyxPQUFPLG1CQUFtQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsT0FBcUIsRUFBRSxFQUFFO1FBQzlFLElBQUksZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxJQUFJLE1BQU0sR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsY0FBYyxDQUFnQixLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVcsQ0FBQyxDQUFDO2dCQUMxSCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUMzRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7b0JBQ3RCLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDN0IsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUMxQyxjQUFjLENBQWdCLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBRSxFQUM3RCxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVcsQ0FDN0IsQ0FBQztnQkFDRixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUMzRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7b0JBQ3RCLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDN0IsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRixPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQW9CLENBQUM7UUFDcEUsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFFBQTRCLEVBQUUsVUFBaUIsRUFBRSxFQUFFO0lBQ3RHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsT0FBcUIsRUFBRSxNQUE4QixFQUFFLEVBQUU7UUFDeEcsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN4SCxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUNmLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1RCxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hILElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVELENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxvQkFBb0IsQ0FBQyxPQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELG9CQUFvQixDQUFDLE9BQXFCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdEQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBvaW50LCBUcmFuc2Zvcm1zLCBnZXRFbGVtZW50QnlJZCwgaWRDcmVhdG9yIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgYnVpbGRDbGlwYm9hcmREYXRhIGFzIGJhc2ljQnVpbGRDbGlwYm9hcmQsIGluc2VydENsaXBib2FyZERhdGEgYXMgYmFzaWNJbnNlcnRDbGlwYm9hcmQgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IFBsYWl0QXJyb3dMaW5lLCBQbGFpdERyYXdFbGVtZW50LCBQbGFpdEdlb21ldHJ5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRDb25uZWN0aW9uUG9pbnQgfSBmcm9tICcuL2Fycm93LWxpbmUvYXJyb3ctbGluZS1jb21tb24nO1xuaW1wb3J0IHsgUGxhaXRUYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGFibGUnO1xuaW1wb3J0IHsgdXBkYXRlQ2VsbElkcywgdXBkYXRlUm93T3JDb2x1bW5JZHMgfSBmcm9tICcuL3RhYmxlJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQ2xpcGJvYXJkRGF0YSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RHJhd0VsZW1lbnRbXSwgc3RhcnRQb2ludDogUG9pbnQpID0+IHtcbiAgICByZXR1cm4gYmFzaWNCdWlsZENsaXBib2FyZChib2FyZCwgZWxlbWVudHMsIHN0YXJ0UG9pbnQsIChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGxldCBzb3VyY2UgPSB7IC4uLmVsZW1lbnQuc291cmNlIH07XG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0geyAuLi5lbGVtZW50LnRhcmdldCB9O1xuICAgICAgICAgICAgbGV0IHBvaW50cyA9IFsuLi5lbGVtZW50LnBvaW50c107XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5zb3VyY2UuYm91bmRJZCkge1xuICAgICAgICAgICAgICAgIHBvaW50c1swXSA9IGdldENvbm5lY3Rpb25Qb2ludChnZXRFbGVtZW50QnlJZDxQbGFpdEdlb21ldHJ5Pihib2FyZCwgZWxlbWVudC5zb3VyY2UuYm91bmRJZCkhLCBlbGVtZW50LnNvdXJjZS5jb25uZWN0aW9uISk7XG4gICAgICAgICAgICAgICAgaWYgKCFnZXRFbGVtZW50QnlJZChib2FyZCwgZWxlbWVudC5zb3VyY2UuYm91bmRJZCwgZWxlbWVudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzb3VyY2UuYm91bmRJZDtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNvdXJjZS5jb25uZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnRhcmdldC5ib3VuZElkKSB7XG4gICAgICAgICAgICAgICAgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSA9IGdldENvbm5lY3Rpb25Qb2ludChcbiAgICAgICAgICAgICAgICAgICAgZ2V0RWxlbWVudEJ5SWQ8UGxhaXRHZW9tZXRyeT4oYm9hcmQsIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpISxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50YXJnZXQuY29ubmVjdGlvbiFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghZ2V0RWxlbWVudEJ5SWQoYm9hcmQsIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQsIGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGFyZ2V0LmJvdW5kSWQ7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQuY29ubmVjdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb2ludHMgPSBwb2ludHMubWFwKHBvaW50ID0+IFtwb2ludFswXSAtIHN0YXJ0UG9pbnRbMF0sIHBvaW50WzFdIC0gc3RhcnRQb2ludFsxXV0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uZWxlbWVudCwgcG9pbnRzLCBzb3VyY2UsIHRhcmdldCB9IGFzIFBsYWl0QXJyb3dMaW5lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q2xpcGJvYXJkRGF0YSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RHJhd0VsZW1lbnRbXSwgc3RhcnRQb2ludDogUG9pbnQpID0+IHtcbiAgICBiYXNpY0luc2VydENsaXBib2FyZChib2FyZCwgZWxlbWVudHMsIHN0YXJ0UG9pbnQsIChlbGVtZW50OiBQbGFpdEVsZW1lbnQsIGlkc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT4ge1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShlbGVtZW50KSkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuc291cmNlLmJvdW5kSWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZEVsZW1lbnQgPSBlbGVtZW50cy5maW5kKGl0ZW0gPT4gW2VsZW1lbnQuc291cmNlLmJvdW5kSWQsIGlkc01hcFtlbGVtZW50LnNvdXJjZS5ib3VuZElkIV1dLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc291cmNlLmJvdW5kSWQgPSBpZHNNYXBbZWxlbWVudC5zb3VyY2UuYm91bmRJZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZEVsZW1lbnQgPSBlbGVtZW50cy5maW5kKGl0ZW0gPT4gW2VsZW1lbnQudGFyZ2V0LmJvdW5kSWQsIGlkc01hcFtlbGVtZW50LnRhcmdldC5ib3VuZElkIV1dLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQgPSBpZHNNYXBbZWxlbWVudC50YXJnZXQuYm91bmRJZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzRWxlbWVudEJ5VGFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHVwZGF0ZVJvd09yQ29sdW1uSWRzKGVsZW1lbnQgYXMgUGxhaXRUYWJsZSwgJ3JvdycpO1xuICAgICAgICAgICAgdXBkYXRlUm93T3JDb2x1bW5JZHMoZWxlbWVudCBhcyBQbGFpdFRhYmxlLCAnY29sdW1uJyk7XG4gICAgICAgICAgICB1cGRhdGVDZWxsSWRzKGVsZW1lbnQuY2VsbHMpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuIl19