@plait/core 0.0.56 → 0.0.58

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 (54) hide show
  1. package/board/board.component.d.ts +19 -41
  2. package/board/board.component.interface.d.ts +5 -0
  3. package/core/element/before-context-change.d.ts +6 -0
  4. package/core/element/context.d.ts +7 -0
  5. package/core/element/element.component.d.ts +11 -3
  6. package/core/element/plugin-element.d.ts +22 -0
  7. package/core/toolbar/toolbar.component.d.ts +7 -8
  8. package/esm2020/board/board.component.interface.mjs +2 -0
  9. package/esm2020/board/board.component.mjs +215 -230
  10. package/esm2020/core/element/before-context-change.mjs +7 -0
  11. package/esm2020/core/element/context.mjs +2 -0
  12. package/esm2020/core/element/element.component.mjs +48 -12
  13. package/esm2020/core/element/plugin-element.mjs +60 -0
  14. package/esm2020/core/toolbar/toolbar.component.mjs +14 -22
  15. package/esm2020/interfaces/board.mjs +1 -1
  16. package/esm2020/interfaces/element.mjs +1 -1
  17. package/esm2020/interfaces/index.mjs +3 -3
  18. package/esm2020/interfaces/node.mjs +1 -1
  19. package/esm2020/interfaces/pointer.mjs +6 -0
  20. package/esm2020/interfaces/viewport.mjs +2 -2
  21. package/esm2020/plugins/create-board.mjs +6 -7
  22. package/esm2020/plugins/with-hand.mjs +68 -0
  23. package/esm2020/plugins/with-selection.mjs +4 -2
  24. package/esm2020/public-api.mjs +3 -1
  25. package/esm2020/transforms/board.mjs +10 -0
  26. package/esm2020/transforms/general.mjs +1 -1
  27. package/esm2020/transforms/index.mjs +2 -1
  28. package/esm2020/utils/board.mjs +1 -9
  29. package/esm2020/utils/matrix.mjs +131 -78
  30. package/esm2020/utils/weak-maps.mjs +1 -1
  31. package/fesm2015/plait-core.mjs +645 -509
  32. package/fesm2015/plait-core.mjs.map +1 -1
  33. package/fesm2020/plait-core.mjs +668 -537
  34. package/fesm2020/plait-core.mjs.map +1 -1
  35. package/interfaces/board.d.ts +18 -8
  36. package/interfaces/element.d.ts +5 -2
  37. package/interfaces/index.d.ts +2 -2
  38. package/interfaces/node.d.ts +0 -1
  39. package/interfaces/pointer.d.ts +4 -0
  40. package/interfaces/viewport.d.ts +1 -1
  41. package/package.json +1 -1
  42. package/plugins/with-hand.d.ts +2 -0
  43. package/public-api.d.ts +2 -0
  44. package/transforms/board.d.ts +6 -0
  45. package/transforms/index.d.ts +1 -0
  46. package/utils/board.d.ts +2 -3
  47. package/utils/matrix.d.ts +66 -16
  48. package/utils/weak-maps.d.ts +2 -2
  49. package/esm2020/interfaces/cursor.mjs +0 -7
  50. package/esm2020/interfaces/element-context.mjs +0 -2
  51. package/esm2020/plugins/with-move.mjs +0 -66
  52. package/interfaces/cursor.d.ts +0 -6
  53. package/interfaces/element-context.d.ts +0 -4
  54. package/plugins/with-move.d.ts +0 -2
@@ -1,72 +1,96 @@
1
1
  import { SCROLL_BAR_WIDTH } from '../constants';
