@plait/common 0.1.0-next.1 → 0.1.0-next.10

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 (80) hide show
  1. package/constants/default.d.ts +1 -0
  2. package/constants/media.d.ts +3 -0
  3. package/constants/resize.d.ts +1 -1
  4. package/core/image-base.component.d.ts +29 -0
  5. package/core/plugin-element.d.ts +7 -0
  6. package/{esm2020 → esm2022}/constants/default.mjs +2 -1
  7. package/esm2022/constants/media.mjs +8 -0
  8. package/esm2022/constants/resize.mjs +19 -0
  9. package/esm2022/core/image-base.component.mjs +93 -0
  10. package/esm2022/core/plugin-element.mjs +14 -0
  11. package/esm2022/generators/active.generator.mjs +46 -0
  12. package/esm2022/generators/generator.mjs +42 -0
  13. package/esm2022/generators/image.generator.mjs +54 -0
  14. package/esm2022/generators/index.mjs +4 -0
  15. package/esm2022/plugins/index.mjs +3 -0
  16. package/esm2022/plugins/text-options.mjs +2 -0
  17. package/esm2022/plugins/with-resize.mjs +101 -0
  18. package/esm2022/public-api.mjs +12 -0
  19. package/esm2022/shapes/common.mjs +14 -0
  20. package/esm2022/shapes/index.mjs +2 -0
  21. package/esm2022/transforms/common.mjs +15 -0
  22. package/esm2022/transforms/index.mjs +2 -0
  23. package/esm2022/transforms/property.mjs +21 -0
  24. package/esm2022/utils/creation-mode.mjs +19 -0
  25. package/esm2022/utils/direction.mjs +95 -0
  26. package/esm2022/utils/hot-key.mjs +29 -0
  27. package/esm2022/utils/image.mjs +40 -0
  28. package/esm2022/utils/index.mjs +9 -0
  29. package/esm2022/utils/line-path.mjs +146 -0
  30. package/esm2022/utils/rectangle.mjs +16 -0
  31. package/esm2022/utils/resize.mjs +61 -0
  32. package/esm2022/utils/text.mjs +11 -0
  33. package/fesm2022/plait-common.mjs +840 -0
  34. package/fesm2022/plait-common.mjs.map +1 -0
  35. package/{generator → generators}/active.generator.d.ts +4 -2
  36. package/{generator → generators}/generator.d.ts +1 -0
  37. package/generators/image.generator.d.ts +23 -0
  38. package/{generator → generators}/index.d.ts +1 -0
  39. package/package.json +7 -12
  40. package/plugins/index.d.ts +1 -0
  41. package/plugins/text-options.d.ts +5 -0
  42. package/plugins/with-resize.d.ts +12 -14
  43. package/public-api.d.ts +4 -3
  44. package/{shape → shapes}/common.d.ts +1 -1
  45. package/transforms/common.d.ts +2 -0
  46. package/transforms/index.d.ts +1 -3
  47. package/transforms/property.d.ts +8 -0
  48. package/utils/creation-mode.d.ts +9 -0
  49. package/utils/direction.d.ts +29 -0
  50. package/utils/hot-key.d.ts +6 -0
  51. package/utils/image.d.ts +12 -0
  52. package/utils/index.d.ts +7 -0
  53. package/utils/line-path.d.ts +17 -0
  54. package/utils/rectangle.d.ts +7 -0
  55. package/utils/resize.d.ts +12 -10
  56. package/utils/text.d.ts +3 -0
  57. package/esm2020/constants/media.mjs +0 -5
  58. package/esm2020/constants/resize.mjs +0 -19
  59. package/esm2020/generator/active.generator.mjs +0 -40
  60. package/esm2020/generator/generator.mjs +0 -29
  61. package/esm2020/generator/index.mjs +0 -3
  62. package/esm2020/plugins/index.mjs +0 -2
  63. package/esm2020/plugins/with-resize.mjs +0 -93
  64. package/esm2020/public-api.mjs +0 -11
  65. package/esm2020/rectangle.mjs +0 -16
  66. package/esm2020/shape/common.mjs +0 -6
  67. package/esm2020/shape/index.mjs +0 -2
  68. package/esm2020/transforms/element.mjs +0 -17
  69. package/esm2020/transforms/index.mjs +0 -5
  70. package/esm2020/utils/index.mjs +0 -2
  71. package/esm2020/utils/resize.mjs +0 -69
  72. package/fesm2015/plait-common.mjs +0 -304
  73. package/fesm2015/plait-common.mjs.map +0 -1
  74. package/fesm2020/plait-common.mjs +0 -304
  75. package/fesm2020/plait-common.mjs.map +0 -1
  76. package/rectangle.d.ts +0 -4
  77. package/transforms/element.d.ts +0 -2
  78. /package/{esm2020 → esm2022}/constants/index.mjs +0 -0
  79. /package/{esm2020 → esm2022}/plait-common.mjs +0 -0
  80. /package/{shape → shapes}/index.d.ts +0 -0
