@plait/core 0.24.0-next.1 → 0.24.0-next.3

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 (103) hide show
  1. package/board/board.component.d.ts +1 -1
  2. package/core/children/children.component.d.ts +1 -1
  3. package/core/element/element.component.d.ts +1 -1
  4. package/core/element/plugin-element.d.ts +1 -1
  5. package/core/island/island-base.component.d.ts +1 -1
  6. package/{esm2020 → esm2022}/board/board.component.mjs +6 -6
  7. package/{esm2020 → esm2022}/core/children/children.component.mjs +6 -6
  8. package/{esm2020 → esm2022}/core/element/element.component.mjs +4 -4
  9. package/{esm2020 → esm2022}/core/element/plugin-element.mjs +4 -4
  10. package/{esm2020 → esm2022}/core/island/island-base.component.mjs +7 -7
  11. package/esm2022/interfaces/rectangle-client.mjs +56 -0
  12. package/{esm2020 → esm2022}/plait.module.mjs +5 -5
  13. package/esm2022/plugins/with-moving.mjs +98 -0
  14. package/{esm2020 → esm2022}/services/image-context.service.mjs +4 -4
  15. package/esm2022/utils/dom/common.mjs +68 -0
  16. package/esm2022/utils/element.mjs +53 -0
  17. package/esm2022/utils/math.mjs +128 -0
  18. package/{fesm2020 → fesm2022}/plait-core.mjs +199 -80
  19. package/fesm2022/plait-core.mjs.map +1 -0
  20. package/interfaces/rectangle-client.d.ts +2 -0
  21. package/package.json +14 -14
  22. package/utils/dom/common.d.ts +4 -0
  23. package/utils/element.d.ts +1 -0
  24. package/utils/math.d.ts +6 -0
  25. package/esm2020/interfaces/rectangle-client.mjs +0 -40
  26. package/esm2020/plugins/with-moving.mjs +0 -97
  27. package/esm2020/utils/dom/common.mjs +0 -53
  28. package/esm2020/utils/element.mjs +0 -44
  29. package/esm2020/utils/math.mjs +0 -48
  30. package/fesm2015/plait-core.mjs +0 -3454
  31. package/fesm2015/plait-core.mjs.map +0 -1
  32. package/fesm2020/plait-core.mjs.map +0 -1
  33. /package/{esm2020 → esm2022}/board/board.component.interface.mjs +0 -0
  34. /package/{esm2020 → esm2022}/constants/index.mjs +0 -0
  35. /package/{esm2020 → esm2022}/constants/keycodes.mjs +0 -0
  36. /package/{esm2020 → esm2022}/constants/resize.mjs +0 -0
  37. /package/{esm2020 → esm2022}/constants/selection.mjs +0 -0
  38. /package/{esm2020 → esm2022}/core/children/effect.mjs +0 -0
  39. /package/{esm2020 → esm2022}/core/element/context-change.mjs +0 -0
  40. /package/{esm2020 → esm2022}/core/element/context.mjs +0 -0
  41. /package/{esm2020 → esm2022}/interfaces/board.mjs +0 -0
  42. /package/{esm2020 → esm2022}/interfaces/custom-types.mjs +0 -0
  43. /package/{esm2020 → esm2022}/interfaces/element.mjs +0 -0
  44. /package/{esm2020 → esm2022}/interfaces/history.mjs +0 -0
  45. /package/{esm2020 → esm2022}/interfaces/index.mjs +0 -0
  46. /package/{esm2020 → esm2022}/interfaces/node.mjs +0 -0
  47. /package/{esm2020 → esm2022}/interfaces/operation.mjs +0 -0
  48. /package/{esm2020 → esm2022}/interfaces/path-ref.mjs +0 -0
  49. /package/{esm2020 → esm2022}/interfaces/path.mjs +0 -0
  50. /package/{esm2020 → esm2022}/interfaces/plugin-key.mjs +0 -0
  51. /package/{esm2020 → esm2022}/interfaces/plugin.mjs +0 -0
  52. /package/{esm2020 → esm2022}/interfaces/point.mjs +0 -0
  53. /package/{esm2020 → esm2022}/interfaces/pointer.mjs +0 -0
  54. /package/{esm2020 → esm2022}/interfaces/selection.mjs +0 -0
  55. /package/{esm2020 → esm2022}/interfaces/theme.mjs +0 -0
  56. /package/{esm2020 → esm2022}/interfaces/viewport.mjs +0 -0
  57. /package/{esm2020 → esm2022}/plait-core.mjs +0 -0
  58. /package/{esm2020 → esm2022}/plugins/create-board.mjs +0 -0
  59. /package/{esm2020 → esm2022}/plugins/with-board.mjs +0 -0
  60. /package/{esm2020 → esm2022}/plugins/with-hand.mjs +0 -0
  61. /package/{esm2020 → esm2022}/plugins/with-history.mjs +0 -0
  62. /package/{esm2020 → esm2022}/plugins/with-hotkey.mjs +0 -0
  63. /package/{esm2020 → esm2022}/plugins/with-options.mjs +0 -0
  64. /package/{esm2020 → esm2022}/plugins/with-selection.mjs +0 -0
  65. /package/{esm2020 → esm2022}/plugins/with-viewport.mjs +0 -0
  66. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  67. /package/{esm2020 → esm2022}/testing/core/create-board.mjs +0 -0
  68. /package/{esm2020 → esm2022}/testing/core/fake-weak-map.mjs +0 -0
  69. /package/{esm2020 → esm2022}/testing/core/index.mjs +0 -0
  70. /package/{esm2020 → esm2022}/testing/fake-events/event-objects.mjs +0 -0
  71. /package/{esm2020 → esm2022}/testing/fake-events/index.mjs +0 -0
  72. /package/{esm2020 → esm2022}/testing/index.mjs +0 -0
  73. /package/{esm2020 → esm2022}/testing/test-element.mjs +0 -0
  74. /package/{esm2020 → esm2022}/transforms/board.mjs +0 -0
  75. /package/{esm2020 → esm2022}/transforms/general.mjs +0 -0
  76. /package/{esm2020 → esm2022}/transforms/index.mjs +0 -0
  77. /package/{esm2020 → esm2022}/transforms/node.mjs +0 -0
  78. /package/{esm2020 → esm2022}/transforms/selection.mjs +0 -0
  79. /package/{esm2020 → esm2022}/transforms/theme.mjs +0 -0
  80. /package/{esm2020 → esm2022}/transforms/viewport.mjs +0 -0
  81. /package/{esm2020 → esm2022}/utils/board.mjs +0 -0
  82. /package/{esm2020 → esm2022}/utils/clipboard.mjs +0 -0
  83. /package/{esm2020 → esm2022}/utils/common.mjs +0 -0
  84. /package/{esm2020 → esm2022}/utils/dom/environment.mjs +0 -0
  85. /package/{esm2020 → esm2022}/utils/dom/foreign.mjs +0 -0
  86. /package/{esm2020 → esm2022}/utils/dom/index.mjs +0 -0
  87. /package/{esm2020 → esm2022}/utils/draw/arrow.mjs +0 -0
  88. /package/{esm2020 → esm2022}/utils/draw/circle.mjs +0 -0
  89. /package/{esm2020 → esm2022}/utils/draw/line.mjs +0 -0
  90. /package/{esm2020 → esm2022}/utils/draw/rectangle.mjs +0 -0
  91. /package/{esm2020 → esm2022}/utils/environment.mjs +0 -0
  92. /package/{esm2020 → esm2022}/utils/helper.mjs +0 -0
  93. /package/{esm2020 → esm2022}/utils/history.mjs +0 -0
  94. /package/{esm2020 → esm2022}/utils/hotkeys.mjs +0 -0
  95. /package/{esm2020 → esm2022}/utils/id-creator.mjs +0 -0
  96. /package/{esm2020 → esm2022}/utils/index.mjs +0 -0
  97. /package/{esm2020 → esm2022}/utils/moving-element.mjs +0 -0
  98. /package/{esm2020 → esm2022}/utils/selected-element.mjs +0 -0
  99. /package/{esm2020 → esm2022}/utils/to-image.mjs +0 -0
  100. /package/{esm2020 → esm2022}/utils/touch.mjs +0 -0
  101. /package/{esm2020 → esm2022}/utils/tree.mjs +0 -0
  102. /package/{esm2020 → esm2022}/utils/viewport.mjs +0 -0
  103. /package/{esm2020 → esm2022}/utils/weak-maps.mjs +0 -0
