@plait/common 0.1.0-next.4 → 0.1.0-next.6

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 (40) hide show
  1. package/constants/default.d.ts +1 -0
  2. package/esm2022/constants/default.mjs +2 -1
  3. package/esm2022/generators/active.generator.mjs +46 -0
  4. package/esm2022/generators/generator.mjs +41 -0
  5. package/esm2022/generators/index.mjs +3 -0
  6. package/esm2022/plugins/index.mjs +2 -1
  7. package/esm2022/plugins/text-options.mjs +2 -0
  8. package/esm2022/public-api.mjs +3 -3
  9. package/esm2022/shapes/common.mjs +14 -0
  10. package/esm2022/shapes/index.mjs +2 -0
  11. package/esm2022/transforms/index.mjs +2 -5
  12. package/esm2022/utils/creation-mode.mjs +19 -0
  13. package/esm2022/utils/direction.mjs +59 -0
  14. package/esm2022/utils/hot-key.mjs +5 -1
  15. package/esm2022/utils/index.mjs +3 -1
  16. package/esm2022/utils/line-path.mjs +18 -45
  17. package/fesm2022/plait-common.mjs +98 -63
  18. package/fesm2022/plait-common.mjs.map +1 -1
  19. package/package.json +1 -1
  20. package/plugins/index.d.ts +1 -0
  21. package/plugins/text-options.d.ts +5 -0
  22. package/public-api.d.ts +2 -2
  23. package/transforms/index.d.ts +1 -3
  24. package/utils/creation-mode.d.ts +9 -0
  25. package/utils/direction.d.ts +26 -0
  26. package/utils/hot-key.d.ts +1 -0
  27. package/utils/index.d.ts +2 -0
  28. package/utils/line-path.d.ts +7 -8
  29. package/esm2022/generator/active.generator.mjs +0 -46
  30. package/esm2022/generator/generator.mjs +0 -41
  31. package/esm2022/generator/index.mjs +0 -3
  32. package/esm2022/shape/common.mjs +0 -14
  33. package/esm2022/shape/index.mjs +0 -2
  34. package/esm2022/transforms/element.mjs +0 -17
  35. package/transforms/element.d.ts +0 -2
  36. /package/{generator → generators}/active.generator.d.ts +0 -0
  37. /package/{generator → generators}/generator.d.ts +0 -0
  38. /package/{generator → generators}/index.d.ts +0 -0
  39. /package/{shape → shapes}/common.d.ts +0 -0
  40. /package/{shape → shapes}/index.d.ts +0 -0
@@ -1,3 +1,4 @@
1
1
  export declare const BASE = 4;
2
2
  export declare const PRIMARY_COLOR = "#6698FF";
3
3
  export declare const RESIZE_HANDLE_DIAMETER = 8;
4
+ export declare const WithTextPluginKey = "plait-text-plugin-key";
@@ -1,4 +1,5 @@
1
1
  export const BASE = 4;
2
2
  export const PRIMARY_COLOR = '#6698FF';
