@plait/draw 0.53.0 → 0.55.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 (70) hide show
  1. package/constants/geometry.d.ts +25 -1
  2. package/engines/basic-shapes/circle.d.ts +8 -0
  3. package/engines/basic-shapes/cloud.d.ts +2 -0
  4. package/engines/flowchart/off-page.d.ts +4 -0
  5. package/engines/flowchart/or.d.ts +2 -0
  6. package/engines/flowchart/predefined-process.d.ts +2 -0
  7. package/engines/flowchart/summing-junction.d.ts +2 -0
  8. package/esm2022/constants/geometry.mjs +15 -3
  9. package/esm2022/engines/basic-shapes/circle.mjs +51 -0
  10. package/esm2022/engines/basic-shapes/cloud.mjs +57 -0
  11. package/esm2022/engines/basic-shapes/ellipse.mjs +3 -41
  12. package/esm2022/engines/flowchart/off-page.mjs +32 -0
  13. package/esm2022/engines/flowchart/or.mjs +25 -0
  14. package/esm2022/engines/flowchart/predefined-process.mjs +47 -0
  15. package/esm2022/engines/flowchart/summing-junction.mjs +28 -0
  16. package/esm2022/engines/index.mjs +12 -2
  17. package/esm2022/generators/line-auto-complete.generator.mjs +1 -1
  18. package/esm2022/geometry.component.mjs +7 -8
  19. package/esm2022/image.component.mjs +6 -7
  20. package/esm2022/interfaces/element.mjs +2 -1
  21. package/esm2022/interfaces/geometry.mjs +6 -1
  22. package/esm2022/interfaces/index.mjs +2 -2
  23. package/esm2022/line.component.mjs +8 -9
  24. package/esm2022/plugins/with-draw-fragment.mjs +7 -7
  25. package/esm2022/plugins/with-draw-hotkey.mjs +1 -1
  26. package/esm2022/plugins/with-draw-resize.mjs +73 -26
  27. package/esm2022/plugins/with-draw-rotate.mjs +127 -0
  28. package/esm2022/plugins/with-draw.mjs +6 -5
  29. package/esm2022/plugins/with-geometry-create.mjs +21 -5
  30. package/esm2022/plugins/with-geometry-resize.mjs +17 -23
  31. package/esm2022/plugins/with-line-auto-complete-reaction.mjs +2 -2
  32. package/esm2022/plugins/with-line-auto-complete.mjs +15 -13
  33. package/esm2022/plugins/with-line-bound-reaction.mjs +19 -21
  34. package/esm2022/plugins/with-line-create.mjs +4 -4
  35. package/esm2022/plugins/with-line-resize.mjs +11 -12
  36. package/esm2022/transforms/line.mjs +4 -4
  37. package/esm2022/utils/geometry.mjs +35 -23
  38. package/esm2022/utils/hit.mjs +26 -26
  39. package/esm2022/utils/line/elbow.mjs +11 -6
  40. package/esm2022/utils/line/line-basic.mjs +25 -30
  41. package/esm2022/utils/line/line-common.mjs +3 -3
  42. package/esm2022/utils/line/line-resize.mjs +2 -2
  43. package/esm2022/utils/position/geometry.mjs +59 -21
  44. package/esm2022/utils/shape.mjs +2 -2
  45. package/esm2022/utils/snap-resizing.mjs +185 -0
  46. package/esm2022/utils/style/stroke.mjs +9 -2
  47. package/fesm2022/plait-draw.mjs +1393 -1121
  48. package/fesm2022/plait-draw.mjs.map +1 -1
  49. package/generators/line-auto-complete.generator.d.ts +3 -3
  50. package/geometry.component.d.ts +2 -3
  51. package/image.component.d.ts +2 -3
  52. package/interfaces/element.d.ts +2 -1
  53. package/interfaces/geometry.d.ts +7 -2
  54. package/interfaces/index.d.ts +2 -2
  55. package/line.component.d.ts +2 -3
  56. package/package.json +1 -1
  57. package/plugins/with-draw-fragment.d.ts +2 -2
  58. package/plugins/with-draw-resize.d.ts +9 -5
  59. package/plugins/with-draw-rotate.d.ts +2 -0
  60. package/utils/geometry.d.ts +7 -4
  61. package/utils/hit.d.ts +3 -1
  62. package/utils/line/elbow.d.ts +3 -0
  63. package/utils/line/line-basic.d.ts +4 -4
  64. package/utils/position/geometry.d.ts +16 -2
  65. package/utils/shape.d.ts +2 -2
  66. package/utils/snap-resizing.d.ts +25 -0
  67. package/esm2022/utils/resize-align-reaction.mjs +0 -316
  68. package/esm2022/utils/resize-align.mjs +0 -37
  69. package/utils/resize-align-reaction.d.ts +0 -42
  70. package/utils/resize-align.d.ts +0 -8
@@ -1,30 +1,68 @@
1
- import { RectangleClient, depthFirstRecursion, getIsRecursionFunc, rotatePoints, rotateAntiPointsByElement } from '@plait/core';
1
+ import { PlaitBoard, RectangleClient, depthFirstRecursion, getIsRecursionFunc, rotatePoints, rotateAntiPointsByElement } from '@plait/core';
2
+ import { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs, getRotatedResizeCursorClassByAngle, ROTATE_HANDLE_SIZE, ROTATE_HANDLE_DISTANCE_TO_ELEMENT } from '@plait/common';
2
3
  import { PlaitDrawElement } from '../../interfaces';
3
- import { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs } from '@plait/common';
4
- import { getEngine } from '../../engines';
5
- import { getShape } from '../shape';
4
+ import { isHitEdgeOfShape, isInsideOfShape } from '../hit';
5
+ import { LINE_HIT_GEOMETRY_BUFFER, LINE_SNAPPING_BUFFER } from '../../constants/geometry';
6
+ import { getNearestPoint } from '../geometry';
7
+ import { getHitConnectorPoint } from '../line/line-basic';
6
8
  export const getHitRectangleResizeHandleRef = (board, rectangle, point, angle = 0) => {
7
9
  const centerPoint = RectangleClient.getCenterPoint(rectangle);
8
- const rotatedPoint = rotatePoints([point], centerPoint, -angle)[0];
9
- const resizeHandleRefs = getRectangleResizeHandleRefs(rectangle, RESIZE_HANDLE_DIAMETER, angle);
10
- const result = resizeHandleRefs.find(resizeHandleRef => {
11
- return RectangleClient.isHit(RectangleClient.getRectangleByPoints([rotatedPoint, rotatedPoint]), resizeHandleRef.rectangle);
10
+ const resizeHandleRefs = getRectangleResizeHandleRefs(rectangle, RESIZE_HANDLE_DIAMETER);
11
+ if (angle) {
12
+ const rotatedPoint = rotatePoints([point], centerPoint, -angle)[0];
13
+ let result = resizeHandleRefs.find(resizeHandleRef => {
14
+ return RectangleClient.isHit(RectangleClient.getRectangleByPoints([rotatedPoint, rotatedPoint]), resizeHandleRef.rectangle);
15
+ });
16
+ if (result) {
17
+ result.cursorClass = getRotatedResizeCursorClassByAngle(result.cursorClass, angle);
18
+ }
19
+ return result;
20
+ }
21
+ else {
22
+ return resizeHandleRefs.find(resizeHandleRef => {
23
+ return RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), resizeHandleRef.rectangle);
24
+ });
25
+ }
26
+ };
27
+ export const getSnappingGeometry = (board, point) => {
28
+ let hitElement = getHitGeometry(board, point);
29
+ if (hitElement) {
30
+ const ref = getSnappingRef(board, hitElement, point);
31
+ if (ref.isHitConnector || ref.isHitEdge) {
32
+ return hitElement;
33
+ }
34
+ }
35
+ return null;
36
+ };
37
+ export const getSnappingRef = (board, hitElement, point) => {
38
+ const rotatedPoint = rotateAntiPointsByElement(point, hitElement) || point;
39
+ const connectorPoint = getHitConnectorPoint(rotatedPoint, hitElement);
40
+ const edgePoint = getNearestPoint(hitElement, rotatedPoint);
41
+ const isHitEdge = isHitEdgeOfShape(board, hitElement, rotatedPoint, LINE_SNAPPING_BUFFER);
42
+ return { isHitEdge, isHitConnector: !!connectorPoint, connectorPoint, edgePoint };
43
+ };
44
+ export const getHitGeometry = (board, point, offset = LINE_HIT_GEOMETRY_BUFFER) => {
45
+ let hitShape = null;
46
+ traverseDrawShapes(board, (element) => {
47
+ if (hitShape === null && isInsideOfShape(board, element, rotateAntiPointsByElement(point, element) || point, offset * 2)) {
48
+ hitShape = element;
49
+ }
12
50
  });
13
- return result;
51
+ return hitShape;
14
52
  };