@@ -20,4 +20,6 @@ export declare const RectangleClient: {
20
20
  height: number;
21
21
  };
22
22
  isEqual: (rectangle: RectangleClient, otherRectangle: RectangleClient) => boolean;
23
+ getCornerPoints: (rectangle: RectangleClient) => [Point, Point, Point, Point];
24
+ getEdgeCenterPoints: (rectangle: RectangleClient) => [Point, Point, Point, Point];
23
25
  };
package/package.json CHANGED
@@ -1,31 +1,31 @@
1
1
  {
2
2
  "name": "@plait/core",
3
- "version": "0.24.0-next.1",
3
+ "version": "0.24.0-next.3",
4
4
  "peerDependencies": {
5
- "@angular/common": "^15.2.2",
6
- "@angular/core": "^15.2.2"
5
+ "@angular/common": "^16.0.0",
6
+ "@angular/core": "^16.0.0"
7
7
  },
8
8
  "dependencies": {
9
9
  "tslib": "^2.3.0"
10
10
  },
11
- "module": "fesm2015/plait-core.mjs",
12
- "es2020": "fesm2020/plait-core.mjs",
13
- "esm2020": "esm2020/plait-core.mjs",
14
- "fesm2020": "fesm2020/plait-core.mjs",
15
- "fesm2015": "fesm2015/plait-core.mjs",
16
- "typings": "index.d.ts",
17
11
  "exports": {
12
+ "./styles/styles": {
13
+ "sass": "./styles/styles.scss"
14
+ },
15
+ "./styles/*": {
16
+ "sass": "./styles/*"
17
+ },
18
18
  "./package.json": {
19
19
  "default": "./package.json"
20
20
  },
21
21
  ".": {
22
22
  "types": "./index.d.ts",
23
- "esm2020": "./esm2020/plait-core.mjs",
24
- "es2020": "./fesm2020/plait-core.mjs",
25
- "es2015": "./fesm2015/plait-core.mjs",
26
- "node": "./fesm2015/plait-core.mjs",
27
- "default": "./fesm2020/plait-core.mjs"
23
+ "esm2022": "./esm2022/plait-core.mjs",
24
+ "esm": "./esm2022/plait-core.mjs",
25
+ "default": "./fesm2022/plait-core.mjs"
28
26
  }
29
27
  },
28
+ "module": "fesm2022/plait-core.mjs",
29
+ "typings": "index.d.ts",
30
30
  "sideEffects": false
31
31
  }
@@ -1,8 +1,12 @@
1
+ import { Options } from 'roughjs/bin/core';
2
+ import { RectangleClient } from '../../interfaces';
1
3
  import { Point } from '../../interfaces/point';
2
4
  export declare const NS = "http://www.w3.org/2000/svg";
3
5
  export declare function toPoint(x: number, y: number, container: SVGElement): Point;
4
6
  export declare function createG(): SVGGElement;
5
7
  export declare function createPath(): SVGPathElement;
8
+ export declare function createRect(rectangle: RectangleClient, options?: Options): SVGRectElement;
9
+ export declare function createMask(): SVGMaskElement;
6
10
  export declare function createSVG(): SVGSVGElement;
7
11
  export declare function createText(x: number, y: number, fill: string, textContent: string): SVGTextElement;