@@ -0,0 +1,21 @@
1
+ import { setProperty } from './common';
2
+ const setStrokeStyle = (board, strokeStyle) => {
3
+ setProperty(board, { strokeStyle });
4
+ };
5
+ const setFillColor = (board, fill) => {
6
+ setProperty(board, { fill });
7
+ };
8
+ const setStrokeColor = (board, strokeColor) => {
9
+ setProperty(board, { strokeColor });
10
+ };
11
+ const setStrokeWidth = (board, strokeWidth) => {
12
+ setProperty(board, { strokeWidth });
13
+ };
14
+ export const PropertyTransforms = {
15
+ setFillColor,
16
+ setStrokeStyle,
17
+ setProperty,
18
+ setStrokeWidth,
19
+ setStrokeColor
20
+ };
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3RyYW5zZm9ybXMvcHJvcGVydHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsV0FBbUIsRUFBRSxFQUFFO0lBQzlELFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBaUIsRUFBRSxJQUFZLEVBQUUsRUFBRTtJQUNyRCxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsV0FBbUIsRUFBRSxFQUFFO0lBQzlELFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxXQUFtQixFQUFFLEVBQUU7SUFDOUQsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDOUIsWUFBWTtJQUNaLGNBQWM7SUFDZCxXQUFXO0lBQ1gsY0FBYztJQUNkLGNBQWM7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhdGgsIFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUGxhaXRQbHVnaW5FbGVtZW50Q29tcG9uZW50LCBUcmFuc2Zvcm1zLCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgc2V0UHJvcGVydHkgfSBmcm9tICcuL2NvbW1vbic7XG5cbmNvbnN0IHNldFN0cm9rZVN0eWxlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzdHJva2VTdHlsZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0UHJvcGVydHkoYm9hcmQsIHsgc3Ryb2tlU3R5bGUgfSk7XG59O1xuXG5jb25zdCBzZXRGaWxsQ29sb3IgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGZpbGw6IHN0cmluZykgPT4ge1xuICAgIHNldFByb3BlcnR5KGJvYXJkLCB7IGZpbGwgfSk7XG59O1xuXG5jb25zdCBzZXRTdHJva2VDb2xvciA9IChib2FyZDogUGxhaXRCb2FyZCwgc3Ryb2tlQ29sb3I6IHN0cmluZykgPT4ge1xuICAgIHNldFByb3BlcnR5KGJvYXJkLCB7IHN0cm9rZUNvbG9yIH0pO1xufTtcblxuY29uc3Qgc2V0U3Ryb2tlV2lkdGggPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHN0cm9rZVdpZHRoOiBudW1iZXIpID0+IHtcbiAgICBzZXRQcm9wZXJ0eShib2FyZCwgeyBzdHJva2VXaWR0aCB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBQcm9wZXJ0eVRyYW5zZm9ybXMgPSB7XG4gICAgc2V0RmlsbENvbG9yLFxuICAgIHNldFN0cm9rZVN0eWxlLFxuICAgIHNldFByb3BlcnR5LFxuICAgIHNldFN0cm9rZVdpZHRoLFxuICAgIHNldFN0cm9rZUNvbG9yXG59O1xuIl19
@@ -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,95 @@
1
+ import { Direction, distanceBetweenPointAndPoint } from '@plait/core';
2
+ const handleDirectionFactors = {
3
+ [Direction.left]: { x: -1, y: 0 },
4
+ [Direction.right]: { x: 1, y: 0 },
5
+ [Direction.top]: { x: 0, y: -1 },
6
+ [Direction.bottom]: { x: 0, y: 1 }
7
+ };
8
+ export function getDirectionByPointOfRectangle(point) {
9
+ if (point[0] === 0) {
10
+ return Direction.left;
11
+ }
12
+ if (point[0] === 1) {
13
+ return Direction.right;
14
+ }
15
+ if (point[1] === 0) {
16
+ return Direction.top;
17
+ }
18
+ if (point[1] === 1) {
19
+ return Direction.bottom;
20
+ }
21
+ return undefined;
22
+ }
23
+ /**
24
+ * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system
25
+ * vector[0] and vector[1] are the x and y components of the vector respectively.
26
+ * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.
27
+ * if the vector has two directions, the function will return the string in which direction it is closer.
28
+ */
29
+ export function getDirectionByVector(vector) {
30
+ const x = vector[0];
31
+ const y = vector[1];
32
+ if (x === 0 && y === 0) {
33
+ return null;
34
+ }
35
+ if (x === 0) {
36
+ return y > 0 ? Direction.bottom : Direction.top;
37
+ }
38
+ if (y === 0) {
39
+ return x > 0 ? Direction.right : Direction.left;
40
+ }
41
+ const angle = Math.atan2(y, x);
42
+ if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {
43
+ return Direction.right;
44
+ }
45
+ else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {
46
+ return Direction.bottom;
47
+ }
48
+ else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {
49
+ return Direction.top;
50
+ }
51
+ else {
52
+ return Direction.left;
53
+ }
54
+ }
55
+ export function getPointByVector(point, vector, offset) {
56
+ const distance = Math.hypot(vector[0], vector[1]);
57
+ return [point[0] + (vector[0] / distance) * offset, point[1] + (vector[1] / distance) * offset];
58
+ }
59
+ export function rotateVectorAnti90(vector) {
60
+ const x = vector[0];
61
+ const y = vector[1];
62
+ const rotatedX = y;
63
+ const rotatedY = -x;
64
+ return [rotatedX, rotatedY];
65
+ }
66
+ export function getDirectionBetweenPointAndPoint(source, target) {
67
+ if (source[0] === target[0]) {
68
+ if (source[1] >= target[1]) {
69
+ return Direction.top;
70
+ }
71
+ else {
72
+ return Direction.bottom;
73
+ }
74
+ }
75
+ if (source[1] === target[1]) {
76
+ if (source[0] >= target[0]) {
77
+ return Direction.left;
78
+ }
79
+ else {
80
+ return Direction.right;
81
+ }
82
+ }
83
+ throw new Error('can not match direction');
84
+ }
85
+ export function getDirectionFactor(direction) {
86
+ return handleDirectionFactors[direction];
87
+ }
88
+ export function getFactorByPoints(source, target) {
89
+ const distance = distanceBetweenPointAndPoint(...source, ...target);
90
+ return {
91
+ x: (target[0] - source[0]) / distance,
92
+ y: (target[1] - source[1]) / distance
93
+ };
94
+ }
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9kaXJlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBbUMsNEJBQTRCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkcsTUFBTSxzQkFBc0IsR0FBRztJQUMzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDaEMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7Q0FDckMsQ0FBQztBQUVGLE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxLQUF1QjtJQUNsRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDO0tBQ3pCO0lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQztLQUMxQjtJQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNoQixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUM7S0FDeEI7SUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQzNCO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BQWM7SUFDL0MsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNwQixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO0tBQ25EO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0tBQ25EO0lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDOUMsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDO0tBQzFCO1NBQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDMUQsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQzNCO1NBQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQzVELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQztLQUN4QjtTQUFNO1FBQ0gsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDO0tBQ3pCO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFZLEVBQUUsTUFBYyxFQUFFLE1BQWM7SUFDekUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3BHLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBYztJQUM3QyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNuQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0NBQWdDLENBQUMsTUFBYSxFQUFFLE1BQWE7SUFDekUsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3pCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUM7U0FDeEI7YUFBTTtZQUNILE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQztTQUMzQjtLQUNKO0lBQ0QsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3pCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7U0FDekI7YUFBTTtZQUNILE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQztTQUMxQjtLQUNKO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsU0FBb0I7SUFDbkQsT0FBTyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQWEsRUFBRSxNQUFhO0lBQzFELE1BQU0sUUFBUSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDcEUsT0FBTztRQUNILENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRO1FBQ3JDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRO0tBQ3hDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uLCBQb2ludCwgUG9pbnRPZlJlY3RhbmdsZSwgVmVjdG9yLCBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuXG5jb25zdCBoYW5kbGVEaXJlY3Rpb25GYWN0b3JzID0ge1xuICAgIFtEaXJlY3Rpb24ubGVmdF06IHsgeDogLTEsIHk6IDAgfSxcbiAgICBbRGlyZWN0aW9uLnJpZ2h0XTogeyB4OiAxLCB5OiAwIH0sXG4gICAgW0RpcmVjdGlvbi50b3BdOiB7IHg6IDAsIHk6IC0xIH0sXG4gICAgW0RpcmVjdGlvbi5ib3R0b21dOiB7IHg6IDAsIHk6IDEgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpcmVjdGlvbkJ5UG9pbnRPZlJlY3RhbmdsZShwb2ludDogUG9pbnRPZlJlY3RhbmdsZSk6IERpcmVjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHBvaW50WzBdID09PSAwKSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24ubGVmdDtcbiAgICB9XG4gICAgaWYgKHBvaW50WzBdID09PSAxKSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24ucmlnaHQ7XG4gICAgfVxuICAgIGlmIChwb2ludFsxXSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnRvcDtcbiAgICB9XG4gICAgaWYgKHBvaW50WzFdID09PSAxKSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24uYm90dG9tO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24gYWNjZXB0cyB2ZWN0b3IgcGFyYW1ldGVyLCB0aGUgdmVjdG9yIHBhcmFtZXRlciB2ZWN0b3IgaXMgYmFzZWQgb24gdGhlIHNjcmVlbiBjb29yZGluYXRlIHN5c3RlbVxuICogdmVjdG9yWzBdIGFuZCB2ZWN0b3JbMV0gYXJlIHRoZSB4IGFuZCB5IGNvbXBvbmVudHMgb2YgdGhlIHZlY3RvciByZXNwZWN0aXZlbHkuXG4gKiBpZiB0aGUgdmVjdG9yIGhhcyBvbmx5IG9uZSBkaXJlY3Rpb24sIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIGluIHRoYXQgZGlyZWN0aW9uLCBzdWNoIGFzICdyaWdodCcsICd0b3AnLCAnYm90dG9tJyBvciAnbGVmdCcuXG4gKiBpZiB0aGUgdmVjdG9yIGhhcyB0d28gZGlyZWN0aW9ucywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzdHJpbmcgaW4gd2hpY2ggZGlyZWN0aW9uIGl0IGlzIGNsb3Nlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpcmVjdGlvbkJ5VmVjdG9yKHZlY3RvcjogVmVjdG9yKTogRGlyZWN0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgeCA9IHZlY3RvclswXTtcbiAgICBjb25zdCB5ID0gdmVjdG9yWzFdO1xuICAgIGlmICh4ID09PSAwICYmIHkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB5ID4gMCA/IERpcmVjdGlvbi5ib3R0b20gOiBEaXJlY3Rpb24udG9wO1xuICAgIH1cbiAgICBpZiAoeSA9PT0gMCkge1xuICAgICAgICByZXR1cm4geCA+IDAgPyBEaXJlY3Rpb24ucmlnaHQgOiBEaXJlY3Rpb24ubGVmdDtcbiAgICB9XG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHksIHgpO1xuICAgIGlmIChhbmdsZSA+IC1NYXRoLlBJIC8gNCAmJiBhbmdsZSA8PSBNYXRoLlBJIC8gNCkge1xuICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnJpZ2h0O1xuICAgIH0gZWxzZSBpZiAoYW5nbGUgPiBNYXRoLlBJIC8gNCAmJiBhbmdsZSA8PSAoMyAqIE1hdGguUEkpIC8gNCkge1xuICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmJvdHRvbTtcbiAgICB9IGVsc2UgaWYgKGFuZ2xlID4gKC0zICogTWF0aC5QSSkgLyA0ICYmIGFuZ2xlIDw9IC1NYXRoLlBJIC8gNCkge1xuICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnRvcDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmxlZnQ7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRCeVZlY3Rvcihwb2ludDogUG9pbnQsIHZlY3RvcjogVmVjdG9yLCBvZmZzZXQ6IG51bWJlcik6IFBvaW50IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguaHlwb3QodmVjdG9yWzBdLCB2ZWN0b3JbMV0pO1xuICAgIHJldHVybiBbcG9pbnRbMF0gKyAodmVjdG9yWzBdIC8gZGlzdGFuY2UpICogb2Zmc2V0LCBwb2ludFsxXSArICh2ZWN0b3JbMV0gLyBkaXN0YW5jZSkgKiBvZmZzZXRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlVmVjdG9yQW50aTkwKHZlY3RvcjogVmVjdG9yKTogVmVjdG9yIHtcbiAgICBjb25zdCB4ID0gdmVjdG9yWzBdO1xuICAgIGNvbnN0IHkgPSB2ZWN0b3JbMV07XG4gICAgY29uc3Qgcm90YXRlZFggPSB5O1xuICAgIGNvbnN0IHJvdGF0ZWRZID0gLXg7XG4gICAgcmV0dXJuIFtyb3RhdGVkWCwgcm90YXRlZFldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlyZWN0aW9uQmV0d2VlblBvaW50QW5kUG9pbnQoc291cmNlOiBQb2ludCwgdGFyZ2V0OiBQb2ludCkge1xuICAgIGlmIChzb3VyY2VbMF0gPT09IHRhcmdldFswXSkge1xuICAgICAgICBpZiAoc291cmNlWzFdID49IHRhcmdldFsxXSkge1xuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi50b3A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmJvdHRvbTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoc291cmNlWzFdID09PSB0YXJnZXRbMV0pIHtcbiAgICAgICAgaWYgKHNvdXJjZVswXSA+PSB0YXJnZXRbMF0pIHtcbiAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24ubGVmdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24ucmlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjYW4gbm90IG1hdGNoIGRpcmVjdGlvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlyZWN0aW9uRmFjdG9yKGRpcmVjdGlvbjogRGlyZWN0aW9uKSB7XG4gICAgcmV0dXJuIGhhbmRsZURpcmVjdGlvbkZhY3RvcnNbZGlyZWN0aW9uXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZhY3RvckJ5UG9pbnRzKHNvdXJjZTogUG9pbnQsIHRhcmdldDogUG9pbnQpIHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4uc291cmNlLCAuLi50YXJnZXQpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6ICh0YXJnZXRbMF0gLSBzb3VyY2VbMF0pIC8gZGlzdGFuY2UsXG4gICAgICAgIHk6ICh0YXJnZXRbMV0gLSBzb3VyY2VbMV0pIC8gZGlzdGFuY2VcbiAgICB9O1xufVxuIl19
@@ -0,0 +1,29 @@
1
+ import { hotkeys } from '@plait/core';
2
+ import { isKeyHotkey } from 'is-hotkey';
3
+ export function isVirtualKey(e) {
4
+ const isMod = e.ctrlKey || e.metaKey;
5
+ const isAlt = isKeyHotkey('alt', e);
6
+ const isShift = isKeyHotkey('shift', e);
7
+ const isCapsLock = e.key.includes('CapsLock');
8
+ const isTab = e.key.includes('Tab');
9
+ const isEsc = e.key.includes('Escape');
10
+ const isF = e.key.startsWith('F');
11
+ const isArrow = e.key.includes('Arrow') ? true : false;
12
+ return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;
13
+ }
14
+ export const isExpandHotkey = (event) => {
15
+ return isKeyHotkey('mod+/', event);
16
+ };
17
+ export const isTabHotkey = (event) => {
18
+ return event.key === 'Tab';
19
+ };
20
+ export const isEnterHotkey = (event) => {
21
+ return event.key === 'Enter';
22
+ };
23
+ export const isSpaceHotkey = (event) => {
24
+ return event.code === 'Space';
25
+ };
26
+ export const isDelete = (event) => {
27
+ return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);
28
+ };
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LWtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvaG90LWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEMsTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFnQjtJQUN6QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDckMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN2RCxPQUFPLFVBQVUsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUM7QUFDdkYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUNuRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQ2hELE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQ2xELE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQ2xELE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQzdDLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG90a2V5cyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGlzS2V5SG90a2V5IH0gZnJvbSAnaXMtaG90a2V5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbEtleShlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgaXNNb2QgPSBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5O1xuICAgIGNvbnN0IGlzQWx0ID0gaXNLZXlIb3RrZXkoJ2FsdCcsIGUpO1xuICAgIGNvbnN0IGlzU2hpZnQgPSBpc0tleUhvdGtleSgnc2hpZnQnLCBlKTtcbiAgICBjb25zdCBpc0NhcHNMb2NrID0gZS5rZXkuaW5jbHVkZXMoJ0NhcHNMb2NrJyk7XG4gICAgY29uc3QgaXNUYWIgPSBlLmtleS5pbmNsdWRlcygnVGFiJyk7XG4gICAgY29uc3QgaXNFc2MgPSBlLmtleS5pbmNsdWRlcygnRXNjYXBlJyk7XG4gICAgY29uc3QgaXNGID0gZS5rZXkuc3RhcnRzV2l0aCgnRicpO1xuICAgIGNvbnN0IGlzQXJyb3cgPSBlLmtleS5pbmNsdWRlcygnQXJyb3cnKSA/IHRydWUgOiBmYWxzZTtcbiAgICByZXR1cm4gaXNDYXBzTG9jayB8fCBpc01vZCB8fCBpc0FsdCB8fCBpc0Fycm93IHx8IGlzU2hpZnQgfHwgaXNUYWIgfHwgaXNFc2MgfHwgaXNGO1xufVxuXG5leHBvcnQgY29uc3QgaXNFeHBhbmRIb3RrZXkgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICByZXR1cm4gaXNLZXlIb3RrZXkoJ21vZCsvJywgZXZlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVGFiSG90a2V5ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIGV2ZW50LmtleSA9PT0gJ1RhYic7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFbnRlckhvdGtleSA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudC5rZXkgPT09ICdFbnRlcic7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTcGFjZUhvdGtleSA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudC5jb2RlID09PSAnU3BhY2UnO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRGVsZXRlID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIGhvdGtleXMuaXNEZWxldGVCYWNrd2FyZChldmVudCkgfHwgaG90a2V5cy5pc0RlbGV0ZUZvcndhcmQoZXZlbnQpO1xufTtcbiJdfQ==
@@ -0,0 +1,40 @@
1
+ import { PlaitBoard, PlaitContextService } from '@plait/core';
2
+ export const selectImage = (board, defaultImageWidth, handle, acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp']) => {
3
+ const inputFile = document.createElement('input');
4
+ inputFile.setAttribute('type', 'file');
5
+ const acceptImageTypesString = '.' + acceptImageTypes.join(',.');
6
+ inputFile.setAttribute('accept', acceptImageTypesString);
7
+ inputFile.onchange = (event) => {
8
+ buildImage(board, event.target.files[0], defaultImageWidth, handle);
9
+ };
10
+ inputFile.click();
11
+ };
12
+ export const buildImage = async (board, imageFile, defaultImageWidth, handle) => {
13
+ let width = 0, height = 0;
14
+ await getImageSize(imageFile, defaultImageWidth).then((value) => {
15
+ width = value.width;
16
+ height = value.height;
17
+ });
18
+ let imageItem = null;
19
+ const url = URL.createObjectURL(imageFile);
20
+ const context = PlaitBoard.getComponent(board).viewContainerRef.injector.get(PlaitContextService);
21
+ context.setUploadingFile({ url, file: imageFile });
22
+ imageItem = {
23
+ url,
24
+ width,
25
+ height
26
+ };
27
+ handle(imageItem);
28
+ };
29
+ function getImageSize(file, defaultImageWidth) {
30
+ return new Promise((resolve, reject) => {
31
+ const image = new Image();
32
+ image.src = URL.createObjectURL(file);
33
+ image.onload = function () {
34
+ const width = defaultImageWidth;
35
+ const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;
36
+ resolve(image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight });
37
+ };
38
+ });
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3V0aWxzL2ltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsVUFBVSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLGFBQWEsQ0FBQztBQWFsRyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FDdkIsS0FBaUIsRUFDakIsaUJBQXlCLEVBQ3pCLE1BQThDLEVBQzlDLG1CQUE2QixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUM1RCxFQUFFO0lBQ0EsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUN6RCxTQUFTLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7UUFDbEMsVUFBVSxDQUFDLEtBQUssRUFBRyxLQUFLLENBQUMsTUFBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRixDQUFDLENBQUM7SUFDRixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFDM0IsS0FBaUIsRUFDakIsU0FBZSxFQUNmLGlCQUF5QixFQUN6QixNQUE4QyxFQUNoRCxFQUFFO0lBQ0EsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUNULE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixNQUFNLFlBQVksQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUF3QyxFQUFFLEVBQUU7UUFDL0YsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDcEIsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFbkQsU0FBUyxHQUFHO1FBQ1IsR0FBRztRQUNILEtBQUs7UUFDTCxNQUFNO0tBQ1QsQ0FBQztJQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFFRixTQUFTLFlBQVksQ0FBQyxJQUFVLEVBQUUsaUJBQXlCO0lBQ3ZELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMxQixLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsS0FBSyxDQUFDLE1BQU0sR0FBRztZQUNYLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDO1lBQ2hDLE1BQU0sTUFBTSxHQUFHLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDOUUsT0FBTyxDQUNILEtBQUssQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQzFILENBQUM7UUFDTixDQUFDLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlLCBQbGFpdEJvYXJkLCBQbGFpdENvbnRleHRTZXJ2aWNlLCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgSW1hZ2VCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS9pbWFnZS1iYXNlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uSW1hZ2VJdGVtIHtcbiAgICB1cmw6IHN0cmluZztcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhDb21tb25QbHVnaW5PcHRpb25zIHtcbiAgICBpbWFnZUNvbXBvbmVudFR5cGU/OiBDb21wb25lbnRUeXBlPEltYWdlQmFzZUNvbXBvbmVudD47XG59XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RJbWFnZSA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBkZWZhdWx0SW1hZ2VXaWR0aDogbnVtYmVyLFxuICAgIGhhbmRsZTogKGNvbW1vbkltYWdlOiBDb21tb25JbWFnZUl0ZW0pID0+IHZvaWQsXG4gICAgYWNjZXB0SW1hZ2VUeXBlczogc3RyaW5nW10gPSBbJ3BuZycsICdqcGVnJywgJ2dpZicsICdibXAnXVxuKSA9PiB7XG4gICAgY29uc3QgaW5wdXRGaWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBpbnB1dEZpbGUuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2ZpbGUnKTtcbiAgICBjb25zdCBhY2NlcHRJbWFnZVR5cGVzU3RyaW5nID0gJy4nICsgYWNjZXB0SW1hZ2VUeXBlcy5qb2luKCcsLicpO1xuICAgIGlucHV0RmlsZS5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsIGFjY2VwdEltYWdlVHlwZXNTdHJpbmcpO1xuICAgIGlucHV0RmlsZS5vbmNoYW5nZSA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgYnVpbGRJbWFnZShib2FyZCwgKGV2ZW50LnRhcmdldCBhcyBhbnkpLmZpbGVzWzBdLCBkZWZhdWx0SW1hZ2VXaWR0aCwgaGFuZGxlKTtcbiAgICB9O1xuICAgIGlucHV0RmlsZS5jbGljaygpO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkSW1hZ2UgPSBhc3luYyAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgaW1hZ2VGaWxlOiBGaWxlLFxuICAgIGRlZmF1bHRJbWFnZVdpZHRoOiBudW1iZXIsXG4gICAgaGFuZGxlOiAoY29tbW9uSW1hZ2U6IENvbW1vbkltYWdlSXRlbSkgPT4gdm9pZFxuKSA9PiB7XG4gICAgbGV0IHdpZHRoID0gMCxcbiAgICAgICAgaGVpZ2h0ID0gMDtcbiAgICBhd2FpdCBnZXRJbWFnZVNpemUoaW1hZ2VGaWxlLCBkZWZhdWx0SW1hZ2VXaWR0aCkudGhlbigodmFsdWU6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSkgPT4ge1xuICAgICAgICB3aWR0aCA9IHZhbHVlLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB2YWx1ZS5oZWlnaHQ7XG4gICAgfSk7XG5cbiAgICBsZXQgaW1hZ2VJdGVtID0gbnVsbDtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGltYWdlRmlsZSk7XG4gICAgY29uc3QgY29udGV4dCA9IFBsYWl0Qm9hcmQuZ2V0Q29tcG9uZW50KGJvYXJkKS52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yLmdldChQbGFpdENvbnRleHRTZXJ2aWNlKTtcbiAgICBjb250ZXh0LnNldFVwbG9hZGluZ0ZpbGUoeyB1cmwsIGZpbGU6IGltYWdlRmlsZSB9KTtcblxuICAgIGltYWdlSXRlbSA9IHtcbiAgICAgICAgdXJsLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgfTtcbiAgICBoYW5kbGUoaW1hZ2VJdGVtKTtcbn07XG5cbmZ1bmN0aW9uIGdldEltYWdlU2l6ZShmaWxlOiBGaWxlLCBkZWZhdWx0SW1hZ2VXaWR0aDogbnVtYmVyKTogUHJvbWlzZTx7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBpbWFnZS5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuXG4gICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBkZWZhdWx0SW1hZ2VXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IChkZWZhdWx0SW1hZ2VXaWR0aCAqIGltYWdlLm5hdHVyYWxIZWlnaHQpIC8gaW1hZ2UubmF0dXJhbFdpZHRoO1xuICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICBpbWFnZS5uYXR1cmFsV2lkdGggPiBkZWZhdWx0SW1hZ2VXaWR0aCA/IHsgd2lkdGgsIGhlaWdodCB9IDogeyB3aWR0aDogaW1hZ2UubmF0dXJhbFdpZHRoLCBoZWlnaHQ6IGltYWdlLm5hdHVyYWxIZWlnaHQgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ export * from './resize';
2
+ export * from './line-path';
3
+ export * from './hot-key';
4
+ export * from './rectangle';
5
+ export * from './creation-mode';
6
+ export * from './direction';
7
+ export * from './text';
8
+ export * from './image';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Jlc2l6ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpbmUtcGF0aCc7XG5leHBvcnQgKiBmcm9tICcuL2hvdC1rZXknO1xuZXhwb3J0ICogZnJvbSAnLi9yZWN0YW5nbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGlvbi1tb2RlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL2ltYWdlJztcbiJdfQ==
@@ -0,0 +1,146 @@
1
+ import { Direction, distanceBetweenPointAndPoint } from '@plait/core';
2
+ import { 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
+ }
15
+ export const getPoints = (source, sourcePosition, target, targetPosition, offset) => {
16
+ const sourceDir = getDirectionFactor(sourcePosition);
17
+ const targetDir = getDirectionFactor(targetPosition);
18
+ const sourceGapped = [source[0] + sourceDir.x * offset, source[1] + sourceDir.y * offset];
19
+ const targetGapped = [target[0] + targetDir.x * offset, target[1] + targetDir.y * offset];
20
+ const dir = getDirection(sourceGapped, sourcePosition, targetGapped);
21
+ const dirAccessor = dir.x !== 0 ? 'x' : 'y';
22
+ const currDir = dir[dirAccessor];
23
+ let points = [];
24
+ let centerX, centerY;
25
+ const [defaultCenterX, defaultCenterY] = getEdgeCenter({
26
+ sourceX: source[0],
27
+ sourceY: source[1],
28
+ targetX: target[0],
29
+ targetY: target[1]
30
+ });
31
+ // opposite handle positions, default case
32
+ if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {
33
+ centerX = defaultCenterX;
34
+ centerY = defaultCenterY;
35
+ // --->
36
+ // |
37
+ // >---
38
+ const verticalSplit = [
39
+ [centerX, sourceGapped[1]],
40
+ [centerX, targetGapped[1]]
41
+ ];
42
+ // |
43
+ // ---
44
+ // |
45
+ const horizontalSplit = [
46
+ [sourceGapped[0], centerY],
47
+ [targetGapped[0], centerY]
48
+ ];
49
+ if (sourceDir[dirAccessor] === currDir) {
50
+ points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;
51
+ }
52
+ else {
53
+ points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;
54
+ }
55
+ }
56
+ else {
57
+ // sourceTarget means we take x from source and y from target, targetSource is the opposite
58
+ const sourceTarget = [[sourceGapped[0], targetGapped[1]]];
59
+ const targetSource = [[targetGapped[0], sourceGapped[1]]];
60
+ // this handles edges with same handle positions
61
+ if (dirAccessor === 'x') {
62
+ points = sourceDir.x === currDir ? targetSource : sourceTarget;
63
+ }
64
+ else {
65
+ points = sourceDir.y === currDir ? sourceTarget : targetSource;
66
+ }
67
+ // these are conditions for handling mixed handle positions like right -> bottom for example
68
+ let flipSourceTarget;
69
+ if (sourcePosition !== targetPosition) {
70
+ const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;
71
+ const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessor === 'x' ? 'y' : 'x'];
72
+ const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];
73
+ const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];
74
+ flipSourceTarget =
75
+ (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||
76
+ (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));
77
+ if (flipSourceTarget) {
78
+ points = dirAccessor === 'x' ? sourceTarget : targetSource;
79
+ }
80
+ }
81
+ }
82
+ return [source, sourceGapped, ...points, targetGapped, target];
83
+ };
84
+ export const getDirection = (source, sourcePosition = Direction.bottom, target) => {
85
+ if (sourcePosition === Direction.left || sourcePosition === Direction.right) {
86
+ return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };
87
+ }
88
+ return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };
89
+ };
90
+ export function getEdgeCenter({ sourceX, sourceY, targetX, targetY }) {
91
+ const xOffset = Math.abs(targetX - sourceX) / 2;
92
+ const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;
93
+ const yOffset = Math.abs(targetY - sourceY) / 2;
94
+ const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;
95
+ return [centerX, centerY, xOffset, yOffset];
96
+ }
97
+ export function getPointOnPolyline(points, ratio) {
98
+ const totalLength = calculatePolylineLength(points);
99
+ const targetDistance = totalLength * ratio;
100
+ let accumulatedDistance = 0;
101
+ for (let i = 0; i < points.length - 1; i++) {
102
+ const [x1, y1] = points[i];
103
+ const [x2, y2] = points[i + 1];
104
+ const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);
105
+ if (accumulatedDistance + segmentLength >= targetDistance) {
106
+ const remainingDistance = targetDistance - accumulatedDistance;
107
+ const ratioInSegment = remainingDistance / segmentLength;
108
+ const targetX = x1 + (x2 - x1) * ratioInSegment;
109
+ const targetY = y1 + (y2 - y1) * ratioInSegment;
110
+ return [targetX, targetY];
111
+ }
112
+ accumulatedDistance += segmentLength;
113
+ }
114
+ return points[points.length - 1];
115
+ }
116
+ export function calculatePolylineLength(points) {
117
+ let length = 0;
118
+ for (let i = 0; i < points.length - 1; i++) {
119
+ const [x1, y1] = points[i];
120
+ const [x2, y2] = points[i + 1];
121
+ length += distanceBetweenPointAndPoint(x1, y1, x2, y2);
122
+ }
123
+ return length;
124
+ }
125
+ export function getRatioByPoint(points, point) {
126
+ const totalLength = calculatePolylineLength(points);
127
+ let distance = 0;
128
+ for (let i = 0; i < points.length - 1; i++) {
129
+ const isOverlap = isPointOnLineSegment(point, points[i], points[i + 1]);
130
+ if (isOverlap) {
131
+ distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);
132
+ return distance / totalLength;
133
+ }
134
+ else {
135
+ distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);
136
+ }
137
+ }
138
+ throw new Error('Cannot get ratio by point');
139
+ }
140
+ export function isPointOnLineSegment(point, startPoint, endPoint) {
141
+ const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);
142
+ const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);
143
+ const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
144
+ return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;
145
+ }
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9saW5lLXBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBUyw0QkFBNEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFakQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFNBQW9CO0lBQ3JELFFBQVEsU0FBUyxFQUFFO1FBQ2YsS0FBSyxTQUFTLENBQUMsSUFBSTtZQUNmLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQztRQUMzQixLQUFLLFNBQVMsQ0FBQyxLQUFLO1lBQ2hCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQztRQUMxQixLQUFLLFNBQVMsQ0FBQyxHQUFHO1lBQ2QsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzVCLEtBQUssU0FBUyxDQUFDLE1BQU07WUFDakIsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDO0tBQzVCO0FBQ0wsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQWEsRUFBRSxjQUF5QixFQUFFLE1BQWEsRUFBRSxjQUF5QixFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQzVILE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sWUFBWSxHQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sWUFBWSxHQUFVLENBQUMsTUFBTSxDQUFDLENBQUMs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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3Rpb24sIFBvaW50LCBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgZ2V0RGlyZWN0aW9uRmFjdG9yIH0gZnJvbSAnLi9kaXJlY3Rpb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVEaXJlY3Rpb24oZGlyZWN0aW9uOiBEaXJlY3Rpb24pIHtcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlIERpcmVjdGlvbi5sZWZ0OlxuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5yaWdodDtcbiAgICAgICAgY2FzZSBEaXJlY3Rpb24ucmlnaHQ6XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmxlZnQ7XG4gICAgICAgIGNhc2UgRGlyZWN0aW9uLnRvcDpcbiAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24uYm90dG9tO1xuICAgICAgICBjYXNlIERpcmVjdGlvbi5ib3R0b206XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnRvcDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb2ludHMgPSAoc291cmNlOiBQb2ludCwgc291cmNlUG9zaXRpb246IERpcmVjdGlvbiwgdGFyZ2V0OiBQb2ludCwgdGFyZ2V0UG9zaXRpb246IERpcmVjdGlvbiwgb2Zmc2V0OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBzb3VyY2VEaXIgPSBnZXREaXJlY3Rpb25GYWN0b3Ioc291cmNlUG9zaXRpb24pO1xuICAgIGNvbnN0IHRhcmdldERpciA9IGdldERpcmVjdGlvbkZhY3Rvcih0YXJnZXRQb3NpdGlvbik7XG4gICAgY29uc3Qgc291cmNlR2FwcGVkOiBQb2ludCA9IFtzb3VyY2VbMF0gKyBzb3VyY2VEaXIueCAqIG9mZnNldCwgc291cmNlWzFdICsgc291cmNlRGlyLnkgKiBvZmZzZXRdO1xuICAgIGNvbnN0IHRhcmdldEdhcHBlZDogUG9pbnQgPSBbdGFyZ2V0WzBdICsgdGFyZ2V0RGlyLnggKiBvZmZzZXQsIHRhcmdldFsxXSArIHRhcmdldERpci55ICogb2Zmc2V0XTtcbiAgICBjb25zdCBkaXIgPSBnZXREaXJlY3Rpb24oc291cmNlR2FwcGVkLCBzb3VyY2VQb3NpdGlvbiwgdGFyZ2V0R2FwcGVkKTtcbiAgICBjb25zdCBkaXJBY2Nlc3NvciA9IGRpci54ICE9PSAwID8gJ3gnIDogJ3knO1xuICAgIGNvbnN0IGN1cnJEaXIgPSBkaXJbZGlyQWNjZXNzb3JdO1xuXG4gICAgbGV0IHBvaW50czogUG9pbnRbXSA9IFtdO1xuICAgIGxldCBjZW50ZXJYLCBjZW50ZXJZO1xuICAgIGNvbnN0IFtkZWZhdWx0Q2VudGVyWCwgZGVmYXVsdENlbnRlclldID0gZ2V0RWRnZUNlbnRlcih7XG4gICAgICAgIHNvdXJjZVg6IHNvdXJjZVswXSxcbiAgICAgICAgc291cmNlWTogc291cmNlWzFdLFxuICAgICAgICB0YXJnZXRYOiB0YXJnZXRbMF0sXG4gICAgICAgIHRhcmdldFk6IHRhcmdldFsxXVxuICAgIH0pO1xuICAgIC8vIG9wcG9zaXRlIGhhbmRsZSBwb3NpdGlvbnMsIGRlZmF1bHQgY2FzZVxuICAgIGlmIChzb3VyY2VEaXJbZGlyQWNjZXNzb3JdICogdGFyZ2V0RGlyW2RpckFjY2Vzc29yXSA9PT0gLTEpIHtcbiAgICAgICAgY2VudGVyWCA9IGRlZmF1bHRDZW50ZXJYO1xuICAgICAgICBjZW50ZXJZID0gZGVmYXVsdENlbnRlclk7XG4gICAgICAgIC8vICAgIC0tLT5cbiAgICAgICAgLy8gICAgfFxuICAgICAgICAvLyA+LS0tXG4gICAgICAgIGNvbnN0IHZlcnRpY2FsU3BsaXQ6IFBvaW50W10gPSBbXG4gICAgICAgICAgICBbY2VudGVyWCwgc291cmNlR2FwcGVkWzFdXSxcbiAgICAgICAgICAgIFtjZW50ZXJYLCB0YXJnZXRHYXBwZWRbMV1dXG4gICAgICAgIF07XG4gICAgICAgIC8vICAgIHxcbiAgICAgICAgLy8gIC0tLVxuICAgICAgICAvLyAgfFxuICAgICAgICBjb25zdCBob3Jpem9udGFsU3BsaXQ6IFBvaW50W10gPSBbXG4gICAgICAgICAgICBbc291cmNlR2FwcGVkWzBdLCBjZW50ZXJZXSxcbiAgICAgICAgICAgIFt0YXJnZXRHYXBwZWRbMF0sIGNlbnRlclldXG4gICAgICAgIF07XG4gICAgICAgIGlmIChzb3VyY2VEaXJbZGlyQWNjZXNzb3JdID09PSBjdXJyRGlyKSB7XG4gICAgICAgICAgICBwb2ludHMgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gdmVydGljYWxTcGxpdCA6IGhvcml6b250YWxTcGxpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvaW50cyA9IGRpckFjY2Vzc29yID09PSAneCcgPyBob3Jpem9udGFsU3BsaXQgOiB2ZXJ0aWNhbFNwbGl0O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc291cmNlVGFyZ2V0IG1lYW5zIHdlIHRha2UgeCBmcm9tIHNvdXJjZSBhbmQgeSBmcm9tIHRhcmdldCwgdGFyZ2V0U291cmNlIGlzIHRoZSBvcHBvc2l0ZVxuICAgICAgICBjb25zdCBzb3VyY2VUYXJnZXQ6IFBvaW50W10gPSBbW3NvdXJjZUdhcHBlZFswXSwgdGFyZ2V0R2FwcGVkWzFdXV07XG4gICAgICAgIGNvbnN0IHRhcmdldFNvdXJjZTogUG9pbnRbXSA9IFtbdGFyZ2V0R2FwcGVkWzBdLCBzb3VyY2VHYXBwZWRbMV1dXTtcbiAgICAgICAgLy8gdGhpcyBoYW5kbGVzIGVkZ2VzIHdpdGggc2FtZSBoYW5kbGUgcG9zaXRpb25zXG4gICAgICAgIGlmIChkaXJBY2Nlc3NvciA9PT0gJ3gnKSB7XG4gICAgICAgICAgICBwb2ludHMgPSBzb3VyY2VEaXIueCA9PT0gY3VyckRpciA/IHRhcmdldFNvdXJjZSA6IHNvdXJjZVRhcmdldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvaW50cyA9IHNvdXJjZURpci55ID09PSBjdXJyRGlyID8gc291cmNlVGFyZ2V0IDogdGFyZ2V0U291cmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlc2UgYXJlIGNvbmRpdGlvbnMgZm9yIGhhbmRsaW5nIG1peGVkIGhhbmRsZSBwb3NpdGlvbnMgbGlrZSByaWdodCAtPiBib3R0b20gZm9yIGV4YW1wbGVcbiAgICAgICAgbGV0IGZsaXBTb3VyY2VUYXJnZXQ7XG4gICAgICAgIGlmIChzb3VyY2VQb3NpdGlvbiAhPT0gdGFyZ2V0UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRpckFjY2Vzc29yT3Bwb3NpdGUgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gMSA6IDA7XG4gICAgICAgICAgICBjb25zdCBpc1NhbWVEaXIgPSBzb3VyY2VEaXJbZGlyQWNjZXNzb3JdID09PSB0YXJnZXREaXJbZGlyQWNjZXNzb3IgPT09ICd4JyA/ICd5JyA6ICd4J107XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VHdFRhcmdldE9wcG8gPSBzb3VyY2VHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV0gPiB0YXJnZXRHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV07XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMdFRhcmdldE9wcG8gPSBzb3VyY2VHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV0gPCB0YXJnZXRHYXBwZWRbZGlyQWNjZXNzb3JPcHBvc2l0ZV07XG4gICAgICAgICAgICBmbGlwU291cmNlVGFyZ2V0ID1cbiAgICAgICAgICAgICAgICAoc291cmNlRGlyW2RpckFjY2Vzc29yXSA9PT0gMSAmJiAoKCFpc1NhbWVEaXIgJiYgc291cmNlR3RUYXJnZXRPcHBvKSB8fCAoaXNTYW1lRGlyICYmIHNvdXJjZUx0VGFyZ2V0T3BwbykpKSB8fFxuICAgICAgICAgICAgICAgIChzb3VyY2VEaXJbZGlyQWNjZXNzb3JdICE9PSAxICYmICgoIWlzU2FtZURpciAmJiBzb3VyY2VMdFRhcmdldE9wcG8pIHx8IChpc1NhbWVEaXIgJiYgc291cmNlR3RUYXJnZXRPcHBvKSkpO1xuXG4gICAgICAgICAgICBpZiAoZmxpcFNvdXJjZVRhcmdldCkge1xuICAgICAgICAgICAgICAgIHBvaW50cyA9IGRpckFjY2Vzc29yID09PSAneCcgPyBzb3VyY2VUYXJnZXQgOiB0YXJnZXRTb3VyY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtzb3VyY2UsIHNvdXJjZUdhcHBlZCwgLi4ucG9pbnRzLCB0YXJnZXRHYXBwZWQsIHRhcmdldF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0aW9uID0gKHNvdXJjZTogUG9pbnQsIHNvdXJjZVBvc2l0aW9uID0gRGlyZWN0aW9uLmJvdHRvbSwgdGFyZ2V0OiBQb2ludCkgPT4ge1xuICAgIGlmIChzb3VyY2VQb3NpdGlvbiA9PT0gRGlyZWN0aW9uLmxlZnQgfHwgc291cmNlUG9zaXRpb24gPT09IERpcmVjdGlvbi5yaWdodCkge1xuICAgICAgICByZXR1cm4gc291cmNlWzBdIDwgdGFyZ2V0WzBdID8geyB4OiAxLCB5OiAwIH0gOiB7IHg6IC0xLCB5OiAwIH07XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VbMV0gPCB0YXJnZXRbMV0gPyB7IHg6IDAsIHk6IDEgfSA6IHsgeDogMCwgeTogLTEgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGdlQ2VudGVyKHtcbiAgICBzb3VyY2VYLFxuICAgIHNvdXJjZVksXG4gICAgdGFyZ2V0WCxcbiAgICB0YXJnZXRZXG59OiB7XG4gICAgc291cmNlWDogbnVtYmVyO1xuICAgIHNvdXJjZVk6IG51bWJlcjtcbiAgICB0YXJnZXRYOiBudW1iZXI7XG4gICAgdGFyZ2V0WTogbnVtYmVyO1xufSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICBjb25zdCB4T2Zmc2V0ID0gTWF0aC5hYnModGFyZ2V0WCAtIHNvdXJjZVgpIC8gMjtcbiAgICBjb25zdCBjZW50ZXJYID0gdGFyZ2V0WCA8IHNvdXJjZVggPyB0YXJnZXRYICsgeE9mZnNldCA6IHRhcmdldFggLSB4T2Zmc2V0O1xuXG4gICAgY29uc3QgeU9mZnNldCA9IE1hdGguYWJzKHRhcmdldFkgLSBzb3VyY2VZKSAvIDI7XG4gICAgY29uc3QgY2VudGVyWSA9IHRhcmdldFkgPCBzb3VyY2VZID8gdGFyZ2V0WSArIHlPZmZzZXQgOiB0YXJnZXRZIC0geU9mZnNldDtcblxuICAgIHJldHVybiBbY2VudGVyWCwgY2VudGVyWSwgeE9mZnNldCwgeU9mZnNldF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2ludE9uUG9seWxpbmUocG9pbnRzOiBQb2ludFtdLCByYXRpbzogbnVtYmVyKSB7XG4gICAgY29uc3QgdG90YWxMZW5ndGggPSBjYWxjdWxhdGVQb2x5bGluZUxlbmd0aChwb2ludHMpO1xuICAgIGNvbnN0IHRhcmdldERpc3RhbmNlID0gdG90YWxMZW5ndGggKiByYXRpbztcblxuICAgIGxldCBhY2N1bXVsYXRlZERpc3RhbmNlID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgW3gxLCB5MV0gPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IFt4MiwgeTJdID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3Qgc2VnbWVudExlbmd0aCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoeDEsIHkxLCB4MiwgeTIpO1xuXG4gICAgICAgIGlmIChhY2N1bXVsYXRlZERpc3RhbmNlICsgc2VnbWVudExlbmd0aCA+PSB0YXJnZXREaXN0YW5jZSkge1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nRGlzdGFuY2UgPSB0YXJnZXREaXN0YW5jZSAtIGFjY3VtdWxhdGVkRGlzdGFuY2U7XG4gICAgICAgICAgICBjb25zdCByYXRpb0luU2VnbWVudCA9IHJlbWFpbmluZ0Rpc3RhbmNlIC8gc2VnbWVudExlbmd0aDtcblxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0WCA9IHgxICsgKHgyIC0geDEpICogcmF0aW9JblNlZ21lbnQ7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRZID0geTEgKyAoeTIgLSB5MSkgKiByYXRpb0luU2VnbWVudDtcbiAgICAgICAgICAgIHJldHVybiBbdGFyZ2V0WCwgdGFyZ2V0WV07XG4gICAgICAgIH1cblxuICAgICAgICBhY2N1bXVsYXRlZERpc3RhbmNlICs9IHNlZ21lbnRMZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVQb2x5bGluZUxlbmd0aChwb2ludHM6IFBvaW50W10pIHtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgW3gxLCB5MV0gPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IFt4MiwgeTJdID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgbGVuZ3RoICs9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoeDEsIHkxLCB4MiwgeTIpO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmF0aW9CeVBvaW50KHBvaW50czogUG9pbnRbXSwgcG9pbnQ6IFBvaW50KSB7XG4gICAgY29uc3QgdG90YWxMZW5ndGggPSBjYWxjdWxhdGVQb2x5bGluZUxlbmd0aChwb2ludHMpO1xuXG4gICAgbGV0IGRpc3RhbmNlID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBpc092ZXJsYXAgPSBpc1BvaW50T25MaW5lU2VnbWVudChwb2ludCwgcG9pbnRzW2ldLCBwb2ludHNbaSArIDFdKTtcblxuICAgICAgICBpZiAoaXNPdmVybGFwKSB7XG4gICAgICAgICAgICBkaXN0YW5jZSArPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSwgcG9pbnRzW2ldWzBdLCBwb2ludHNbaV1bMV0pO1xuICAgICAgICAgICAgcmV0dXJuIGRpc3RhbmNlIC8gdG90YWxMZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaXN0YW5jZSArPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50c1tpXVswXSwgcG9pbnRzW2ldWzFdLCBwb2ludHNbaSArIDFdWzBdLCBwb2ludHNbaSArIDFdWzFdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgcmF0aW8gYnkgcG9pbnQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUG9pbnRPbkxpbmVTZWdtZW50KHBvaW50OiBQb2ludCwgc3RhcnRQb2ludDogUG9pbnQsIGVuZFBvaW50OiBQb2ludCkge1xuICAgIGNvbnN0IGRpc3RhbmNlVG9TdGFydCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQocG9pbnRbMF0sIHBvaW50WzFdLCBzdGFydFBvaW50WzBdLCBzdGFydFBvaW50WzFdKTtcbiAgICBjb25zdCBkaXN0YW5jZVRvRW5kID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChwb2ludFswXSwgcG9pbnRbMV0sIGVuZFBvaW50WzBdLCBlbmRQb2ludFsxXSk7XG5cbiAgICBjb25zdCBzZWdtZW50TGVuZ3RoID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChzdGFydFBvaW50WzBdLCBzdGFydFBvaW50WzFdLCBlbmRQb2ludFswXSwgZW5kUG9pbnRbMV0pO1xuXG4gICAgcmV0dXJuIE1hdGguYWJzKGRpc3RhbmNlVG9TdGFydCArIGRpc3RhbmNlVG9FbmQgLSBzZWdtZW50TGVuZ3RoKSA8IDAuMTtcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ export const getRectangleByPoints = (points) => {
2
+ let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;
3
+ points.forEach(point => {
4
+ minX = Math.min(point[0], minX);
5
+ maxX = Math.max(point[0], maxX);
6
+ minY = Math.min(point[1], minY);
7
+ maxY = Math.max(point[1], maxY);
8
+ });
9
+ return {
10
+ x: minX,
11
+ y: minY,
12
+ width: maxX - minX,
13
+ height: maxY - minY
14
+ };
15
+ };
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9yZWN0YW5nbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtJQUNwRCxJQUFJLElBQUksR0FBRyxRQUFRLEVBQ2YsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUNoQixJQUFJLEdBQUcsUUFBUSxFQUNmLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUNyQixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25CLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDSCxDQUFDLEVBQUUsSUFBSTtRQUNQLENBQUMsRUFBRSxJQUFJO1FBQ1AsS0FBSyxFQUFFLElBQUksR0FBRyxJQUFJO1FBQ2xCLE1BQU0sRUFBRSxJQUFJLEdBQUcsSUFBSTtLQUN0QixDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBnZXRSZWN0YW5nbGVCeVBvaW50cyA9IChwb2ludHM6IFBvaW50W10pID0+IHtcbiAgICBsZXQgbWluWCA9IEluZmluaXR5LFxuICAgICAgICBtYXhYID0gLUluZmluaXR5LFxuICAgICAgICBtaW5ZID0gSW5maW5pdHksXG4gICAgICAgIG1heFkgPSAtSW5maW5pdHk7XG4gICAgcG9pbnRzLmZvckVhY2gocG9pbnQgPT4ge1xuICAgICAgICBtaW5YID0gTWF0aC5taW4ocG9pbnRbMF0sIG1pblgpO1xuICAgICAgICBtYXhYID0gTWF0aC5tYXgocG9pbnRbMF0sIG1heFgpO1xuICAgICAgICBtaW5ZID0gTWF0aC5taW4ocG9pbnRbMV0sIG1pblkpO1xuICAgICAgICBtYXhZID0gTWF0aC5tYXgocG9pbnRbMV0sIG1heFkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogbWluWCxcbiAgICAgICAgeTogbWluWSxcbiAgICAgICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgICAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZXG4gICAgfTtcbn07XG4iXX0=
@@ -0,0 +1,61 @@
1
+ import { PlaitBoard, RectangleClient } from '@plait/core';
2
+ import { ResizeCursorClass, ResizeHandle } from '../constants/resize';
3
+ const getResizeHandleByIndex = (index) => {
4
+ switch (index) {
5
+ case 0:
6
+ return ResizeHandle.nw;
7
+ case 1:
8
+ return ResizeHandle.ne;
9
+ case 2:
10
+ return ResizeHandle.se;
11
+ case 3:
12
+ return ResizeHandle.sw;
13
+ default:
14
+ return null;
15
+ }
16
+ };
17
+ const getResizeCursorClassByIndex = (index) => {
18
+ switch (index) {
19
+ case 0:
20
+ return ResizeCursorClass.nwse;
21
+ case 1:
22
+ return ResizeCursorClass.nesw;
23
+ case 2:
24
+ return ResizeCursorClass.nwse;
25
+ case 3:
26
+ return ResizeCursorClass.nesw;
27
+ default:
28
+ return null;
29
+ }
30
+ };
31
+ export const getRectangleResizeHandleRefs = (rectangle, diameter) => {
32
+ const centers = RectangleClient.getCornerPoints(rectangle);
33
+ return centers.map((center, index) => {
34
+ return {
35
+ rectangle: {
36
+ x: center[0] - diameter / 2,
37
+ y: center[1] - diameter / 2,
38
+ width: diameter,
39
+ height: diameter
40
+ },
41
+ handle: getResizeHandleByIndex(index),
42
+ cursorClass: getResizeCursorClassByIndex(index)
43
+ };
44
+ });
45
+ };
46
+ export const IS_RESIZING = new WeakMap();
47
+ export const isResizing = (board) => {
48
+ return !!IS_RESIZING.get(board);
49
+ };
50
+ export const isResizingByCondition = (board, match) => {
51
+ return isResizing(board) && match(IS_RESIZING.get(board));
52
+ };
53
+ export const addResizing = (board, resizeRef, key) => {
54
+ PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);
55
+ IS_RESIZING.set(board, resizeRef);
56
+ };
57
+ export const removeResizing = (board, key) => {
58
+ PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);
59
+ IS_RESIZING.delete(board);
60
+ };
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFRLFVBQVUsRUFBdUIsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVF0RSxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDN0MsUUFBUSxLQUFLLEVBQUU7UUFDWCxLQUFLLENBQUM7WUFDRixPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDO1lBQ0YsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQztZQUNGLE9BQU8sWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUMzQixLQUFLLENBQUM7WUFDRixPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDM0I7WUFDSSxPQUFPLElBQUksQ0FBQztLQUNuQjtBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtJQUNsRCxRQUFRLEtBQUssRUFBRTtRQUNYLEtBQUssQ0FBQztZQUNGLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ2xDLEtBQUssQ0FBQztZQUNGLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ2xDLEtBQUssQ0FBQztZQUNGLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ2xDLEtBQUssQ0FBQztZQUNGLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ2xDO1lBQ0ksT0FBTyxJQUFJLENBQUM7S0FDbkI7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLFNBQTBCLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO0lBQ3pGLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQWEsRUFBRSxFQUFFO1FBQ3pDLE9BQU87WUFDSCxTQUFTLEVBQUU7Z0JBQ1AsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQztnQkFDM0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQztnQkFDM0IsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDbkI7WUFDRCxNQUFNLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxDQUFpQjtZQUNyRCxXQUFXLEVBQUUsMkJBQTJCLENBQUMsS0FBSyxDQUFzQjtTQUN2RSxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQW1DLENBQUM7QUFFMUUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzVDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBNEIsS0FBaUIsRUFBRSxLQUE4QyxFQUFFLEVBQUU7SUFDbEksT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBNEIsS0FBaUIsRUFBRSxTQUEwQixFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQ2pILFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQztJQUNyRSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQzdELFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQztJQUN4RSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhdGgsIFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFJlc2l6ZUN1cnNvckNsYXNzLCBSZXNpemVIYW5kbGUgfSBmcm9tICcuLi9jb25zdGFudHMvcmVzaXplJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXNpemVSZWY8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudCwgSyA9IFJlc2l6ZUhhbmRsZT4ge1xuICAgIGVsZW1lbnQ6IFQ7XG4gICAgcGF0aDogUGF0aDtcbiAgICBoYW5kbGU6IEs7XG59XG5cbmNvbnN0IGdldFJlc2l6ZUhhbmRsZUJ5SW5kZXggPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIHN3aXRjaCAoaW5kZXgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIFJlc2l6ZUhhbmRsZS5udztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIFJlc2l6ZUhhbmRsZS5uZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIFJlc2l6ZUhhbmRsZS5zZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIFJlc2l6ZUhhbmRsZS5zdztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbmNvbnN0IGdldFJlc2l6ZUN1cnNvckNsYXNzQnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgc3dpdGNoIChpbmRleCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gUmVzaXplQ3Vyc29yQ2xhc3MubndzZTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIFJlc2l6ZUN1cnNvckNsYXNzLm5lc3c7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5ud3NlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gUmVzaXplQ3Vyc29yQ2xhc3MubmVzdztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWN0YW5nbGVSZXNpemVIYW5kbGVSZWZzID0gKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBkaWFtZXRlcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgY2VudGVycyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICByZXR1cm4gY2VudGVycy5tYXAoKGNlbnRlciwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVjdGFuZ2xlOiB7XG4gICAgICAgICAgICAgICAgeDogY2VudGVyWzBdIC0gZGlhbWV0ZXIgLyAyLFxuICAgICAgICAgICAgICAgIHk6IGNlbnRlclsxXSAtIGRpYW1ldGVyIC8gMixcbiAgICAgICAgICAgICAgICB3aWR0aDogZGlhbWV0ZXIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBkaWFtZXRlclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhbmRsZTogZ2V0UmVzaXplSGFuZGxlQnlJbmRleChpbmRleCkgYXMgUmVzaXplSGFuZGxlLFxuICAgICAgICAgICAgY3Vyc29yQ2xhc3M6IGdldFJlc2l6ZUN1cnNvckNsYXNzQnlJbmRleChpbmRleCkgYXMgUmVzaXplQ3Vyc29yQ2xhc3NcbiAgICAgICAgfTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBJU19SRVNJWklORyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFJlc2l6ZVJlZjxhbnksIGFueT4+KCk7XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6aW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuICEhSVNfUkVTSVpJTkcuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6aW5nQnlDb25kaXRpb24gPSA8VCBleHRlbmRzIFBsYWl0RWxlbWVudCwgSz4oYm9hcmQ6IFBsYWl0Qm9hcmQsIG1hdGNoOiAocmVzaXplUmVmOiBSZXNpemVSZWY8VCwgSz4pID0+IGJvb2xlYW4pID0+IHtcbiAgICByZXR1cm4gaXNSZXNpemluZyhib2FyZCkgJiYgbWF0Y2goSVNfUkVTSVpJTkcuZ2V0KGJvYXJkKSEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFJlc2l6aW5nID0gPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQsIEs+KGJvYXJkOiBQbGFpdEJvYXJkLCByZXNpemVSZWY6IFJlc2l6ZVJlZjxULCBLPiwga2V5OiBzdHJpbmcpID0+IHtcbiAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKGAke2tleX0tcmVzaXppbmdgKTtcbiAgICBJU19SRVNJWklORy5zZXQoYm9hcmQsIHJlc2l6ZVJlZik7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlUmVzaXppbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZShgJHtrZXl9LXJlc2l6aW5nYCk7XG4gICAgSVNfUkVTSVpJTkcuZGVsZXRlKGJvYXJkKTtcbn07XG4iXX0=
@@ -0,0 +1,11 @@
1
+ import { PlaitElement } from '@plait/core';
2
+ export const getTextManages = (element) => {
3
+ const component = PlaitElement.getComponent(element);
4
+ return component.getTextManages();
5
+ };
6
+ export const getTextEditors = (element) => {
7
+ return getTextManages(element).map(manage => {
8
+ return manage.componentRef.instance.editor;
9
+ });
10
+ };
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzNDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQXFCLEVBQUUsRUFBRTtJQUNwRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBd0IsQ0FBQztJQUM1RSxPQUFPLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN0QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7SUFDcEQsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3hDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uUGx1Z2luRWxlbWVudCB9IGZyb20gJy4uL2NvcmUvcGx1Z2luLWVsZW1lbnQnO1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dE1hbmFnZXMgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudChlbGVtZW50KSBhcyBDb21tb25QbHVnaW5FbGVtZW50O1xuICAgIHJldHVybiBjb21wb25lbnQuZ2V0VGV4dE1hbmFnZXMoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0RWRpdG9ycyA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gZ2V0VGV4dE1hbmFnZXMoZWxlbWVudCkubWFwKG1hbmFnZSA9PiB7XG4gICAgICAgIHJldHVybiBtYW5hZ2UuY29tcG9uZW50UmVmLmluc3RhbmNlLmVkaXRvcjtcbiAgICB9KTtcbn07XG4iXX0=