15
- export const getHitOutlineGeometry = (board, point, offset = 0) => {
16
- let geometry = null;
53
+ export const traverseDrawShapes = (board, callback) => {
17
54
  depthFirstRecursion(board, node => {
18
- if (PlaitDrawElement.isGeometry(node) || PlaitDrawElement.isImage(node)) {
19
- let client = RectangleClient.getRectangleByPoints(node.points);
20
- client = RectangleClient.getOutlineRectangle(client, offset);
21
- const shape = getShape(node);
22
- const isHit = getEngine(shape).isInsidePoint(client, rotateAntiPointsByElement(point, node) || point);
23
- if (isHit) {
24
- geometry = node;
25
- }
55
+ if (!PlaitBoard.isBoard(node) && PlaitDrawElement.isShapeElement(node)) {
56
+ callback(node);
26
57
  }
27
58
  }, getIsRecursionFunc(board), true);
28
- return geometry;
29
59
  };
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9wb3NpdGlvbi9nZW9tZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsWUFBWSxFQUVaLHlCQUF5QixFQUM1QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZ0JBQWdCLEVBQWlCLE1BQU0sa0JBQWtCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVwQyxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsU0FBMEIsRUFBRSxLQUFZLEVBQUUsUUFBZ0IsQ0FBQyxFQUFFLEVBQUU7SUFDN0gsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxNQUFNLGdCQUFnQixHQUFHLDRCQUE0QixDQUFDLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDbkQsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoSSxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFZLEVBQUUsU0FBaUIsQ0FBQyxFQUF3QixFQUFFO0lBQy9HLElBQUksUUFBUSxHQUFzQyxJQUFJLENBQUM7SUFDdkQsbUJBQW1CLENBQ2YsS0FBSyxFQUNMLElBQUksQ0FBQyxFQUFFO1FBQ0gsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEUsSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRCxNQUFNLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM3RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUseUJBQXlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBQ3RHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1IsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNwQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUMsRUFDRCxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDekIsSUFBSSxDQUNQLENBQUM7SUFDRixPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFuY2VzdG9yLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGRlcHRoRmlyc3RSZWN1cnNpb24sXG4gICAgZ2V0SXNSZWN1cnNpb25GdW5jLFxuICAgIHJvdGF0ZVBvaW50cyxcbiAgICBoYXNWYWxpZEFuZ2xlLFxuICAgIHJvdGF0ZUFudGlQb2ludHNCeUVsZW1lbnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCwgUGxhaXRHZW9tZXRyeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUiwgZ2V0UmVjdGFuZ2xlUmVzaXplSGFuZGxlUmVmcyB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBQbGFpdEltYWdlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbWFnZSc7XG5pbXBvcnQgeyBnZXRTaGFwZSB9IGZyb20gJy4uL3NoYXBlJztcblxuZXhwb3J0IGNvbnN0IGdldEhpdFJlY3RhbmdsZVJlc2l6ZUhhbmRsZVJlZiA9IChib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCwgYW5nbGU6IG51bWJlciA9IDApID0+IHtcbiAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChyZWN0YW5nbGUpO1xuICAgIGNvbnN0IHJvdGF0ZWRQb2ludCA9IHJvdGF0ZVBvaW50cyhbcG9pbnRdLCBjZW50ZXJQb2ludCwgLWFuZ2xlKVswXTtcbiAgICBjb25zdCByZXNpemVIYW5kbGVSZWZzID0gZ2V0UmVjdGFuZ2xlUmVzaXplSGFuZGxlUmVmcyhyZWN0YW5nbGUsIFJFU0laRV9IQU5ETEVfRElBTUVURVIsIGFuZ2xlKTtcbiAgICBjb25zdCByZXN1bHQgPSByZXNpemVIYW5kbGVSZWZzLmZpbmQocmVzaXplSGFuZGxlUmVmID0+IHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3JvdGF0ZWRQb2ludCwgcm90YXRlZFBvaW50XSksIHJlc2l6ZUhhbmRsZVJlZi5yZWN0YW5nbGUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0T3V0bGluZUdlb21ldHJ5ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQsIG9mZnNldDogbnVtYmVyID0gMCk6IFBsYWl0R2VvbWV0cnkgfCBudWxsID0+IHtcbiAgICBsZXQgZ2VvbWV0cnk6IFBsYWl0R2VvbWV0cnkgfCBQbGFpdEltYWdlIHwgbnVsbCA9IG51bGw7XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkobm9kZSkgfHwgUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhub2RlLnBvaW50cyk7XG4gICAgICAgICAgICAgICAgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldE91dGxpbmVSZWN0YW5nbGUoY2xpZW50LCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoYXBlID0gZ2V0U2hhcGUobm9kZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNIaXQgPSBnZXRFbmdpbmUoc2hhcGUpLmlzSW5zaWRlUG9pbnQoY2xpZW50LCByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50KHBvaW50LCBub2RlKSB8fCBwb2ludCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzSGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gbm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCksXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIHJldHVybiBnZW9tZXRyeTtcbn07XG4iXX0=
60
+ export const getRotateHandleRectangle = (rectangle) => {
61
+ return {
62
+ x: rectangle.x - ROTATE_HANDLE_DISTANCE_TO_ELEMENT - ROTATE_HANDLE_SIZE,
63
+ y: rectangle.y + rectangle.height + ROTATE_HANDLE_DISTANCE_TO_ELEMENT,
64
+ width: ROTATE_HANDLE_SIZE,
65
+ height: ROTATE_HANDLE_SIZE
66
+ };
67
+ };
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9wb3NpdGlvbi9nZW9tZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsVUFBVSxFQUVWLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWix5QkFBeUIsRUFDNUIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNILHNCQUFzQixFQUN0Qiw0QkFBNEIsRUFDNUIsa0NBQWtDLEVBQ2xDLGtCQUFrQixFQUNsQixpQ0FBaUMsRUFDcEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFvQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUxRCxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsU0FBMEIsRUFBRSxLQUFZLEVBQUUsUUFBZ0IsQ0FBQyxFQUFFLEVBQUU7SUFDN0gsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxNQUFNLGdCQUFnQixHQUFHLDRCQUE0QixDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3pGLElBQUksS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxD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Q3BHLG1CQUFtQixDQUNmLEtBQUssRUFDTCxJQUFJLENBQUMsRUFBRTtRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO0lBQ0wsQ0FBQyxFQUNELGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUN6QixJQUFJLENBQ1AsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsU0FBMEIsRUFBRSxFQUFFO0lBQ25FLE9BQU87UUFDSCxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxpQ0FBaUMsR0FBRyxrQkFBa0I7UUFDdkUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxpQ0FBaUM7UUFDckUsS0FBSyxFQUFFLGtCQUFrQjtRQUN6QixNQUFNLEVBQUUsa0JBQWtCO0tBQzdCLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFuY2VzdG9yLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGRlcHRoRmlyc3RSZWN1cnNpb24sXG4gICAgZ2V0SXNSZWN1cnNpb25GdW5jLFxuICAgIHJvdGF0ZVBvaW50cyxcbiAgICByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50XG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7XG4gICAgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUixcbiAgICBnZXRSZWN0YW5nbGVSZXNpemVIYW5kbGVSZWZzLFxuICAgIGdldFJvdGF0ZWRSZXNpemVDdXJzb3JDbGFzc0J5QW5nbGUsXG4gICAgUk9UQVRFX0hBTkRMRV9TSVpFLFxuICAgIFJPVEFURV9IQU5ETEVfRElTVEFOQ0VfVE9fRUxFTUVOVFxufSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQsIFBsYWl0R2VvbWV0cnksIFBsYWl0U2hhcGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc0hpdEVkZ2VPZlNoYXBlLCBpc0luc2lkZU9mU2hhcGUgfSBmcm9tICcuLi9oaXQnO1xuaW1wb3J0IHsgTElORV9ISVRfR0VPTUVUUllfQlVGRkVSLCBMSU5FX1NOQVBQSU5HX0JVRkZFUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXROZWFyZXN0UG9pbnQgfSBmcm9tICcuLi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRIaXRDb25uZWN0b3JQb2ludCB9IGZyb20gJy4uL2xpbmUvbGluZS1iYXNpYyc7XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRSZWN0YW5nbGVSZXNpemVIYW5kbGVSZWYgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQsIGFuZ2xlOiBudW1iZXIgPSAwKSA9PiB7XG4gICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVjdGFuZ2xlKTtcbiAgICBjb25zdCByZXNpemVIYW5kbGVSZWZzID0gZ2V0UmVjdGFuZ2xlUmVzaXplSGFuZGxlUmVmcyhyZWN0YW5nbGUsIFJFU0laRV9IQU5ETEVfRElBTUVURVIpO1xuICAgIGlmIChhbmdsZSkge1xuICAgICAgICBjb25zdCByb3RhdGVkUG9pbnQgPSByb3RhdGVQb2ludHMoW3BvaW50XSwgY2VudGVyUG9pbnQsIC1hbmdsZSlbMF07XG4gICAgICAgIGxldCByZXN1bHQgPSByZXNpemVIYW5kbGVSZWZzLmZpbmQocmVzaXplSGFuZGxlUmVmID0+IHtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNIaXQoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtyb3RhdGVkUG9pbnQsIHJvdGF0ZWRQb2ludF0pLCByZXNpemVIYW5kbGVSZWYucmVjdGFuZ2xlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5jdXJzb3JDbGFzcyA9IGdldFJvdGF0ZWRSZXNpemVDdXJzb3JDbGFzc0J5QW5nbGUocmVzdWx0LmN1cnNvckNsYXNzLCBhbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzaXplSGFuZGxlUmVmcy5maW5kKHJlc2l6ZUhhbmRsZVJlZiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhbcG9pbnQsIHBvaW50XSksIHJlc2l6ZUhhbmRsZVJlZi5yZWN0YW5nbGUpO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U25hcHBpbmdHZW9tZXRyeSA9IChib2FyZDogUGxhaXRCb2FyZCwgcG9pbnQ6IFBvaW50KTogUGxhaXRHZW9tZXRyeSB8IG51bGwgPT4ge1xuICAgIGxldCBoaXRFbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCB8IG51bGwgPSBnZXRIaXRHZW9tZXRyeShib2FyZCwgcG9pbnQpO1xuICAgIGlmIChoaXRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHJlZiA9IGdldFNuYXBwaW5nUmVmKGJvYXJkLCBoaXRFbGVtZW50LCBwb2ludCk7XG4gICAgICAgIGlmIChyZWYuaXNIaXRDb25uZWN0b3IgfHwgcmVmLmlzSGl0RWRnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGhpdEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U25hcHBpbmdSZWYgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGhpdEVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50LCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCByb3RhdGVkUG9pbnQgPSByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50KHBvaW50LCBoaXRFbGVtZW50KSB8fCBwb2ludDtcbiAgICBjb25zdCBjb25uZWN0b3JQb2ludCA9IGdldEhpdENvbm5lY3RvclBvaW50KHJvdGF0ZWRQb2ludCwgaGl0RWxlbWVudCk7XG4gICAgY29uc3QgZWRnZVBvaW50ID0gZ2V0TmVhcmVzdFBvaW50KGhpdEVsZW1lbnQsIHJvdGF0ZWRQb2ludCk7XG4gICAgY29uc3QgaXNIaXRFZGdlID0gaXNIaXRFZGdlT2ZTaGFwZShib2FyZCwgaGl0RWxlbWVudCwgcm90YXRlZFBvaW50LCBMSU5FX1NOQVBQSU5HX0JVRkZFUik7XG4gICAgcmV0dXJuIHsgaXNIaXRFZGdlLCBpc0hpdENvbm5lY3RvcjogISFjb25uZWN0b3JQb2ludCwgY29ubmVjdG9yUG9pbnQsIGVkZ2VQb2ludCB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdEdlb21ldHJ5ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQsIG9mZnNldCA9IExJTkVfSElUX0dFT01FVFJZX0JVRkZFUik6IFBsYWl0R2VvbWV0cnkgfCBudWxsID0+IHtcbiAgICBsZXQgaGl0U2hhcGU6IFBsYWl0U2hhcGVFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgdHJhdmVyc2VEcmF3U2hhcGVzKGJvYXJkLCAoZWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGhpdFNoYXBlID09PSBudWxsICYmIGlzSW5zaWRlT2ZTaGFwZShib2FyZCwgZWxlbWVudCwgcm90YXRlQW50aVBvaW50c0J5RWxlbWVudChwb2ludCwgZWxlbWVudCkgfHwgcG9pbnQsIG9mZnNldCAqIDIpKSB7XG4gICAgICAgICAgICBoaXRTaGFwZSA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaGl0U2hhcGU7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhdmVyc2VEcmF3U2hhcGVzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBjYWxsYmFjazogKGVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50KSA9PiB2b2lkKSA9PiB7XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpICYmIFBsYWl0RHJhd0VsZW1lbnQuaXNTaGFwZUVsZW1lbnQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0SXNSZWN1cnNpb25GdW5jKGJvYXJkKSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um90YXRlSGFuZGxlUmVjdGFuZ2xlID0gKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcmVjdGFuZ2xlLnggLSBST1RBVEVfSEFORExFX0RJU1RBTkNFX1RPX0VMRU1FTlQgLSBST1RBVEVfSEFORExFX1NJWkUsXG4gICAgICAgIHk6IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCArIFJPVEFURV9IQU5ETEVfRElTVEFOQ0VfVE9fRUxFTUVOVCxcbiAgICAgICAgd2lkdGg6IFJPVEFURV9IQU5ETEVfU0laRSxcbiAgICAgICAgaGVpZ2h0OiBST1RBVEVfSEFORExFX1NJWkVcbiAgICB9O1xufTtcbiJdfQ==
@@ -1,8 +1,8 @@
1
1
  import { BasicShapes, PlaitDrawElement } from '../interfaces';
2
- export const getShape = (value) => {
2
+ export const getElementShape = (value) => {
3
3
  if (PlaitDrawElement.isImage(value)) {
4
4
  return BasicShapes.rectangle;
5
5
  }
6
6
  return value.shape;
7
7
  };
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9zaGFwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFjLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUMxQyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2ljU2hhcGVzLCBQbGFpdERyYXdFbGVtZW50LCBQbGFpdFNoYXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTaGFwZSA9ICh2YWx1ZTogUGxhaXRTaGFwZSkgPT4ge1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBCYXNpY1NoYXBlcy5yZWN0YW5nbGU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5zaGFwZTtcbn07XG4iXX0=
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9zaGFwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVqRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUF3QixFQUFFLEVBQUU7SUFDeEQsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDakMsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQztBQUN2QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNpY1NoYXBlcywgUGxhaXREcmF3RWxlbWVudCwgUGxhaXRTaGFwZUVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRTaGFwZSA9ICh2YWx1ZTogUGxhaXRTaGFwZUVsZW1lbnQpID0+IHtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gQmFzaWNTaGFwZXMucmVjdGFuZ2xlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUuc2hhcGU7XG59O1xuIl19
@@ -0,0 +1,185 @@
1
+ import { getDirectionFactorByDirectionComponent, getUnitVectorByPointAndPoint, resetPointsAfterResize } from '@plait/common';
2
+ import { RectangleClient, createDebugGenerator, createG, getSelectionAngle, getRectangleByAngle, getRectangleByElements, getSnapRectangles, SNAP_TOLERANCE, drawSolidLines, drawPointSnapLines, getTripleAxis, getMinPointDelta } from '@plait/core';
3
+ import { getResizeZoom, movePointByZoomAndOriginPoint } from '../plugins/with-draw-resize';
4
+ const debugKey = 'debug:plait:point-for-geometry';
5
+ export const debugGenerator = createDebugGenerator(debugKey);
6
+ const EQUAL_SPACING = 10;
7
+ export function getSnapResizingRefOptions(board, resizeRef, resizeState, resizeOriginPointAndHandlePoint, isAspectRatio, isFromCorner) {
8
+ const { originPoint, handlePoint } = resizeOriginPointAndHandlePoint;
9
+ const resizePoints = [resizeState.startPoint, resizeState.endPoint];
10
+ const { xZoom, yZoom } = getResizeZoom(resizePoints, originPoint, handlePoint, isFromCorner, isAspectRatio);
11
+ let activeElements;
12
+ let resizeOriginPoint = [];
13
+ if (Array.isArray(resizeRef.element)) {
14
+ activeElements = resizeRef.element;
15
+ const rectangle = getRectangleByElements(board, resizeRef.element, false);
16
+ resizeOriginPoint = RectangleClient.getPoints(rectangle);
17
+ }
18
+ else {
19
+ activeElements = [resizeRef.element];
20
+ resizeOriginPoint = resizeRef.element.points;
21
+ }
22
+ const points = resizeOriginPoint.map(p => {
23
+ return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);
24
+ });
25
+ const activeRectangle = getRectangleByAngle(RectangleClient.getRectangleByPoints(points), getSelectionAngle(activeElements)) ||
26
+ RectangleClient.getRectangleByPoints(points);
27
+ const resizeHandlePoint = movePointByZoomAndOriginPoint(handlePoint, originPoint, xZoom, yZoom);
28
+ const [x, y] = getUnitVectorByPointAndPoint(originPoint, resizeHandlePoint);
29
+ return {
30
+ resizePoints,
31
+ resizeOriginPoint,
32
+ activeRectangle,
33
+ originPoint,
34
+ handlePoint,
35
+ directionFactors: [getDirectionFactorByDirectionComponent(x), getDirectionFactorByDirectionComponent(y)],
36
+ isAspectRatio,
37
+ isFromCorner
38
+ };
39
+ }
40
+ export function getSnapResizingRef(board, activeElements, resizeSnapOptions) {
41
+ const snapG = createG();
42
+ const snapRectangles = getSnapRectangles(board, activeElements);
43
+ let snapLineDelta = getIsometricLineDelta(snapRectangles, resizeSnapOptions);
44
+ if (snapLineDelta.deltaX === 0 && snapLineDelta.deltaY === 0) {
45
+ snapLineDelta = getSnapPointDelta(snapRectangles, resizeSnapOptions);
46
+ }
47
+ const angle = getSelectionAngle(activeElements);
48
+ const activePointAndZoom = getActivePointAndZoom(snapLineDelta, resizeSnapOptions, angle);
49
+ const isometricLinesG = drawIsometricSnapLines(board, activePointAndZoom.activePoints, snapRectangles, resizeSnapOptions, angle);
50
+ const pointLinesG = drawResizingPointSnapLines(board, activePointAndZoom.activePoints, snapRectangles, resizeSnapOptions, angle);
51
+ snapG.append(isometricLinesG, pointLinesG);
52
+ return { ...activePointAndZoom, ...snapLineDelta, snapG };
53
+ }
54
+ function getSnapPointDelta(snapRectangles, resizeSnapOptions) {
55
+ let pointLineDelta = {
56
+ deltaX: 0,
57
+ deltaY: 0
58
+ };
59
+ const { isAspectRatio, activeRectangle, directionFactors } = resizeSnapOptions;
60
+ const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;
61
+ const drawVertical = directionFactors[1] !== 0 || isAspectRatio;
62
+ if (drawHorizontal) {
63
+ const xSnapAxis = getTripleAxis(activeRectangle, true);
64
+ const pointX = directionFactors[0] === -1 ? xSnapAxis[0] : xSnapAxis[2];
65
+ const deltaX = getMinPointDelta(snapRectangles, pointX, true);
66
+ if (Math.abs(deltaX) < SNAP_TOLERANCE) {
67
+ pointLineDelta.deltaX = deltaX;
68
+ if (pointLineDelta.deltaX !== 0 && isAspectRatio) {
69
+ pointLineDelta.deltaY = pointLineDelta.deltaX / (activeRectangle.width / activeRectangle.height);
70
+ return pointLineDelta;
71
+ }
72
+ }
73
+ }
74
+ if (drawVertical) {
75
+ const ySnapAxis = getTripleAxis(activeRectangle, false);
76
+ const pointY = directionFactors[1] === -1 ? ySnapAxis[0] : ySnapAxis[2];
77
+ const deltaY = getMinPointDelta(snapRectangles, pointY, false);
78
+ if (Math.abs(deltaY) < SNAP_TOLERANCE) {
79
+ pointLineDelta.deltaY = deltaY;
80
+ if (pointLineDelta.deltaY !== 0 && isAspectRatio) {
81
+ pointLineDelta.deltaX = pointLineDelta.deltaY * (activeRectangle.width / activeRectangle.height);
82
+ return pointLineDelta;
83
+ }
84
+ }
85
+ }
86
+ return pointLineDelta;
87
+ }
88
+ function getActivePointAndZoom(resizeSnapDelta, resizeSnapOptions, angle) {
89
+ const { deltaX, deltaY } = resizeSnapDelta;
90
+ const { resizePoints, isCreate } = resizeSnapOptions;
91
+ const newResizePoints = [resizePoints[0], [resizePoints[1][0] + deltaX, resizePoints[1][1] + deltaY]];
92
+ let activePoints = newResizePoints;
93
+ let xZoom = 0;
94
+ let yZoom = 0;
95
+ if (!isCreate) {
96
+ const { originPoint, handlePoint, isFromCorner, isAspectRatio, resizeOriginPoint } = resizeSnapOptions;
97
+ const resizeZoom = getResizeZoom(newResizePoints, originPoint, handlePoint, isFromCorner, isAspectRatio);
98
+ xZoom = resizeZoom.xZoom;
99
+ yZoom = resizeZoom.yZoom;
100
+ activePoints = resizeOriginPoint.map(p => {
101
+ return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);
102
+ });
103
+ if (angle) {
104
+ activePoints = resetPointsAfterResize(RectangleClient.getRectangleByPoints(resizeOriginPoint), RectangleClient.getRectangleByPoints(activePoints), RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(resizeOriginPoint)), RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(activePoints)), angle);
105
+ }
106
+ }
107
+ return {
108
+ xZoom,
109
+ yZoom,
110
+ activePoints
111
+ };
112
+ }
113
+ function getIsometricLineDelta(snapRectangles, resizeSnapOptions) {
114
+ let isometricLineDelta = {
115
+ deltaX: 0,
116
+ deltaY: 0
117
+ };
118
+ const { isAspectRatio, activeRectangle } = resizeSnapOptions;
119
+ const widthSnapRectangle = snapRectangles.find(item => Math.abs(item.width - activeRectangle.width) < SNAP_TOLERANCE);
120
+ if (widthSnapRectangle) {
121
+ const deltaWidth = widthSnapRectangle.width - activeRectangle.width;
122
+ isometricLineDelta.deltaX = deltaWidth * resizeSnapOptions.directionFactors[0];
123
+ if (isAspectRatio) {
124
+ const deltaHeight = deltaWidth / (activeRectangle.width / activeRectangle.height);
125
+ isometricLineDelta.deltaY = deltaHeight * resizeSnapOptions.directionFactors[1];
126
+ return isometricLineDelta;
127
+ }
128
+ }
129
+ const heightSnapRectangle = snapRectangles.find(item => Math.abs(item.height - activeRectangle.height) < SNAP_TOLERANCE);
130
+ if (heightSnapRectangle) {
131
+ const deltaHeight = heightSnapRectangle.height - activeRectangle.height;
132
+ isometricLineDelta.deltaY = deltaHeight * resizeSnapOptions.directionFactors[1];
133
+ if (isAspectRatio) {
134
+ const deltaWidth = deltaHeight * (activeRectangle.width / activeRectangle.height);
135
+ isometricLineDelta.deltaX = deltaWidth * resizeSnapOptions.directionFactors[0];
136
+ return isometricLineDelta;
137
+ }
138
+ }
139
+ return isometricLineDelta;
140
+ }
141
+ function getIsometricLinePoints(rectangle, isHorizontal) {
142
+ return isHorizontal
143
+ ? [
144
+ [rectangle.x, rectangle.y - EQUAL_SPACING],
145
+ [rectangle.x + rectangle.width, rectangle.y - EQUAL_SPACING]
146
+ ]
147
+ : [
148
+ [rectangle.x - EQUAL_SPACING, rectangle.y],
149
+ [rectangle.x - EQUAL_SPACING, rectangle.y + rectangle.height]
150
+ ];
151
+ }
152
+ function drawResizingPointSnapLines(board, activePoints, snapRectangles, resizeSnapOptions, angle) {
153
+ debugGenerator.isDebug() && debugGenerator.clear();
154
+ const activeRectangle = getRectangleByAngle(RectangleClient.getRectangleByPoints(activePoints), angle) ||
155
+ RectangleClient.getRectangleByPoints(activePoints);
156
+ const { isAspectRatio, directionFactors } = resizeSnapOptions;
157
+ const drawHorizontal = directionFactors[0] !== 0 || isAspectRatio;
158
+ const drawVertical = directionFactors[1] !== 0 || isAspectRatio;
159
+ return drawPointSnapLines(board, activeRectangle, snapRectangles, drawHorizontal, drawVertical);
160
+ }
161
+ function drawIsometricSnapLines(board, activePoints, snapRectangles, resizeSnapOptions, angle) {
162
+ let widthIsometricPoints = [];
163
+ let heightIsometricPoints = [];
164
+ const drawHorizontalLine = resizeSnapOptions.directionFactors[0] !== 0 || resizeSnapOptions.isAspectRatio;
165
+ const drawVerticalLine = resizeSnapOptions.directionFactors[1] !== 0 || resizeSnapOptions.isAspectRatio;
166
+ const activeRectangle = getRectangleByAngle(RectangleClient.getRectangleByPoints(activePoints), angle) ||
167
+ RectangleClient.getRectangleByPoints(activePoints);
168
+ for (let snapRectangle of snapRectangles) {
169
+ if (activeRectangle.width === snapRectangle.width && drawHorizontalLine) {
170
+ widthIsometricPoints.push(getIsometricLinePoints(snapRectangle, true));
171
+ }
172
+ if (activeRectangle.height === snapRectangle.height && drawVerticalLine) {
173
+ heightIsometricPoints.push(getIsometricLinePoints(snapRectangle, false));
174
+ }
175
+ }
176
+ if (widthIsometricPoints.length && drawHorizontalLine) {
177
+ widthIsometricPoints.push(getIsometricLinePoints(activeRectangle, true));
178
+ }
179
+ if (heightIsometricPoints.length && drawVerticalLine) {
180
+ heightIsometricPoints.push(getIsometricLinePoints(activeRectangle, false));
181
+ }
182
+ const isometricLines = [...widthIsometricPoints, ...heightIsometricPoints];
183
+ return drawSolidLines(board, isometricLines);
184
+ }
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcC1yZXNpemluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL3NuYXAtcmVzaXppbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILHNDQUFzQyxFQUN0Qyw0QkFBNEIsRUFDNUIsc0JBQXNCLEVBQ3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFLSCxlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUd0QixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGdCQUFnQixFQUNuQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsYUFBYSxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHM0YsTUFBTSxRQUFRLEdBQUcsZ0NBQWdDLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBb0I3RCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFFekIsTUFBTSxVQUFVLHlCQUF5QixDQUNyQyxLQUFpQixFQUNqQixTQUEyRCxFQUMzRCxXQUF3QixFQUN4QiwrQkFHQyxFQUNELGFBQXNCLEVBQ3RCLFlBQXFCO0lBRXJCLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsK0JBQStCLENBQUM7SUFDckUsTUFBTSxZQUFZLEdBQW1CLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEYsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRTVHLElBQUks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QWEsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUN2QyxJQUFJLGVBQWUsQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLEtBQUssSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3RFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUN0RSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0UsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BELG9CQUFvQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNuRCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxHQUFHLHFCQUFxQixDQUFDLENBQUM7SUFDM0UsT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJlc2l6ZVJlZixcbiAgICBSZXNpemVTdGF0ZSxcbiAgICBnZXREaXJlY3Rpb25GYWN0b3JCeURpcmVjdGlvbkNvbXBvbmVudCxcbiAgICBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50LFxuICAgIHJlc2V0UG9pbnRzQWZ0ZXJSZXNpemVcbn0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQge1xuICAgIERpcmVjdGlvbkZhY3RvcnMsXG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGNyZWF0ZURlYnVnR2VuZXJhdG9yLFxuICAgIGNyZWF0ZUcsXG4gICAgZ2V0U2VsZWN0aW9uQW5nbGUsXG4gICAgZ2V0UmVjdGFuZ2xlQnlBbmdsZSxcbiAgICBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzLFxuICAgIFNuYXBEZWx0YSxcbiAgICBTbmFwUmVmLFxuICAgIGdldFNuYXBSZWN0YW5nbGVzLFxuICAgIFNOQVBfVE9MRVJBTkNFLFxuICAgIGRyYXdTb2xpZExpbmVzLFxuICAgIGRyYXdQb2ludFNuYXBMaW5lcyxcbiAgICBnZXRUcmlwbGVBeGlzLFxuICAgIGdldE1pblBvaW50RGVsdGFcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgZ2V0UmVzaXplWm9vbSwgbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQgfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtZHJhdy1yZXNpemUnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5jb25zdCBkZWJ1Z0tleSA9ICdkZWJ1ZzpwbGFpdDpwb2ludC1mb3ItZ2VvbWV0cnknO1xuZXhwb3J0IGNvbnN0IGRlYnVnR2VuZXJhdG9yID0gY3JlYXRlRGVidWdHZW5lcmF0b3IoZGVidWdLZXkpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc2l6ZVNuYXBSZWYgZXh0ZW5kcyBTbmFwUmVmIHtcbiAgICB4Wm9vbTogbnVtYmVyO1xuICAgIHlab29tOiBudW1iZXI7XG4gICAgYWN0aXZlUG9pbnRzOiBQb2ludFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc2l6ZVNuYXBPcHRpb25zIHtcbiAgICByZXNpemVQb2ludHM6IFBvaW50W107XG4gICAgYWN0aXZlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgZGlyZWN0aW9uRmFjdG9yczogRGlyZWN0aW9uRmFjdG9ycztcbiAgICBpc0Zyb21Db3JuZXI6IGJvb2xlYW47XG4gICAgaXNBc3BlY3RSYXRpbzogYm9vbGVhbjtcbiAgICByZXNpemVPcmlnaW5Qb2ludD86IFBvaW50W107XG4gICAgb3JpZ2luUG9pbnQ/OiBQb2ludDtcbiAgICBoYW5kbGVQb2ludD86IFBvaW50O1xuICAgIGlzQ3JlYXRlPzogYm9vbGVhbjtcbn1cblxuY29uc3QgRVFVQUxfU1BBQ0lORyA9IDEwO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U25hcFJlc2l6aW5nUmVmT3B0aW9ucyhcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICByZXNpemVSZWY6IFJlc2l6ZVJlZjxQbGFpdERyYXdFbGVtZW50IHwgUGxhaXREcmF3RWxlbWVudFtdPixcbiAgICByZXNpemVTdGF0ZTogUmVzaXplU3RhdGUsXG4gICAgcmVzaXplT3JpZ2luUG9pbnRBbmRIYW5kbGVQb2ludDoge1xuICAgICAgICBvcmlnaW5Qb2ludDogUG9pbnQ7XG4gICAgICAgIGhhbmRsZVBvaW50OiBQb2ludDtcbiAgICB9LFxuICAgIGlzQXNwZWN0UmF0aW86IGJvb2xlYW4sXG4gICAgaXNGcm9tQ29ybmVyOiBib29sZWFuXG4pOiBSZXNpemVTbmFwT3B0aW9ucyB7XG4gICAgY29uc3QgeyBvcmlnaW5Qb2ludCwgaGFuZGxlUG9pbnQgfSA9IHJlc2l6ZU9yaWdpblBvaW50QW5kSGFuZGxlUG9pbnQ7XG4gICAgY29uc3QgcmVzaXplUG9pbnRzOiBbUG9pbnQsIFBvaW50XSA9IFtyZXNpemVTdGF0ZS5zdGFydFBvaW50LCByZXNpemVTdGF0ZS5lbmRQb2ludF07XG4gICAgY29uc3QgeyB4Wm9vbSwgeVpvb20gfSA9IGdldFJlc2l6ZVpvb20ocmVzaXplUG9pbnRzLCBvcmlnaW5Qb2ludCwgaGFuZGxlUG9pbnQsIGlzRnJvbUNvcm5lciwgaXNBc3BlY3RSYXRpbyk7XG5cbiAgICBsZXQgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdO1xuICAgIGxldCByZXNpemVPcmlnaW5Qb2ludDogUG9pbnRbXSA9IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc2l6ZVJlZi5lbGVtZW50KSkge1xuICAgICAgICBhY3RpdmVFbGVtZW50cyA9IHJlc2l6ZVJlZi5lbGVtZW50O1xuICAgICAgICBjb25zdCByZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCByZXNpemVSZWYuZWxlbWVudCwgZmFsc2UpO1xuICAgICAgICByZXNpemVPcmlnaW5Qb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmVFbGVtZW50cyA9IFtyZXNpemVSZWYuZWxlbWVudF07XG4gICAgICAgIHJlc2l6ZU9yaWdpblBvaW50ID0gcmVzaXplUmVmLmVsZW1lbnQucG9pbnRzO1xuICAgIH1cblxuICAgIGNvbnN0IHBvaW50cyA9IHJlc2l6ZU9yaWdpblBvaW50Lm1hcChwID0+IHtcbiAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIG9yaWdpblBvaW50LCB4Wm9vbSwgeVpvb20pO1xuICAgIH0pIGFzIFtQb2ludCwgUG9pbnRdO1xuICAgIGNvbnN0IGFjdGl2ZVJlY3RhbmdsZSA9XG4gICAgICAgIGdldFJlY3RhbmdsZUJ5QW5nbGUoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cyksIGdldFNlbGVjdGlvbkFuZ2xlKGFjdGl2ZUVsZW1lbnRzKSkgfHxcbiAgICAgICAgUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cyk7XG4gICAgY29uc3QgcmVzaXplSGFuZGxlUG9pbnQgPSBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludChoYW5kbGVQb2ludCwgb3JpZ2luUG9pbnQsIHhab29tLCB5Wm9vbSk7XG4gICAgY29uc3QgW3gsIHldID0gZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludChvcmlnaW5Qb2ludCwgcmVzaXplSGFuZGxlUG9pbnQpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc2l6ZVBvaW50cyxcbiAgICAgICAgcmVzaXplT3JpZ2luUG9pbnQsXG4gICAgICAgIGFjdGl2ZVJlY3RhbmdsZSxcbiAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgIGhhbmRsZVBvaW50LFxuICAgICAgICBkaXJlY3Rpb25GYWN0b3JzOiBbZ2V0RGlyZWN0aW9uRmFjdG9yQnlEaXJlY3Rpb25Db21wb25lbnQoeCksIGdldERpcmVjdGlvbkZhY3RvckJ5RGlyZWN0aW9uQ29tcG9uZW50KHkpXSxcbiAgICAgICAgaXNBc3BlY3RSYXRpbyxcbiAgICAgICAgaXNGcm9tQ29ybmVyXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNuYXBSZXNpemluZ1JlZihib2FyZDogUGxhaXRCb2FyZCwgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdLCByZXNpemVTbmFwT3B0aW9uczogUmVzaXplU25hcE9wdGlvbnMpOiBSZXNpemVTbmFwUmVmIHtcbiAgICBjb25zdCBzbmFwRyA9IGNyZWF0ZUcoKTtcbiAgICBjb25zdCBzbmFwUmVjdGFuZ2xlcyA9IGdldFNuYXBSZWN0YW5nbGVzKGJvYXJkLCBhY3RpdmVFbGVtZW50cyk7XG4gICAgbGV0IHNuYXBMaW5lRGVsdGEgPSBnZXRJc29tZXRyaWNMaW5lRGVsdGEoc25hcFJlY3RhbmdsZXMsIHJlc2l6ZVNuYXBPcHRpb25zKTtcbiAgICBpZiAoc25hcExpbmVEZWx0YS5kZWx0YVggPT09IDAgJiYgc25hcExpbmVEZWx0YS5kZWx0YVkgPT09IDApIHtcbiAgICAgICAgc25hcExpbmVEZWx0YSA9IGdldFNuYXBQb2ludERlbHRhKHNuYXBSZWN0YW5nbGVzLCByZXNpemVTbmFwT3B0aW9ucyk7XG4gICAgfVxuICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUoYWN0aXZlRWxlbWVudHMpO1xuICAgIGNvbnN0IGFjdGl2ZVBvaW50QW5kWm9vbSA9IGdldEFjdGl2ZVBvaW50QW5kWm9vbShzbmFwTGluZURlbHRhLCByZXNpemVTbmFwT3B0aW9ucywgYW5nbGUpO1xuICAgIGNvbnN0IGlzb21ldHJpY0xpbmVzRyA9IGRyYXdJc29tZXRyaWNTbmFwTGluZXMoYm9hcmQsIGFjdGl2ZVBvaW50QW5kWm9vbS5hY3RpdmVQb2ludHMsIHNuYXBSZWN0YW5nbGVzLCByZXNpemVTbmFwT3B0aW9ucywgYW5nbGUpO1xuICAgIGNvbnN0IHBvaW50TGluZXNHID0gZHJhd1Jlc2l6aW5nUG9pbnRTbmFwTGluZXMoYm9hcmQsIGFjdGl2ZVBvaW50QW5kWm9vbS5hY3RpdmVQb2ludHMsIHNuYXBSZWN0YW5nbGVzLCByZXNpemVTbmFwT3B0aW9ucywgYW5nbGUpO1xuICAgIHNuYXBHLmFwcGVuZChpc29tZXRyaWNMaW5lc0csIHBvaW50TGluZXNHKTtcbiAgICByZXR1cm4geyAuLi5hY3RpdmVQb2ludEFuZFpvb20sIC4uLnNuYXBMaW5lRGVsdGEsIHNuYXBHIH07XG59XG5cbmZ1bmN0aW9uIGdldFNuYXBQb2ludERlbHRhKHNuYXBSZWN0YW5nbGVzOiBSZWN0YW5nbGVDbGllbnRbXSwgcmVzaXplU25hcE9wdGlvbnM6IFJlc2l6ZVNuYXBPcHRpb25zKSB7XG4gICAgbGV0IHBvaW50TGluZURlbHRhOiBTbmFwRGVsdGEgPSB7XG4gICAgICAgIGRlbHRhWDogMCxcbiAgICAgICAgZGVsdGFZOiAwXG4gICAgfTtcbiAgICBjb25zdCB7IGlzQXNwZWN0UmF0aW8sIGFjdGl2ZVJlY3RhbmdsZSwgZGlyZWN0aW9uRmFjdG9ycyB9ID0gcmVzaXplU25hcE9wdGlvbnM7XG4gICAgY29uc3QgZHJhd0hvcml6b250YWwgPSBkaXJlY3Rpb25GYWN0b3JzWzBdICE9PSAwIHx8IGlzQXNwZWN0UmF0aW87XG4gICAgY29uc3QgZHJhd1ZlcnRpY2FsID0gZGlyZWN0aW9uRmFjdG9yc1sxXSAhPT0gMCB8fCBpc0FzcGVjdFJhdGlvO1xuXG4gICAgaWYgKGRyYXdIb3Jpem9udGFsKSB7XG4gICAgICAgIGNvbnN0IHhTbmFwQXhpcyA9IGdldFRyaXBsZUF4aXMoYWN0aXZlUmVjdGFuZ2xlLCB0cnVlKTtcbiAgICAgICAgY29uc3QgcG9pbnRYID0gZGlyZWN0aW9uRmFjdG9yc1swXSA9PT0gLTEgPyB4U25hcEF4aXNbMF0gOiB4U25hcEF4aXNbMl07XG4gICAgICAgIGNvbnN0IGRlbHRhWCA9IGdldE1pblBvaW50RGVsdGEoc25hcFJlY3RhbmdsZXMsIHBvaW50WCwgdHJ1ZSk7XG4gICAgICAgIGlmIChNYXRoLmFicyhkZWx0YVgpIDwgU05BUF9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgIHBvaW50TGluZURlbHRhLmRlbHRhWCA9IGRlbHRhWDtcbiAgICAgICAgICAgIGlmIChwb2ludExpbmVEZWx0YS5kZWx0YVggIT09IDAgJiYgaXNBc3BlY3RSYXRpbykge1xuICAgICAgICAgICAgICAgIHBvaW50TGluZURlbHRhLmRlbHRhWSA9IHBvaW50TGluZURlbHRhLmRlbHRhWCAvIChhY3RpdmVSZWN0YW5nbGUud2lkdGggLyBhY3RpdmVSZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnRMaW5lRGVsdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZHJhd1ZlcnRpY2FsKSB7XG4gICAgICAgIGNvbnN0IHlTbmFwQXhpcyA9IGdldFRyaXBsZUF4aXMoYWN0aXZlUmVjdGFuZ2xlLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHBvaW50WSA9IGRpcmVjdGlvbkZhY3RvcnNbMV0gPT09IC0xID8geVNuYXBBeGlzWzBdIDogeVNuYXBBeGlzWzJdO1xuICAgICAgICBjb25zdCBkZWx0YVkgPSBnZXRNaW5Qb2ludERlbHRhKHNuYXBSZWN0YW5nbGVzLCBwb2ludFksIGZhbHNlKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbHRhWSkgPCBTTkFQX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgcG9pbnRMaW5lRGVsdGEuZGVsdGFZID0gZGVsdGFZO1xuICAgICAgICAgICAgaWYgKHBvaW50TGluZURlbHRhLmRlbHRhWSAhPT0gMCAmJiBpc0FzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgICAgICAgcG9pbnRMaW5lRGVsdGEuZGVsdGFYID0gcG9pbnRMaW5lRGVsdGEuZGVsdGFZICogKGFjdGl2ZVJlY3RhbmdsZS53aWR0aCAvIGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwb2ludExpbmVEZWx0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb2ludExpbmVEZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlUG9pbnRBbmRab29tKHJlc2l6ZVNuYXBEZWx0YTogU25hcERlbHRhLCByZXNpemVTbmFwT3B0aW9uczogUmVzaXplU25hcE9wdGlvbnMsIGFuZ2xlOiBudW1iZXIpIHtcbiAgICBjb25zdCB7IGRlbHRhWCwgZGVsdGFZIH0gPSByZXNpemVTbmFwRGVsdGE7XG4gICAgY29uc3QgeyByZXNpemVQb2ludHMsIGlzQ3JlYXRlIH0gPSByZXNpemVTbmFwT3B0aW9ucztcbiAgICBjb25zdCBuZXdSZXNpemVQb2ludHM6IFtQb2ludCwgUG9pbnRdID0gW3Jlc2l6ZVBvaW50c1swXSwgW3Jlc2l6ZVBvaW50c1sxXVswXSArIGRlbHRhWCwgcmVzaXplUG9pbnRzWzFdWzFdICsgZGVsdGFZXV07XG4gICAgbGV0IGFjdGl2ZVBvaW50cyA9IG5ld1Jlc2l6ZVBvaW50cztcbiAgICBsZXQgeFpvb20gPSAwO1xuICAgIGxldCB5Wm9vbSA9IDA7XG4gICAgaWYgKCFpc0NyZWF0ZSkge1xuICAgICAgICBjb25zdCB7IG9yaWdpblBvaW50LCBoYW5kbGVQb2ludCwgaXNGcm9tQ29ybmVyLCBpc0FzcGVjdFJhdGlvLCByZXNpemVPcmlnaW5Qb2ludCB9ID0gcmVzaXplU25hcE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHJlc2l6ZVpvb20gPSBnZXRSZXNpemVab29tKG5ld1Jlc2l6ZVBvaW50cywgb3JpZ2luUG9pbnQhLCBoYW5kbGVQb2ludCEsIGlzRnJvbUNvcm5lciwgaXNBc3BlY3RSYXRpbyk7XG4gICAgICAgIHhab29tID0gcmVzaXplWm9vbS54Wm9vbTtcbiAgICAgICAgeVpvb20gPSByZXNpemVab29tLnlab29tO1xuICAgICAgICBhY3RpdmVQb2ludHMgPSByZXNpemVPcmlnaW5Qb2ludCEubWFwKHAgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIG9yaWdpblBvaW50ISwgeFpvb20sIHlab29tKTtcbiAgICAgICAgfSkgYXMgW1BvaW50LCBQb2ludF07XG4gICAgICAgIGlmIChhbmdsZSkge1xuICAgICAgICAgICAgYWN0aXZlUG9pbnRzID0gcmVzZXRQb2ludHNBZnRlclJlc2l6ZShcbiAgICAgICAgICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocmVzaXplT3JpZ2luUG9pbnQhKSxcbiAgICAgICAgICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoYWN0aXZlUG9pbnRzKSxcbiAgICAgICAgICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJlc2l6ZU9yaWdpblBvaW50ISkpLFxuICAgICAgICAgICAgICAgIFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoYWN0aXZlUG9pbnRzKSksXG4gICAgICAgICAgICAgICAgYW5nbGVcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB4Wm9vbSxcbiAgICAgICAgeVpvb20sXG4gICAgICAgIGFjdGl2ZVBvaW50c1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldElzb21ldHJpY0xpbmVEZWx0YShzbmFwUmVjdGFuZ2xlczogUmVjdGFuZ2xlQ2xpZW50W10sIHJlc2l6ZVNuYXBPcHRpb25zOiBSZXNpemVTbmFwT3B0aW9ucykge1xuICAgIGxldCBpc29tZXRyaWNMaW5lRGVsdGE6IFNuYXBEZWx0YSA9IHtcbiAgICAgICAgZGVsdGFYOiAwLFxuICAgICAgICBkZWx0YVk6IDBcbiAgICB9O1xuICAgIGNvbnN0IHsgaXNBc3BlY3RSYXRpbywgYWN0aXZlUmVjdGFuZ2xlIH0gPSByZXNpemVTbmFwT3B0aW9ucztcbiAgICBjb25zdCB3aWR0aFNuYXBSZWN0YW5nbGUgPSBzbmFwUmVjdGFuZ2xlcy5maW5kKGl0ZW0gPT4gTWF0aC5hYnMoaXRlbS53aWR0aCAtIGFjdGl2ZVJlY3RhbmdsZS53aWR0aCkgPCBTTkFQX1RPTEVSQU5DRSk7XG4gICAgaWYgKHdpZHRoU25hcFJlY3RhbmdsZSkge1xuICAgICAgICBjb25zdCBkZWx0YVdpZHRoID0gd2lkdGhTbmFwUmVjdGFuZ2xlLndpZHRoIC0gYWN0aXZlUmVjdGFuZ2xlLndpZHRoO1xuICAgICAgICBpc29tZXRyaWNMaW5lRGVsdGEuZGVsdGFYID0gZGVsdGFXaWR0aCAqIHJlc2l6ZVNuYXBPcHRpb25zLmRpcmVjdGlvbkZhY3RvcnNbMF07XG4gICAgICAgIGlmIChpc0FzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YUhlaWdodCA9IGRlbHRhV2lkdGggLyAoYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC8gYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgICAgICBpc29tZXRyaWNMaW5lRGVsdGEuZGVsdGFZID0gZGVsdGFIZWlnaHQgKiByZXNpemVTbmFwT3B0aW9ucy5kaXJlY3Rpb25GYWN0b3JzWzFdO1xuICAgICAgICAgICAgcmV0dXJuIGlzb21ldHJpY0xpbmVEZWx0YTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBoZWlnaHRTbmFwUmVjdGFuZ2xlID0gc25hcFJlY3RhbmdsZXMuZmluZChpdGVtID0+IE1hdGguYWJzKGl0ZW0uaGVpZ2h0IC0gYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCkgPCBTTkFQX1RPTEVSQU5DRSk7XG4gICAgaWYgKGhlaWdodFNuYXBSZWN0YW5nbGUpIHtcbiAgICAgICAgY29uc3QgZGVsdGFIZWlnaHQgPSBoZWlnaHRTbmFwUmVjdGFuZ2xlLmhlaWdodCAtIGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQ7XG4gICAgICAgIGlzb21ldHJpY0xpbmVEZWx0YS5kZWx0YVkgPSBkZWx0YUhlaWdodCAqIHJlc2l6ZVNuYXBPcHRpb25zLmRpcmVjdGlvbkZhY3RvcnNbMV07XG4gICAgICAgIGlmIChpc0FzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YVdpZHRoID0gZGVsdGFIZWlnaHQgKiAoYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC8gYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgICAgICBpc29tZXRyaWNMaW5lRGVsdGEuZGVsdGFYID0gZGVsdGFXaWR0aCAqIHJlc2l6ZVNuYXBPcHRpb25zLmRpcmVjdGlvbkZhY3RvcnNbMF07XG4gICAgICAgICAgICByZXR1cm4gaXNvbWV0cmljTGluZURlbHRhO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpc29tZXRyaWNMaW5lRGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldElzb21ldHJpY0xpbmVQb2ludHMocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGlzSG9yaXpvbnRhbDogYm9vbGVhbik6IFBvaW50W10ge1xuICAgIHJldHVybiBpc0hvcml6b250YWxcbiAgICAgICAgPyBbXG4gICAgICAgICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgLSBFUVVBTF9TUEFDSU5HXSxcbiAgICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUueSAtIEVRVUFMX1NQQUNJTkddXG4gICAgICAgICAgXVxuICAgICAgICA6IFtcbiAgICAgICAgICAgICAgW3JlY3RhbmdsZS54IC0gRVFVQUxfU1BBQ0lORywgcmVjdGFuZ2xlLnldLFxuICAgICAgICAgICAgICBbcmVjdGFuZ2xlLnggLSBFUVVBTF9TUEFDSU5HLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdXG4gICAgICAgICAgXTtcbn1cblxuZnVuY3Rpb24gZHJhd1Jlc2l6aW5nUG9pbnRTbmFwTGluZXMoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgYWN0aXZlUG9pbnRzOiBQb2ludFtdLFxuICAgIHNuYXBSZWN0YW5nbGVzOiBSZWN0YW5nbGVDbGllbnRbXSxcbiAgICByZXNpemVTbmFwT3B0aW9uczogUmVzaXplU25hcE9wdGlvbnMsXG4gICAgYW5nbGU6IG51bWJlclxuKSB7XG4gICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmNsZWFyKCk7XG4gICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlID1cbiAgICAgICAgZ2V0UmVjdGFuZ2xlQnlBbmdsZShSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoYWN0aXZlUG9pbnRzKSwgYW5nbGUpIHx8XG4gICAgICAgIFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhhY3RpdmVQb2ludHMpO1xuXG4gICAgY29uc3QgeyBpc0FzcGVjdFJhdGlvLCBkaXJlY3Rpb25GYWN0b3JzIH0gPSByZXNpemVTbmFwT3B0aW9ucztcbiAgICBjb25zdCBkcmF3SG9yaXpvbnRhbCA9IGRpcmVjdGlvbkZhY3RvcnNbMF0gIT09IDAgfHwgaXNBc3BlY3RSYXRpbztcbiAgICBjb25zdCBkcmF3VmVydGljYWwgPSBkaXJlY3Rpb25GYWN0b3JzWzFdICE9PSAwIHx8IGlzQXNwZWN0UmF0aW87XG4gICAgcmV0dXJuIGRyYXdQb2ludFNuYXBMaW5lcyhib2FyZCwgYWN0aXZlUmVjdGFuZ2xlLCBzbmFwUmVjdGFuZ2xlcywgZHJhd0hvcml6b250YWwsIGRyYXdWZXJ0aWNhbCk7XG59XG5cbmZ1bmN0aW9uIGRyYXdJc29tZXRyaWNTbmFwTGluZXMoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgYWN0aXZlUG9pbnRzOiBQb2ludFtdLFxuICAgIHNuYXBSZWN0YW5nbGVzOiBSZWN0YW5nbGVDbGllbnRbXSxcbiAgICByZXNpemVTbmFwT3B0aW9uczogUmVzaXplU25hcE9wdGlvbnMsXG4gICAgYW5nbGU6IG51bWJlclxuKSB7XG4gICAgbGV0IHdpZHRoSXNvbWV0cmljUG9pbnRzID0gW107XG4gICAgbGV0IGhlaWdodElzb21ldHJpY1BvaW50cyA9IFtdO1xuXG4gICAgY29uc3QgZHJhd0hvcml6b250YWxMaW5lID0gcmVzaXplU25hcE9wdGlvbnMuZGlyZWN0aW9uRmFjdG9yc1swXSAhPT0gMCB8fCByZXNpemVTbmFwT3B0aW9ucy5pc0FzcGVjdFJhdGlvO1xuICAgIGNvbnN0IGRyYXdWZXJ0aWNhbExpbmUgPSByZXNpemVTbmFwT3B0aW9ucy5kaXJlY3Rpb25GYWN0b3JzWzFdICE9PSAwIHx8IHJlc2l6ZVNuYXBPcHRpb25zLmlzQXNwZWN0UmF0aW87XG4gICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlID1cbiAgICAgICAgZ2V0UmVjdGFuZ2xlQnlBbmdsZShSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoYWN0aXZlUG9pbnRzKSwgYW5nbGUpIHx8XG4gICAgICAgIFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhhY3RpdmVQb2ludHMpO1xuICAgIGZvciAobGV0IHNuYXBSZWN0YW5nbGUgb2Ygc25hcFJlY3RhbmdsZXMpIHtcbiAgICAgICAgaWYgKGFjdGl2ZVJlY3RhbmdsZS53aWR0aCA9PT0gc25hcFJlY3RhbmdsZS53aWR0aCAmJiBkcmF3SG9yaXpvbnRhbExpbmUpIHtcbiAgICAgICAgICAgIHdpZHRoSXNvbWV0cmljUG9pbnRzLnB1c2goZ2V0SXNvbWV0cmljTGluZVBvaW50cyhzbmFwUmVjdGFuZ2xlLCB0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgPT09IHNuYXBSZWN0YW5nbGUuaGVpZ2h0ICYmIGRyYXdWZXJ0aWNhbExpbmUpIHtcbiAgICAgICAgICAgIGhlaWdodElzb21ldHJpY1BvaW50cy5wdXNoKGdldElzb21ldHJpY0xpbmVQb2ludHMoc25hcFJlY3RhbmdsZSwgZmFsc2UpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAod2lkdGhJc29tZXRyaWNQb2ludHMubGVuZ3RoICYmIGRyYXdIb3Jpem9udGFsTGluZSkge1xuICAgICAgICB3aWR0aElzb21ldHJpY1BvaW50cy5wdXNoKGdldElzb21ldHJpY0xpbmVQb2ludHMoYWN0aXZlUmVjdGFuZ2xlLCB0cnVlKSk7XG4gICAgfVxuICAgIGlmIChoZWlnaHRJc29tZXRyaWNQb2ludHMubGVuZ3RoICYmIGRyYXdWZXJ0aWNhbExpbmUpIHtcbiAgICAgICAgaGVpZ2h0SXNvbWV0cmljUG9pbnRzLnB1c2goZ2V0SXNvbWV0cmljTGluZVBvaW50cyhhY3RpdmVSZWN0YW5nbGUsIGZhbHNlKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNvbWV0cmljTGluZXMgPSBbLi4ud2lkdGhJc29tZXRyaWNQb2ludHMsIC4uLmhlaWdodElzb21ldHJpY1BvaW50c107XG4gICAgcmV0dXJuIGRyYXdTb2xpZExpbmVzKGJvYXJkLCBpc29tZXRyaWNMaW5lcyk7XG59XG5cbiJdfQ==
@@ -21,9 +21,16 @@ export const getFillByElement = (board, element) => {
21
21
  return fill;
22
22
  };