3
3
  export const RESIZE_HANDLE_DIAMETER = 8;
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29uc3RhbnRzL2RlZmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBCQVNFID0gNDtcbmV4cG9ydCBjb25zdCBQUklNQVJZX0NPTE9SID0gJyM2Njk4RkYnO1xuZXhwb3J0IGNvbnN0IFJFU0laRV9IQU5ETEVfRElBTUVURVIgPSA4OyJdfQ==
4
+ export const WithTextPluginKey = 'plait-text-plugin-key';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29uc3RhbnRzL2RlZmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBCQVNFID0gNDtcbmV4cG9ydCBjb25zdCBQUklNQVJZX0NPTE9SID0gJyM2Njk4RkYnO1xuZXhwb3J0IGNvbnN0IFJFU0laRV9IQU5ETEVfRElBTUVURVIgPSA4O1xuZXhwb3J0IGNvbnN0IFdpdGhUZXh0UGx1Z2luS2V5ID0gJ3BsYWl0LXRleHQtcGx1Z2luLWtleSc7XG4iXX0=
@@ -0,0 +1,46 @@
1
+ import { PlaitBoard, RectangleClient, createG, drawCircle, drawRectangle } from '@plait/core';
2
+ import { Generator } from './generator';
3
+ import { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../constants/default';
4
+ export class ActiveGenerator extends Generator {
5
+ constructor(board, options) {
6
+ super(board, options);
7
+ this.board = board;
8
+ this.options = options;
9
+ this.hasResizeHandle = false;
10
+ }
11
+ canDraw(element, data) {
12
+ if (data.selected) {
13
+ return true;
14
+ }
15
+ else {
16
+ return false;
17
+ }
18
+ }
19
+ baseDraw(element, data) {
20
+ const activeG = createG();
21
+ const rectangle = this.options.getRectangle(element);
22
+ // add 0.1 to avoid white gap
23
+ const offset = (this.options.getStrokeWidthByElement(element) + this.options.getStrokeWidth()) / 2 - 0.1;
24
+ const activeRectangle = RectangleClient.getOutlineRectangle(rectangle, -offset);
25
+ const strokeG = drawRectangle(this.board, activeRectangle, {
26
+ stroke: PRIMARY_COLOR,
27
+ strokeWidth: this.options.getStrokeWidth()
28
+ });
29
+ activeG.append(strokeG);
30
+ if (this.options.hasResizeHandle()) {
31
+ this.hasResizeHandle = true;
32
+ // resize handle
33
+ const options = { stroke: '#999999', strokeWidth: 1, fill: '#FFF', fillStyle: 'solid' };
34
+ const leftTopHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x, activeRectangle.y], RESIZE_HANDLE_DIAMETER, options);
35
+ const rightTopHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x + activeRectangle.width, activeRectangle.y], RESIZE_HANDLE_DIAMETER, options);
36
+ const rightBottomHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height], RESIZE_HANDLE_DIAMETER, options);
37
+ const leftBottomHandleG = drawCircle(PlaitBoard.getRoughSVG(this.board), [activeRectangle.x, activeRectangle.y + activeRectangle.height], RESIZE_HANDLE_DIAMETER, options);
38
+ activeG.append(...[leftTopHandleG, rightTopHandleG, rightBottomHandleG, leftBottomHandleG]);
39
+ }
40
+ else {
41
+ this.hasResizeHandle = false;
42
+ }
43
+ return activeG;
44
+ }
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLmdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvZ2VuZXJhdG9ycy9hY3RpdmUuZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXVCLGVBQWUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWM3RSxNQUFNLE9BQU8sZUFBdUQsU0FBUSxTQUkzRTtJQUdHLFlBQW1CLEtBQWlCLEVBQVMsT0FBa0M7UUFDM0UsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQURQLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQUYvRSxvQkFBZSxHQUFHLEtBQUssQ0FBQztJQUl4QixDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQVUsRUFBRSxJQUE4QjtRQUM5QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQztTQUNmO2FBQU07WUFDSCxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNMLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBVSxFQUFFLElBQThCO1FBQy9DLE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQzFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXJELDZCQUE2QjtRQUM3QixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDekcsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhGLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRTtZQUN2RCxNQUFNLEVBQUUsYUFBYTtZQUNyQixXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7U0FDN0MsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsZ0JBQWdCO1lBQ2hCLE1BQU0sT0FBTyxHQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2pHLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FDN0IsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ2xDLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQ3RDLHNCQUFzQixFQUN0QixPQUFPLENBQ1YsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FDOUIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ2xDLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFDOUQsc0JBQXNCLEVBQ3RCLE9BQU8sQ0FDVixDQUFDO1lBQ0YsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQ2pDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNsQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFDdkYsc0JBQXNCLEVBQ3RCLE9BQU8sQ0FDVixDQUFDO1lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQ2hDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNsQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQy9ELHNCQUFzQixFQUN0QixPQUFPLENBQ1YsQ0FBQztZQUNGLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1NBQy9GO2FBQU07WUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztTQUNoQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCwgY3JlYXRlRywgZHJhd0NpcmNsZSwgZHJhd1JlY3RhbmdsZSB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEdlbmVyYXRvciB9IGZyb20gJy4vZ2VuZXJhdG9yJztcbmltcG9ydCB7IFBSSU1BUllfQ09MT1IsIFJFU0laRV9IQU5ETEVfRElBTUVURVIgfSBmcm9tICcuLi9jb25zdGFudHMvZGVmYXVsdCc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlR2VuZXJhdG9yRXh0cmFEYXRhIHtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3RpdmVHZW5lcmF0b3JPcHRpb25zPFQ+IHtcbiAgICBnZXRSZWN0YW5nbGU6IChlbGVtZW50OiBUKSA9PiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgZ2V0U3Ryb2tlV2lkdGg6ICgpID0+IG51bWJlcjtcbiAgICBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudDogKGVsZW1lbnQ6IFQpID0+IG51bWJlcjtcbiAgICBoYXNSZXNpemVIYW5kbGU6ICgpID0+IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmVHZW5lcmF0b3I8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudD4gZXh0ZW5kcyBHZW5lcmF0b3I8XG4gICAgVCxcbiAgICBBY3RpdmVHZW5lcmF0b3JFeHRyYURhdGEsXG4gICAgQWN0aXZlR2VuZXJhdG9yT3B0aW9uczxUPlxuPiB7XG4gICAgaGFzUmVzaXplSGFuZGxlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgYm9hcmQ6IFBsYWl0Qm9hcmQsIHB1YmxpYyBvcHRpb25zOiBBY3RpdmVHZW5lcmF0b3JPcHRpb25zPFQ+KSB7XG4gICAgICAgIHN1cGVyKGJvYXJkLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjYW5EcmF3KGVsZW1lbnQ6IFQsIGRhdGE6IEFjdGl2ZUdlbmVyYXRvckV4dHJhRGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZGF0YS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiYXNlRHJhdyhlbGVtZW50OiBULCBkYXRhOiBBY3RpdmVHZW5lcmF0b3JFeHRyYURhdGEpOiBTVkdHRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUcgPSBjcmVhdGVHKCk7XG4gICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IHRoaXMub3B0aW9ucy5nZXRSZWN0YW5nbGUoZWxlbWVudCk7XG5cbiAgICAgICAgLy8gYWRkIDAuMSB0byBhdm9pZCB3aGl0ZSBnYXBcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHRoaXMub3B0aW9ucy5nZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KSArIHRoaXMub3B0aW9ucy5nZXRTdHJva2VXaWR0aCgpKSAvIDIgLSAwLjE7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRPdXRsaW5lUmVjdGFuZ2xlKHJlY3RhbmdsZSwgLW9mZnNldCk7XG5cbiAgICAgICAgY29uc3Qgc3Ryb2tlRyA9IGRyYXdSZWN0YW5nbGUodGhpcy5ib2FyZCwgYWN0aXZlUmVjdGFuZ2xlLCB7XG4gICAgICAgICAgICBzdHJva2U6IFBSSU1BUllfQ09MT1IsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5vcHRpb25zLmdldFN0cm9rZVdpZHRoKClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWN0aXZlRy5hcHBlbmQoc3Ryb2tlRyk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFzUmVzaXplSGFuZGxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzUmVzaXplSGFuZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIHJlc2l6ZSBoYW5kbGVcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnMgPSB7IHN0cm9rZTogJyM5OTk5OTknLCBzdHJva2VXaWR0aDogMSwgZmlsbDogJyNGRkYnLCBmaWxsU3R5bGU6ICdzb2xpZCcgfTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRUb3BIYW5kbGVHID0gZHJhd0NpcmNsZShcbiAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLFxuICAgICAgICAgICAgICAgIFthY3RpdmVSZWN0YW5nbGUueCwgYWN0aXZlUmVjdGFuZ2xlLnldLFxuICAgICAgICAgICAgICAgIFJFU0laRV9IQU5ETEVfRElBTUVURVIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0VG9wSGFuZGxlRyA9IGRyYXdDaXJjbGUoXG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKSxcbiAgICAgICAgICAgICAgICBbYWN0aXZlUmVjdGFuZ2xlLnggKyBhY3RpdmVSZWN0YW5nbGUud2lkdGgsIGFjdGl2ZVJlY3RhbmdsZS55XSxcbiAgICAgICAgICAgICAgICBSRVNJWkVfSEFORExFX0RJQU1FVEVSLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCByaWdodEJvdHRvbUhhbmRsZUcgPSBkcmF3Q2lyY2xlKFxuICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCksXG4gICAgICAgICAgICAgICAgW2FjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoLCBhY3RpdmVSZWN0YW5nbGUueSArIGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHRdLFxuICAgICAgICAgICAgICAgIFJFU0laRV9IQU5ETEVfRElBTUVURVIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRCb3R0b21IYW5kbGVHID0gZHJhd0NpcmNsZShcbiAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLFxuICAgICAgICAgICAgICAgIFthY3RpdmVSZWN0YW5nbGUueCwgYWN0aXZlUmVjdGFuZ2xlLnkgKyBhY3RpdmVSZWN0YW5nbGUuaGVpZ2h0XSxcbiAgICAgICAgICAgICAgICBSRVNJWkVfSEFORExFX0RJQU1FVEVSLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhY3RpdmVHLmFwcGVuZCguLi5bbGVmdFRvcEhhbmRsZUcsIHJpZ2h0VG9wSGFuZGxlRywgcmlnaHRCb3R0b21IYW5kbGVHLCBsZWZ0Qm90dG9tSGFuZGxlR10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYXNSZXNpemVIYW5kbGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aXZlRztcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,41 @@
1
+ export class Generator {
2
+ constructor(board, options) {
3
+ this.board = board;
4
+ }
5
+ draw(element, parentG, data) {
6
+ if (this.canDraw && this.canDraw(element, data)) {
7
+ const g = this.baseDraw(element, data);
8
+ if (g) {
9
+ if (this.g) {
10
+ this.g.replaceWith(g);
11
+ }
12
+ else {
13
+ parentG.appendChild(g);
14
+ }
15
+ this.g = g;
16
+ }
17
+ else {
18
+ this.destroy();
19
+ }
20
+ if (hasAfterDraw(this)) {
21
+ this.afterDraw(element);
22
+ }
23
+ }
24
+ else {
25
+ this.destroy();
26
+ }
27
+ }
28
+ destroy() {
29
+ if (this.g) {
30
+ this.g.remove();
31
+ this.g = undefined;
32
+ }
33
+ }
34
+ }
35
+ export function hasAfterDraw(value) {
36
+ if (value.afterDraw) {
37
+ return true;
38
+ }
39
+ return false;
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLE9BQWdCLFNBQVM7SUFPM0IsWUFBc0IsS0FBaUIsRUFBRSxPQUFXO1FBQTlCLFVBQUssR0FBTCxLQUFLLENBQVk7SUFBZ0IsQ0FBQztJQUV4RCxJQUFJLENBQUMsT0FBVSxFQUFFLE9BQW9CLEVBQUUsSUFBUTtRQUMzQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDN0MsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEVBQUU7Z0JBQ0gsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO29CQUNSLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6QjtxQkFBTTtvQkFDSCxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxQjtnQkFDRCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNkO2lCQUFNO2dCQUNILElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNsQjtZQUNELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzNCO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQjtJQUNMLENBQUM7SUFNRCxPQUFPO1FBQ0gsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ1IsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztTQUN0QjtJQUNMLENBQUM7Q0FDSjtBQU1ELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBVTtJQUNuQyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7UUFDakIsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdG9yRXh0cmFEYXRhIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdG9yT3B0aW9ucyB7fVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJhdG9yPFxuICAgIFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQsXG4gICAgSyBleHRlbmRzIEdlbmVyYXRvckV4dHJhRGF0YSA9IEdlbmVyYXRvckV4dHJhRGF0YSxcbiAgICBWIGV4dGVuZHMgR2VuZXJhdG9yT3B0aW9ucyA9IEdlbmVyYXRvck9wdGlvbnNcbj4ge1xuICAgIGc/OiBTVkdHRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBib2FyZDogUGxhaXRCb2FyZCwgb3B0aW9ucz86IFYpIHt9XG5cbiAgICBkcmF3KGVsZW1lbnQ6IFQsIHBhcmVudEc6IFNWR0dFbGVtZW50LCBkYXRhPzogSykge1xuICAgICAgICBpZiAodGhpcy5jYW5EcmF3ICYmIHRoaXMuY2FuRHJhdyhlbGVtZW50LCBkYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgZyA9IHRoaXMuYmFzZURyYXcoZWxlbWVudCwgZGF0YSk7XG4gICAgICAgICAgICBpZiAoZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nLnJlcGxhY2VXaXRoKGcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEcuYXBwZW5kQ2hpbGQoZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZyA9IGc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpOyAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNBZnRlckRyYXcodGhpcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyRHJhdyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgY2FuRHJhdyhlbGVtZW50OiBULCBkYXRhPzogSyk6IGJvb2xlYW47XG5cbiAgICBhYnN0cmFjdCBiYXNlRHJhdyhlbGVtZW50OiBULCBkYXRhPzogSyk6IFNWR0dFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZykge1xuICAgICAgICAgICAgdGhpcy5nLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5nID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFmdGVyRHJhdzxUIGV4dGVuZHMgUGxhaXRFbGVtZW50ID0gUGxhaXRFbGVtZW50PiB7XG4gICAgYWZ0ZXJEcmF3KGVsZW1lbnQ6IFQpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzQWZ0ZXJEcmF3KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBZnRlckRyYXcge1xuICAgIGlmICh2YWx1ZS5hZnRlckRyYXcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './generator';
2
+ export * from './active.generator';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2dlbmVyYXRvcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZ2VuZXJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZlLmdlbmVyYXRvcic7XG4iXX0=
@@ -1,2 +1,3 @@
1
1
  export * from './with-resize';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3BsdWdpbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3dpdGgtcmVzaXplJztcbiJdfQ==
2
+ export * from './text-options';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3BsdWdpbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vd2l0aC1yZXNpemUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0LW9wdGlvbnMnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9wbHVnaW5zL3RleHQtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2l0aFBsdWdpbk9wdGlvbnMgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBUZXh0UGx1Z2luIH0gZnJvbSAnQHBsYWl0L3RleHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhUZXh0T3B0aW9ucyBleHRlbmRzIFdpdGhQbHVnaW5PcHRpb25zIHtcbiAgICB0ZXh0UGx1Z2lucz86IFRleHRQbHVnaW5bXTtcbn1cbiJdfQ==
@@ -2,9 +2,9 @@
2
2
  * Public API Surface of utils
3
3
  */
4
4
  export * from './constants';
5
- export * from './generator';
5
+ export * from './generators';
6
6
  export * from './transforms';
7
- export * from './shape';
7
+ export * from './shapes';
8
8
  export * from './plugins';
9
9
  export * from './utils';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB1dGlsc1xuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZ2VuZXJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNmb3Jtcyc7XG5leHBvcnQgKiBmcm9tICcuL3NoYXBlJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2lucyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbiJdfQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB1dGlsc1xuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZ2VuZXJhdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zZm9ybXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zaGFwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW5zJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuIl19
@@ -0,0 +1,14 @@
1
+ export const normalizeShapePoints = (points, shift = false) => {
2
+ let start = points[0];
3
+ let end = points[1];
4
+ if (shift) {
5
+ const width = Math.abs(start[0] - end[0]);
6
+ const height = Math.abs(start[1] - end[1]);
7
+ const edge = Math.max(height, width);
8
+ end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];
9
+ }
10
+ const leftTopPoint = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];
11
+ let rightBottomPoint = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];
12
+ return [leftTopPoint, rightBottomPoint];
13
+ };
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9zaGFwZXMvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBc0IsRUFBRSxRQUFpQixLQUFLLEVBQWtCLEVBQUU7SUFDbkcsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixJQUFJLEtBQUssRUFBRTtRQUNQLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUN4RztJQUVELE1BQU0sWUFBWSxHQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixJQUFJLGdCQUFnQixHQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RixPQUFPLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVTaGFwZVBvaW50cyA9IChwb2ludHM6IFtQb2ludCwgUG9pbnRdLCBzaGlmdDogYm9vbGVhbiA9IGZhbHNlKTogW1BvaW50LCBQb2ludF0gPT4ge1xuICAgIGxldCBzdGFydCA9IHBvaW50c1swXTtcbiAgICBsZXQgZW5kID0gcG9pbnRzWzFdO1xuICAgIGlmIChzaGlmdCkge1xuICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGguYWJzKHN0YXJ0WzBdIC0gZW5kWzBdKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5hYnMoc3RhcnRbMV0gLSBlbmRbMV0pO1xuICAgICAgICBjb25zdCBlZGdlID0gTWF0aC5tYXgoaGVpZ2h0LCB3aWR0aCk7XG4gICAgICAgIGVuZCA9IFtzdGFydFswXSArIChlbmRbMF0gPiBzdGFydFswXSA/IGVkZ2UgOiAtZWRnZSksIHN0YXJ0WzFdICsgKGVuZFsxXSA+IHN0YXJ0WzFdID8gZWRnZSA6IC1lZGdlKV07XG4gICAgfVxuXG4gICAgY29uc3QgbGVmdFRvcFBvaW50OiBQb2ludCA9IFtNYXRoLm1pbihzdGFydFswXSwgZW5kWzBdKSwgTWF0aC5taW4oc3RhcnRbMV0sIGVuZFsxXSldO1xuICAgIGxldCByaWdodEJvdHRvbVBvaW50OiBQb2ludCA9IFtNYXRoLm1heChzdGFydFswXSwgZW5kWzBdKSwgTWF0aC5tYXgoc3RhcnRbMV0sIGVuZFsxXSldO1xuXG4gICAgcmV0dXJuIFtsZWZ0VG9wUG9pbnQsIHJpZ2h0Qm90dG9tUG9pbnRdO1xufTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './common';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3NoYXBlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbiJdfQ==
@@ -1,5 +1,2 @@
1
- import { removeElements } from './element';
2
- export const CommonTransforms = {
3
- removeElements
4
- };
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3RyYW5zZm9ybXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM1QixjQUFjO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW1vdmVFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5cbmV4cG9ydCBjb25zdCBDb21tb25UcmFuc2Zvcm1zID0ge1xuICAgIHJlbW92ZUVsZW1lbnRzXG59O1xuIl19
1
+ export const CommonTransforms = {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3RyYW5zZm9ybXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsRUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBDb21tb25UcmFuc2Zvcm1zID0ge1xufTtcbiJdfQ==
@@ -0,0 +1,19 @@
1
+ export var BoardCreationMode;
2
+ (function (BoardCreationMode) {
3
+ BoardCreationMode["dnd"] = "dnd";
4
+ BoardCreationMode["drawing"] = "drawing";
5
+ })(BoardCreationMode || (BoardCreationMode = {}));
6
+ const BOARD_TO_CREATION_MODE = new WeakMap();
7
+ export const getCreationMode = (board) => {
8
+ return BOARD_TO_CREATION_MODE.get(board);
9
+ };
10
+ export const setCreationMode = (board, mode) => {
11
+ BOARD_TO_CREATION_MODE.set(board, mode);
12
+ };
13
+ export const isDndMode = (board) => {
14
+ return getCreationMode(board) === BoardCreationMode.dnd;
15
+ };
16
+ export const isDrawingMode = (board) => {
17
+ return getCreationMode(board) === BoardCreationMode.drawing;
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRpb24tbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvY3JlYXRpb24tbW9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQU4sSUFBWSxpQkFHWDtBQUhELFdBQVksaUJBQWlCO0lBQ3pCLGdDQUFhLENBQUE7SUFDYix3Q0FBcUIsQ0FBQTtBQUN6QixDQUFDLEVBSFcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQUc1QjtBQUVELE1BQU0sc0JBQXNCLEdBQTJDLElBQUksT0FBTyxFQUFFLENBQUM7QUFFckYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ2pELE9BQU8sc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQWlCLEVBQUUsSUFBdUIsRUFBRSxFQUFFO0lBQzFFLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzNDLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLGlCQUFpQixDQUFDLEdBQUcsQ0FBQztBQUM1RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDL0MsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssaUJBQWlCLENBQUMsT0FBTyxDQUFDO0FBQ2hFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5cbmV4cG9ydCBlbnVtIEJvYXJkQ3JlYXRpb25Nb2RlIHtcbiAgICAnZG5kJyA9ICdkbmQnLFxuICAgICdkcmF3aW5nJyA9ICdkcmF3aW5nJ1xufVxuXG5jb25zdCBCT0FSRF9UT19DUkVBVElPTl9NT0RFOiBXZWFrTWFwPFBsYWl0Qm9hcmQsIEJvYXJkQ3JlYXRpb25Nb2RlPiA9IG5ldyBXZWFrTWFwKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRDcmVhdGlvbk1vZGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gQk9BUkRfVE9fQ1JFQVRJT05fTU9ERS5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldENyZWF0aW9uTW9kZSA9IChib2FyZDogUGxhaXRCb2FyZCwgbW9kZTogQm9hcmRDcmVhdGlvbk1vZGUpID0+IHtcbiAgICBCT0FSRF9UT19DUkVBVElPTl9NT0RFLnNldChib2FyZCwgbW9kZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEbmRNb2RlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIGdldENyZWF0aW9uTW9kZShib2FyZCkgPT09IEJvYXJkQ3JlYXRpb25Nb2RlLmRuZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RyYXdpbmdNb2RlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIGdldENyZWF0aW9uTW9kZShib2FyZCkgPT09IEJvYXJkQ3JlYXRpb25Nb2RlLmRyYXdpbmc7XG59O1xuIl19
@@ -0,0 +1,59 @@
1
+ import { distanceBetweenPointAndPoint } from '@plait/core';
2
+ export var Direction;
3
+ (function (Direction) {
4
+ Direction["left"] = "left";
5
+ Direction["top"] = "top";
6
+ Direction["right"] = "right";
7
+ Direction["bottom"] = "bottom";
8
+ })(Direction || (Direction = {}));
9
+ const handleDirectionFactors = {
10
+ [Direction.left]: { x: -1, y: 0 },
11
+ [Direction.right]: { x: 1, y: 0 },
12
+ [Direction.top]: { x: 0, y: -1 },
13
+ [Direction.bottom]: { x: 0, y: 1 }
14
+ };
15
+ export function getDirectionByPoint(point, defaultDirection) {
16
+ if (point[0] === 0) {
17
+ return Direction.left;
18
+ }
19
+ if (point[0] === 1) {
20
+ return Direction.right;
21
+ }
22
+ if (point[1] === 0) {
23
+ return Direction.top;
24
+ }
25
+ if (point[1] === 1) {
26
+ return Direction.bottom;
27
+ }
28
+ return defaultDirection;
29
+ }
30
+ export function getDirectionBetweenPointAndPoint(source, target) {
31
+ if (source[0] === target[0]) {
32
+ if (source[1] >= target[1]) {
33
+ return Direction.top;
34
+ }
35
+ else {
36
+ return Direction.bottom;
37
+ }
38
+ }
39
+ if (source[1] === target[1]) {
40
+ if (source[0] >= target[0]) {
41
+ return Direction.left;
42
+ }
43
+ else {
44
+ return Direction.right;
45
+ }
46
+ }
47
+ throw new Error('can not match direction');
48
+ }
49
+ export function getDirectionFactor(direction) {
50
+ return handleDirectionFactors[direction];
51
+ }
52
+ export function getFactorByPoints(source, target) {
53
+ const distance = distanceBetweenPointAndPoint(...source, ...target);
54
+ return {
55
+ x: (target[0] - source[0]) / distance,
56
+ y: (target[1] - source[1]) / distance
57
+ };
58
+ }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9kaXJlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFTLDRCQUE0QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxFLE1BQU0sQ0FBTixJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDakIsMEJBQWEsQ0FBQTtJQUNiLHdCQUFXLENBQUE7SUFDWCw0QkFBZSxDQUFBO0lBQ2YsOEJBQWlCLENBQUE7QUFDckIsQ0FBQyxFQUxXLFNBQVMsS0FBVCxTQUFTLFFBS3BCO0FBRUQsTUFBTSxzQkFBc0IsR0FBRztJQUMzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDaEMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7Q0FDckMsQ0FBQztBQUVGLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFZLEVBQUUsZ0JBQTJCO0lBQ3pFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNoQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7S0FDekI7SUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDO0tBQzFCO0lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQztLQUN4QjtJQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNoQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7S0FDM0I7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0NBQWdDLENBQUMsTUFBYSxFQUFFLE1BQWE7SUFDekUsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3pCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUM7U0FDeEI7YUFBTTtZQUNILE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQztTQUMzQjtLQUNKO0lBQ0QsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3pCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7U0FDekI7YUFBTTtZQUNILE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQztTQUMxQjtLQUNKO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsU0FBb0I7SUFDbkQsT0FBTyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQWEsRUFBRSxNQUFhO0lBQzFELE1BQU0sUUFBUSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDcEUsT0FBTztRQUNILENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRO1FBQ3JDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRO0tBQ3hDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQsIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5cbmV4cG9ydCBlbnVtIERpcmVjdGlvbiB7XG4gICAgbGVmdCA9ICdsZWZ0JyxcbiAgICB0b3AgPSAndG9wJyxcbiAgICByaWdodCA9ICdyaWdodCcsXG4gICAgYm90dG9tID0gJ2JvdHRvbSdcbn1cblxuY29uc3QgaGFuZGxlRGlyZWN0aW9uRmFjdG9ycyA9IHtcbiAgICBbRGlyZWN0aW9uLmxlZnRdOiB7IHg6IC0xLCB5OiAwIH0sXG4gICAgW0RpcmVjdGlvbi5yaWdodF06IHsgeDogMSwgeTogMCB9LFxuICAgIFtEaXJlY3Rpb24udG9wXTogeyB4OiAwLCB5OiAtMSB9LFxuICAgIFtEaXJlY3Rpb24uYm90dG9tXTogeyB4OiAwLCB5OiAxIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJlY3Rpb25CeVBvaW50KHBvaW50OiBQb2ludCwgZGVmYXVsdERpcmVjdGlvbjogRGlyZWN0aW9uKSB7XG4gICAgaWYgKHBvaW50WzBdID09PSAwKSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24ubGVmdDtcbiAgICB9XG4gICAgaWYgKHBvaW50WzBdID09PSAxKSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24ucmlnaHQ7XG4gICAgfVxuICAgIGlmIChwb2ludFsxXSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnRvcDtcbiAgICB9XG4gICAgaWYgKHBvaW50WzFdID09PSAxKSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24uYm90dG9tO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdERpcmVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpcmVjdGlvbkJldHdlZW5Qb2ludEFuZFBvaW50KHNvdXJjZTogUG9pbnQsIHRhcmdldDogUG9pbnQpIHtcbiAgICBpZiAoc291cmNlWzBdID09PSB0YXJnZXRbMF0pIHtcbiAgICAgICAgaWYgKHNvdXJjZVsxXSA+PSB0YXJnZXRbMV0pIHtcbiAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24udG9wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5ib3R0b207XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNvdXJjZVsxXSA9PT0gdGFyZ2V0WzFdKSB7XG4gICAgICAgIGlmIChzb3VyY2VbMF0gPj0gdGFyZ2V0WzBdKSB7XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmxlZnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnJpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignY2FuIG5vdCBtYXRjaCBkaXJlY3Rpb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpcmVjdGlvbkZhY3RvcihkaXJlY3Rpb246IERpcmVjdGlvbikge1xuICAgIHJldHVybiBoYW5kbGVEaXJlY3Rpb25GYWN0b3JzW2RpcmVjdGlvbl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGYWN0b3JCeVBvaW50cyhzb3VyY2U6IFBvaW50LCB0YXJnZXQ6IFBvaW50KSB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLnNvdXJjZSwgLi4udGFyZ2V0KTtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiAodGFyZ2V0WzBdIC0gc291cmNlWzBdKSAvIGRpc3RhbmNlLFxuICAgICAgICB5OiAodGFyZ2V0WzFdIC0gc291cmNlWzFdKSAvIGRpc3RhbmNlXG4gICAgfTtcbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { hotkeys } from '@plait/core';
1
2
  import { isKeyHotkey } from 'is-hotkey';
2
3
  export function isVirtualKey(e) {
3
4
  const isMod = e.ctrlKey || e.metaKey;
@@ -22,4 +23,7 @@ export const isEnterHotkey = (event) => {
22
23
  export const isSpaceHotkey = (event) => {
23
24
  return event.code === 'Space';
24
25
  };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LWtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvaG90LWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXhDLE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBZ0I7SUFDekMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDdkQsT0FBTyxVQUFVLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDO0FBQ3ZGLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7SUFDbkQsT0FBTyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUNoRCxPQUFPLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUNsRCxPQUFPLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDO0FBQ2pDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUNsRCxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO0FBQ2xDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzS2V5SG90a2V5IH0gZnJvbSAnaXMtaG90a2V5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbEtleShlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgaXNNb2QgPSBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5O1xuICAgIGNvbnN0IGlzQWx0ID0gaXNLZXlIb3RrZXkoJ2FsdCcsIGUpO1xuICAgIGNvbnN0IGlzU2hpZnQgPSBpc0tleUhvdGtleSgnc2hpZnQnLCBlKTtcbiAgICBjb25zdCBpc0NhcHNMb2NrID0gZS5rZXkuaW5jbHVkZXMoJ0NhcHNMb2NrJyk7XG4gICAgY29uc3QgaXNUYWIgPSBlLmtleS5pbmNsdWRlcygnVGFiJyk7XG4gICAgY29uc3QgaXNFc2MgPSBlLmtleS5pbmNsdWRlcygnRXNjYXBlJyk7XG4gICAgY29uc3QgaXNGID0gZS5rZXkuc3RhcnRzV2l0aCgnRicpO1xuICAgIGNvbnN0IGlzQXJyb3cgPSBlLmtleS5pbmNsdWRlcygnQXJyb3cnKSA/IHRydWUgOiBmYWxzZTtcbiAgICByZXR1cm4gaXNDYXBzTG9jayB8fCBpc01vZCB8fCBpc0FsdCB8fCBpc0Fycm93IHx8IGlzU2hpZnQgfHwgaXNUYWIgfHwgaXNFc2MgfHwgaXNGO1xufVxuXG5leHBvcnQgY29uc3QgaXNFeHBhbmRIb3RrZXkgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICByZXR1cm4gaXNLZXlIb3RrZXkoJ21vZCsvJywgZXZlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVGFiSG90a2V5ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIGV2ZW50LmtleSA9PT0gJ1RhYic7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFbnRlckhvdGtleSA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudC5rZXkgPT09ICdFbnRlcic7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTcGFjZUhvdGtleSA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudC5jb2RlID09PSAnU3BhY2UnO1xufTtcbiJdfQ==
26
+ export const isDelete = (event) => {
27
+ return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);
28
+ };
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LWtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvaG90LWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEMsTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFnQjtJQUN6QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDckMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN2RCxPQUFPLFVBQVUsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUM7QUFDdkYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUNuRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQ2hELE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQ2xELE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQ2xELE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQzdDLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDNUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG90a2V5cyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGlzS2V5SG90a2V5IH0gZnJvbSAnaXMtaG90a2V5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbEtleShlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgaXNNb2QgPSBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5O1xuICAgIGNvbnN0IGlzQWx0ID0gaXNLZXlIb3RrZXkoJ2FsdCcsIGUpO1xuICAgIGNvbnN0IGlzU2hpZnQgPSBpc0tleUhvdGtleSgnc2hpZnQnLCBlKTtcbiAgICBjb25zdCBpc0NhcHNMb2NrID0gZS5rZXkuaW5jbHVkZXMoJ0NhcHNMb2NrJyk7XG4gICAgY29uc3QgaXNUYWIgPSBlLmtleS5pbmNsdWRlcygnVGFiJyk7XG4gICAgY29uc3QgaXNFc2MgPSBlLmtleS5pbmNsdWRlcygnRXNjYXBlJyk7XG4gICAgY29uc3QgaXNGID0gZS5rZXkuc3RhcnRzV2l0aCgnRicpO1xuICAgIGNvbnN0IGlzQXJyb3cgPSBlLmtleS5pbmNsdWRlcygnQXJyb3cnKSA/IHRydWUgOiBmYWxzZTtcbiAgICByZXR1cm4gaXNDYXBzTG9jayB8fCBpc01vZCB8fCBpc0FsdCB8fCBpc0Fycm93IHx8IGlzU2hpZnQgfHwgaXNUYWIgfHwgaXNFc2MgfHwgaXNGO1xufVxuXG5leHBvcnQgY29uc3QgaXNFeHBhbmRIb3RrZXkgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICByZXR1cm4gaXNLZXlIb3RrZXkoJ21vZCsvJywgZXZlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVGFiSG90a2V5ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIGV2ZW50LmtleSA9PT0gJ1RhYic7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFbnRlckhvdGtleSA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudC5rZXkgPT09ICdFbnRlcic7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTcGFjZUhvdGtleSA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudC5jb2RlID09PSAnU3BhY2UnO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRGVsZXRlID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIGhvdGtleXMuaXNEZWxldGVCYWNrd2FyZChldmVudCkgfHwgaG90a2V5cy5pc0RlbGV0ZUZvcndhcmQoZXZlbnQpXG59O1xuIl19
@@ -2,4 +2,6 @@ export * from './resize';
2
2
  export * from './line-path';
3
3
  export * from './hot-key';
4
4
  export * from './rectangle';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9yZXNpemUnO1xuZXhwb3J0ICogZnJvbSAnLi9saW5lLXBhdGgnO1xuZXhwb3J0ICogZnJvbSAnLi9ob3Qta2V5JztcbmV4cG9ydCAqIGZyb20gJy4vcmVjdGFuZ2xlJzsiXX0=
5
+ export * from './creation-mode';
6
+ export * from './direction';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Jlc2l6ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpbmUtcGF0aCc7XG5leHBvcnQgKiBmcm9tICcuL2hvdC1rZXknO1xuZXhwb3J0ICogZnJvbSAnLi9yZWN0YW5nbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGlvbi1tb2RlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aW9uJztcbiJdfQ==
@@ -1,7 +1,20 @@
1
1
  import { distanceBetweenPointAndPoint } from '@plait/core';
2
+ import { Direction, getDirectionFactor } from './direction';
3
+ export function getOppositeDirection(direction) {
4
+ switch (direction) {
5
+ case Direction.left:
6
+ return Direction.right;
7
+ case Direction.right:
8
+ return Direction.left;
9
+ case Direction.top:
10
+ return Direction.bottom;
11
+ case Direction.bottom:
12
+ return Direction.top;
13
+ }
14
+ }
2
15
  export const getPoints = (source, sourcePosition, target, targetPosition, offset) => {
3
- const sourceDir = handleDirections[sourcePosition];
4
- const targetDir = handleDirections[targetPosition];
16
+ const sourceDir = getDirectionFactor(sourcePosition);
17
+ const targetDir = getDirectionFactor(targetPosition);
5
18
  const sourceGapped = [source[0] + sourceDir.x * offset, source[1] + sourceDir.y * offset];
6
19
  const targetGapped = [target[0] + targetDir.x * offset, target[1] + targetDir.y * offset];
7
20
  const dir = getDirection(sourceGapped, sourcePosition, targetGapped);
@@ -68,25 +81,12 @@ export const getPoints = (source, sourcePosition, target, targetPosition, offset
68
81
  }
69
82
  return [source, sourceGapped, ...points, targetGapped, target];
70
83
  };
71
- const getDirection = (source, sourcePosition = Direction.bottom, target) => {
84
+ export const getDirection = (source, sourcePosition = Direction.bottom, target) => {
72
85
  if (sourcePosition === Direction.left || sourcePosition === Direction.right) {
73
86
  return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };
74
87
  }
75
88
  return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };
76
89
  };
77
- export var Direction;
78
- (function (Direction) {
79
- Direction["left"] = "left";
80
- Direction["top"] = "top";
81
- Direction["right"] = "right";
82
- Direction["bottom"] = "bottom";
83
- })(Direction || (Direction = {}));
84
- const handleDirections = {
85
- [Direction.left]: { x: -1, y: 0 },
86
- [Direction.right]: { x: 1, y: 0 },
87
- [Direction.top]: { x: 0, y: -1 },
88
- [Direction.bottom]: { x: 0, y: 1 }
89
- };
90
90
  export function getEdgeCenter({ sourceX, sourceY, targetX, targetY }) {
91
91
  const xOffset = Math.abs(targetX - sourceX) / 2;
92
92
  const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;
@@ -94,33 +94,6 @@ export function getEdgeCenter({ sourceX, sourceY, targetX, targetY }) {
94
94
  const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;
95
95
  return [centerX, centerY, xOffset, yOffset];
96
96
  }
97
- export function getDirectionByPoint(point, defaultDirection) {
98
- if (point[0] === 0) {
99
- return Direction.left;
100
- }
101
- if (point[0] === 1) {
102
- return Direction.right;
103
- }
104
- if (point[1] === 0) {
105
- return Direction.top;
106
- }
107
- if (point[1] === 1) {
108
- return Direction.bottom;
109
- }
110
- return defaultDirection;
111
- }
112
- export function getOppositeDirection(direction) {
113
- switch (direction) {
114
- case Direction.left:
115
- return Direction.right;
116
- case Direction.right:
117
- return Direction.left;
118
- case Direction.top:
119
- return Direction.bottom;
120
- case Direction.bottom:
121
- return Direction.top;
122
- }
123
- }
124
97
  export function getPointOnPolyline(points, ratio) {
125
98
  const totalLength = calculatePolylineLength(points);
126
99
  const targetDistance = totalLength * ratio;
@@ -140,7 +113,7 @@ export function getPointOnPolyline(points, ratio) {
140
113
  }
141
114
  return points[points.length - 1];
142
115
  }
143
- function calculatePolylineLength(points) {
116
+ export function calculatePolylineLength(points) {
144
117
  let length = 0;
145
118
  for (let i = 0; i < points.length - 1; i++) {
146
119
  const [x1, y1] = points[i];
@@ -170,4 +143,4 @@ export function isPointOnLineSegment(point, startPoint, endPoint) {
170
143
  const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
171
144
  return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;
172
145
  }
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9saW5lLXBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFTLDRCQUE0QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQWEsRUFBRSxjQUF5QixFQUFFLE1BQWEsRUFBRSxjQUF5QixFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQzVILE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sWUFBWSxHQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sWUFBWSxHQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUM1QyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFakMsSUFBSSxNQUFNLEdBQVksRUFBRSxDQUFDO0lBQ3pCLElBQUksT0FB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ZFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuXG5leHBvcnQgY29uc3QgZ2V0UG9pbnRzID0gKHNvdXJjZTogUG9pbnQsIHNvdXJjZVBvc2l0aW9uOiBEaXJlY3Rpb24sIHRhcmdldDogUG9pbnQsIHRhcmdldFBvc2l0aW9uOiBEaXJlY3Rpb24sIG9mZnNldDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgc291cmNlRGlyID0gaGFuZGxlRGlyZWN0aW9uc1tzb3VyY2VQb3NpdGlvbl07XG4gICAgY29uc3QgdGFyZ2V0RGlyID0gaGFuZGxlRGlyZWN0aW9uc1t0YXJnZXRQb3NpdGlvbl07XG4gICAgY29uc3Qgc291cmNlR2FwcGVkOiBQb2ludCA9IFtzb3VyY2VbMF0gKyBzb3VyY2VEaXIueCAqIG9mZnNldCwgc291cmNlWzFdICsgc291cmNlRGlyLnkgKiBvZmZzZXRdO1xuICAgIGNvbnN0IHRhcmdldEdhcHBlZDogUG9pbnQgPSBbdGFyZ2V0WzBdICsgdGFyZ2V0RGlyLnggKiBvZmZzZXQsIHRhcmdldFsxXSArIHRhcmdldERpci55ICogb2Zmc2V0XTtcbiAgICBjb25zdCBkaXIgPSBnZXREaXJlY3Rpb24oc291cmNlR2FwcGVkLCBzb3VyY2VQb3NpdGlvbiwgdGFyZ2V0R2FwcGVkKTtcbiAgICBjb25zdCBkaXJBY2Nlc3NvciA9IGRpci54ICE9PSAwID8gJ3gnIDogJ3knO1xuICAgIGNvbnN0IGN1cnJEaXIgPSBkaXJbZGlyQWNjZXNzb3JdO1xuXG4gICAgbGV0IHBvaW50czogUG9pbnRbXSA9IFtdO1xuICAgIGxldCBjZW50ZXJYLCBjZW50ZXJZO1xuICAgIGNvbnN0IFtkZWZhdWx0Q2VudGVyWCwgZGVmYXVsdENlbnRlclldID0gZ2V0RWRnZUNlbnRlcih7XG4gICAgICAgIHNvdXJjZVg6IHNvdXJjZVswXSxcbiAgICAgICAgc291cmNlWTogc291cmNlWzFdLFxuICAgICAgICB0YXJnZXRYOiB0YXJnZXRbMF0sXG4gICAgICAgIHRhcmdldFk6IHRhcmdldFsxXVxuICAgIH0pO1xuICAgIC8vIG9wcG9zaXRlIGhhbmRsZSBwb3NpdGlvbnMsIGRlZmF1bHQgY2FzZVxuICAgIGlmIChzb3VyY2VEaXJbZGlyQWNjZXNzb3JdICogdGFyZ2V0RGlyW2RpckFjY2Vzc29yXSA9PT0gLTEpIHtcbiAgICAgICAgY2VudGVyWCA9IGRlZmF1bHRDZW50ZXJYO1xuICAgICAgICBjZW50ZXJZID0gZGVmYXVsdENlbnRlclk7XG4gICAgICAgIC8vICAgIC0tLT5cbiAgICAgICAgLy8gICAgfFxuICAgICAgICAvLyA+LS0tXG4gICAgICAgIGNvbnN0IHZlcnRpY2FsU3BsaXQ6IFBvaW50W10gPSBbXG4gICAgICAgICAgICBbY2VudGVyWCwgc291cmNlR2FwcGVkWzFdXSxcbiAgICAgICAgICAgIFtjZW50ZXJYLCB0YXJnZXRHYXBwZWRbMV1dXG4gICAgICAgIF07XG4gICAgICAgIC8vICAgIHxcbiAgICAgICAgLy8gIC0tLVxuICAgICAgICAvLyAgfFxuICAgICAgICBjb25zdCBob3Jpem9udGFsU3BsaXQ6IFBvaW50W10gPSBbXG4gICAgICAgICAgICBbc291cmNlR2FwcGVkWzBdLCBjZW50ZXJZXSxcbiAgICAgICAgICAgIFt0YXJnZXRHYXBwZWRbMF0sIGNlbnRlclldXG4gICAgICAgIF07XG4gICAgICAgIGlmIChzb3VyY2VEaXJbZGlyQWNjZXNzb3JdID09PSBjdXJyRGlyKSB7XG4gICAgICAgICAgICBwb2ludHMgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gdmVydGljYWxTcGxpdCA6IGhvcml6b250YWxTcGxpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvaW50cyA9IGRpckFjY2Vzc29yID09PSAneCcgPyBob3Jpem9udGFsU3BsaXQgOiB2ZXJ0aWNhbFNwbGl0O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc291cmNlVGFyZ2V0IG1lYW5zIHdlIHRha2UgeCBmcm9tIHNvdXJjZSBhbmQgeSBmcm9tIHRhcmdldCwgdGFyZ2V0U291cmNlIGlzIHRoZSBvcHBvc2l0ZVxuICAgICAgICBjb25zdCBzb3VyY2VUYXJnZXQ6IFBvaW50W10gPSBbW3NvdXJjZUdhcHBlZFswXSwgdGFyZ2V0R2FwcGVkWzFdXV07XG4gICAgICAgIGNvbnN0IHRhcmdldFNvdXJjZTogUG9pbnRbXSA9IFtbdGFyZ2V0R2FwcGVkWzBdLCBzb3VyY2VHYXBwZWRbMV1dXTtcbiAgICAgICAgLy8gdGhpcyBoYW5kbGVzIGVkZ2VzIHdpdGggc2FtZSBoYW5kbGUgcG9zaXRpb25zXG4gICAgICAgIGlmIChkaXJBY2Nlc3NvciA9PT0gJ3gnKSB7XG4gICAgICAgICAgICBwb2ludHMgPSBzb3VyY2VEaXIueCA9PT0gY3VyckRpciA/IHRhcmdldFNvdXJjZSA6IHNvdXJjZVRhcmdldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvaW50cyA9IHNvdXJjZURpci55ID09PSBjdXJyRGlyID8gc291cmNlVGFyZ2V0IDogdGFyZ2V0U291cmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlc2UgYXJlIGNvbmRpdGlvbnMgZm9yIGhhbmRsaW5nIG1peGVkIGhhbmRsZSBwb3NpdGlvbnMgbGlrZSByaWdodCAtPiBib3R0b20gZm9yIGV4YW1wbGVcbiAgICAgICAgbGV0IGZsaXBTb3VyY2VUYXJnZXQ7XG4gICAgICAgIGlmIChzb3VyY2VQb3NpdGlvbiAhPT0gdGFyZ2V0UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRpckFjY2Vzc29yT3Bwb3NpdGUgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gMSA6IDA7XG4gICAgICAgICAgICBjb25zdCBpc1NhbWVEaXIgPSBzb3VyY2VEaXJbZGlyQWNjZXNzb3JdID09PSB0YXJnZXREaXJbZGlyQWNjZXNzb3IgPT09ICd4JyA/ICd5JyA6ICd4J107XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VHdFRhcmdldE9wcG8gPSBzb3VyY2VHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV0gPiB0YXJnZXRHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV07XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMdFRhcmdldE9wcG8gPSBzb3VyY2VHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV0gPCB0YXJnZXRHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV07XG4gICAgICAgICAgICBmbGlwU291cmNlVGFyZ2V0ID1cbiAgICAgICAgICAgICAgICAoc291cmNlRGlyW2RpckFjY2Vzc29yXSA9PT0gMSAmJiAoKCFpc1NhbWVEaXIgJiYgc291cmNlR3RUYXJnZXRPcHBvKSB8fCAoaXNTYW1lRGlyICYmIHNvdXJjZUx0VGFyZ2V0T3BwbykpKSB8fFxuICAgICAgICAgICAgICAgIChzb3VyY2VEaXJbZGlyQWNjZXNzb3JdICE9PSAxICYmICgoIWlzU2FtZURpciAmJiBzb3VyY2VMdFRhcmdldE9wcG8pIHx8IChpc1NhbWVEaXIgJiYgc291cmNlR3RUYXJnZXRPcHBvKSkpO1xuXG4gICAgICAgICAgICBpZiAoZmxpcFNvdXJjZVRhcmdldCkge1xuICAgICAgICAgICAgICAgIHBvaW50cyA9IGRpckFjY2Vzc29yID09PSAneCcgPyBzb3VyY2VUYXJnZXQgOiB0YXJnZXRTb3VyY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtzb3VyY2UsIHNvdXJjZUdhcHBlZCwgLi4ucG9pbnRzLCB0YXJnZXRHYXBwZWQsIHRhcmdldF07XG59O1xuXG5jb25zdCBnZXREaXJlY3Rpb24gPSAoc291cmNlOiBQb2ludCwgc291cmNlUG9zaXRpb24gPSBEaXJlY3Rpb24uYm90dG9tLCB0YXJnZXQ6IFBvaW50KSA9PiB7XG4gICAgaWYgKHNvdXJjZVBvc2l0aW9uID09PSBEaXJlY3Rpb24ubGVmdCB8fCBzb3VyY2VQb3NpdGlvbiA9PT0gRGlyZWN0aW9uLnJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBzb3VyY2VbMF0gPCB0YXJnZXRbMF0gPyB7IHg6IDEsIHk6IDAgfSA6IHsgeDogLTEsIHk6IDAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZVsxXSA8IHRhcmdldFsxXSA/IHsgeDogMCwgeTogMSB9IDogeyB4OiAwLCB5OiAtMSB9O1xufTtcblxuZXhwb3J0IGVudW0gRGlyZWN0aW9uIHtcbiAgICBsZWZ0ID0gJ2xlZnQnLFxuICAgIHRvcCA9ICd0b3AnLFxuICAgIHJpZ2h0ID0gJ3JpZ2h0JyxcbiAgICBib3R0b20gPSAnYm90dG9tJ1xufVxuXG5jb25zdCBoYW5kbGVEaXJlY3Rpb25zID0ge1xuICAgIFtEaXJlY3Rpb24ubGVmdF06IHsgeDogLTEsIHk6IDAgfSxcbiAgICBbRGlyZWN0aW9uLnJpZ2h0XTogeyB4OiAxLCB5OiAwIH0sXG4gICAgW0RpcmVjdGlvbi50b3BdOiB7IHg6IDAsIHk6IC0xIH0sXG4gICAgW0RpcmVjdGlvbi5ib3R0b21dOiB7IHg6IDAsIHk6IDEgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVkZ2VDZW50ZXIoe1xuICAgIHNvdXJjZVgsXG4gICAgc291cmNlWSxcbiAgICB0YXJnZXRYLFxuICAgIHRhcmdldFlcbn06IHtcbiAgICBzb3VyY2VYOiBudW1iZXI7XG4gICAgc291cmNlWTogbnVtYmVyO1xuICAgIHRhcmdldFg6IG51bWJlcjtcbiAgICB0YXJnZXRZOiBudW1iZXI7XG59KTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgIGNvbnN0IHhPZmZzZXQgPSBNYXRoLmFicyh0YXJnZXRYIC0gc291cmNlWCkgLyAyO1xuICAgIGNvbnN0IGNlbnRlclggPSB0YXJnZXRYIDwgc291cmNlWCA/IHRhcmdldFggKyB4T2Zmc2V0IDogdGFyZ2V0WCAtIHhPZmZzZXQ7XG5cbiAgICBjb25zdCB5T2Zmc2V0ID0gTWF0aC5hYnModGFyZ2V0WSAtIHNvdXJjZVkpIC8gMjtcbiAgICBjb25zdCBjZW50ZXJZID0gdGFyZ2V0WSA8IHNvdXJjZVkgPyB0YXJnZXRZICsgeU9mZnNldCA6IHRhcmdldFkgLSB5T2Zmc2V0O1xuXG4gICAgcmV0dXJuIFtjZW50ZXJYLCBjZW50ZXJZLCB4T2Zmc2V0LCB5T2Zmc2V0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpcmVjdGlvbkJ5UG9pbnQocG9pbnQ6IFBvaW50LCBkZWZhdWx0RGlyZWN0aW9uOiBEaXJlY3Rpb24pIHtcbiAgICBpZiAocG9pbnRbMF0gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5sZWZ0O1xuICAgIH1cbiAgICBpZiAocG9pbnRbMF0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5yaWdodDtcbiAgICB9XG4gICAgaWYgKHBvaW50WzFdID09PSAwKSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24udG9wO1xuICAgIH1cbiAgICBpZiAocG9pbnRbMV0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5ib3R0b207XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0RGlyZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVEaXJlY3Rpb24oZGlyZWN0aW9uOiBEaXJlY3Rpb24pIHtcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlIERpcmVjdGlvbi5sZWZ0OlxuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5yaWdodDtcbiAgICAgICAgY2FzZSBEaXJlY3Rpb24ucmlnaHQ6XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmxlZnQ7XG4gICAgICAgIGNhc2UgRGlyZWN0aW9uLnRvcDpcbiAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24uYm90dG9tO1xuICAgICAgICBjYXNlIERpcmVjdGlvbi5ib3R0b206XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnRvcDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2ludE9uUG9seWxpbmUocG9pbnRzOiBQb2ludFtdLCByYXRpbzogbnVtYmVyKSB7XG4gICAgY29uc3QgdG90YWxMZW5ndGggPSBjYWxjdWxhdGVQb2x5bGluZUxlbmd0aChwb2ludHMpO1xuICAgIGNvbnN0IHRhcmdldERpc3RhbmNlID0gdG90YWxMZW5ndGggKiByYXRpbztcblxuICAgIGxldCBhY2N1bXVsYXRlZERpc3RhbmNlID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgW3gxLCB5MV0gPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IFt4MiwgeTJdID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3Qgc2VnbWVudExlbmd0aCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoeDEsIHkxLCB4MiwgeTIpO1xuXG4gICAgICAgIGlmIChhY2N1bXVsYXRlZERpc3RhbmNlICsgc2VnbWVudExlbmd0aCA+PSB0YXJnZXREaXN0YW5jZSkge1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nRGlzdGFuY2UgPSB0YXJnZXREaXN0YW5jZSAtIGFjY3VtdWxhdGVkRGlzdGFuY2U7XG4gICAgICAgICAgICBjb25zdCByYXRpb0luU2VnbWVudCA9IHJlbWFpbmluZ0Rpc3RhbmNlIC8gc2VnbWVudExlbmd0aDtcblxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0WCA9IHgxICsgKHgyIC0geDEpICogcmF0aW9JblNlZ21lbnQ7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRZID0geTEgKyAoeTIgLSB5MSkgKiByYXRpb0luU2VnbWVudDtcbiAgICAgICAgICAgIHJldHVybiBbdGFyZ2V0WCwgdGFyZ2V0WV07XG4gICAgICAgIH1cblxuICAgICAgICBhY2N1bXVsYXRlZERpc3RhbmNlICs9IHNlZ21lbnRMZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVBvbHlsaW5lTGVuZ3RoKHBvaW50czogUG9pbnRbXSkge1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBbeDEsIHkxXSA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgW3gyLCB5Ml0gPSBwb2ludHNbaSArIDFdO1xuICAgICAgICBsZW5ndGggKz0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCh4MSwgeTEsIHgyLCB5Mik7XG4gICAgfVxuICAgIHJldHVybiBsZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYXRpb0J5UG9pbnQocG9pbnRzOiBQb2ludFtdLCBwb2ludDogUG9pbnQpIHtcbiAgICBjb25zdCB0b3RhbExlbmd0aCA9IGNhbGN1bGF0ZVBvbHlsaW5lTGVuZ3RoKHBvaW50cyk7XG5cbiAgICBsZXQgZGlzdGFuY2UgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlzT3ZlcmxhcCA9IGlzUG9pbnRPbkxpbmVTZWdtZW50KHBvaW50LCBwb2ludHNbaV0sIHBvaW50c1tpICsgMV0pO1xuXG4gICAgICAgIGlmIChpc092ZXJsYXApIHtcbiAgICAgICAgICAgIGRpc3RhbmNlICs9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQocG9pbnRbMF0sIHBvaW50WzFdLCBwb2ludHNbaV1bMF0sIHBvaW50c1tpXVsxXSk7XG4gICAgICAgICAgICByZXR1cm4gZGlzdGFuY2UgLyB0b3RhbExlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpc3RhbmNlICs9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQocG9pbnRzW2ldWzBdLCBwb2ludHNbaV1bMV0sIHBvaW50c1tpICsgMV1bMF0sIHBvaW50c1tpICsgMV1bMV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCByYXRpbyBieSBwb2ludCcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BvaW50T25MaW5lU2VnbWVudChwb2ludDogUG9pbnQsIHN0YXJ0UG9pbnQ6IFBvaW50LCBlbmRQb2ludDogUG9pbnQpIHtcbiAgICBjb25zdCBkaXN0YW5jZVRvU3RhcnQgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSwgc3RhcnRQb2ludFswXSwgc3RhcnRQb2ludFsxXSk7XG4gICAgY29uc3QgZGlzdGFuY2VUb0VuZCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQocG9pbnRbMF0sIHBvaW50WzFdLCBlbmRQb2ludFswXSwgZW5kUG9pbnRbMV0pO1xuXG4gICAgY29uc3Qgc2VnbWVudExlbmd0aCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoc3RhcnRQb2ludFswXSwgc3RhcnRQb2ludFsxXSwgZW5kUG9pbnRbMF0sIGVuZFBvaW50WzFdKTtcblxuICAgIHJldHVybiBNYXRoLmFicyhkaXN0YW5jZVRvU3RhcnQgKyBkaXN0YW5jZVRvRW5kIC0gc2VnbWVudExlbmd0aCkgPCAwLjE7XG59XG4iXX0=
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9saW5lLXBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFTLDRCQUE0QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFNBQW9CO0lBQ3JELFFBQVEsU0FBUyxFQUFFO1FBQ2YsS0FBSyxTQUFTLENBQUMsSUFBSTtZQUNmLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQztRQUMzQixLQUFLLFNBQVMsQ0FBQyxLQUFLO1lBQ2hCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQztRQUMxQixLQUFLLFNBQVMsQ0FBQyxHQUFHO1lBQ2QsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzVCLEtBQUssU0FBUyxDQUFDLE1BQU07WUFDakIsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDO0tBQzVCO0FBQ0wsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQWEsRUFBRSxjQUF5QixFQUFFLE1BQWEsRUFBRSxjQUF5QixFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQzVILE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sWUFBWSxHQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sWUFBWSxHQUFVLENBQUMsTUFBTSxDQUFDLENBQUMs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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2ludCwgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IERpcmVjdGlvbiwgZ2V0RGlyZWN0aW9uRmFjdG9yIH0gZnJvbSAnLi9kaXJlY3Rpb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVEaXJlY3Rpb24oZGlyZWN0aW9uOiBEaXJlY3Rpb24pIHtcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlIERpcmVjdGlvbi5sZWZ0OlxuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5yaWdodDtcbiAgICAgICAgY2FzZSBEaXJlY3Rpb24ucmlnaHQ6XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmxlZnQ7XG4gICAgICAgIGNhc2UgRGlyZWN0aW9uLnRvcDpcbiAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24uYm90dG9tO1xuICAgICAgICBjYXNlIERpcmVjdGlvbi5ib3R0b206XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnRvcDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb2ludHMgPSAoc291cmNlOiBQb2ludCwgc291cmNlUG9zaXRpb246IERpcmVjdGlvbiwgdGFyZ2V0OiBQb2ludCwgdGFyZ2V0UG9zaXRpb246IERpcmVjdGlvbiwgb2Zmc2V0OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBzb3VyY2VEaXIgPSBnZXREaXJlY3Rpb25GYWN0b3Ioc291cmNlUG9zaXRpb24pO1xuICAgIGNvbnN0IHRhcmdldERpciA9IGdldERpcmVjdGlvbkZhY3Rvcih0YXJnZXRQb3NpdGlvbik7XG4gICAgY29uc3Qgc291cmNlR2FwcGVkOiBQb2ludCA9IFtzb3VyY2VbMF0gKyBzb3VyY2VEaXIueCAqIG9mZnNldCwgc291cmNlWzFdICsgc291cmNlRGlyLnkgKiBvZmZzZXRdO1xuICAgIGNvbnN0IHRhcmdldEdhcHBlZDogUG9pbnQgPSBbdGFyZ2V0WzBdICsgdGFyZ2V0RGlyLnggKiBvZmZzZXQsIHRhcmdldFsxXSArIHRhcmdldERpci55ICogb2Zmc2V0XTtcbiAgICBjb25zdCBkaXIgPSBnZXREaXJlY3Rpb24oc291cmNlR2FwcGVkLCBzb3VyY2VQb3NpdGlvbiwgdGFyZ2V0R2FwcGVkKTtcbiAgICBjb25zdCBkaXJBY2Nlc3NvciA9IGRpci54ICE9PSAwID8gJ3gnIDogJ3knO1xuICAgIGNvbnN0IGN1cnJEaXIgPSBkaXJbZGlyQWNjZXNzb3JdO1xuXG4gICAgbGV0IHBvaW50czogUG9pbnRbXSA9IFtdO1xuICAgIGxldCBjZW50ZXJYLCBjZW50ZXJZO1xuICAgIGNvbnN0IFtkZWZhdWx0Q2VudGVyWCwgZGVmYXVsdENlbnRlclldID0gZ2V0RWRnZUNlbnRlcih7XG4gICAgICAgIHNvdXJjZVg6IHNvdXJjZVswXSxcbiAgICAgICAgc291cmNlWTogc291cmNlWzFdLFxuICAgICAgICB0YXJnZXRYOiB0YXJnZXRbMF0sXG4gICAgICAgIHRhcmdldFk6IHRhcmdldFsxXVxuICAgIH0pO1xuICAgIC8vIG9wcG9zaXRlIGhhbmRsZSBwb3NpdGlvbnMsIGRlZmF1bHQgY2FzZVxuICAgIGlmIChzb3VyY2VEaXJbZGlyQWNjZXNzb3JdICogdGFyZ2V0RGlyW2RpckFjY2Vzc29yXSA9PT0gLTEpIHtcbiAgICAgICAgY2VudGVyWCA9IGRlZmF1bHRDZW50ZXJYO1xuICAgICAgICBjZW50ZXJZID0gZGVmYXVsdENlbnRlclk7XG4gICAgICAgIC8vICAgIC0tLT5cbiAgICAgICAgLy8gICAgfFxuICAgICAgICAvLyA+LS0tXG4gICAgICAgIGNvbnN0IHZlcnRpY2FsU3BsaXQ6IFBvaW50W10gPSBbXG4gICAgICAgICAgICBbY2VudGVyWCwgc291cmNlR2FwcGVkWzFdXSxcbiAgICAgICAgICAgIFtjZW50ZXJYLCB0YXJnZXRHYXBwZWRbMV1dXG4gICAgICAgIF07XG4gICAgICAgIC8vICAgIHxcbiAgICAgICAgLy8gIC0tLVxuICAgICAgICAvLyAgfFxuICAgICAgICBjb25zdCBob3Jpem9udGFsU3BsaXQ6IFBvaW50W10gPSBbXG4gICAgICAgICAgICBbc291cmNlR2FwcGVkWzBdLCBjZW50ZXJZXSxcbiAgICAgICAgICAgIFt0YXJnZXRHYXBwZWRbMF0sIGNlbnRlclldXG4gICAgICAgIF07XG4gICAgICAgIGlmIChzb3VyY2VEaXJbZGlyQWNjZXNzb3JdID09PSBjdXJyRGlyKSB7XG4gICAgICAgICAgICBwb2ludHMgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gdmVydGljYWxTcGxpdCA6IGhvcml6b250YWxTcGxpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvaW50cyA9IGRpckFjY2Vzc29yID09PSAneCcgPyBob3Jpem9udGFsU3BsaXQgOiB2ZXJ0aWNhbFNwbGl0O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc291cmNlVGFyZ2V0IG1lYW5zIHdlIHRha2UgeCBmcm9tIHNvdXJjZSBhbmQgeSBmcm9tIHRhcmdldCwgdGFyZ2V0U291cmNlIGlzIHRoZSBvcHBvc2l0ZVxuICAgICAgICBjb25zdCBzb3VyY2VUYXJnZXQ6IFBvaW50W10gPSBbW3NvdXJjZUdhcHBlZFswXSwgdGFyZ2V0R2FwcGVkWzFdXV07XG4gICAgICAgIGNvbnN0IHRhcmdldFNvdXJjZTogUG9pbnRbXSA9IFtbdGFyZ2V0R2FwcGVkWzBdLCBzb3VyY2VHYXBwZWRbMV1dXTtcbiAgICAgICAgLy8gdGhpcyBoYW5kbGVzIGVkZ2VzIHdpdGggc2FtZSBoYW5kbGUgcG9zaXRpb25zXG4gICAgICAgIGlmIChkaXJBY2Nlc3NvciA9PT0gJ3gnKSB7XG4gICAgICAgICAgICBwb2ludHMgPSBzb3VyY2VEaXIueCA9PT0gY3VyckRpciA/IHRhcmdldFNvdXJjZSA6IHNvdXJjZVRhcmdldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvaW50cyA9IHNvdXJjZURpci55ID09PSBjdXJyRGlyID8gc291cmNlVGFyZ2V0IDogdGFyZ2V0U291cmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlc2UgYXJlIGNvbmRpdGlvbnMgZm9yIGhhbmRsaW5nIG1peGVkIGhhbmRsZSBwb3NpdGlvbnMgbGlrZSByaWdodCAtPiBib3R0b20gZm9yIGV4YW1wbGVcbiAgICAgICAgbGV0IGZsaXBTb3VyY2VUYXJnZXQ7XG4gICAgICAgIGlmIChzb3VyY2VQb3NpdGlvbiAhPT0gdGFyZ2V0UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRpckFjY2Vzc29yT3Bwb3NpdGUgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gMSA6IDA7XG4gICAgICAgICAgICBjb25zdCBpc1NhbWVEaXIgPSBzb3VyY2VEaXJbZGlyQWNjZXNzb3JdID09PSB0YXJnZXREaXJbZGlyQWNjZXNzb3IgPT09ICd4JyA/ICd5JyA6ICd4J107XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VHdFRhcmdldE9wcG8gPSBzb3VyY2VHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV0gPiB0YXJnZXRHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV07XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMdFRhcmdldE9wcG8gPSBzb3VyY2VHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV0gPCB0YXJnZXRHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV07XG4gICAgICAgICAgICBmbGlwU291cmNlVGFyZ2V0ID1cbiAgICAgICAgICAgICAgICAoc291cmNlRGlyW2RpckFjY2Vzc29yXSA9PT0gMSAmJiAoKCFpc1NhbWVEaXIgJiYgc291cmNlR3RUYXJnZXRPcHBvKSB8fCAoaXNTYW1lRGlyICYmIHNvdXJjZUx0VGFyZ2V0T3BwbykpKSB8fFxuICAgICAgICAgICAgICAgIChzb3VyY2VEaXJbZGlyQWNjZXNzb3JdICE9PSAxICYmICgoIWlzU2FtZURpciAmJiBzb3VyY2VMdFRhcmdldE9wcG8pIHx8IChpc1NhbWVEaXIgJiYgc291cmNlR3RUYXJnZXRPcHBvKSkpO1xuXG4gICAgICAgICAgICBpZiAoZmxpcFNvdXJjZVRhcmdldCkge1xuICAgICAgICAgICAgICAgIHBvaW50cyA9IGRpckFjY2Vzc29yID09PSAneCcgPyBzb3VyY2VUYXJnZXQgOiB0YXJnZXRTb3VyY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtzb3VyY2UsIHNvdXJjZUdhcHBlZCwgLi4ucG9pbnRzLCB0YXJnZXRHYXBwZWQsIHRhcmdldF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0aW9uID0gKHNvdXJjZTogUG9pbnQsIHNvdXJjZVBvc2l0aW9uID0gRGlyZWN0aW9uLmJvdHRvbSwgdGFyZ2V0OiBQb2ludCkgPT4ge1xuICAgIGlmIChzb3VyY2VQb3NpdGlvbiA9PT0gRGlyZWN0aW9uLmxlZnQgfHwgc291cmNlUG9zaXRpb24gPT09IERpcmVjdGlvbi5yaWdodCkge1xuICAgICAgICByZXR1cm4gc291cmNlWzBdIDwgdGFyZ2V0WzBdID8geyB4OiAxLCB5OiAwIH0gOiB7IHg6IC0xLCB5OiAwIH07XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VbMV0gPCB0YXJnZXRbMV0gPyB7IHg6IDAsIHk6IDEgfSA6IHsgeDogMCwgeTogLTEgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGdlQ2VudGVyKHtcbiAgICBzb3VyY2VYLFxuICAgIHNvdXJjZVksXG4gICAgdGFyZ2V0WCxcbiAgICB0YXJnZXRZXG59OiB7XG4gICAgc291cmNlWDogbnVtYmVyO1xuICAgIHNvdXJjZVk6IG51bWJlcjtcbiAgICB0YXJnZXRYOiBudW1iZXI7XG4gICAgdGFyZ2V0WTogbnVtYmVyO1xufSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICBjb25zdCB4T2Zmc2V0ID0gTWF0aC5hYnModGFyZ2V0WCAtIHNvdXJjZVgpIC8gMjtcbiAgICBjb25zdCBjZW50ZXJYID0gdGFyZ2V0WCA8IHNvdXJjZVggPyB0YXJnZXRYICsgeE9mZnNldCA6IHRhcmdldFggLSB4T2Zmc2V0O1xuXG4gICAgY29uc3QgeU9mZnNldCA9IE1hdGguYWJzKHRhcmdldFkgLSBzb3VyY2VZKSAvIDI7XG4gICAgY29uc3QgY2VudGVyWSA9IHRhcmdldFkgPCBzb3VyY2VZID8gdGFyZ2V0WSArIHlPZmZzZXQgOiB0YXJnZXRZIC0geU9mZnNldDtcblxuICAgIHJldHVybiBbY2VudGVyWCwgY2VudGVyWSwgeE9mZnNldCwgeU9mZnNldF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2ludE9uUG9seWxpbmUocG9pbnRzOiBQb2ludFtdLCByYXRpbzogbnVtYmVyKSB7XG4gICAgY29uc3QgdG90YWxMZW5ndGggPSBjYWxjdWxhdGVQb2x5bGluZUxlbmd0aChwb2ludHMpO1xuICAgIGNvbnN0IHRhcmdldERpc3RhbmNlID0gdG90YWxMZW5ndGggKiByYXRpbztcblxuICAgIGxldCBhY2N1bXVsYXRlZERpc3RhbmNlID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgW3gxLCB5MV0gPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IFt4MiwgeTJdID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3Qgc2VnbWVudExlbmd0aCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoeDEsIHkxLCB4MiwgeTIpO1xuXG4gICAgICAgIGlmIChhY2N1bXVsYXRlZERpc3RhbmNlICsgc2VnbWVudExlbmd0aCA+PSB0YXJnZXREaXN0YW5jZSkge1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nRGlzdGFuY2UgPSB0YXJnZXREaXN0YW5jZSAtIGFjY3VtdWxhdGVkRGlzdGFuY2U7XG4gICAgICAgICAgICBjb25zdCByYXRpb0luU2VnbWVudCA9IHJlbWFpbmluZ0Rpc3RhbmNlIC8gc2VnbWVudExlbmd0aDtcblxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0WCA9IHgxICsgKHgyIC0geDEpICogcmF0aW9JblNlZ21lbnQ7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRZID0geTEgKyAoeTIgLSB5MSkgKiByYXRpb0luU2VnbWVudDtcbiAgICAgICAgICAgIHJldHVybiBbdGFyZ2V0WCwgdGFyZ2V0WV07XG4gICAgICAgIH1cblxuICAgICAgICBhY2N1bXVsYXRlZERpc3RhbmNlICs9IHNlZ21lbnRMZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVQb2x5bGluZUxlbmd0aChwb2ludHM6IFBvaW50W10pIHtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgW3gxLCB5MV0gPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IFt4MiwgeTJdID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgbGVuZ3RoICs9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoeDEsIHkxLCB4MiwgeTIpO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmF0aW9CeVBvaW50KHBvaW50czogUG9pbnRbXSwgcG9pbnQ6IFBvaW50KSB7XG4gICAgY29uc3QgdG90YWxMZW5ndGggPSBjYWxjdWxhdGVQb2x5bGluZUxlbmd0aChwb2ludHMpO1xuXG4gICAgbGV0IGRpc3RhbmNlID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBpc092ZXJsYXAgPSBpc1BvaW50T25MaW5lU2VnbWVudChwb2ludCwgcG9pbnRzW2ldLCBwb2ludHNbaSArIDFdKTtcblxuICAgICAgICBpZiAoaXNPdmVybGFwKSB7XG4gICAgICAgICAgICBkaXN0YW5jZSArPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSwgcG9pbnRzW2ldWzBdLCBwb2ludHNbaV1bMV0pO1xuICAgICAgICAgICAgcmV0dXJuIGRpc3RhbmNlIC8gdG90YWxMZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaXN0YW5jZSArPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50c1tpXVswXSwgcG9pbnRzW2ldWzFdLCBwb2ludHNbaSArIDFdWzBdLCBwb2ludHNbaSArIDFdWzFdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgcmF0aW8gYnkgcG9pbnQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUG9pbnRPbkxpbmVTZWdtZW50KHBvaW50OiBQb2ludCwgc3RhcnRQb2ludDogUG9pbnQsIGVuZFBvaW50OiBQb2ludCkge1xuICAgIGNvbnN0IGRpc3RhbmNlVG9TdGFydCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQocG9pbnRbMF0sIHBvaW50WzFdLCBzdGFydFBvaW50WzBdLCBzdGFydFBvaW50WzFdKTtcbiAgICBjb25zdCBkaXN0YW5jZVRvRW5kID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChwb2ludFswXSwgcG9pbnRbMV0sIGVuZFBvaW50WzBdLCBlbmRQb2ludFsxXSk7XG5cbiAgICBjb25zdCBzZWdtZW50TGVuZ3RoID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChzdGFydFBvaW50WzBdLCBzdGFydFBvaW50WzFdLCBlbmRQb2ludFswXSwgZW5kUG9pbnRbMV0pO1xuXG4gICAgcmV0dXJuIE1hdGguYWJzKGRpc3RhbmNlVG9TdGFydCArIGRpc3RhbmNlVG9FbmQgLSBzZWdtZW50TGVuZ3RoKSA8IDAuMTtcbn1cbiJdfQ==