8
12
  /**
@@ -1,3 +1,4 @@
1
1
  import { PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';
2
2
  export declare function getRectangleByElements(board: PlaitBoard, elements: PlaitElement[], recursion: boolean): RectangleClient;
3
3
  export declare function getBoardRectangle(board: PlaitBoard): RectangleClient;
4
+ export declare function getElementById<T extends PlaitElement = PlaitElement>(board: PlaitBoard, id: string): T | null;
package/utils/math.d.ts CHANGED
@@ -1,5 +1,11 @@
1
+ import { Point } from '../interfaces';
1
2
  import { RectangleClient } from '../interfaces/rectangle-client';
2
3
  export declare function distanceBetweenPointAndSegment(x: number, y: number, x1: number, y1: number, x2: number, y2: number): number;
4
+ export declare function getNearestPointBetweenPointAndSegment(point: Point, linePoints: [Point, Point]): Point;
5
+ export declare function distanceBetweenPointAndSegments(points: Point[], point: Point): number;
6
+ export declare function getNearestPointBetweenPointAndSegments(point: Point, points: Point[]): Point;
3
7
  export declare function rotate(x1: number, y1: number, x2: number, y2: number, angle: number): number[];
4
8
  export declare function distanceBetweenPointAndPoint(x1: number, y1: number, x2: number, y2: number): number;
5
9
  export declare function distanceBetweenPointAndRectangle(x: number, y: number, rect: RectangleClient): number;
10
+ export declare const isLineHitLine: (a: Point, b: Point, c: Point, d: Point) => boolean;
11
+ export declare const isPolylineHitRectangle: (points: Point[], rectangle: RectangleClient) => boolean;
@@ -1,40 +0,0 @@
1
- export const RectangleClient = {
2
- isHit: (origin, target) => {
3
- const minX = origin.x < target.x ? origin.x : target.x;
4
- const maxX = origin.x + origin.width > target.x + target.width ? origin.x + origin.width : target.x + target.width;
5
- const minY = origin.y < target.y ? origin.y : target.y;
6
- const maxY = origin.y + origin.height > target.y + target.height ? origin.y + origin.height : target.y + target.height;
7
- // float calculate error( eg: 1.4210854715202004e-14 > 0)
8
- if (Math.floor(maxX - minX - origin.width - target.width) <= 0 && Math.floor(maxY - minY - origin.height - target.height) <= 0) {
9
- return true;
10
- }
11
- else {
12
- return false;
13
- }
14
- },
15
- toRectangleClient: (points) => {
16
- const xArray = points.map(ele => ele[0]);
17
- const yArray = points.map(ele => ele[1]);
18
- const xMin = Math.min(...xArray);
19
- const xMax = Math.max(...xArray);
20
- const yMin = Math.min(...yArray);
21
- const yMax = Math.max(...yArray);
22
- const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };
23
- return rect;
24
- },
25
- getOutlineRectangle: (rectangle, offset) => {
26
- return {
27
- x: rectangle.x + offset,
28
- y: rectangle.y + offset,
29
- width: rectangle.width + Math.abs(offset) * 2,
30
- height: rectangle.height + Math.abs(offset) * 2
31
- };
32
- },
33
- isEqual: (rectangle, otherRectangle) => {
34
- return (rectangle.x === otherRectangle.x &&
35
- rectangle.y === otherRectangle.y &&
36
- rectangle.width === otherRectangle.width &&
37
- rectangle.height === otherRectangle.height);
38
- }
39
- };
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2ludGVyZmFjZXMvcmVjdGFuZ2xlLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDM0IsS0FBSyxFQUFFLENBQUMsTUFBdUIsRUFBRSxNQUF1QixFQUFFLEVBQUU7UUFDeEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ25ILE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2SCx5REFBeUQ7UUFDekQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUgsT0FBTyxJQUFJLENBQUM7U0FDZjthQUFNO1lBQ0gsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBQ0QsaUJBQWlCLEVBQUUsQ0FBQyxNQUFzQixFQUFFLEVBQUU7UUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUMzRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsbUJBQW1CLEVBQUUsQ0FBQyxTQUEwQixFQUFFLE1BQWMsRUFBRSxFQUFFO1FBQ2hFLE9BQU87WUFDSCxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNO1lBQ3ZCLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU07WUFDdkIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQzdDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNsRCxDQUFDO0lBQ04sQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLFNBQTBCLEVBQUUsY0FBK0IsRUFBRSxFQUFFO1FBQ3JFLE9BQU8sQ0FDSCxTQUFTLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxDQUFDLEtBQUssY0FBYyxDQUFDLENBQUM7WUFDaEMsU0FBUyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsS0FBSztZQUN4QyxTQUFTLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQzdDLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi9wb2ludCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjdGFuZ2xlQ2xpZW50IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBSZWN0YW5nbGVDbGllbnQgPSB7XG4gICAgaXNIaXQ6IChvcmlnaW46IFJlY3RhbmdsZUNsaWVudCwgdGFyZ2V0OiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICAgICAgY29uc3QgbWluWCA9IG9yaWdpbi54IDwgdGFyZ2V0LnggPyBvcmlnaW4ueCA6IHRhcmdldC54O1xuICAgICAgICBjb25zdCBtYXhYID0gb3JpZ2luLnggKyBvcmlnaW4ud2lkdGggPiB0YXJnZXQueCArIHRhcmdldC53aWR0aCA/IG9yaWdpbi54ICsgb3JpZ2luLndpZHRoIDogdGFyZ2V0LnggKyB0YXJnZXQud2lkdGg7XG4gICAgICAgIGNvbnN0IG1pblkgPSBvcmlnaW4ueSA8IHRhcmdldC55ID8gb3JpZ2luLnkgOiB0YXJnZXQueTtcbiAgICAgICAgY29uc3QgbWF4WSA9IG9yaWdpbi55ICsgb3JpZ2luLmhlaWdodCA+IHRhcmdldC55ICsgdGFyZ2V0LmhlaWdodCA/IG9yaWdpbi55ICsgb3JpZ2luLmhlaWdodCA6IHRhcmdldC55ICsgdGFyZ2V0LmhlaWdodDtcbiAgICAgICAgLy8gZmxvYXQgY2FsY3VsYXRlIGVycm9yKCBlZzogMS40MjEwODU0NzE1MjAyMDA0ZS0xNCA+IDApXG4gICAgICAgIGlmIChNYXRoLmZsb29yKG1heFggLSBtaW5YIC0gb3JpZ2luLndpZHRoIC0gdGFyZ2V0LndpZHRoKSA8PSAwICYmIE1hdGguZmxvb3IobWF4WSAtIG1pblkgLSBvcmlnaW4uaGVpZ2h0IC0gdGFyZ2V0LmhlaWdodCkgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHRvUmVjdGFuZ2xlQ2xpZW50OiAocG9pbnRzOiBbUG9pbnQsIFBvaW50XSkgPT4ge1xuICAgICAgICBjb25zdCB4QXJyYXkgPSBwb2ludHMubWFwKGVsZSA9PiBlbGVbMF0pO1xuICAgICAgICBjb25zdCB5QXJyYXkgPSBwb2ludHMubWFwKGVsZSA9PiBlbGVbMV0pO1xuICAgICAgICBjb25zdCB4TWluID0gTWF0aC5taW4oLi4ueEFycmF5KTtcbiAgICAgICAgY29uc3QgeE1heCA9IE1hdGgubWF4KC4uLnhBcnJheSk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBNYXRoLm1pbiguLi55QXJyYXkpO1xuICAgICAgICBjb25zdCB5TWF4ID0gTWF0aC5tYXgoLi4ueUFycmF5KTtcbiAgICAgICAgY29uc3QgcmVjdCA9IHsgeDogeE1pbiwgeTogeU1pbiwgd2lkdGg6IHhNYXggLSB4TWluLCBoZWlnaHQ6IHlNYXggLSB5TWluIH07XG4gICAgICAgIHJldHVybiByZWN0O1xuICAgIH0sXG4gICAgZ2V0T3V0bGluZVJlY3RhbmdsZTogKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvZmZzZXQ6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogcmVjdGFuZ2xlLnggKyBvZmZzZXQsXG4gICAgICAgICAgICB5OiByZWN0YW5nbGUueSArIG9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiByZWN0YW5nbGUud2lkdGggKyBNYXRoLmFicyhvZmZzZXQpICogMixcbiAgICAgICAgICAgIGhlaWdodDogcmVjdGFuZ2xlLmhlaWdodCArIE1hdGguYWJzKG9mZnNldCkgKiAyXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBpc0VxdWFsOiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG90aGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHJlY3RhbmdsZS54ID09PSBvdGhlclJlY3RhbmdsZS54ICYmXG4gICAgICAgICAgICByZWN0YW5nbGUueSA9PT0gb3RoZXJSZWN0YW5nbGUueSAmJlxuICAgICAgICAgICAgcmVjdGFuZ2xlLndpZHRoID09PSBvdGhlclJlY3RhbmdsZS53aWR0aCAmJlxuICAgICAgICAgICAgcmVjdGFuZ2xlLmhlaWdodCA9PT0gb3RoZXJSZWN0YW5nbGUuaGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxufTtcbiJdfQ==
@@ -1,97 +0,0 @@
1
- import { BOARD_TO_HOST } from '../utils/weak-maps';
2
- import { PlaitBoard } from '../interfaces/board';
3
- import { isInPlaitBoard, transformPoint } from '../utils/board';
4
- import { toPoint } from '../utils/dom/common';
5
- import { Transforms } from '../transforms';
6
- import { getHitElementOfRoot, getSelectedElements } from '../utils/selected-element';
7
- import { PlaitNode } from '../interfaces/node';
8
- import { throttleRAF } from '../utils/common';
9
- import { addMovingElements, removeMovingElements } from '../utils/moving-element';
10
- import { MERGING } from '../interfaces/history';
11
- export function withMoving(board) {
12
- const { mousedown, mousemove, globalMouseup, globalMousemove } = board;
13
- let offsetX = 0;
14
- let offsetY = 0;
15
- let isPreventDefault = false;
16
- let startPoint;
17
- let activeElements = [];
18
- board.mousedown = event => {
19
- const host = BOARD_TO_HOST.get(board);
20
- const point = transformPoint(board, toPoint(event.x, event.y, host));
21
- const range = { anchor: point, focus: point };
22
- let movableElements = board.children.filter(item => board.isMovable(item));
23
- if (movableElements.length) {
24
- startPoint = point;
25
- const selectedRootElements = getSelectedElements(board).filter(item => movableElements.includes(item));
26
- const hitElement = getHitElementOfRoot(board, movableElements, range);
27
- if (hitElement && selectedRootElements.includes(hitElement)) {
28
- activeElements = selectedRootElements;
29
- }
30
- else if (hitElement) {
31
- activeElements = [hitElement];
32
- }
33
- }
34
- mousedown(event);
35
- };
36
- board.mousemove = event => {
37
- if (startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {
38
- if (!isPreventDefault) {
39
- isPreventDefault = true;
40
- }
41
- const host = BOARD_TO_HOST.get(board);
42
- const endPoint = transformPoint(board, toPoint(event.x, event.y, host));
43
- offsetX = endPoint[0] - startPoint[0];
44
- offsetY = endPoint[1] - startPoint[1];
45
- const offsetBuffer = 5;
46
- if (Math.abs(offsetX) > offsetBuffer || Math.abs(offsetY) > offsetBuffer) {
47
- throttleRAF(() => {
48
- const currentElements = activeElements.map(activeElement => {
49
- const points = activeElement.points || [];
50
- const [x, y] = activeElement.points[0];
51
- const newPoints = points.map(p => [p[0] + offsetX, p[1] + offsetY]);
52
- const index = board.children.findIndex(item => item.id === activeElement.id);
53
- Transforms.setNode(board, {
54
- points: newPoints
55
- }, [index]);
56
- MERGING.set(board, true);
57
- return PlaitNode.get(board, [index]);
58
- });
59
- PlaitBoard.getBoardContainer(board).classList.add('element-moving');
60
- addMovingElements(board, currentElements);
61
- });
62
- }
63
- }
64
- if (isPreventDefault) {
65
- // 阻止 move 过程中触发画布滚动行为
66
- event.preventDefault();
67
- }
68
- mousemove(event);
69
- };
70
- board.globalMousemove = event => {
71
- if (startPoint) {
72
- const inPlaitBoardElement = isInPlaitBoard(board, event.x, event.y);
73
- if (!inPlaitBoardElement) {
74
- cancelMove(board);
75
- }
76
- }
77
- globalMousemove(event);
78
- };
79
- board.globalMouseup = event => {
80
- isPreventDefault = false;
81
- if (startPoint) {
82
- cancelMove(board);
83
- }
84
- globalMouseup(event);
85
- };
86
- function cancelMove(board) {
87
- startPoint = null;
88
- offsetX = 0;
89
- offsetY = 0;
90
- activeElements = [];
91
- removeMovingElements(board);
92
- MERGING.set(board, false);
93
- PlaitBoard.getBoardContainer(board).classList.remove('element-moving');
94
- }
95
- return board;
96
- }
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tb3ZpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL3dpdGgtbW92aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQWlCLE1BQU0sMkJBQTJCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHaEQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFpQjtJQUN4QyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXZFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDaEIsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDN0IsSUFBSSxVQUF3QixDQUFDO0lBQzdCLElBQUksY0FBYyxHQUFtQixFQUFFLENBQUM7SUFFeEMsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRTtRQUN0QixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFXLENBQUM7UUFDdkQsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQ3hCLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDbkIsTUFBTSxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdkcsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RSxJQUFJLFVBQVUsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3pELGNBQWMsR0FBRyxvQkFBb0IsQ0FBQzthQUN6QztpQkFBTSxJQUFJLFVBQVUsRUFBRTtnQkFDbkIsY0FBYyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDakM7U0FDSjtRQUVELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ3RCLElBQUksVUFBVSxJQUFJLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUNuQixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7YUFDM0I7WUFDRCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsWUFBWSxFQUFFO2dCQUN0RSxXQUFXLENBQUMsR0FBRyxFQUFFO29CQUNiLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7d0JBQ3ZELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO3dCQUMxQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3hDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFZLENBQUM7d0JBQy9FLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzdFLFVBQVUsQ0FBQyxPQUFPLENBQ2QsS0FBSyxFQUNMOzRCQUNJLE1BQU0sRUFBRSxTQUFTO3lCQUNwQixFQUNELENBQUMsS0FBSyxDQUFDLENBQ1YsQ0FBQzt3QkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDekIsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLENBQUMsQ0FBQyxDQUFDO29CQUNILFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBQ3BFLGlCQUFpQixDQUFDLEtBQUssRUFBRSxlQUFpQyxDQUFDLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDSjtRQUNELElBQUksZ0JBQWdCLEVBQUU7WUFDbEIsc0JBQXNCO1lBQ3RCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUMxQjtRQUNELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQzVCLElBQUksVUFBVSxFQUFFO1lBQ1osTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDdEIsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3JCO1NBQ0o7UUFDRCxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsRUFBRTtRQUMxQixnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxVQUFVLEVBQUU7WUFDWixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckI7UUFDRCxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDO0lBRUYsU0FBUyxVQUFVLENBQUMsS0FBaUI7UUFDakMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNaLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUIsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJPQVJEX1RPX0hPU1QgfSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgaXNJblBsYWl0Qm9hcmQsIHRyYW5zZm9ybVBvaW50IH0gZnJvbSAnLi4vdXRpbHMvYm9hcmQnO1xuaW1wb3J0IHsgdG9Qb2ludCB9IGZyb20gJy4uL3V0aWxzL2RvbS9jb21tb24nO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvaW50JztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRIaXRFbGVtZW50T2ZSb290LCBnZXRTZWxlY3RlZEVsZW1lbnRzLCBpc0hpdEVsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQtZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdE5vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHsgdGhyb3R0bGVSQUYgfSBmcm9tICcuLi91dGlscy9jb21tb24nO1xuaW1wb3J0IHsgYWRkTW92aW5nRWxlbWVudHMsIHJlbW92ZU1vdmluZ0VsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvbW92aW5nLWVsZW1lbnQnO1xuaW1wb3J0IHsgTUVSR0lORyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaGlzdG9yeSc7XG5pbXBvcnQgeyBSYW5nZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aE1vdmluZyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgbW91c2Vkb3duLCBtb3VzZW1vdmUsIGdsb2JhbE1vdXNldXAsIGdsb2JhbE1vdXNlbW92ZSB9ID0gYm9hcmQ7XG5cbiAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgbGV0IG9mZnNldFkgPSAwO1xuICAgIGxldCBpc1ByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgbGV0IHN0YXJ0UG9pbnQ6IFBvaW50IHwgbnVsbDtcbiAgICBsZXQgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG5cbiAgICBib2FyZC5tb3VzZWRvd24gPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGhvc3QgPSBCT0FSRF9UT19IT1NULmdldChib2FyZCk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdHJhbnNmb3JtUG9pbnQoYm9hcmQsIHRvUG9pbnQoZXZlbnQueCwgZXZlbnQueSwgaG9zdCEpKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGFuY2hvcjogcG9pbnQsIGZvY3VzOiBwb2ludCB9IGFzIFJhbmdlO1xuICAgICAgICBsZXQgbW92YWJsZUVsZW1lbnRzID0gYm9hcmQuY2hpbGRyZW4uZmlsdGVyKGl0ZW0gPT4gYm9hcmQuaXNNb3ZhYmxlKGl0ZW0pKTtcbiAgICAgICAgaWYgKG1vdmFibGVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0YXJ0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUm9vdEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCkuZmlsdGVyKGl0ZW0gPT4gbW92YWJsZUVsZW1lbnRzLmluY2x1ZGVzKGl0ZW0pKTtcbiAgICAgICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRIaXRFbGVtZW50T2ZSb290KGJvYXJkLCBtb3ZhYmxlRWxlbWVudHMsIHJhbmdlKTtcbiAgICAgICAgICAgIGlmIChoaXRFbGVtZW50ICYmIHNlbGVjdGVkUm9vdEVsZW1lbnRzLmluY2x1ZGVzKGhpdEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBzZWxlY3RlZFJvb3RFbGVtZW50cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaGl0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzID0gW2hpdEVsZW1lbnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbW91c2Vkb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQubW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBpZiAoc3RhcnRQb2ludCAmJiBhY3RpdmVFbGVtZW50cy5sZW5ndGggJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgaWYgKCFpc1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgaXNQcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBob3N0ID0gQk9BUkRfVE9fSE9TVC5nZXQoYm9hcmQpO1xuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBob3N0ISkpO1xuICAgICAgICAgICAgb2Zmc2V0WCA9IGVuZFBvaW50WzBdIC0gc3RhcnRQb2ludFswXTtcbiAgICAgICAgICAgIG9mZnNldFkgPSBlbmRQb2ludFsxXSAtIHN0YXJ0UG9pbnRbMV07XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRCdWZmZXIgPSA1O1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKG9mZnNldFgpID4gb2Zmc2V0QnVmZmVyIHx8IE1hdGguYWJzKG9mZnNldFkpID4gb2Zmc2V0QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3R0bGVSQUYoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudHMgPSBhY3RpdmVFbGVtZW50cy5tYXAoYWN0aXZlRWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb2ludHMgPSBhY3RpdmVFbGVtZW50LnBvaW50cyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IGFjdGl2ZUVsZW1lbnQucG9pbnRzIVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYm9hcmQuY2hpbGRyZW4uZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gYWN0aXZlRWxlbWVudC5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHM6IG5ld1BvaW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoJ2VsZW1lbnQtbW92aW5nJyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZE1vdmluZ0VsZW1lbnRzKGJvYXJkLCBjdXJyZW50RWxlbWVudHMgYXMgUGxhaXRFbGVtZW50W10pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyDpmLvmraIgbW92ZSDov4fnqIvkuK3op6blj5HnlLvluIPmu5rliqjooYzkuLpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgbW91c2Vtb3ZlKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZ2xvYmFsTW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBpZiAoc3RhcnRQb2ludCkge1xuICAgICAgICAgICAgY29uc3QgaW5QbGFpdEJvYXJkRWxlbWVudCA9IGlzSW5QbGFpdEJvYXJkKGJvYXJkLCBldmVudC54LCBldmVudC55KTtcbiAgICAgICAgICAgIGlmICghaW5QbGFpdEJvYXJkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNhbmNlbE1vdmUoYm9hcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdsb2JhbE1vdXNlbW92ZShldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmdsb2JhbE1vdXNldXAgPSBldmVudCA9PiB7XG4gICAgICAgIGlzUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN0YXJ0UG9pbnQpIHtcbiAgICAgICAgICAgIGNhbmNlbE1vdmUoYm9hcmQpO1xuICAgICAgICB9XG4gICAgICAgIGdsb2JhbE1vdXNldXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYW5jZWxNb3ZlKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICBvZmZzZXRYID0gMDtcbiAgICAgICAgb2Zmc2V0WSA9IDA7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnRzID0gW107XG4gICAgICAgIHJlbW92ZU1vdmluZ0VsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZSgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59XG4iXX0=
@@ -1,53 +0,0 @@
1
- import { POINTER_BUTTON } from '../../constants';
2
- export const NS = 'http://www.w3.org/2000/svg';
3
- export function toPoint(x, y, container) {
4
- const rect = container.getBoundingClientRect();
5
- return [x - rect.x, y - rect.y];
6
- }
7
- export function createG() {
8
- const newG = document.createElementNS(NS, 'g');
9
- return newG;
10
- }
11
- export function createPath() {
12
- const newG = document.createElementNS(NS, 'path');
13
- return newG;
14
- }
15
- export function createSVG() {
16
- const svg = document.createElementNS(NS, 'svg');
17
- return svg;
18
- }
19
- export function createText(x, y, fill, textContent) {
20
- var text = document.createElementNS(NS, 'text');
21
- text.setAttribute('x', `${x}`);
22
- text.setAttribute('y', `${y}`);
23
- text.setAttribute('fill', fill);
24
- text.textContent = textContent;
25
- return text;
26
- }
27
- /**
28
- * Check if a DOM node is an element node.
29
- */
30
- export const isDOMElement = (value) => {
31
- return isDOMNode(value) && value.nodeType === 1;
32
- };
33
- /**
34
- * Check if a value is a DOM node.
35
- */
36
- export const isDOMNode = (value) => {
37
- return value instanceof window.Node;
38
- };
39
- export const hasInputOrTextareaTarget = (target) => {
40
- if (isDOMElement(target)) {
41
- if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {
42
- return true;
43
- }
44
- }
45
- return false;
46
- };
47
- export const isSecondaryPointer = (event) => {
48
- return event.button === POINTER_BUTTON.SECONDARY;
49
- };
50
- export const isMainPointer = (event) => {
51
- return event.button === POINTER_BUTTON.MAIN;
52
- };
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvZG9tL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHakQsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLDRCQUE0QixDQUFDO0FBRS9DLE1BQU0sVUFBVSxPQUFPLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxTQUFxQjtJQUMvRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU87SUFDbkIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDL0MsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVO0lBQ3RCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUztJQUNyQixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsSUFBWSxFQUFFLFdBQW1CO0lBQzlFLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDL0IsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBVSxFQUFvQixFQUFFO0lBQ3pELE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBVSxFQUFpQixFQUFFO0lBQ25ELE9BQU8sS0FBSyxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUEwQixFQUFFLEVBQUU7SUFDbkUsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDdEIsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTtZQUM3RCxPQUFPLElBQUksQ0FBQztTQUNmO0tBQ0o7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNwRCxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssY0FBYyxDQUFDLFNBQVMsQ0FBQztBQUNyRCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDL0MsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxJQUFJLENBQUM7QUFDaEQsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUE9JTlRFUl9CVVRUT04gfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BvaW50JztcblxuZXhwb3J0IGNvbnN0IE5TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRvUG9pbnQoeDogbnVtYmVyLCB5OiBudW1iZXIsIGNvbnRhaW5lcjogU1ZHRWxlbWVudCk6IFBvaW50IHtcbiAgICBjb25zdCByZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiBbeCAtIHJlY3QueCwgeSAtIHJlY3QueV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHKCkge1xuICAgIGNvbnN0IG5ld0cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICdnJyk7XG4gICAgcmV0dXJuIG5ld0c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRoKCkge1xuICAgIGNvbnN0IG5ld0cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICdwYXRoJyk7XG4gICAgcmV0dXJuIG5ld0c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTVkcoKSB7XG4gICAgY29uc3Qgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE5TLCAnc3ZnJyk7XG4gICAgcmV0dXJuIHN2Zztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRleHQoeDogbnVtYmVyLCB5OiBudW1iZXIsIGZpbGw6IHN0cmluZywgdGV4dENvbnRlbnQ6IHN0cmluZykge1xuICAgIHZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE5TLCAndGV4dCcpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCd4JywgYCR7eH1gKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgneScsIGAke3l9YCk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBmaWxsKTtcbiAgICB0ZXh0LnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XG4gICAgcmV0dXJuIHRleHQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBET00gbm9kZSBpcyBhbiBlbGVtZW50IG5vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RPTUVsZW1lbnQgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIEVsZW1lbnQgPT4ge1xuICAgIHJldHVybiBpc0RPTU5vZGUodmFsdWUpICYmIHZhbHVlLm5vZGVUeXBlID09PSAxO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgRE9NIG5vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RPTU5vZGUgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIE5vZGUgPT4ge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIHdpbmRvdy5Ob2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc0lucHV0T3JUZXh0YXJlYVRhcmdldCA9ICh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCkgPT4ge1xuICAgIGlmIChpc0RPTUVsZW1lbnQodGFyZ2V0KSkge1xuICAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlY29uZGFyeVBvaW50ZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICByZXR1cm4gZXZlbnQuYnV0dG9uID09PSBQT0lOVEVSX0JVVFRPTi5TRUNPTkRBUlk7XG59XG5cbmV4cG9ydCBjb25zdCBpc01haW5Qb2ludGVyID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIGV2ZW50LmJ1dHRvbiA9PT0gUE9JTlRFUl9CVVRUT04uTUFJTjtcbn1cbiJdfQ==
@@ -1,44 +0,0 @@
1
- import { depthFirstRecursion } from './tree';
2
- export function getRectangleByElements(board, elements, recursion) {
3
- const boundaryBox = {
4
- left: Number.MAX_VALUE,
5
- top: Number.MAX_VALUE,
6
- right: Number.NEGATIVE_INFINITY,
7
- bottom: Number.NEGATIVE_INFINITY
8
- };
9
- const calcRectangleClient = (node) => {
10
- const nodeRectangle = board.getRectangle(node);
11
- if (nodeRectangle) {
12
- boundaryBox.left = Math.min(boundaryBox.left, nodeRectangle.x);
13
- boundaryBox.top = Math.min(boundaryBox.top, nodeRectangle.y);
14
- boundaryBox.right = Math.max(boundaryBox.right, nodeRectangle.x + nodeRectangle.width);
15
- boundaryBox.bottom = Math.max(boundaryBox.bottom, nodeRectangle.y + nodeRectangle.height);
16
- }
17
- };
18
- elements.forEach(element => {
19
- if (recursion) {
20
- depthFirstRecursion(element, node => calcRectangleClient(node), node => board.isRecursion(node));
21
- }
22
- else {
23
- calcRectangleClient(element);
24
- }
25
- });
26
- if (boundaryBox.left === Number.MAX_VALUE) {
27
- return {
28
- x: 0,
29
- y: 0,
30
- width: 0,
31
- height: 0
32
- };
33
- }
34
- return {
35
- x: boundaryBox.left,
36
- y: boundaryBox.top,
37
- width: boundaryBox.right - boundaryBox.left,
38
- height: boundaryBox.bottom - boundaryBox.top
39
- };
40
- }
41
- export function getBoardRectangle(board) {
42
- return getRectangleByElements(board, board.children, true);
43
- }
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL2VsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxLQUFpQixFQUFFLFFBQXdCLEVBQUUsU0FBa0I7SUFDbEcsTUFBTSxXQUFXLEdBQUc7UUFDaEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQ3RCLEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUztRQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtRQUMvQixNQUFNLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtLQUNuQyxDQUFDO0lBRUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQWtCLEVBQUUsRUFBRTtRQUMvQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksYUFBYSxFQUFFO1lBQ2YsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9ELFdBQVcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RCxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RixXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM3RjtJQUNMLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxTQUFTLEVBQUU7WUFDWCxtQkFBbUIsQ0FDZixPQUFPLEVBQ1AsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFDakMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUNsQyxDQUFDO1NBQ0w7YUFBTTtZQUNILG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2hDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUN2QyxPQUFPO1lBQ0gsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLEtBQUssRUFBRSxDQUFDO1lBQ1IsTUFBTSxFQUFFLENBQUM7U0FDWixDQUFDO0tBQ0w7SUFFRCxPQUFPO1FBQ0gsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxJQUFJO1FBQ25CLENBQUMsRUFBRSxXQUFXLENBQUMsR0FBRztRQUNsQixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSTtRQUMzQyxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRztLQUMvQyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFpQjtJQUMvQyxPQUFPLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZGVwdGhGaXJzdFJlY3Vyc2lvbiB9IGZyb20gJy4vdHJlZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50czogUGxhaXRFbGVtZW50W10sIHJlY3Vyc2lvbjogYm9vbGVhbik6IFJlY3RhbmdsZUNsaWVudCB7XG4gICAgY29uc3QgYm91bmRhcnlCb3ggPSB7XG4gICAgICAgIGxlZnQ6IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgIHRvcDogTnVtYmVyLk1BWF9WQUxVRSxcbiAgICAgICAgcmlnaHQ6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcbiAgICAgICAgYm90dG9tOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICB9O1xuXG4gICAgY29uc3QgY2FsY1JlY3RhbmdsZUNsaWVudCA9IChub2RlOiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVJlY3RhbmdsZSA9IGJvYXJkLmdldFJlY3RhbmdsZShub2RlKTtcbiAgICAgICAgaWYgKG5vZGVSZWN0YW5nbGUpIHtcbiAgICAgICAgICAgIGJvdW5kYXJ5Qm94LmxlZnQgPSBNYXRoLm1pbihib3VuZGFyeUJveC5sZWZ0LCBub2RlUmVjdGFuZ2xlLngpO1xuICAgICAgICAgICAgYm91bmRhcnlCb3gudG9wID0gTWF0aC5taW4oYm91bmRhcnlCb3gudG9wLCBub2RlUmVjdGFuZ2xlLnkpO1xuICAgICAgICAgICAgYm91bmRhcnlCb3gucmlnaHQgPSBNYXRoLm1heChib3VuZGFyeUJveC5yaWdodCwgbm9kZVJlY3RhbmdsZS54ICsgbm9kZVJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgICAgICBib3VuZGFyeUJveC5ib3R0b20gPSBNYXRoLm1heChib3VuZGFyeUJveC5ib3R0b20sIG5vZGVSZWN0YW5nbGUueSArIG5vZGVSZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAocmVjdXJzaW9uKSB7XG4gICAgICAgICAgICBkZXB0aEZpcnN0UmVjdXJzaW9uKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgbm9kZSA9PiBjYWxjUmVjdGFuZ2xlQ2xpZW50KG5vZGUpLFxuICAgICAgICAgICAgICAgIG5vZGUgPT4gYm9hcmQuaXNSZWN1cnNpb24obm9kZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxjUmVjdGFuZ2xlQ2xpZW50KGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYm91bmRhcnlCb3gubGVmdCA9PT0gTnVtYmVyLk1BWF9WQUxVRSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgIGhlaWdodDogMFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IGJvdW5kYXJ5Qm94LmxlZnQsXG4gICAgICAgIHk6IGJvdW5kYXJ5Qm94LnRvcCxcbiAgICAgICAgd2lkdGg6IGJvdW5kYXJ5Qm94LnJpZ2h0IC0gYm91bmRhcnlCb3gubGVmdCxcbiAgICAgICAgaGVpZ2h0OiBib3VuZGFyeUJveC5ib3R0b20gLSBib3VuZGFyeUJveC50b3BcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm9hcmRSZWN0YW5nbGUoYm9hcmQ6IFBsYWl0Qm9hcmQpOiBSZWN0YW5nbGVDbGllbnQge1xuICAgIHJldHVybiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBib2FyZC5jaGlsZHJlbiwgdHJ1ZSk7XG59XG4iXX0=
@@ -1,48 +0,0 @@
1
- // https://stackoverflow.com/a/6853926/232122
2
- export function distanceBetweenPointAndSegment(x, y, x1, y1, x2, y2) {
3
- const A = x - x1;
4
- const B = y - y1;
5
- const C = x2 - x1;
6
- const D = y2 - y1;
7
- const dot = A * C + B * D;
8
- const lenSquare = C * C + D * D;
9
- let param = -1;
10
- if (lenSquare !== 0) {
11
- // in case of 0 length line
12
- param = dot / lenSquare;
13
- }
14
- let xx, yy;
15
- if (param < 0) {
16
- xx = x1;
17
- yy = y1;
18
- }
19
- else if (param > 1) {
20
- xx = x2;
21
- yy = y2;
22
- }
23
- else {
24
- xx = x1 + param * C;
25
- yy = y1 + param * D;
26
- }
27
- const dx = x - xx;
28
- const dy = y - yy;
29
- return Math.hypot(dx, dy);
30
- }
31
- export function rotate(x1, y1, x2, y2, angle) {
32
- // 𝑎′𝑥=(𝑎𝑥−𝑐𝑥)cos𝜃−(𝑎𝑦−𝑐𝑦)sin𝜃+𝑐𝑥
33
- // 𝑎′𝑦=(𝑎𝑥−𝑐𝑥)sin𝜃+(𝑎𝑦−𝑐𝑦)cos𝜃+𝑐𝑦.
34
- // https://math.stackexchange.com/questions/2204520/how-do-i-rotate-a-line-segment-in-a-specific-point-on-the-line
35
- return [(x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2];
36
- }
37
- export function distanceBetweenPointAndPoint(x1, y1, x2, y2) {
38
- const dx = x1 - x2;
39
- const dy = y1 - y2;
40
- return Math.hypot(dx, dy);
41
- }
42
- // https://stackoverflow.com/questions/5254838/calculating-distance-between-a-point-and-a-rectangular-box-nearest-point
43
- export function distanceBetweenPointAndRectangle(x, y, rect) {
44
- var dx = Math.max(rect.x - x, 0, x - (rect.x + rect.width));
45
- var dy = Math.max(rect.y - y, 0, y - (rect.y + rect.height));
46
- return Math.sqrt(dx * dx + dy * dy);
47
- }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL21hdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsNkNBQTZDO0FBQzdDLE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVU7SUFDL0csTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUVsQixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLDJCQUEyQjtRQUMzQixLQUFLLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztLQUMzQjtJQUVELElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNYLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtRQUNYLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDUixFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQ1g7U0FBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7UUFDbEIsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNSLEVBQUUsR0FBRyxFQUFFLENBQUM7S0FDWDtTQUFNO1FBQ0gsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztLQUN2QjtJQUVELE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxLQUFhO0lBQ2hGLCtDQUErQztJQUMvQyxnREFBZ0Q7SUFDaEQsa0hBQWtIO0lBQ2xILE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM1SSxDQUFDO0FBRUQsTUFBTSxVQUFVLDRCQUE0QixDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVU7SUFDdkYsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ25CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELHVIQUF1SDtBQUN2SCxNQUFNLFVBQVUsZ0NBQWdDLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxJQUFxQjtJQUN4RixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDN0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlY3RhbmdsZS1jbGllbnQnO1xuXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNjg1MzkyNi8yMzIxMjJcbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnQoeDogbnVtYmVyLCB5OiBudW1iZXIsIHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICBjb25zdCBBID0geCAtIHgxO1xuICAgIGNvbnN0IEIgPSB5IC0geTE7XG4gICAgY29uc3QgQyA9IHgyIC0geDE7XG4gICAgY29uc3QgRCA9IHkyIC0geTE7XG5cbiAgICBjb25zdCBkb3QgPSBBICogQyArIEIgKiBEO1xuICAgIGNvbnN0IGxlblNxdWFyZSA9IEMgKiBDICsgRCAqIEQ7XG4gICAgbGV0IHBhcmFtID0gLTE7XG4gICAgaWYgKGxlblNxdWFyZSAhPT0gMCkge1xuICAgICAgICAvLyBpbiBjYXNlIG9mIDAgbGVuZ3RoIGxpbmVcbiAgICAgICAgcGFyYW0gPSBkb3QgLyBsZW5TcXVhcmU7XG4gICAgfVxuXG4gICAgbGV0IHh4LCB5eTtcbiAgICBpZiAocGFyYW0gPCAwKSB7XG4gICAgICAgIHh4ID0geDE7XG4gICAgICAgIHl5ID0geTE7XG4gICAgfSBlbHNlIGlmIChwYXJhbSA+IDEpIHtcbiAgICAgICAgeHggPSB4MjtcbiAgICAgICAgeXkgPSB5MjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB4eCA9IHgxICsgcGFyYW0gKiBDO1xuICAgICAgICB5eSA9IHkxICsgcGFyYW0gKiBEO1xuICAgIH1cblxuICAgIGNvbnN0IGR4ID0geCAtIHh4O1xuICAgIGNvbnN0IGR5ID0geSAtIHl5O1xuICAgIHJldHVybiBNYXRoLmh5cG90KGR4LCBkeSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgYW5nbGU6IG51bWJlcikge1xuICAgIC8vIPCdkY7igLLwnZGlPSjwnZGO8J2RpeKIkvCdkZDwnZGlKWNvc/CdnIPiiJIo8J2RjvCdkabiiJLwnZGQ8J2RpilzaW7wnZyDK/CdkZDwnZGlXG4gICAgLy8g8J2RjuKAsvCdkaY9KPCdkY7wnZGl4oiS8J2RkPCdkaUpc2lu8J2cgyso8J2RjvCdkabiiJLwnZGQ8J2Rpiljb3PwnZyDK/CdkZDwnZGmLlxuICAgIC8vIGh0dHBzOi8vbWF0aC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMjIwNDUyMC9ob3ctZG8taS1yb3RhdGUtYS1saW5lLXNlZ21lbnQtaW4tYS1zcGVjaWZpYy1wb2ludC1vbi10aGUtbGluZVxuICAgIHJldHVybiBbKHgxIC0geDIpICogTWF0aC5jb3MoYW5nbGUpIC0gKHkxIC0geTIpICogTWF0aC5zaW4oYW5nbGUpICsgeDIsICh4MSAtIHgyKSAqIE1hdGguc2luKGFuZ2xlKSArICh5MSAtIHkyKSAqIE1hdGguY29zKGFuZ2xlKSArIHkyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgIGNvbnN0IGR4ID0geDEgLSB4MjtcbiAgICBjb25zdCBkeSA9IHkxIC0geTI7XG4gICAgcmV0dXJuIE1hdGguaHlwb3QoZHgsIGR5KTtcbn1cblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTI1NDgzOC9jYWxjdWxhdGluZy1kaXN0YW5jZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtcmVjdGFuZ3VsYXItYm94LW5lYXJlc3QtcG9pbnRcbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFJlY3RhbmdsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgcmVjdDogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgdmFyIGR4ID0gTWF0aC5tYXgocmVjdC54IC0geCwgMCwgeCAtIChyZWN0LnggKyByZWN0LndpZHRoKSk7XG4gICAgdmFyIGR5ID0gTWF0aC5tYXgocmVjdC55IC0geSwgMCwgeSAtIChyZWN0LnkgKyByZWN0LmhlaWdodCkpO1xuICAgIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xufVxuIl19