23
23
  export const getLineDashByElement = (element) => {
24
- return element.strokeStyle === 'dashed' ? [8, 8 + getStrokeWidthByElement(element)] : undefined;
24
+ switch (element.strokeStyle) {
25
+ case StrokeStyle.dashed:
26
+ return [8, 8 + getStrokeWidthByElement(element)];
27
+ case StrokeStyle.dotted:
28
+ return [0, 4 + getStrokeWidthByElement(element)];
29
+ default:
30
+ return undefined;
31
+ }
25
32
  };
26
33
  export const getStrokeStyleByElement = (element) => {
27
34
  return element.strokeStyle || StrokeStyle.solid;
28
35
  };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Ryb2tlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvc3R5bGUvc3Ryb2tlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBNEIsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBa0MsRUFBRSxFQUFFO0lBQzFFLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbkMsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxvQkFBb0IsQ0FBQyxXQUFXLENBQUM7SUFDNUUsT0FBTyxXQUFXLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQWtDLEVBQUUsRUFBRTtJQUM3RixNQUFNLFlBQVksR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksWUFBWSxDQUFDO0lBQ3hELE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFrQyxFQUFFLEVBQUU7SUFDdEYsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNyRCxDQUFDLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDckQsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztJQUNoQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQztJQUN6QyxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQWtDLEVBQUUsRUFBRTtJQUN2RSxPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3BHLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBa0MsRUFBRSxFQUFFO0lBQzFFLE9BQU8sT0FBTyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQsIFBsYWl0R2VvbWV0cnksIFBsYWl0TGluZSwgU3Ryb2tlU3R5bGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERlZmF1bHRHZW9tZXRyeVN0eWxlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBnZXREcmF3RGVmYXVsdFN0cm9rZUNvbG9yLCBnZXRGbG93Y2hhcnREZWZhdWx0RmlsbCB9IGZyb20gJy4uL2dlb21ldHJ5JztcblxuZXhwb3J0IGNvbnN0IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50ID0gKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkgfCBQbGFpdExpbmUpID0+IHtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1RleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZWxlbWVudC5zdHJva2VXaWR0aCB8fCBEZWZhdWx0R2VvbWV0cnlTdHlsZS5zdHJva2VXaWR0aDtcbiAgICByZXR1cm4gc3Ryb2tlV2lkdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3Ryb2tlQ29sb3JCeUVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkgfCBQbGFpdExpbmUpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0Q29sb3IgPSBnZXREcmF3RGVmYXVsdFN0cm9rZUNvbG9yKGJvYXJkLnRoZW1lLnRoZW1lQ29sb3JNb2RlKTtcbiAgICBjb25zdCBzdHJva2VDb2xvciA9IGVsZW1lbnQuc3Ryb2tlQ29sb3IgfHwgZGVmYXVsdENvbG9yO1xuICAgIHJldHVybiBzdHJva2VDb2xvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxsQnlFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEdlb21ldHJ5IHwgUGxhaXRMaW5lKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdEZpbGwgPSBQbGFpdERyYXdFbGVtZW50LmlzRmxvd2NoYXJ0KGVsZW1lbnQpXG4gICAgICAgID8gZ2V0Rmxvd2NoYXJ0RGVmYXVsdEZpbGwoYm9hcmQudGhlbWUudGhlbWVDb2xvck1vZGUpXG4gICAgICAgIDogRGVmYXVsdEdlb21ldHJ5U3R5bGUuZmlsbDtcbiAgICBjb25zdCBmaWxsID0gZWxlbWVudC5maWxsIHx8IGRlZmF1bHRGaWxsO1xuICAgIHJldHVybiBmaWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExpbmVEYXNoQnlFbGVtZW50ID0gKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkgfCBQbGFpdExpbmUpID0+IHtcbiAgICByZXR1cm4gZWxlbWVudC5zdHJva2VTdHlsZSA9PT0gJ2Rhc2hlZCcgPyBbOCwgOCArIGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGVsZW1lbnQpXSA6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdHJva2VTdHlsZUJ5RWxlbWVudCA9IChlbGVtZW50OiBQbGFpdEdlb21ldHJ5IHwgUGxhaXRMaW5lKSA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnQuc3Ryb2tlU3R5bGUgfHwgU3Ryb2tlU3R5bGUuc29saWQ7XG59O1xuIl19
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Ryb2tlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvc3R5bGUvc3Ryb2tlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBNEIsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBa0MsRUFBRSxFQUFFO0lBQzFFLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbkMsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxvQkFBb0IsQ0FBQyxXQUFXLENBQUM7SUFDNUUsT0FBTyxXQUFXLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQWtDLEVBQUUsRUFBRTtJQUM3RixNQUFNLFlBQVksR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksWUFBWSxDQUFDO0lBQ3hELE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFrQyxFQUFFLEVBQUU7SUFDdEYsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNyRCxDQUFDLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDckQsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztJQUNoQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQztJQUN6QyxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQWtDLEVBQUUsRUFBRTtJQUN2RSxRQUFRLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQixLQUFLLFdBQVcsQ0FBQyxNQUFNO1lBQ25CLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDckQsS0FBSyxXQUFXLENBQUMsTUFBTTtZQUNuQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3JEO1lBQ0ksT0FBTyxTQUFTLENBQUM7SUFDekIsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBa0MsRUFBRSxFQUFFO0lBQzFFLE9BQU8sT0FBTyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQsIFBsYWl0R2VvbWV0cnksIFBsYWl0TGluZSwgU3Ryb2tlU3R5bGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERlZmF1bHRHZW9tZXRyeVN0eWxlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBnZXREcmF3RGVmYXVsdFN0cm9rZUNvbG9yLCBnZXRGbG93Y2hhcnREZWZhdWx0RmlsbCB9IGZyb20gJy4uL2dlb21ldHJ5JztcblxuZXhwb3J0IGNvbnN0IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50ID0gKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkgfCBQbGFpdExpbmUpID0+IHtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1RleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZWxlbWVudC5zdHJva2VXaWR0aCB8fCBEZWZhdWx0R2VvbWV0cnlTdHlsZS5zdHJva2VXaWR0aDtcbiAgICByZXR1cm4gc3Ryb2tlV2lkdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3Ryb2tlQ29sb3JCeUVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkgfCBQbGFpdExpbmUpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0Q29sb3IgPSBnZXREcmF3RGVmYXVsdFN0cm9rZUNvbG9yKGJvYXJkLnRoZW1lLnRoZW1lQ29sb3JNb2RlKTtcbiAgICBjb25zdCBzdHJva2VDb2xvciA9IGVsZW1lbnQuc3Ryb2tlQ29sb3IgfHwgZGVmYXVsdENvbG9yO1xuICAgIHJldHVybiBzdHJva2VDb2xvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxsQnlFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEdlb21ldHJ5IHwgUGxhaXRMaW5lKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdEZpbGwgPSBQbGFpdERyYXdFbGVtZW50LmlzRmxvd2NoYXJ0KGVsZW1lbnQpXG4gICAgICAgID8gZ2V0Rmxvd2NoYXJ0RGVmYXVsdEZpbGwoYm9hcmQudGhlbWUudGhlbWVDb2xvck1vZGUpXG4gICAgICAgIDogRGVmYXVsdEdlb21ldHJ5U3R5bGUuZmlsbDtcbiAgICBjb25zdCBmaWxsID0gZWxlbWVudC5maWxsIHx8IGRlZmF1bHRGaWxsO1xuICAgIHJldHVybiBmaWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExpbmVEYXNoQnlFbGVtZW50ID0gKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkgfCBQbGFpdExpbmUpID0+IHtcbiAgICBzd2l0Y2ggKGVsZW1lbnQuc3Ryb2tlU3R5bGUpIHtcbiAgICAgICAgY2FzZSBTdHJva2VTdHlsZS5kYXNoZWQ6XG4gICAgICAgICAgICByZXR1cm4gWzgsIDggKyBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KV07XG4gICAgICAgIGNhc2UgU3Ryb2tlU3R5bGUuZG90dGVkOlxuICAgICAgICAgICAgcmV0dXJuIFswLCA0ICsgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoZWxlbWVudCldO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3Ryb2tlU3R5bGVCeUVsZW1lbnQgPSAoZWxlbWVudDogUGxhaXRHZW9tZXRyeSB8IFBsYWl0TGluZSkgPT4ge1xuICAgIHJldHVybiBlbGVtZW50LnN0cm9rZVN0eWxlIHx8IFN0cm9rZVN0eWxlLnNvbGlkO1xufTtcbiJdfQ==