2
- import { PLAIT_BOARD_TO_COMPONENT } from './weak-maps';
3
- export function invert(oldMatrix, newMatrix) {
4
- let n = newMatrix[0], r = newMatrix[1], a = newMatrix[2], i = newMatrix[3], o = newMatrix[4], c = newMatrix[5], l = newMatrix[6], s = newMatrix[7], u = newMatrix[8], d = u * o - c * s, h = -u * i + c * l, f = s * i - o * l, p = n * d + r * h + a * f;
5
- return p
6
- ? ((p = 1 / p),
7
- (oldMatrix[0] = d * p),
8
- (oldMatrix[1] = (-u * r + a * s) * p),
9
- (oldMatrix[2] = (c * r - a * o) * p),
10
- (oldMatrix[3] = h * p),
11
- (oldMatrix[4] = (u * n - a * l) * p),
12
- (oldMatrix[5] = (-c * n + a * i) * p),
13
- (oldMatrix[6] = f * p),
14
- (oldMatrix[7] = (-s * n + r * l) * p),
15
- (oldMatrix[8] = (o * n - r * i) * p),
16
- oldMatrix)
17
- : null;
2
+ /**
3
+ * 逆矩阵
4
+ * [a c e]
5
+ * [b d f]
6
+ * [0 0 1]
7
+ * @param newMatrix 输出返回矩阵
8
+ * @param matrix 新矩阵
9
+ * @returns 逆矩阵
10
+ */
11
+ export function invertMatrix(newMatrix, matrix) {
12
+ const [n, r, a, i, o, c, l, s, u] = matrix;
13
+ const determinant = u * o - c * s;
14
+ const h = -u * i + c * l;
15
+ const f = s * i - o * l;
16
+ const product = n * determinant + r * h + a * f;
17
+ if (!product) {
18
+ return null;
19
+ }
20
+ const reciprocal = 1 / product;
21
+ newMatrix[0] = determinant * reciprocal;
22
+ newMatrix[1] = (-u * r + a * s) * reciprocal;
23
+ newMatrix[2] = (c * r - a * o) * reciprocal;
24
+ newMatrix[3] = h * reciprocal;
25
+ newMatrix[4] = (u * n - a * l) * reciprocal;
26
+ newMatrix[5] = (-c * n + a * i) * reciprocal;
27
+ newMatrix[6] = f * reciprocal;
28
+ newMatrix[7] = (-s * n + r * l) * reciprocal;
29
+ newMatrix[8] = (o * n - r * i) * reciprocal;
30
+ return newMatrix;
18
31
  }
19
- export function transformMat3(e, t, n) {
20
- e = [t[0] * n[0] + t[1] * n[3] + t[2] * n[6], t[0] * n[1] + t[1] * n[4] + t[2] * n[7], t[0] * n[2] + t[1] * n[5] + t[2] * n[8]];
21
- return e;
32
+ /**
33
+ * 将视图坐标与反转矩阵相乘,以得到原始坐标
34
+ * 使用给定的矩阵进行转换
35
+ * 矩阵与向量乘法,3 维向量与3x3矩阵的乘积
36
+ * [m11 m12 m13][v1]
37
+ * [m21 m22 m23][v2]
38
+ * [m31 m32 m33][v3]
39
+ * @param out 输出结果向量
40
+ * @param t 要转换的向量
41
+ * @param n 矩阵转换
42
+ * @returns [v1 * m11 + v2 * m12 + v3 * m13, v1 * m21 + v2 * m22 + v3 * m23, v1 * m31 + v2 * m32 + v3 * m33];
43
+ */
44
+ export function transformMat3(out, vector, matrix) {
45
+ out = [
46
+ vector[0] * matrix[0] + vector[1] * matrix[3] + vector[2] * matrix[6],
47
+ vector[0] * matrix[1] + vector[1] * matrix[4] + vector[2] * matrix[7],
48
+ vector[0] * matrix[2] + vector[1] * matrix[5] + vector[2] * matrix[8]
49
+ ];
50
+ return out;
22
51
  }
23
- export function convertPoint(arr) {
24
- return Array.isArray(arr)
52
+ /**
53
+ * 规范 point
54
+ * @param point
55
+ * @returns point
56
+ */
57
+ export function normalizePoint(point) {
58
+ return Array.isArray(point)
25
59
  ? {
26
- x: arr[0],
27
- y: arr[1]
60
+ x: point[0],
61
+ y: point[1]
28
62
  }
29
- : arr;
30
- }
31
- export function invertClient(board, point, matrix) {
32
- const convert = convertPoint(point);
33
- const clientBox = getViewportClientBox(board);
34
- const newPoint = [convert.x - clientBox.x, convert.y - clientBox.y, 1];
35
- const invertMatrix = invert([], matrix);
36
- const newMatrix = transformMat3([], [newPoint[0], newPoint[1], 1], invertMatrix);
37
- return [newMatrix[0], newMatrix[1]];
38
- }
39
- export function invertViewport(point, matrix) {
40
- const newPoint = convertPoint(point);
41
- const invertMatrix = invert([], matrix);
42
- return transformMat3([], [newPoint.x, newPoint.y, 1], invertMatrix);
63
+ : point;
43
64
  }
44
- export function convertViewport(point, matrix) {
45
- const newPoint = convertPoint(point);
46
- return transformMat3([], [newPoint.x, newPoint.y, 1], matrix);
65
+ /**
66
+ * 将一个点坐标反转回它的原始坐标
67
+ * @param point 表示要反转的点的视图坐标,它是一个长度为 2 的数组,存储点的 x y 坐标
68
+ * @param matrix 表示视图矩阵,是在视图中对图形进行缩放和平移时使用的矩阵
69
+ * @returns 最终结果是一个长度为 3 的数组,存储点的 x,y 和 w 坐标(w 坐标是点的齐次坐标)
70
+ */
71
+ export function invertViewportCoordinates(point, matrix) {
72
+ const { x, y } = normalizePoint(point);
73
+ const invertedMatrix = invertMatrix([], matrix);
74
+ return transformMat3([], [x, y, 1], invertedMatrix);
47
75
  }
48
- export function getViewportCanvasBox(board, matrix) {
49
- const clientBox = getViewportClientBox(board);
50
- const client = invertClient(board, [clientBox.minX, clientBox.minY], matrix);
51
- const newClient = invertClient(board, [clientBox.maxX, clientBox.maxY], matrix);
52
- return {
53
- minX: client[0],
54
- minY: client[1],
55
- maxX: newClient[0],
56
- maxY: newClient[1],
57
- x: client[0],
58
- y: client[1],
59
- width: newClient[0] - client[0],
60
- height: newClient[1] - client[1]
61
- };
76
+ export function convertToViewportCoordinates(point, matrix) {
77
+ const { x, y } = normalizePoint(point);
78
+ return transformMat3([], [x, y, 1], matrix);
62
79
  }
63
- export function getViewportClientBox(board) {
80
+ /**
81
+ * 获取 contentContainer 的 clientBox
82
+ * @param board
83
+ * @returns
84
+ */
85
+ export function getViewportContainerBox(board) {
86
+ const { hideScrollbar } = board.options;
87
+ const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;
64
88
  const container = board.host?.parentElement;
65
89
  const containerRect = container?.getBoundingClientRect();
66
90
  const x = containerRect.x || containerRect.left;
67
91
  const y = containerRect.y || containerRect.top;
68
- const width = containerRect.width - SCROLL_BAR_WIDTH;
69
- const height = containerRect.height - SCROLL_BAR_WIDTH;
92
+ const width = containerRect.width - scrollBarWidth;
93
+ const height = containerRect.height - scrollBarWidth;
70
94
  return {
71
95
  minX: x,
72
96
  minY: y,
@@ -78,40 +102,69 @@ export function getViewportClientBox(board) {
78
102
  height
79
103
  };
80
104
  }
81
- export function getGraphicsBBox(board) {
82
- const rootGroup = board.host.firstChild;
83
- const rootGroupBox = rootGroup.getBBox();
84
- return rootGroupBox;
105
+ /**
106
+ * 获取 board.plait-board 的 clientBox
107
+ * @param board
108
+ * @returns
109
+ */
110
+ export function getBoardClientBox(board) {
111
+ const { hideScrollbar } = board.options;
112
+ const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;
113
+ const boardEl = board.host?.parentElement?.parentElement;
114
+ const elRect = boardEl?.getBoundingClientRect();
115
+ return {
116
+ width: elRect.width + scrollBarWidth,
117
+ height: elRect.height + scrollBarWidth
118
+ };
85
119
  }
86
- export function calculateBBox(board, zoom) {
87
- const boardComponent = PLAIT_BOARD_TO_COMPONENT.get(board);
88
- // const clientBox = getViewportClientBox(board);
120
+ /**
121
+ * 获取 rootGroup 相对于当前 svg 空间的最小矩阵坐标
122
+ */
123
+ export function getRootGroupBBox(board, zoom) {
89
124
  const rootGroup = board.host.firstChild;
90
125
  const rootGroupBox = rootGroup.getBBox();
91
- let box = {};
92
- const containerWidth = boardComponent.width / zoom;
93
- const containerHeight = boardComponent.height / zoom;
126
+ const viewportContainerBox = getViewportContainerBox(board);
127
+ const containerWidth = viewportContainerBox.width / zoom;
128
+ const containerHeight = viewportContainerBox.height / zoom;
129
+ let left;
130
+ let right;
131
+ let top;
132
+ let bottom;
94
133
  if (rootGroupBox.width < containerWidth) {
95
134
  const offsetX = rootGroupBox.x + rootGroupBox.width / 2;
96
135
  const containerX = containerWidth / 2;
97
- box.left = offsetX - containerX;
98
- box.right = offsetX + containerX;
136
+ left = offsetX - containerX;
137
+ right = offsetX + containerX;
99
138
  }
100
139
  else {
101
- box.left = rootGroupBox.x;
102
- box.right = rootGroupBox.x + rootGroupBox.width;
140
+ left = rootGroupBox.x;
141
+ right = rootGroupBox.x + rootGroupBox.width;
103
142
  }
104
143
  if (rootGroupBox.height < containerHeight) {
105
144
  const offsetY = rootGroupBox.y + rootGroupBox.height / 2;
106
145
  const containerY = containerHeight / 2;
107
- box.top = offsetY - containerY;
108
- box.bottom = offsetY + containerY;
146
+ top = offsetY - containerY;
147
+ bottom = offsetY + containerY;
109
148
  }
110
149
  else {
111
- box.top = rootGroupBox.y;
112
- box.bottom = rootGroupBox.y + rootGroupBox.height;
150
+ top = rootGroupBox.y;
151
+ bottom = rootGroupBox.y + rootGroupBox.height;
113
152
  }
114
- // 在新的缩放比容器宽高下的内容盒子位置
115
- return box;
153
+ return {
154
+ left,
155
+ right,
156
+ top,
157
+ bottom
158
+ };
159
+ }
160
+ /**
161
+ * 验证缩放比是否符合限制,如果超出限制,则返回合适的缩放比
162
+ * @param zoom 缩放比
163
+ * @param minZoom 最小缩放比
164
+ * @param maxZoom 最大缩放比
165
+ * @returns 正确的缩放比
166
+ */
167
+ export function clampZoomLevel(zoom, minZoom = 0.2, maxZoom = 4) {
168
+ return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;
116
169
  }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0cml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL3V0aWxzL21hdHJpeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFaEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXZELE1BQU0sVUFBVSxNQUFNLENBQUMsU0FBbUIsRUFBRSxTQUFtQjtJQUMzRCxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQ2pCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFDbEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFDakIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTlCLE9BQU8sQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDWixD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Q0FBQztLQUNwQztTQUFNO1FBQ0gsR0FBRyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO0tBQ25EO0lBRUQsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLGVBQWUsRUFBRTtRQUN2QyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sVUFBVSxHQUFHLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDdkMsR0FBRyxDQUFDLEdBQUcsR0FBRyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQy9CLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLFVBQVUsQ0FBQztLQUNyQztTQUFNO1FBQ0gsR0FBRyxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO0tBQ3JEO0lBRUQscUJBQXFCO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNDUk9MTF9CQVJfV0lEVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUExBSVRfQk9BUkRfVE9fQ09NUE9ORU5UIH0gZnJvbSAnLi93ZWFrLW1hcHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG9sZE1hdHJpeDogbnVtYmVyW10sIG5ld01hdHJpeDogbnVtYmVyW10pIHtcbiAgICBsZXQgbiA9IG5ld01hdHJpeFswXSxcbiAgICAgICAgciA9IG5ld01hdHJpeFsxXSxcbiAgICAgICAgYSA9IG5ld01hdHJpeFsyXSxcbiAgICAgICAgaSA9IG5ld01hdHJpeFszXSxcbiAgICAgICAgbyA9IG5ld01hdHJpeFs0XSxcbiAgICAgICAgYyA9IG5ld01hdHJpeFs1XSxcbiAgICAgICAgbCA9IG5ld01hdHJpeFs2XSxcbiAgICAgICAgcyA9IG5ld01hdHJpeFs3XSxcbiAgICAgICAgdSA9IG5ld01hdHJpeFs4XSxcbiAgICAgICAgZCA9IHUgKiBvIC0gYyAqIHMsXG4gICAgICAgIGggPSAtdSAqIGkgKyBjICogbCxcbiAgICAgICAgZiA9IHMgKiBpIC0gbyAqIGwsXG4gICAgICAgIHAgPSBuICogZCArIHIgKiBoICsgYSAqIGY7XG5cbiAgICByZXR1cm4gcFxuICAgICAgICA/ICgocCA9IDEgLyBwKSxcbiAgICAgICAgICAob2xkTWF0cml4WzBdID0gZCAqIHApLFxuICAgICAgICAgIChvbGRNYXRyaXhbMV0gPSAoLXUgKiByICsgYSAqIHMpICogcCksXG4gICAgICAgICAgKG9sZE1hdHJpeFsyXSA9IChjICogciAtIGEgKiBvKSAqIHApLFxuICAgICAgICAgIChvbGRNYXRyaXhbM10gPSBoICogcCksXG4gICAgICAgICAgKG9sZE1hdHJpeFs0XSA9ICh1ICogbiAtIGEgKiBsKSAqIHApLFxuICAgICAgICAgIChvbGRNYXRyaXhbNV0gPSAoLWMgKiBuICsgYSAqIGkpICogcCksXG4gICAgICAgICAgKG9sZE1hdHJpeFs2XSA9IGYgKiBwKSxcbiAgICAgICAgICAob2xkTWF0cml4WzddID0gKC1zICogbiArIHIgKiBsKSAqIHApLFxuICAgICAgICAgIChvbGRNYXRyaXhbOF0gPSAobyAqIG4gLSByICogaSkgKiBwKSxcbiAgICAgICAgICBvbGRNYXRyaXgpXG4gICAgICAgIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDMoZTogbnVtYmVyW10sIHQ6IG51bWJlcltdLCBuOiBudW1iZXJbXSkge1xuICAgIGUgPSBbdFswXSAqIG5bMF0gKyB0WzFdICogblszXSArIHRbMl0gKiBuWzZdLCB0WzBdICogblsxXSArIHRbMV0gKiBuWzRdICsgdFsyXSAqIG5bN10sIHRbMF0gKiBuWzJdICsgdFsxXSAqIG5bNV0gKyB0WzJdICogbls4XV07XG4gICAgcmV0dXJuIGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UG9pbnQoYXJyOiBudW1iZXJbXSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFycilcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHg6IGFyclswXSxcbiAgICAgICAgICAgICAgeTogYXJyWzFdXG4gICAgICAgICAgfVxuICAgICAgICA6IGFycjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydENsaWVudChib2FyZDogUGxhaXRCb2FyZCwgcG9pbnQ6IG51bWJlcltdLCBtYXRyaXg6IG51bWJlcltdKSB7XG4gICAgY29uc3QgY29udmVydCA9IGNvbnZlcnRQb2ludChwb2ludCk7XG4gICAgY29uc3QgY2xpZW50Qm94ID0gZ2V0Vmlld3BvcnRDbGllbnRCb3goYm9hcmQpO1xuICAgIGNvbnN0IG5ld1BvaW50ID0gW2NvbnZlcnQueCAtIGNsaWVudEJveC54LCBjb252ZXJ0LnkgLSBjbGllbnRCb3gueSwgMV07XG4gICAgY29uc3QgaW52ZXJ0TWF0cml4ID0gaW52ZXJ0KFtdLCBtYXRyaXgpO1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IHRyYW5zZm9ybU1hdDMoW10sIFtuZXdQb2ludFswXSwgbmV3UG9pbnRbMV0sIDFdLCBpbnZlcnRNYXRyaXggYXMgW10pO1xuXG4gICAgcmV0dXJuIFtuZXdNYXRyaXhbMF0sIG5ld01hdHJpeFsxXV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnRWaWV3cG9ydChwb2ludDogbnVtYmVyW10sIG1hdHJpeDogbnVtYmVyW10pIHtcbiAgICBjb25zdCBuZXdQb2ludCA9IGNvbnZlcnRQb2ludChwb2ludCk7XG4gICAgY29uc3QgaW52ZXJ0TWF0cml4ID0gaW52ZXJ0KFtdLCBtYXRyaXgpO1xuICAgIHJldHVybiB0cmFuc2Zvcm1NYXQzKFtdLCBbbmV3UG9pbnQueCwgbmV3UG9pbnQueSwgMV0sIGludmVydE1hdHJpeCBhcyBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0Vmlld3BvcnQocG9pbnQ6IG51bWJlcltdLCBtYXRyaXg6IG51bWJlcltdKSB7XG4gICAgY29uc3QgbmV3UG9pbnQgPSBjb252ZXJ0UG9pbnQocG9pbnQpO1xuICAgIHJldHVybiB0cmFuc2Zvcm1NYXQzKFtdLCBbbmV3UG9pbnQueCwgbmV3UG9pbnQueSwgMV0sIG1hdHJpeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3cG9ydENhbnZhc0JveChib2FyZDogUGxhaXRCb2FyZCwgbWF0cml4OiBudW1iZXJbXSkge1xuICAgIGNvbnN0IGNsaWVudEJveCA9IGdldFZpZXdwb3J0Q2xpZW50Qm94KGJvYXJkKTtcbiAgICBjb25zdCBjbGllbnQgPSBpbnZlcnRDbGllbnQoYm9hcmQsIFtjbGllbnRCb3gubWluWCwgY2xpZW50Qm94Lm1pblldLCBtYXRyaXgpO1xuICAgIGNvbnN0IG5ld0NsaWVudCA9IGludmVydENsaWVudChib2FyZCwgW2NsaWVudEJveC5tYXhYLCBjbGllbnRCb3gubWF4WV0sIG1hdHJpeCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBtaW5YOiBjbGllbnRbMF0sXG4gICAgICAgIG1pblk6IGNsaWVudFsxXSxcbiAgICAgICAgbWF4WDogbmV3Q2xpZW50WzBdLFxuICAgICAgICBtYXhZOiBuZXdDbGllbnRbMV0sXG4gICAgICAgIHg6IGNsaWVudFswXSxcbiAgICAgICAgeTogY2xpZW50WzFdLFxuICAgICAgICB3aWR0aDogbmV3Q2xpZW50WzBdIC0gY2xpZW50WzBdLFxuICAgICAgICBoZWlnaHQ6IG5ld0NsaWVudFsxXSAtIGNsaWVudFsxXVxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3cG9ydENsaWVudEJveChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGJvYXJkLmhvc3Q/LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lcj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgeCA9IGNvbnRhaW5lclJlY3QueCB8fCBjb250YWluZXJSZWN0LmxlZnQ7XG4gICAgY29uc3QgeSA9IGNvbnRhaW5lclJlY3QueSB8fCBjb250YWluZXJSZWN0LnRvcDtcbiAgICBjb25zdCB3aWR0aCA9IGNvbnRhaW5lclJlY3Qud2lkdGggLSBTQ1JPTExfQkFSX1dJRFRIO1xuICAgIGNvbnN0IGhlaWdodCA9IGNvbnRhaW5lclJlY3QuaGVpZ2h0IC0gU0NST0xMX0JBUl9XSURUSDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG1pblg6IHgsXG4gICAgICAgIG1pblk6IHksXG4gICAgICAgIG1heFg6IHggKyB3aWR0aCxcbiAgICAgICAgbWF4WTogeSArIGhlaWdodCxcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmFwaGljc0JCb3goYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCByb290R3JvdXAgPSBib2FyZC5ob3N0LmZpcnN0Q2hpbGQ7XG4gICAgY29uc3Qgcm9vdEdyb3VwQm94ID0gKHJvb3RHcm91cCBhcyBTVkdHcmFwaGljc0VsZW1lbnQpLmdldEJCb3goKTtcbiAgICByZXR1cm4gcm9vdEdyb3VwQm94O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQkJveChib2FyZDogUGxhaXRCb2FyZCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3QgYm9hcmRDb21wb25lbnQgPSBQTEFJVF9CT0FSRF9UT19DT01QT05FTlQuZ2V0KGJvYXJkKTtcbiAgICAvLyBjb25zdCBjbGllbnRCb3ggPSBnZXRWaWV3cG9ydENsaWVudEJveChib2FyZCk7XG4gICAgY29uc3Qgcm9vdEdyb3VwID0gYm9hcmQuaG9zdC5maXJzdENoaWxkO1xuICAgIGNvbnN0IHJvb3RHcm91cEJveCA9IChyb290R3JvdXAgYXMgU1ZHR3JhcGhpY3NFbGVtZW50KS5nZXRCQm94KCk7XG5cbiAgICBsZXQgYm94ID0ge30gYXMgYW55O1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gYm9hcmRDb21wb25lbnQhLndpZHRoIC8gem9vbTtcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSBib2FyZENvbXBvbmVudCEuaGVpZ2h0IC8gem9vbTtcblxuICAgIGlmIChyb290R3JvdXBCb3gud2lkdGggPCBjb250YWluZXJXaWR0aCkge1xuICAgICAgICBjb25zdCBvZmZzZXRYID0gcm9vdEdyb3VwQm94LnggKyByb290R3JvdXBCb3gud2lkdGggLyAyO1xuICAgICAgICBjb25zdCBjb250YWluZXJYID0gY29udGFpbmVyV2lkdGggLyAyO1xuICAgICAgICBib3gubGVmdCA9IG9mZnNldFggLSBjb250YWluZXJYO1xuICAgICAgICBib3gucmlnaHQgPSBvZmZzZXRYICsgY29udGFpbmVyWDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBib3gubGVmdCA9IHJvb3RHcm91cEJveC54O1xuICAgICAgICBib3gucmlnaHQgPSByb290R3JvdXBCb3gueCArIHJvb3RHcm91cEJveC53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAocm9vdEdyb3VwQm94LmhlaWdodCA8IGNvbnRhaW5lckhlaWdodCkge1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gcm9vdEdyb3VwQm94LnkgKyByb290R3JvdXBCb3guaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgY29udGFpbmVyWSA9IGNvbnRhaW5lckhlaWdodCAvIDI7XG4gICAgICAgIGJveC50b3AgPSBvZmZzZXRZIC0gY29udGFpbmVyWTtcbiAgICAgICAgYm94LmJvdHRvbSA9IG9mZnNldFkgKyBjb250YWluZXJZO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGJveC50b3AgPSByb290R3JvdXBCb3gueTtcbiAgICAgICAgYm94LmJvdHRvbSA9IHJvb3RHcm91cEJveC55ICsgcm9vdEdyb3VwQm94LmhlaWdodDtcbiAgICB9XG5cbiAgICAvLyDlnKjmlrDnmoTnvKnmlL7mr5Tlrrnlmajlrr3pq5jkuIvnmoTlhoXlrrnnm5LlrZDkvY3nva5cbiAgICByZXR1cm4gYm94O1xufVxuIl19
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0cml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL3V0aWxzL21hdHJpeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHaEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFNBQW1CLEVBQUUsTUFBZ0I7SUFDOUQsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEQsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNWLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQy9CLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsVUFBVSxDQUFDO0lBQ3hDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO0lBQzdDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztJQUM1QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQztJQUM5QixTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDNUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDN0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDOUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDN0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO0lBRTVDLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBYSxFQUFFLE1BQWdCLEVBQUUsTUFBZ0I7SUFDM0UsR0FBRyxHQUFHO1FBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMs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QUFDLEtBQUssQ0FBQztLQUMvQztJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxlQUFlLEVBQUU7UUFDdkMsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN6RCxNQUFNLFVBQVUsR0FBRyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLEdBQUcsR0FBRyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQzNCLE1BQU0sR0FBRyxPQUFPLEdBQUcsVUFBVSxDQUFDO0tBQ2pDO1NBQU07UUFDSCxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNyQixNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO0tBQ2pEO0lBQ0QsT0FBTztRQUNILElBQUk7UUFDSixLQUFLO1FBQ0wsR0FBRztRQUNILE1BQU07S0FDVCxDQUFDO0FBQ04sQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBWSxFQUFFLE9BQU8sR0FBRyxHQUFHLEVBQUUsT0FBTyxHQUFHLENBQUM7SUFDbkUsT0FBTyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTQ1JPTExfQkFSX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuLyoqXG4gKiDpgIbnn6npmLVcbiAqIFthIGMgZV1cbiAqIFtiIGQgZl1cbiAqIFswIDAgMV1cbiAqIEBwYXJhbSBuZXdNYXRyaXgg6L6T5Ye66L+U5Zue55+p6Zi1XG4gKiBAcGFyYW0gbWF0cml4IOaWsOefqemYtVxuICogQHJldHVybnMg6YCG55+p6Zi1XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnRNYXRyaXgobmV3TWF0cml4OiBudW1iZXJbXSwgbWF0cml4OiBudW1iZXJbXSkge1xuICAgIGNvbnN0IFtuLCByLCBhLCBpLCBvLCBjLCBsLCBzLCB1XSA9IG1hdHJpeDtcbiAgICBjb25zdCBkZXRlcm1pbmFudCA9IHUgKiBvIC0gYyAqIHM7XG4gICAgY29uc3QgaCA9IC11ICogaSArIGMgKiBsO1xuICAgIGNvbnN0IGYgPSBzICogaSAtIG8gKiBsO1xuICAgIGNvbnN0IHByb2R1Y3QgPSBuICogZGV0ZXJtaW5hbnQgKyByICogaCArIGEgKiBmO1xuXG4gICAgaWYgKCFwcm9kdWN0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY2lwcm9jYWwgPSAxIC8gcHJvZHVjdDtcbiAgICBuZXdNYXRyaXhbMF0gPSBkZXRlcm1pbmFudCAqIHJlY2lwcm9jYWw7XG4gICAgbmV3TWF0cml4WzFdID0gKC11ICogciArIGEgKiBzKSAqIHJlY2lwcm9jYWw7XG4gICAgbmV3TWF0cml4WzJdID0gKGMgKiByIC0gYSAqIG8pICogcmVjaXByb2NhbDtcbiAgICBuZXdNYXRyaXhbM10gPSBoICogcmVjaXByb2NhbDtcbiAgICBuZXdNYXRyaXhbNF0gPSAodSAqIG4gLSBhICogbCkgKiByZWNpcHJvY2FsO1xuICAgIG5ld01hdHJpeFs1XSA9ICgtYyAqIG4gKyBhICogaSkgKiByZWNpcHJvY2FsO1xuICAgIG5ld01hdHJpeFs2XSA9IGYgKiByZWNpcHJvY2FsO1xuICAgIG5ld01hdHJpeFs3XSA9ICgtcyAqIG4gKyByICogbCkgKiByZWNpcHJvY2FsO1xuICAgIG5ld01hdHJpeFs4XSA9IChvICogbiAtIHIgKiBpKSAqIHJlY2lwcm9jYWw7XG5cbiAgICByZXR1cm4gbmV3TWF0cml4O1xufVxuXG4vKipcbiAqIOWwhuinhuWbvuWdkOagh+S4juWPjei9rOefqemYteebuOS5mO+8jOS7peW+l+WIsOWOn+Wni+WdkOagh1xuICog5L2/55So57uZ5a6a55qE55+p6Zi16L+b6KGM6L2s5o2iXG4gKiDnn6npmLXkuI7lkJHph4/kuZjms5XvvIwzIOe7tOWQkemHj+S4jjN4M+efqemYteeahOS5mOenr1xuICogW20xMSBtMTIgbTEzXVt2MV1cbiAqIFttMjEgbTIyIG0yM11bdjJdXG4gKiBbbTMxIG0zMiBtMzNdW3YzXVxuICogQHBhcmFtIG91dCDovpPlh7rnu5PmnpzlkJHph49cbiAqIEBwYXJhbSB0IOimgei9rOaNoueahOWQkemHj1xuICogQHBhcmFtIG4g55+p6Zi16L2s5o2iXG4gKiBAcmV0dXJucyBbdjEgKiBtMTEgKyB2MiAqIG0xMiArIHYzICogbTEzLCB2MSAqIG0yMSArIHYyICogbTIyICsgdjMgKiBtMjMsIHYxICogbTMxICsgdjIgKiBtMzIgKyB2MyAqIG0zM107XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQzKG91dDogbnVtYmVyW10sIHZlY3RvcjogbnVtYmVyW10sIG1hdHJpeDogbnVtYmVyW10pIHtcbiAgICBvdXQgPSBbXG4gICAgICAgIHZlY3RvclswXSAqIG1hdHJpeFswXSArIHZlY3RvclsxXSAqIG1hdHJpeFszXSArIHZlY3RvclsyXSAqIG1hdHJpeFs2XSxcbiAgICAgICAgdmVjdG9yWzBdICogbWF0cml4WzFdICsgdmVjdG9yWzFdICogbWF0cml4WzRdICsgdmVjdG9yWzJdICogbWF0cml4WzddLFxuICAgICAgICB2ZWN0b3JbMF0gKiBtYXRyaXhbMl0gKyB2ZWN0b3JbMV0gKiBtYXRyaXhbNV0gKyB2ZWN0b3JbMl0gKiBtYXRyaXhbOF1cbiAgICBdO1xuICAgIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICog6KeE6IyDIHBvaW50XG4gKiBAcGFyYW0gcG9pbnRcbiAqIEByZXR1cm5zIHBvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQb2ludChwb2ludDogbnVtYmVyW10pIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwb2ludClcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHg6IHBvaW50WzBdLFxuICAgICAgICAgICAgICB5OiBwb2ludFsxXVxuICAgICAgICAgIH1cbiAgICAgICAgOiBwb2ludDtcbn1cblxuLyoqXG4gKiDlsIbkuIDkuKrngrnlnZDmoIflj43ovazlm57lroPnmoTljp/lp4vlnZDmoIdcbiAqIEBwYXJhbSBwb2ludCDooajnpLropoHlj43ovaznmoTngrnnmoTop4blm77lnZDmoIfvvIzlroPmmK/kuIDkuKrplb/luqbkuLogMiDnmoTmlbDnu4TvvIzlrZjlgqjngrnnmoQgeCDlkowgeSDlnZDmoIdcbiAqIEBwYXJhbSBtYXRyaXgg6KGo56S66KeG5Zu+55+p6Zi177yM5piv5Zyo6KeG5Zu+5Lit5a+55Zu+5b2i6L+b6KGM57yp5pS+5ZKM5bmz56e75pe25L2/55So55qE55+p6Zi1XG4gKiBAcmV0dXJucyDmnIDnu4jnu5PmnpzmmK/kuIDkuKrplb/luqbkuLogMyDnmoTmlbDnu4TvvIzlrZjlgqjngrnnmoQgeO+8jHkg5ZKMIHcg5Z2Q5qCH77yIdyDlnZDmoIfmmK/ngrnnmoTpvZDmrKHlnZDmoIcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnRWaWV3cG9ydENvb3JkaW5hdGVzKHBvaW50OiBudW1iZXJbXSwgbWF0cml4OiBudW1iZXJbXSkge1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gbm9ybWFsaXplUG9pbnQocG9pbnQpO1xuICAgIGNvbnN0IGludmVydGVkTWF0cml4ID0gaW52ZXJ0TWF0cml4KFtdLCBtYXRyaXgpO1xuICAgIHJldHVybiB0cmFuc2Zvcm1NYXQzKFtdLCBbeCwgeSwgMV0sIGludmVydGVkTWF0cml4IGFzIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb1ZpZXdwb3J0Q29vcmRpbmF0ZXMocG9pbnQ6IG51bWJlcltdLCBtYXRyaXg6IG51bWJlcltdKSB7XG4gICAgY29uc3QgeyB4LCB5IH0gPSBub3JtYWxpemVQb2ludChwb2ludCk7XG4gICAgcmV0dXJuIHRyYW5zZm9ybU1hdDMoW10sIFt4LCB5LCAxXSwgbWF0cml4KTtcbn1cblxuLyoqXG4gKiDojrflj5YgY29udGVudENvbnRhaW5lciDnmoQgY2xpZW50Qm94XG4gKiBAcGFyYW0gYm9hcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3cG9ydENvbnRhaW5lckJveChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgaGlkZVNjcm9sbGJhciB9ID0gYm9hcmQub3B0aW9ucztcbiAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IGhpZGVTY3JvbGxiYXIgPyBTQ1JPTExfQkFSX1dJRFRIIDogMDtcbiAgICBjb25zdCBjb250YWluZXIgPSBib2FyZC5ob3N0Py5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHggPSBjb250YWluZXJSZWN0LnggfHwgY29udGFpbmVyUmVjdC5sZWZ0O1xuICAgIGNvbnN0IHkgPSBjb250YWluZXJSZWN0LnkgfHwgY29udGFpbmVyUmVjdC50b3A7XG4gICAgY29uc3Qgd2lkdGggPSBjb250YWluZXJSZWN0LndpZHRoIC0gc2Nyb2xsQmFyV2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVyUmVjdC5oZWlnaHQgLSBzY3JvbGxCYXJXaWR0aDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG1pblg6IHgsXG4gICAgICAgIG1pblk6IHksXG4gICAgICAgIG1heFg6IHggKyB3aWR0aCxcbiAgICAgICAgbWF4WTogeSArIGhlaWdodCxcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgIH07XG59XG5cbi8qKlxuICog6I635Y+WIGJvYXJkLnBsYWl0LWJvYXJkIOeahCBjbGllbnRCb3hcbiAqIEBwYXJhbSBib2FyZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJvYXJkQ2xpZW50Qm94KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgeyBoaWRlU2Nyb2xsYmFyIH0gPSBib2FyZC5vcHRpb25zO1xuICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gaGlkZVNjcm9sbGJhciA/IFNDUk9MTF9CQVJfV0lEVEggOiAwO1xuICAgIGNvbnN0IGJvYXJkRWwgPSBib2FyZC5ob3N0Py5wYXJlbnRFbGVtZW50Py5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGVsUmVjdCA9IGJvYXJkRWw/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IGVsUmVjdC53aWR0aCArIHNjcm9sbEJhcldpZHRoLFxuICAgICAgICBoZWlnaHQ6IGVsUmVjdC5oZWlnaHQgKyBzY3JvbGxCYXJXaWR0aFxuICAgIH07XG59XG5cbi8qKlxuICog6I635Y+WIHJvb3RHcm91cCDnm7jlr7nkuo7lvZPliY0gc3ZnIOepuumXtOeahOacgOWwj+efqemYteWdkOagh1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9vdEdyb3VwQkJveChib2FyZDogUGxhaXRCb2FyZCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3Qgcm9vdEdyb3VwID0gYm9hcmQuaG9zdC5maXJzdENoaWxkIGFzIFNWR0dyYXBoaWNzRWxlbWVudDtcbiAgICBjb25zdCByb290R3JvdXBCb3ggPSByb290R3JvdXAuZ2V0QkJveCgpO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyQm94ID0gZ2V0Vmlld3BvcnRDb250YWluZXJCb3goYm9hcmQpO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdmlld3BvcnRDb250YWluZXJCb3gud2lkdGggLyB6b29tO1xuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHZpZXdwb3J0Q29udGFpbmVyQm94LmhlaWdodCAvIHpvb207XG4gICAgbGV0IGxlZnQ6IG51bWJlcjtcbiAgICBsZXQgcmlnaHQ6IG51bWJlcjtcbiAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgbGV0IGJvdHRvbTogbnVtYmVyO1xuXG4gICAgaWYgKHJvb3RHcm91cEJveC53aWR0aCA8IGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldFggPSByb290R3JvdXBCb3gueCArIHJvb3RHcm91cEJveC53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclggPSBjb250YWluZXJXaWR0aCAvIDI7XG4gICAgICAgIGxlZnQgPSBvZmZzZXRYIC0gY29udGFpbmVyWDtcbiAgICAgICAgcmlnaHQgPSBvZmZzZXRYICsgY29udGFpbmVyWDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gcm9vdEdyb3VwQm94Lng7XG4gICAgICAgIHJpZ2h0ID0gcm9vdEdyb3VwQm94LnggKyByb290R3JvdXBCb3gud2lkdGg7XG4gICAgfVxuICAgIGlmIChyb290R3JvdXBCb3guaGVpZ2h0IDwgY29udGFpbmVySGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSByb290R3JvdXBCb3gueSArIHJvb3RHcm91cEJveC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBjb250YWluZXJZID0gY29udGFpbmVySGVpZ2h0IC8gMjtcbiAgICAgICAgdG9wID0gb2Zmc2V0WSAtIGNvbnRhaW5lclk7XG4gICAgICAgIGJvdHRvbSA9IG9mZnNldFkgKyBjb250YWluZXJZO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcCA9IHJvb3RHcm91cEJveC55O1xuICAgICAgICBib3R0b20gPSByb290R3JvdXBCb3gueSArIHJvb3RHcm91cEJveC5oZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHJpZ2h0LFxuICAgICAgICB0b3AsXG4gICAgICAgIGJvdHRvbVxuICAgIH07XG59XG5cbi8qKlxuICog6aqM6K+B57yp5pS+5q+U5piv5ZCm56ym5ZCI6ZmQ5Yi277yM5aaC5p6c6LaF5Ye66ZmQ5Yi277yM5YiZ6L+U5Zue5ZCI6YCC55qE57yp5pS+5q+UXG4gKiBAcGFyYW0gem9vbSDnvKnmlL7mr5RcbiAqIEBwYXJhbSBtaW5ab29tIOacgOWwj+e8qeaUvuavlFxuICogQHBhcmFtIG1heFpvb20g5pyA5aSn57yp5pS+5q+UXG4gKiBAcmV0dXJucyDmraPnoa7nmoTnvKnmlL7mr5RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wWm9vbUxldmVsKHpvb206IG51bWJlciwgbWluWm9vbSA9IDAuMiwgbWF4Wm9vbSA9IDQpIHtcbiAgICByZXR1cm4gem9vbSA8IG1pblpvb20gPyBtaW5ab29tIDogem9vbSA+IG1heFpvb20gPyBtYXhab29tIDogem9vbTtcbn1cbiJdfQ==
@@ -4,4 +4,4 @@ export const IS_TEXT_EDITABLE = new WeakMap();
4
4
  export const BOARD_TO_ON_CHANGE = new WeakMap();
5
5
  export const HOST_TO_ROUGH_SVG = new WeakMap();
6
6
  export const PLAIT_BOARD_TO_COMPONENT = new WeakMap();
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vhay1tYXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL3V0aWxzL3dlYWstbWFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSw4QkFBOEI7QUFDOUIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFpQyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUF3QixDQUFDO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksT0FBTyxFQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZENvbXBvbmVudCB9IGZyb20gJy4uL2JvYXJkL2JvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5cbi8vIHJlY29yZCByaWNodGV4dCB0eXBlIHN0YXR1c1xuZXhwb3J0IGNvbnN0IEZMVVNISU5HOiBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+ID0gbmV3IFdlYWtNYXAoKTtcblxuZXhwb3J0IGNvbnN0IElTX1RFWFRfRURJVEFCTEUgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fT05fQ0hBTkdFID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgKCkgPT4gdm9pZD4oKTtcblxuZXhwb3J0IGNvbnN0IEhPU1RfVE9fUk9VR0hfU1ZHID0gbmV3IFdlYWtNYXA8U1ZHRWxlbWVudCwgUm91Z2hTVkc+KCk7XG5cbmV4cG9ydCBjb25zdCBQTEFJVF9CT0FSRF9UT19DT01QT05FTlQgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBQbGFpdEJvYXJkQ29tcG9uZW50PigpO1xuIl19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vhay1tYXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL3V0aWxzL3dlYWstbWFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSw4QkFBOEI7QUFDOUIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFpQyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUF3QixDQUFDO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksT0FBTyxFQUF1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgQm9hcmRDb21wb25lbnRJbnRlcmZhY2UgfSBmcm9tICcuLi9ib2FyZC9ib2FyZC5jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcblxuLy8gcmVjb3JkIHJpY2h0ZXh0IHR5cGUgc3RhdHVzXG5leHBvcnQgY29uc3QgRkxVU0hJTkc6IFdlYWtNYXA8UGxhaXRCb2FyZCwgYm9vbGVhbj4gPSBuZXcgV2Vha01hcCgpO1xuXG5leHBvcnQgY29uc3QgSVNfVEVYVF9FRElUQUJMRSA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19PTl9DSEFOR0UgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCAoKSA9PiB2b2lkPigpO1xuXG5leHBvcnQgY29uc3QgSE9TVF9UT19ST1VHSF9TVkcgPSBuZXcgV2Vha01hcDxTVkdFbGVtZW50LCBSb3VnaFNWRz4oKTtcblxuZXhwb3J0IGNvbnN0IFBMQUlUX0JPQVJEX1RPX0NPTVBPTkVOVCA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIEJvYXJkQ29tcG9uZW50SW50ZXJmYWNlPigpOyJdfQ==